@telorun/sdk 0.18.0 → 0.19.0
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/cancellation.d.ts +64 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +122 -0
- package/dist/capabilities/invokable.d.ts +9 -1
- package/dist/capabilities/invokable.d.ts.map +1 -1
- package/dist/capabilities/runnable.d.ts +8 -1
- package/dist/capabilities/runnable.d.ts.map +1 -1
- package/dist/evaluation-context.d.ts +4 -3
- package/dist/evaluation-context.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/module-context.d.ts +2 -1
- package/dist/module-context.d.ts.map +1 -1
- package/dist/resource-context.d.ts +6 -1
- package/dist/resource-context.d.ts.map +1 -1
- package/dist/types.d.ts +15 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/cancellation.ts +174 -0
- package/src/capabilities/invokable.ts +10 -1
- package/src/capabilities/runnable.ts +9 -1
- package/src/evaluation-context.ts +4 -2
- package/src/index.ts +1 -0
- package/src/module-context.ts +2 -1
- package/src/resource-context.ts +6 -0
- package/src/types.ts +16 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cooperative invocation cancellation — the standard source/token split.
|
|
3
|
+
*
|
|
4
|
+
* A {@link CancellationToken} is the read-only side handed to controllers as the
|
|
5
|
+
* `cancellation` member of the {@link InvokeContext} second argument: poll it
|
|
6
|
+
* (`isCancelled`), subscribe (`onCancelled`), bail (`throwIfCancelled`), or hand
|
|
7
|
+
* its `signal` to a Web API (`fetch`, `streamText`). The writable
|
|
8
|
+
* {@link CancellationSource} behind it — `cancel` / `cancelAt` / `cancelAfter` —
|
|
9
|
+
* is held only by the kernel, embedders, and trigger modules, never by the
|
|
10
|
+
* controllers that observe the token.
|
|
11
|
+
*
|
|
12
|
+
* A deadline is not a separate concept: `cancelAt(epochMs)` arms the token to
|
|
13
|
+
* trip at an instant, so any code holding a deadline schedules a cancellation
|
|
14
|
+
* and every honoring leaf gets timeout behavior for free. `cancelAt` (absolute)
|
|
15
|
+
* is the primitive; `cancelAfter(ms)` is sugar over it.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ERR_INVOKE_CANCELLED = "ERR_INVOKE_CANCELLED";
|
|
18
|
+
export interface CancellationToken {
|
|
19
|
+
/** Synchronous poll — `true` once the owning source has cancelled. */
|
|
20
|
+
readonly isCancelled: boolean;
|
|
21
|
+
/** Human-readable reason supplied to `cancel`/the deadline, if any. */
|
|
22
|
+
readonly reason: string | undefined;
|
|
23
|
+
/** `AbortSignal` escape hatch for handing off to Web APIs (`fetch`,
|
|
24
|
+
* `streamText`). Aborts when the source cancels. */
|
|
25
|
+
readonly signal: AbortSignal;
|
|
26
|
+
/** Subscribe to cancellation. Fires immediately if already cancelled.
|
|
27
|
+
* Returns an unsubscribe function. */
|
|
28
|
+
onCancelled(listener: (reason: string | undefined) => void): () => void;
|
|
29
|
+
/** Throw `ERR_INVOKE_CANCELLED` if cancelled; otherwise no-op. */
|
|
30
|
+
throwIfCancelled(): void;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The out-of-band second argument every `invoke()` receives. Intentionally an
|
|
34
|
+
* extensible object rather than a bare token so future per-invoke concerns
|
|
35
|
+
* (trace, idempotency) can join without a breaking signature change.
|
|
36
|
+
*/
|
|
37
|
+
export interface InvokeContext {
|
|
38
|
+
readonly cancellation: CancellationToken;
|
|
39
|
+
}
|
|
40
|
+
export interface CancellationSource {
|
|
41
|
+
readonly token: CancellationToken;
|
|
42
|
+
/** The {@link InvokeContext} wrapping this source's token — pass to
|
|
43
|
+
* `invokeResolved(..., source.context)` to seed an invocation tree. */
|
|
44
|
+
readonly context: InvokeContext;
|
|
45
|
+
cancel(reason?: string): void;
|
|
46
|
+
/** Arm cancellation at an absolute epoch-millis instant (a deadline). */
|
|
47
|
+
cancelAt(epochMs: number): void;
|
|
48
|
+
/** Sugar over `cancelAt(now + ms)`. */
|
|
49
|
+
cancelAfter(ms: number): void;
|
|
50
|
+
/** Release a pending deadline timer and subscribers without cancelling.
|
|
51
|
+
* Triggers that arm `cancelAt` (lambda deadline, embedder `deadlineAt`) call
|
|
52
|
+
* this in a `finally` once the invoke settles, so an early finish doesn't pin
|
|
53
|
+
* the source + timer alive until the deadline. Idempotent. */
|
|
54
|
+
dispose(): void;
|
|
55
|
+
}
|
|
56
|
+
export declare function createCancellationSource(): CancellationSource;
|
|
57
|
+
/** A token that is never cancelled — the sentinel used by the kernel's hot
|
|
58
|
+
* dispatch path when no source has been seeded for an invocation tree. */
|
|
59
|
+
export declare const NEVER_CANCELLED: CancellationToken;
|
|
60
|
+
/** The shared {@link InvokeContext} carrying {@link NEVER_CANCELLED}. */
|
|
61
|
+
export declare const UNCANCELLABLE_CONTEXT: InvokeContext;
|
|
62
|
+
/** Recognizes the cancellation error by code, dual-realm safe (no `instanceof`). */
|
|
63
|
+
export declare function isCancellationError(err: unknown): boolean;
|
|
64
|
+
//# sourceMappingURL=cancellation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancellation.d.ts","sourceRoot":"","sources":["../src/cancellation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC;yDACqD;IACrD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;2CACuC;IACvC,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACxE,kEAAkE;IAClE,gBAAgB,IAAI,IAAI,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC;4EACwE;IACxE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uCAAuC;IACvC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;mEAG+D;IAC/D,OAAO,IAAI,IAAI,CAAC;CACjB;AAiFD,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D;AAMD;2EAC2E;AAC3E,eAAO,MAAM,eAAe,EAAE,iBAU7B,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,qBAAqB,EAAE,aAAiD,CAAC;AAEtF,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMzD"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { InvokeError } from "./invoke-error.js";
|
|
2
|
+
/**
|
|
3
|
+
* Cooperative invocation cancellation — the standard source/token split.
|
|
4
|
+
*
|
|
5
|
+
* A {@link CancellationToken} is the read-only side handed to controllers as the
|
|
6
|
+
* `cancellation` member of the {@link InvokeContext} second argument: poll it
|
|
7
|
+
* (`isCancelled`), subscribe (`onCancelled`), bail (`throwIfCancelled`), or hand
|
|
8
|
+
* its `signal` to a Web API (`fetch`, `streamText`). The writable
|
|
9
|
+
* {@link CancellationSource} behind it — `cancel` / `cancelAt` / `cancelAfter` —
|
|
10
|
+
* is held only by the kernel, embedders, and trigger modules, never by the
|
|
11
|
+
* controllers that observe the token.
|
|
12
|
+
*
|
|
13
|
+
* A deadline is not a separate concept: `cancelAt(epochMs)` arms the token to
|
|
14
|
+
* trip at an instant, so any code holding a deadline schedules a cancellation
|
|
15
|
+
* and every honoring leaf gets timeout behavior for free. `cancelAt` (absolute)
|
|
16
|
+
* is the primitive; `cancelAfter(ms)` is sugar over it.
|
|
17
|
+
*/
|
|
18
|
+
export const ERR_INVOKE_CANCELLED = "ERR_INVOKE_CANCELLED";
|
|
19
|
+
class CancellationTokenSource {
|
|
20
|
+
#controller = new AbortController();
|
|
21
|
+
#cancelled = false;
|
|
22
|
+
#reason;
|
|
23
|
+
#listeners = new Set();
|
|
24
|
+
#timer;
|
|
25
|
+
token;
|
|
26
|
+
context;
|
|
27
|
+
constructor() {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
29
|
+
const source = this;
|
|
30
|
+
this.token = {
|
|
31
|
+
get isCancelled() {
|
|
32
|
+
return source.#cancelled;
|
|
33
|
+
},
|
|
34
|
+
get reason() {
|
|
35
|
+
return source.#reason;
|
|
36
|
+
},
|
|
37
|
+
get signal() {
|
|
38
|
+
return source.#controller.signal;
|
|
39
|
+
},
|
|
40
|
+
onCancelled(listener) {
|
|
41
|
+
if (source.#cancelled) {
|
|
42
|
+
listener(source.#reason);
|
|
43
|
+
return () => { };
|
|
44
|
+
}
|
|
45
|
+
source.#listeners.add(listener);
|
|
46
|
+
return () => source.#listeners.delete(listener);
|
|
47
|
+
},
|
|
48
|
+
throwIfCancelled() {
|
|
49
|
+
if (source.#cancelled) {
|
|
50
|
+
throw new InvokeError(ERR_INVOKE_CANCELLED, source.#reason ?? "Invoke cancelled");
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
this.context = { cancellation: this.token };
|
|
55
|
+
}
|
|
56
|
+
cancel(reason) {
|
|
57
|
+
if (this.#cancelled)
|
|
58
|
+
return;
|
|
59
|
+
this.#cancelled = true;
|
|
60
|
+
this.#reason = reason;
|
|
61
|
+
if (this.#timer) {
|
|
62
|
+
clearTimeout(this.#timer);
|
|
63
|
+
this.#timer = undefined;
|
|
64
|
+
}
|
|
65
|
+
this.#controller.abort(reason);
|
|
66
|
+
const listeners = [...this.#listeners];
|
|
67
|
+
this.#listeners.clear();
|
|
68
|
+
for (const listener of listeners)
|
|
69
|
+
listener(reason);
|
|
70
|
+
}
|
|
71
|
+
cancelAt(epochMs) {
|
|
72
|
+
if (this.#cancelled)
|
|
73
|
+
return;
|
|
74
|
+
const delay = epochMs - Date.now();
|
|
75
|
+
if (delay <= 0) {
|
|
76
|
+
this.cancel("deadline-exceeded");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (this.#timer)
|
|
80
|
+
clearTimeout(this.#timer);
|
|
81
|
+
this.#timer = setTimeout(() => this.cancel("deadline-exceeded"), delay);
|
|
82
|
+
// Don't keep the process alive solely for a pending deadline timer.
|
|
83
|
+
this.#timer.unref?.();
|
|
84
|
+
}
|
|
85
|
+
cancelAfter(ms) {
|
|
86
|
+
this.cancelAt(Date.now() + ms);
|
|
87
|
+
}
|
|
88
|
+
dispose() {
|
|
89
|
+
if (this.#timer) {
|
|
90
|
+
clearTimeout(this.#timer);
|
|
91
|
+
this.#timer = undefined;
|
|
92
|
+
}
|
|
93
|
+
this.#listeners.clear();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
export function createCancellationSource() {
|
|
97
|
+
return new CancellationTokenSource();
|
|
98
|
+
}
|
|
99
|
+
// Shared never-aborting signal for the sentinel token, so the common dispatch
|
|
100
|
+
// path allocates no AbortController for invokes that never touch cancellation.
|
|
101
|
+
const neverController = new AbortController();
|
|
102
|
+
/** A token that is never cancelled — the sentinel used by the kernel's hot
|
|
103
|
+
* dispatch path when no source has been seeded for an invocation tree. */
|
|
104
|
+
export const NEVER_CANCELLED = {
|
|
105
|
+
isCancelled: false,
|
|
106
|
+
reason: undefined,
|
|
107
|
+
get signal() {
|
|
108
|
+
return neverController.signal;
|
|
109
|
+
},
|
|
110
|
+
onCancelled() {
|
|
111
|
+
return () => { };
|
|
112
|
+
},
|
|
113
|
+
throwIfCancelled() { },
|
|
114
|
+
};
|
|
115
|
+
/** The shared {@link InvokeContext} carrying {@link NEVER_CANCELLED}. */
|
|
116
|
+
export const UNCANCELLABLE_CONTEXT = { cancellation: NEVER_CANCELLED };
|
|
117
|
+
/** Recognizes the cancellation error by code, dual-realm safe (no `instanceof`). */
|
|
118
|
+
export function isCancellationError(err) {
|
|
119
|
+
return (typeof err === "object" &&
|
|
120
|
+
err !== null &&
|
|
121
|
+
err.code === ERR_INVOKE_CANCELLED);
|
|
122
|
+
}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import type { InvokeContext } from "../cancellation.js";
|
|
1
2
|
export interface Invocable<TInput = Record<string, any>, TOutput = any> {
|
|
2
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @param inputs Caller-supplied invocation inputs.
|
|
5
|
+
* @param ctx Out-of-band per-invoke context carrying the cancellation token.
|
|
6
|
+
* Optional — controllers that ignore it keep working unchanged. The kernel
|
|
7
|
+
* always supplies it; a never-cancellable sentinel is passed when no source
|
|
8
|
+
* was seeded for the invocation tree.
|
|
9
|
+
*/
|
|
10
|
+
invoke(inputs: TInput, ctx?: InvokeContext): Promise<TOutput>;
|
|
3
11
|
}
|
|
4
12
|
//# sourceMappingURL=invokable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invokable.d.ts","sourceRoot":"","sources":["../../src/capabilities/invokable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG;IACpE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"invokable.d.ts","sourceRoot":"","sources":["../../src/capabilities/invokable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG;IACpE;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
import type { InvokeContext } from "../cancellation.js";
|
|
1
2
|
export interface Runnable {
|
|
2
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @param ctx Out-of-band per-run context carrying the cancellation token.
|
|
5
|
+
* Optional — runnables that ignore it keep working unchanged. Long-lived
|
|
6
|
+
* targets (servers, loops) observe `ctx.cancellation` to stop early when the
|
|
7
|
+
* boot run is cancelled (e.g. SIGINT).
|
|
8
|
+
*/
|
|
9
|
+
run(ctx?: InvokeContext): Promise<void>;
|
|
3
10
|
}
|
|
4
11
|
//# sourceMappingURL=runnable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runnable.d.ts","sourceRoot":"","sources":["../../src/capabilities/runnable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,GAAG,
|
|
1
|
+
{"version":3,"file":"runnable.d.ts","sourceRoot":"","sources":["../../src/capabilities/runnable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,GAAG,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InvokeContext } from "./cancellation.js";
|
|
1
2
|
import type { ScopeHandle } from "./ref.js";
|
|
2
3
|
import type { ResourceInstance } from "./resource-instance.js";
|
|
3
4
|
import type { ResourceManifest } from "./resource-manifest.js";
|
|
@@ -68,9 +69,9 @@ export interface EvaluationContext {
|
|
|
68
69
|
createScopeHandle(manifests: ResourceManifest[]): ScopeHandle;
|
|
69
70
|
teardownResources(): Promise<void>;
|
|
70
71
|
transientChild(context: Record<string, any>): EvaluationContext;
|
|
71
|
-
invoke<TInputs>(kind: string, name: string, inputs: TInputs): Promise<any>;
|
|
72
|
-
invokeResolved<TInputs>(kind: string, name: string, instance: ResourceInstance, inputs: TInputs): Promise<any>;
|
|
73
|
-
run(name: string): Promise<void>;
|
|
72
|
+
invoke<TInputs>(kind: string, name: string, inputs: TInputs, ctx?: InvokeContext): Promise<any>;
|
|
73
|
+
invokeResolved<TInputs>(kind: string, name: string, instance: ResourceInstance, inputs: TInputs, ctx?: InvokeContext): Promise<any>;
|
|
74
|
+
run(name: string, ctx?: InvokeContext): Promise<void>;
|
|
74
75
|
expand(value: unknown): unknown;
|
|
75
76
|
expandWith(value: unknown, extraContext: Record<string, unknown>): unknown;
|
|
76
77
|
expandPaths(value: Record<string, unknown>, paths: string[], excludePaths?: string[]): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"evaluation-context.d.ts","sourceRoot":"","sources":["../src/evaluation-context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/module-context.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Invocable } from "./capabilities/invokable.js";
|
|
2
|
+
import type { InvokeContext } from "./cancellation.js";
|
|
2
3
|
import type { ControllerPolicy } from "./controller-policy.js";
|
|
3
4
|
import type { EvaluationContext } from "./evaluation-context.js";
|
|
4
5
|
import type { BootTarget } from "./invoke-step.js";
|
|
@@ -38,6 +39,6 @@ export interface ModuleContext extends EvaluationContext {
|
|
|
38
39
|
getInstance(name: string): unknown;
|
|
39
40
|
getInvocable<TInput = Record<string, any>, TOutput = any>(name: string): Invocable<TInput, TOutput>;
|
|
40
41
|
resolveKind(kind: string): string;
|
|
41
|
-
runTargets(): Promise<void>;
|
|
42
|
+
runTargets(ctx?: InvokeContext): Promise<void>;
|
|
42
43
|
}
|
|
43
44
|
//# sourceMappingURL=module-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-context.d.ts","sourceRoot":"","sources":["../src/module-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5C,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClD,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;IAChE,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEpD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3E;;+FAE2F;IAC3F,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5F,4FAA4F;IAC5F,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACnF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EACtD,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,UAAU,
|
|
1
|
+
{"version":3,"file":"module-context.d.ts","sourceRoot":"","sources":["../src/module-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE5C,4EAA4E;IAC5E,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClD,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACnD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChE,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,IAAI,CAAC;IAChE,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IAEpD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC3E;;+FAE2F;IAC3F,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5F,4FAA4F;IAC5F,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACnF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EACtD,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,UAAU,CAAC,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CancellationSource, InvokeContext } from "./cancellation.js";
|
|
1
2
|
import { ControllerContext } from "./controller-context.js";
|
|
2
3
|
import { ControllerPolicy } from "./controller-policy.js";
|
|
3
4
|
import { EvaluationContext } from "./evaluation-context.js";
|
|
@@ -35,8 +36,12 @@ export interface ResourceContext extends ControllerContext {
|
|
|
35
36
|
readonly args: ParsedArgs;
|
|
36
37
|
acquireHold(reason?: string): () => void;
|
|
37
38
|
emitEvent(event: string, payload?: any): Promise<void>;
|
|
39
|
+
/** Mint a writable cancellation source for a trigger to own (HTTP request,
|
|
40
|
+
* lambda budget). Pass `source.context` into `invokeResolved` to scope an
|
|
41
|
+
* invocation tree to it. */
|
|
42
|
+
createCancellationSource(): CancellationSource;
|
|
38
43
|
invoke<TInputs>(kind: string, name: string, inputs: TInputs, options?: any): Promise<any>;
|
|
39
|
-
invokeResolved<TInputs>(kind: string, name: string, instance: ResourceInstance, inputs: TInputs): Promise<any>;
|
|
44
|
+
invokeResolved<TInputs>(kind: string, name: string, instance: ResourceInstance, inputs: TInputs, ctx?: InvokeContext): Promise<any>;
|
|
40
45
|
run(kind: string, name: string): Promise<void>;
|
|
41
46
|
getResourcesByName(kind: string, name: string): RuntimeResource | null;
|
|
42
47
|
registerManifest(resource: any): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-context.d.ts","sourceRoot":"","sources":["../src/resource-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B;gFAC4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;4EAGwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO;IAIP,QAAQ;CAGT;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEhG,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACzC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1F,cAAc,CAAC,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"resource-context.d.ts","sourceRoot":"","sources":["../src/resource-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B;gFAC4E;IAC5E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;4EAGwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO;IAIP,QAAQ;CAGT;AAED,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,GAAG;IAAE,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEhG,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACzC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD;;iCAE6B;IAC7B,wBAAwB,IAAI,kBAAkB,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1F,cAAc,CAAC,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,OAAO,EACf,GAAG,CAAC,EAAE,aAAa,GAClB,OAAO,CAAC,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;IACvE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;IACtC,iBAAiB,IAAI,iBAAiB,CAAC;IACvC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAAC;IAChE,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACnD,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAC9C,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,aAAa,CAAC;IAClD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC/C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACzD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC;IACtD,kFAAkF;IAClF,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,GAAG,aAAa,CAAC;IACtF,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjG,kBAAkB,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1C,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjF;;;;OAIG;IACH,mBAAmB,IAAI,gBAAgB,GAAG,SAAS,CAAC;IACpD;;;;;;;;;;;OAWG;IACH,WAAW,IAAI,MAAM,GAAG,SAAS,CAAC;IAClC;wDACoD;IACpD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC5E;;;sBAGkB;IAClB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;CACxC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,6 +7,13 @@ import { RuntimeResource } from "./runtime-resource.js";
|
|
|
7
7
|
export interface KernelContext {
|
|
8
8
|
kernel: Kernel;
|
|
9
9
|
}
|
|
10
|
+
/** Embedder-facing seed for an invocation tree's cancellation scope. Provide an
|
|
11
|
+
* external `AbortSignal` to cancel on, an absolute epoch-millis `deadlineAt`,
|
|
12
|
+
* or both. Omit to run uncancellable. */
|
|
13
|
+
export interface InvokeOptions {
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
deadlineAt?: number;
|
|
16
|
+
}
|
|
10
17
|
export interface ExecContext {
|
|
11
18
|
execute(urn: string, input: any): Promise<any>;
|
|
12
19
|
[key: string]: any;
|
|
@@ -113,7 +120,7 @@ export interface Kernel {
|
|
|
113
120
|
invoke<TInputs = any, TOutput = any>(ref: string | {
|
|
114
121
|
kind: string;
|
|
115
122
|
name: string;
|
|
116
|
-
}, inputs: TInputs): Promise<TOutput>;
|
|
123
|
+
}, inputs: TInputs, opts?: InvokeOptions): Promise<TOutput>;
|
|
117
124
|
/**
|
|
118
125
|
* Convenience: boot → runTargets → waitForIdle → teardown, with teardown
|
|
119
126
|
* always running via finally so init-time failures still tear down.
|
|
@@ -128,6 +135,13 @@ export interface Kernel {
|
|
|
128
135
|
* `teardown()` for cleanup.
|
|
129
136
|
*/
|
|
130
137
|
forceIdle(): void;
|
|
138
|
+
/**
|
|
139
|
+
* Cooperatively cancel the boot `targets` run. Not-yet-started targets are
|
|
140
|
+
* refused; long-lived runnables and in-flight invoke trees observe the
|
|
141
|
+
* cancellation token and stop early. Pairs with `forceIdle()` in signal
|
|
142
|
+
* handlers (cancel the work, then unblock the idle wait).
|
|
143
|
+
*/
|
|
144
|
+
cancel(reason?: string): void;
|
|
131
145
|
requestExit(code: number): void;
|
|
132
146
|
readonly exitCode: number;
|
|
133
147
|
}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;wEAIoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;2DAEuD;IACvD,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,8EAA8E;IAC9E,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB,CACjC,SAAS,SAAS,gBAAgB,GAAG,gBAAgB,EACrD,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,OAAO,GAAG,GAAG;IAEb,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAChG,QAAQ,CAAC,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,CACL,QAAQ,EAAE,SAAS,EACnB,GAAG,EAAE,eAAe,GACnB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAChG,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5F,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC;;;;OAIG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB;;;;OAIG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG,EACjC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAC5C,MAAM,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { InvokeError } from "./invoke-error.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Cooperative invocation cancellation — the standard source/token split.
|
|
5
|
+
*
|
|
6
|
+
* A {@link CancellationToken} is the read-only side handed to controllers as the
|
|
7
|
+
* `cancellation` member of the {@link InvokeContext} second argument: poll it
|
|
8
|
+
* (`isCancelled`), subscribe (`onCancelled`), bail (`throwIfCancelled`), or hand
|
|
9
|
+
* its `signal` to a Web API (`fetch`, `streamText`). The writable
|
|
10
|
+
* {@link CancellationSource} behind it — `cancel` / `cancelAt` / `cancelAfter` —
|
|
11
|
+
* is held only by the kernel, embedders, and trigger modules, never by the
|
|
12
|
+
* controllers that observe the token.
|
|
13
|
+
*
|
|
14
|
+
* A deadline is not a separate concept: `cancelAt(epochMs)` arms the token to
|
|
15
|
+
* trip at an instant, so any code holding a deadline schedules a cancellation
|
|
16
|
+
* and every honoring leaf gets timeout behavior for free. `cancelAt` (absolute)
|
|
17
|
+
* is the primitive; `cancelAfter(ms)` is sugar over it.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export const ERR_INVOKE_CANCELLED = "ERR_INVOKE_CANCELLED";
|
|
21
|
+
|
|
22
|
+
export interface CancellationToken {
|
|
23
|
+
/** Synchronous poll — `true` once the owning source has cancelled. */
|
|
24
|
+
readonly isCancelled: boolean;
|
|
25
|
+
/** Human-readable reason supplied to `cancel`/the deadline, if any. */
|
|
26
|
+
readonly reason: string | undefined;
|
|
27
|
+
/** `AbortSignal` escape hatch for handing off to Web APIs (`fetch`,
|
|
28
|
+
* `streamText`). Aborts when the source cancels. */
|
|
29
|
+
readonly signal: AbortSignal;
|
|
30
|
+
/** Subscribe to cancellation. Fires immediately if already cancelled.
|
|
31
|
+
* Returns an unsubscribe function. */
|
|
32
|
+
onCancelled(listener: (reason: string | undefined) => void): () => void;
|
|
33
|
+
/** Throw `ERR_INVOKE_CANCELLED` if cancelled; otherwise no-op. */
|
|
34
|
+
throwIfCancelled(): void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The out-of-band second argument every `invoke()` receives. Intentionally an
|
|
39
|
+
* extensible object rather than a bare token so future per-invoke concerns
|
|
40
|
+
* (trace, idempotency) can join without a breaking signature change.
|
|
41
|
+
*/
|
|
42
|
+
export interface InvokeContext {
|
|
43
|
+
readonly cancellation: CancellationToken;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface CancellationSource {
|
|
47
|
+
readonly token: CancellationToken;
|
|
48
|
+
/** The {@link InvokeContext} wrapping this source's token — pass to
|
|
49
|
+
* `invokeResolved(..., source.context)` to seed an invocation tree. */
|
|
50
|
+
readonly context: InvokeContext;
|
|
51
|
+
cancel(reason?: string): void;
|
|
52
|
+
/** Arm cancellation at an absolute epoch-millis instant (a deadline). */
|
|
53
|
+
cancelAt(epochMs: number): void;
|
|
54
|
+
/** Sugar over `cancelAt(now + ms)`. */
|
|
55
|
+
cancelAfter(ms: number): void;
|
|
56
|
+
/** Release a pending deadline timer and subscribers without cancelling.
|
|
57
|
+
* Triggers that arm `cancelAt` (lambda deadline, embedder `deadlineAt`) call
|
|
58
|
+
* this in a `finally` once the invoke settles, so an early finish doesn't pin
|
|
59
|
+
* the source + timer alive until the deadline. Idempotent. */
|
|
60
|
+
dispose(): void;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
class CancellationTokenSource implements CancellationSource {
|
|
64
|
+
readonly #controller = new AbortController();
|
|
65
|
+
#cancelled = false;
|
|
66
|
+
#reason: string | undefined;
|
|
67
|
+
readonly #listeners = new Set<(reason: string | undefined) => void>();
|
|
68
|
+
#timer: ReturnType<typeof setTimeout> | undefined;
|
|
69
|
+
readonly token: CancellationToken;
|
|
70
|
+
readonly context: InvokeContext;
|
|
71
|
+
|
|
72
|
+
constructor() {
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
74
|
+
const source = this;
|
|
75
|
+
this.token = {
|
|
76
|
+
get isCancelled() {
|
|
77
|
+
return source.#cancelled;
|
|
78
|
+
},
|
|
79
|
+
get reason() {
|
|
80
|
+
return source.#reason;
|
|
81
|
+
},
|
|
82
|
+
get signal() {
|
|
83
|
+
return source.#controller.signal;
|
|
84
|
+
},
|
|
85
|
+
onCancelled(listener) {
|
|
86
|
+
if (source.#cancelled) {
|
|
87
|
+
listener(source.#reason);
|
|
88
|
+
return () => {};
|
|
89
|
+
}
|
|
90
|
+
source.#listeners.add(listener);
|
|
91
|
+
return () => source.#listeners.delete(listener);
|
|
92
|
+
},
|
|
93
|
+
throwIfCancelled() {
|
|
94
|
+
if (source.#cancelled) {
|
|
95
|
+
throw new InvokeError(ERR_INVOKE_CANCELLED, source.#reason ?? "Invoke cancelled");
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
this.context = { cancellation: this.token };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
cancel(reason?: string): void {
|
|
103
|
+
if (this.#cancelled) return;
|
|
104
|
+
this.#cancelled = true;
|
|
105
|
+
this.#reason = reason;
|
|
106
|
+
if (this.#timer) {
|
|
107
|
+
clearTimeout(this.#timer);
|
|
108
|
+
this.#timer = undefined;
|
|
109
|
+
}
|
|
110
|
+
this.#controller.abort(reason);
|
|
111
|
+
const listeners = [...this.#listeners];
|
|
112
|
+
this.#listeners.clear();
|
|
113
|
+
for (const listener of listeners) listener(reason);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
cancelAt(epochMs: number): void {
|
|
117
|
+
if (this.#cancelled) return;
|
|
118
|
+
const delay = epochMs - Date.now();
|
|
119
|
+
if (delay <= 0) {
|
|
120
|
+
this.cancel("deadline-exceeded");
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (this.#timer) clearTimeout(this.#timer);
|
|
124
|
+
this.#timer = setTimeout(() => this.cancel("deadline-exceeded"), delay);
|
|
125
|
+
// Don't keep the process alive solely for a pending deadline timer.
|
|
126
|
+
(this.#timer as { unref?: () => void }).unref?.();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
cancelAfter(ms: number): void {
|
|
130
|
+
this.cancelAt(Date.now() + ms);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
dispose(): void {
|
|
134
|
+
if (this.#timer) {
|
|
135
|
+
clearTimeout(this.#timer);
|
|
136
|
+
this.#timer = undefined;
|
|
137
|
+
}
|
|
138
|
+
this.#listeners.clear();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export function createCancellationSource(): CancellationSource {
|
|
143
|
+
return new CancellationTokenSource();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Shared never-aborting signal for the sentinel token, so the common dispatch
|
|
147
|
+
// path allocates no AbortController for invokes that never touch cancellation.
|
|
148
|
+
const neverController = new AbortController();
|
|
149
|
+
|
|
150
|
+
/** A token that is never cancelled — the sentinel used by the kernel's hot
|
|
151
|
+
* dispatch path when no source has been seeded for an invocation tree. */
|
|
152
|
+
export const NEVER_CANCELLED: CancellationToken = {
|
|
153
|
+
isCancelled: false,
|
|
154
|
+
reason: undefined,
|
|
155
|
+
get signal() {
|
|
156
|
+
return neverController.signal;
|
|
157
|
+
},
|
|
158
|
+
onCancelled() {
|
|
159
|
+
return () => {};
|
|
160
|
+
},
|
|
161
|
+
throwIfCancelled() {},
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/** The shared {@link InvokeContext} carrying {@link NEVER_CANCELLED}. */
|
|
165
|
+
export const UNCANCELLABLE_CONTEXT: InvokeContext = { cancellation: NEVER_CANCELLED };
|
|
166
|
+
|
|
167
|
+
/** Recognizes the cancellation error by code, dual-realm safe (no `instanceof`). */
|
|
168
|
+
export function isCancellationError(err: unknown): boolean {
|
|
169
|
+
return (
|
|
170
|
+
typeof err === "object" &&
|
|
171
|
+
err !== null &&
|
|
172
|
+
(err as { code?: unknown }).code === ERR_INVOKE_CANCELLED
|
|
173
|
+
);
|
|
174
|
+
}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import type { InvokeContext } from "../cancellation.js";
|
|
2
|
+
|
|
1
3
|
export interface Invocable<TInput = Record<string, any>, TOutput = any> {
|
|
2
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @param inputs Caller-supplied invocation inputs.
|
|
6
|
+
* @param ctx Out-of-band per-invoke context carrying the cancellation token.
|
|
7
|
+
* Optional — controllers that ignore it keep working unchanged. The kernel
|
|
8
|
+
* always supplies it; a never-cancellable sentinel is passed when no source
|
|
9
|
+
* was seeded for the invocation tree.
|
|
10
|
+
*/
|
|
11
|
+
invoke(inputs: TInput, ctx?: InvokeContext): Promise<TOutput>;
|
|
3
12
|
}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import type { InvokeContext } from "../cancellation.js";
|
|
2
|
+
|
|
1
3
|
export interface Runnable {
|
|
2
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @param ctx Out-of-band per-run context carrying the cancellation token.
|
|
6
|
+
* Optional — runnables that ignore it keep working unchanged. Long-lived
|
|
7
|
+
* targets (servers, loops) observe `ctx.cancellation` to stop early when the
|
|
8
|
+
* boot run is cancelled (e.g. SIGINT).
|
|
9
|
+
*/
|
|
10
|
+
run(ctx?: InvokeContext): Promise<void>;
|
|
3
11
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { InvokeContext } from "./cancellation.js";
|
|
1
2
|
import type { ScopeHandle } from "./ref.js";
|
|
2
3
|
import type { ResourceInstance } from "./resource-instance.js";
|
|
3
4
|
import type { ResourceManifest } from "./resource-manifest.js";
|
|
@@ -87,14 +88,15 @@ export interface EvaluationContext {
|
|
|
87
88
|
createScopeHandle(manifests: ResourceManifest[]): ScopeHandle;
|
|
88
89
|
teardownResources(): Promise<void>;
|
|
89
90
|
transientChild(context: Record<string, any>): EvaluationContext;
|
|
90
|
-
invoke<TInputs>(kind: string, name: string, inputs: TInputs): Promise<any>;
|
|
91
|
+
invoke<TInputs>(kind: string, name: string, inputs: TInputs, ctx?: InvokeContext): Promise<any>;
|
|
91
92
|
invokeResolved<TInputs>(
|
|
92
93
|
kind: string,
|
|
93
94
|
name: string,
|
|
94
95
|
instance: ResourceInstance,
|
|
95
96
|
inputs: TInputs,
|
|
97
|
+
ctx?: InvokeContext,
|
|
96
98
|
): Promise<any>;
|
|
97
|
-
run(name: string): Promise<void>;
|
|
99
|
+
run(name: string, ctx?: InvokeContext): Promise<void>;
|
|
98
100
|
expand(value: unknown): unknown;
|
|
99
101
|
expandWith(value: unknown, extraContext: Record<string, unknown>): unknown;
|
|
100
102
|
expandPaths(
|
package/src/index.ts
CHANGED
package/src/module-context.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Invocable } from "./capabilities/invokable.js";
|
|
2
|
+
import type { InvokeContext } from "./cancellation.js";
|
|
2
3
|
import type { ControllerPolicy } from "./controller-policy.js";
|
|
3
4
|
import type { EvaluationContext } from "./evaluation-context.js";
|
|
4
5
|
import type { BootTarget } from "./invoke-step.js";
|
|
@@ -41,5 +42,5 @@ export interface ModuleContext extends EvaluationContext {
|
|
|
41
42
|
name: string,
|
|
42
43
|
): Invocable<TInput, TOutput>;
|
|
43
44
|
resolveKind(kind: string): string;
|
|
44
|
-
runTargets(): Promise<void>;
|
|
45
|
+
runTargets(ctx?: InvokeContext): Promise<void>;
|
|
45
46
|
}
|
package/src/resource-context.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CancellationSource, InvokeContext } from "./cancellation.js";
|
|
1
2
|
import { ControllerContext } from "./controller-context.js";
|
|
2
3
|
import { ControllerPolicy } from "./controller-policy.js";
|
|
3
4
|
import { EvaluationContext } from "./evaluation-context.js";
|
|
@@ -44,12 +45,17 @@ export interface ResourceContext extends ControllerContext {
|
|
|
44
45
|
readonly args: ParsedArgs;
|
|
45
46
|
acquireHold(reason?: string): () => void;
|
|
46
47
|
emitEvent(event: string, payload?: any): Promise<void>;
|
|
48
|
+
/** Mint a writable cancellation source for a trigger to own (HTTP request,
|
|
49
|
+
* lambda budget). Pass `source.context` into `invokeResolved` to scope an
|
|
50
|
+
* invocation tree to it. */
|
|
51
|
+
createCancellationSource(): CancellationSource;
|
|
47
52
|
invoke<TInputs>(kind: string, name: string, inputs: TInputs, options?: any): Promise<any>;
|
|
48
53
|
invokeResolved<TInputs>(
|
|
49
54
|
kind: string,
|
|
50
55
|
name: string,
|
|
51
56
|
instance: ResourceInstance,
|
|
52
57
|
inputs: TInputs,
|
|
58
|
+
ctx?: InvokeContext,
|
|
53
59
|
): Promise<any>;
|
|
54
60
|
run(kind: string, name: string): Promise<void>;
|
|
55
61
|
getResourcesByName(kind: string, name: string): RuntimeResource | null;
|
package/src/types.ts
CHANGED
|
@@ -9,6 +9,14 @@ export interface KernelContext {
|
|
|
9
9
|
kernel: Kernel;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/** Embedder-facing seed for an invocation tree's cancellation scope. Provide an
|
|
13
|
+
* external `AbortSignal` to cancel on, an absolute epoch-millis `deadlineAt`,
|
|
14
|
+
* or both. Omit to run uncancellable. */
|
|
15
|
+
export interface InvokeOptions {
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
deadlineAt?: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
12
20
|
export interface ExecContext {
|
|
13
21
|
execute(urn: string, input: any): Promise<any>;
|
|
14
22
|
[key: string]: any;
|
|
@@ -124,6 +132,7 @@ export interface Kernel {
|
|
|
124
132
|
invoke<TInputs = any, TOutput = any>(
|
|
125
133
|
ref: string | { kind: string; name: string },
|
|
126
134
|
inputs: TInputs,
|
|
135
|
+
opts?: InvokeOptions,
|
|
127
136
|
): Promise<TOutput>;
|
|
128
137
|
/**
|
|
129
138
|
* Convenience: boot → runTargets → waitForIdle → teardown, with teardown
|
|
@@ -139,6 +148,13 @@ export interface Kernel {
|
|
|
139
148
|
* `teardown()` for cleanup.
|
|
140
149
|
*/
|
|
141
150
|
forceIdle(): void;
|
|
151
|
+
/**
|
|
152
|
+
* Cooperatively cancel the boot `targets` run. Not-yet-started targets are
|
|
153
|
+
* refused; long-lived runnables and in-flight invoke trees observe the
|
|
154
|
+
* cancellation token and stop early. Pairs with `forceIdle()` in signal
|
|
155
|
+
* handlers (cancel the work, then unblock the idle wait).
|
|
156
|
+
*/
|
|
157
|
+
cancel(reason?: string): void;
|
|
142
158
|
requestExit(code: number): void;
|
|
143
159
|
readonly exitCode: number;
|
|
144
160
|
}
|