@silvermoon-work/task-sdk 0.0.0-stage → 0.1.0-canary-261109-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/LICENSE +21 -0
- package/README.md +87 -2
- package/dist/binding.d.ts +7 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +3 -0
- package/dist/binding.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +499 -0
- package/dist/index.js.map +1 -0
- package/package.json +43 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 shazhou-ww
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,88 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @silvermoon-work/task-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Generation-scoped Node Task Worker runtime (`runTask`, `RunFailure`) and
|
|
4
|
+
callback/context types. Its only runtime dependency is
|
|
5
|
+
[@silvermoon-work/task-protocol](../task-protocol/README.md), using the
|
|
6
|
+
lightweight `/worker` entry without Ajv or a CID parser.
|
|
7
|
+
|
|
8
|
+
Migrated under the original MIT license from
|
|
9
|
+
[potential-guide at 6614f46](https://github.com/shazhou-ww/potential-guide/tree/6614f46bf0f4152c61bd2c73d6c4b21ab4cf366f/packages/task-sdk).
|
|
10
|
+
The runtime and public API are preserved; package imports now use the
|
|
11
|
+
`@silvermoon-work` workspace. `0.1.0-canary-261109-1` is a local release
|
|
12
|
+
candidate, not a claim of publication.
|
|
13
|
+
|
|
14
|
+
## Authoring
|
|
15
|
+
|
|
16
|
+
Use [task-builder CLI init](../task-builder-cli/README.md#init-composition)
|
|
17
|
+
to create a private project, then build, encode and check its Bundle:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
task-builder init my-task
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import { runTask } from "@silvermoon-work/task-sdk";
|
|
25
|
+
|
|
26
|
+
runTask<{ text: string }, string>(async (input, context) => {
|
|
27
|
+
await context.progress({ stage: "execution", percent: 50, message: "Working" });
|
|
28
|
+
return input.text;
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
[Task Builder](../task-builder/README.md) owns compilation, contracts, resources
|
|
33
|
+
and CAR tooling. Explicit entries call `runTask(callback)` themselves; callback
|
|
34
|
+
mode wraps a selected export. The builder replaces the SDK's private binding
|
|
35
|
+
with the verified Bundle declaration. It does not accept a binding from author
|
|
36
|
+
configuration or `workerData`; calling the unbuilt SDK fails.
|
|
37
|
+
|
|
38
|
+
## Runtime contract
|
|
39
|
+
|
|
40
|
+
The Engine validates business input/messages, checkpoints, completion and
|
|
41
|
+
failure evidence, plus JSON shape, byte limits, progress and logs. The SDK
|
|
42
|
+
forwards payloads without automatic business-schema validation. Authors may
|
|
43
|
+
bundle their own validators. Custom hosts must implement the same validation
|
|
44
|
+
and negative-ACK lifecycle, not acknowledge every frame.
|
|
45
|
+
|
|
46
|
+
The SDK owns bounded queues, generation/Run routing, declaration equality,
|
|
47
|
+
cancellation and resource streams. A rejected checkpoint remains a failed
|
|
48
|
+
output even if the callback catches it. Rejected completion is reported as
|
|
49
|
+
failure; rejected `RunFailure` evidence is re-reported without that evidence.
|
|
50
|
+
Release follows an acknowledged terminal fact; an unavailable terminal channel
|
|
51
|
+
reports uncertainty. Cancellation keeps its stopping/release path.
|
|
52
|
+
|
|
53
|
+
Node structured clone transports IPC. Non-cloneable payloads reject locally
|
|
54
|
+
with `invalid_payload`; sendable non-JSON values are rejected by the host.
|
|
55
|
+
Failed sends do not consume message IDs or pending credits. Getters/custom
|
|
56
|
+
objects may be normalized during cloning, so authors should send plain JSON.
|
|
57
|
+
Receiver byte limits govern acceptance, not transport allocation.
|
|
58
|
+
|
|
59
|
+
`context` provides `signal`, `messages`, `progress`, `checkpoint` and typed
|
|
60
|
+
async `log` receipts. Diagnostics have a separately bounded channel and do not
|
|
61
|
+
replace business outputs.
|
|
62
|
+
|
|
63
|
+
`context.bundle.cid` is the readonly host-verified executing root. The host
|
|
64
|
+
owns CID parsing, codec/hash and DAG checks; the SDK treats it as an opaque
|
|
65
|
+
nonempty string of at most 256 characters and echoes it in the ready handshake.
|
|
66
|
+
It is not task input or a self-referential compiled identity.
|
|
67
|
+
|
|
68
|
+
`context.bundle.read(relativePath, { signal? })` returns a demand-driven
|
|
69
|
+
`ReadableStream<Uint8Array>` with cancellation and explicit stream errors:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
const chunks: Uint8Array[] = [];
|
|
73
|
+
for await (const chunk of context.bundle.read("resources/data.bin")) chunks.push(chunk);
|
|
74
|
+
const bytes = Buffer.concat(chunks);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Resources belong to the current immutable Bundle root. Absolute paths,
|
|
78
|
+
traversal and absent files fail. Do not locate resources through `__dirname`,
|
|
79
|
+
`import.meta.url` or cwd: Workers can execute verified CommonJS source in memory.
|
|
80
|
+
Workers are lifecycle/isolation boundaries, not security sandboxes.
|
|
81
|
+
|
|
82
|
+
The preserved wire contract is documented in the source's
|
|
83
|
+
[Task Worker specification](https://github.com/shazhou-ww/potential-guide/blob/6614f46bf0f4152c61bd2c73d6c4b21ab4cf366f/docs/task-bundle-worker.md)
|
|
84
|
+
and [Run Logs](https://github.com/shazhou-ww/potential-guide/blob/6614f46bf0f4152c61bd2c73d6c4b21ab4cf366f/docs/task-run-logs.md).
|
|
85
|
+
Release this SDK separately after its matching protocol version is available,
|
|
86
|
+
using the `task-sdk-v<version>` mapping in the root
|
|
87
|
+
[release guide](../../README.md#publish-one-package). Never publish dependencies
|
|
88
|
+
automatically.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolvedTaskBundle } from "@silvermoon-work/task-protocol/worker";
|
|
2
|
+
export interface TaskBinding {
|
|
3
|
+
declaration: ResolvedTaskBundle;
|
|
4
|
+
}
|
|
5
|
+
/** Replaced by the Bundle builder, never supplied by author code or workerData. */
|
|
6
|
+
export declare const binding: TaskBinding | undefined;
|
|
7
|
+
//# sourceMappingURL=binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAEhF,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED,mFAAmF;AACnF,eAAO,MAAM,OAAO,EAAE,WAAW,GAAG,SAAqB,CAAC"}
|
package/dist/binding.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../src/binding.ts"],"names":[],"mappings":"AAMA,mFAAmF;AACnF,MAAM,CAAC,MAAM,OAAO,GAA4B,SAAS,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Json, type RunContext } from "@silvermoon-work/task-protocol/worker";
|
|
2
|
+
export interface TaskContext<Message extends Json = never> extends RunContext<Message> {
|
|
3
|
+
readonly bundle: {
|
|
4
|
+
readonly cid: string;
|
|
5
|
+
read(path: string, options?: {
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}): ReadableStream<Uint8Array>;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export type TaskCallback<Input = Json, Result = Json, Message extends Json = never> = (input: Input, context: TaskContext<Message>) => Promise<Result>;
|
|
11
|
+
export type { RunContext, RunLogInput, RunLogReceipt, RunMessage, RunProgress, } from "@silvermoon-work/task-protocol/worker";
|
|
12
|
+
export { RunFailure } from "@silvermoon-work/task-protocol/worker";
|
|
13
|
+
/** Authors explicitly select this wrapper; the builder binds contracts, not startup. */
|
|
14
|
+
export declare function runTask<Input = Json, Result = Json, Message extends Json = never>(callback: TaskCallback<Input, Result, Message>): void;
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,IAAI,EAGT,KAAK,UAAU,EAQhB,MAAM,uCAAuC,CAAC;AAG/C,MAAM,WAAW,WAAW,CAAC,OAAO,SAAS,IAAI,GAAG,KAAK,CAAE,SAAQ,UAAU,CAAC,OAAO,CAAC;IACpF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,WAAW,CAAA;SAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;KACpF,CAAC;CACH;AACD,MAAM,MAAM,YAAY,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,SAAS,IAAI,GAAG,KAAK,IAAI,CACpF,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,YAAY,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,UAAU,EACV,WAAW,GACZ,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAoCnE,wFAAwF;AACxF,wBAAgB,OAAO,CAAC,KAAK,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,SAAS,IAAI,GAAG,KAAK,EAC/E,QAAQ,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,GAC7C,IAAI,CA8cN"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
import { parentPort, workerData } from "node:worker_threads";
|
|
2
|
+
import { canonical, json, RunFailure, TaskError, taskSchemaUri, } from "@silvermoon-work/task-protocol/worker";
|
|
3
|
+
import { binding } from "./binding.js";
|
|
4
|
+
export { RunFailure } from "@silvermoon-work/task-protocol/worker";
|
|
5
|
+
class Inbox {
|
|
6
|
+
capacity;
|
|
7
|
+
queue = [];
|
|
8
|
+
waiter;
|
|
9
|
+
closed = false;
|
|
10
|
+
constructor(capacity) {
|
|
11
|
+
this.capacity = capacity;
|
|
12
|
+
}
|
|
13
|
+
push(value) {
|
|
14
|
+
if (this.closed || this.queue.length >= this.capacity)
|
|
15
|
+
throw new Error("Task inbox unavailable.");
|
|
16
|
+
if (this.waiter) {
|
|
17
|
+
this.waiter({ done: false, value });
|
|
18
|
+
this.waiter = undefined;
|
|
19
|
+
}
|
|
20
|
+
else
|
|
21
|
+
this.queue.push(value);
|
|
22
|
+
}
|
|
23
|
+
close() {
|
|
24
|
+
this.closed = true;
|
|
25
|
+
this.queue = [];
|
|
26
|
+
this.waiter?.({ done: true, value: undefined });
|
|
27
|
+
this.waiter = undefined;
|
|
28
|
+
}
|
|
29
|
+
[Symbol.asyncIterator]() {
|
|
30
|
+
return {
|
|
31
|
+
next: () => {
|
|
32
|
+
const value = this.queue.shift();
|
|
33
|
+
if (value)
|
|
34
|
+
return Promise.resolve({ done: false, value });
|
|
35
|
+
if (this.closed)
|
|
36
|
+
return Promise.resolve({ done: true, value: undefined });
|
|
37
|
+
if (this.waiter)
|
|
38
|
+
return Promise.reject(new Error("Task inbox has one consumer."));
|
|
39
|
+
return new Promise((resolve) => {
|
|
40
|
+
this.waiter = resolve;
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Authors explicitly select this wrapper; the builder binds contracts, not startup. */
|
|
47
|
+
export function runTask(callback) {
|
|
48
|
+
if (!binding)
|
|
49
|
+
throw new Error("Task SDK requires a build-locked Bundle binding.");
|
|
50
|
+
const { declaration } = binding;
|
|
51
|
+
const port = parentPort;
|
|
52
|
+
if (!port || declaration.$schema !== taskSchemaUri)
|
|
53
|
+
throw new Error("Unsupported Task Worker.");
|
|
54
|
+
const config = workerData;
|
|
55
|
+
if (typeof config.generation !== "string" ||
|
|
56
|
+
!config.generation ||
|
|
57
|
+
!Number.isSafeInteger(config.maxInFlight) ||
|
|
58
|
+
config.maxInFlight <= 0 ||
|
|
59
|
+
!Number.isSafeInteger(config.maxPayloadBytes) ||
|
|
60
|
+
config.maxPayloadBytes <= 0 ||
|
|
61
|
+
typeof config.bundle?.cid !== "string" ||
|
|
62
|
+
!config.bundle.cid ||
|
|
63
|
+
config.bundle.cid.length > 256)
|
|
64
|
+
throw new Error("Invalid trusted Task Worker configuration.");
|
|
65
|
+
if (!config.bundle ||
|
|
66
|
+
canonical(json(config.bundle.declaration, 1_048_576)) !==
|
|
67
|
+
canonical(json(declaration, 1_048_576)))
|
|
68
|
+
throw new Error("Task Worker declaration differs from verified Bundle.");
|
|
69
|
+
const controller = new AbortController();
|
|
70
|
+
const inbox = new Inbox(config.maxInFlight);
|
|
71
|
+
const tasks = new Map();
|
|
72
|
+
const pending = new Map();
|
|
73
|
+
let sequence = 0;
|
|
74
|
+
let runId;
|
|
75
|
+
let finishing = false;
|
|
76
|
+
let queued = 0;
|
|
77
|
+
let cleanupUncertain = false;
|
|
78
|
+
let output = Promise.resolve();
|
|
79
|
+
let outputError;
|
|
80
|
+
let readSequence = 0;
|
|
81
|
+
const reads = new Map();
|
|
82
|
+
function readBundle(path, options = {}) {
|
|
83
|
+
const id = ++readSequence;
|
|
84
|
+
const signal = options.signal
|
|
85
|
+
? AbortSignal.any([controller.signal, options.signal])
|
|
86
|
+
: controller.signal;
|
|
87
|
+
let cleanup = () => { };
|
|
88
|
+
const cancel = () => {
|
|
89
|
+
cleanup();
|
|
90
|
+
reads.get(id)?.reject(new DOMException("Bundle read canceled.", "AbortError"));
|
|
91
|
+
reads.delete(id);
|
|
92
|
+
port.postMessage({
|
|
93
|
+
generation: config.generation,
|
|
94
|
+
runId,
|
|
95
|
+
kind: "bundle-cancel",
|
|
96
|
+
readId: id,
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
return new ReadableStream({
|
|
100
|
+
start(stream) {
|
|
101
|
+
const abort = () => {
|
|
102
|
+
cancel();
|
|
103
|
+
stream.error(signal.reason);
|
|
104
|
+
};
|
|
105
|
+
cleanup = () => signal.removeEventListener("abort", abort);
|
|
106
|
+
if (signal.aborted) {
|
|
107
|
+
stream.error(signal.reason);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
signal.addEventListener("abort", abort, { once: true });
|
|
111
|
+
},
|
|
112
|
+
async pull(stream) {
|
|
113
|
+
try {
|
|
114
|
+
if (finishing)
|
|
115
|
+
throw new TaskError("run_finished", "Bundle stream is closed.");
|
|
116
|
+
signal.throwIfAborted();
|
|
117
|
+
const item = await new Promise((resolve, reject) => {
|
|
118
|
+
reads.set(id, { resolve, reject });
|
|
119
|
+
port.postMessage({
|
|
120
|
+
generation: config.generation,
|
|
121
|
+
runId,
|
|
122
|
+
kind: "bundle-pull",
|
|
123
|
+
readId: id,
|
|
124
|
+
path,
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
if (item.done) {
|
|
128
|
+
cleanup();
|
|
129
|
+
stream.close();
|
|
130
|
+
}
|
|
131
|
+
else if (item.chunk instanceof Uint8Array)
|
|
132
|
+
stream.enqueue(item.chunk);
|
|
133
|
+
else
|
|
134
|
+
throw new TaskError("invalid_bundle", "Invalid Bundle stream chunk.");
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
cancel();
|
|
138
|
+
stream.error(error);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
cancel,
|
|
142
|
+
}, { highWaterMark: 0 });
|
|
143
|
+
}
|
|
144
|
+
let logSequence = 0;
|
|
145
|
+
const logPending = new Map();
|
|
146
|
+
let droppedLogs = 0;
|
|
147
|
+
let reportedDroppedLogs = 0;
|
|
148
|
+
let dropScheduled = false;
|
|
149
|
+
let dropReportingClosed = false;
|
|
150
|
+
let finalDropSent = false;
|
|
151
|
+
let dropPending;
|
|
152
|
+
function flushDroppedLogs() {
|
|
153
|
+
if (dropPending ||
|
|
154
|
+
dropReportingClosed ||
|
|
155
|
+
finishing ||
|
|
156
|
+
controller.signal.aborted ||
|
|
157
|
+
droppedLogs <= reportedDroppedLogs)
|
|
158
|
+
return;
|
|
159
|
+
const id = ++logSequence;
|
|
160
|
+
const count = droppedLogs;
|
|
161
|
+
const timer = setTimeout(() => {
|
|
162
|
+
// Keep the unknown in-flight identity: timeout cannot authorize another queued frame.
|
|
163
|
+
dropReportingClosed = true;
|
|
164
|
+
}, 1000);
|
|
165
|
+
dropPending = { id, count, timer };
|
|
166
|
+
try {
|
|
167
|
+
port.postMessage({
|
|
168
|
+
generation: config.generation,
|
|
169
|
+
runId,
|
|
170
|
+
kind: "log-drop",
|
|
171
|
+
logId: id,
|
|
172
|
+
count,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
clearTimeout(timer);
|
|
177
|
+
dropPending = undefined;
|
|
178
|
+
dropReportingClosed = true;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function scheduleDroppedLogs() {
|
|
182
|
+
if (dropScheduled ||
|
|
183
|
+
dropPending ||
|
|
184
|
+
dropReportingClosed ||
|
|
185
|
+
finishing ||
|
|
186
|
+
controller.signal.aborted)
|
|
187
|
+
return;
|
|
188
|
+
dropScheduled = true;
|
|
189
|
+
queueMicrotask(() => {
|
|
190
|
+
dropScheduled = false;
|
|
191
|
+
flushDroppedLogs();
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
function finishDroppedLogs() {
|
|
195
|
+
if (finalDropSent || droppedLogs <= reportedDroppedLogs)
|
|
196
|
+
return;
|
|
197
|
+
finalDropSent = true;
|
|
198
|
+
// One terminal cumulative snapshot is bounded even when the ordinary acknowledgment is lost.
|
|
199
|
+
try {
|
|
200
|
+
port.postMessage({
|
|
201
|
+
generation: config.generation,
|
|
202
|
+
runId,
|
|
203
|
+
kind: "log-drop",
|
|
204
|
+
logId: ++logSequence,
|
|
205
|
+
count: droppedLogs,
|
|
206
|
+
final: true,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
/* Disconnected tail remains unknown; required outputs never wait for this snapshot. */
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
function settleLogs() {
|
|
214
|
+
if (dropPending)
|
|
215
|
+
clearTimeout(dropPending.timer);
|
|
216
|
+
dropPending = undefined;
|
|
217
|
+
dropReportingClosed = true;
|
|
218
|
+
for (const operation of logPending.values()) {
|
|
219
|
+
clearTimeout(operation.timer);
|
|
220
|
+
operation.resolve({ state: "unavailable", reason: "channel" });
|
|
221
|
+
}
|
|
222
|
+
logPending.clear();
|
|
223
|
+
}
|
|
224
|
+
async function log(value) {
|
|
225
|
+
if (finishing || controller.signal.aborted)
|
|
226
|
+
return { state: "unavailable", reason: "channel" };
|
|
227
|
+
if (logPending.size >= Math.min(config.maxInFlight, 16)) {
|
|
228
|
+
droppedLogs = Math.min(Number.MAX_SAFE_INTEGER, droppedLogs + 1);
|
|
229
|
+
scheduleDroppedLogs();
|
|
230
|
+
return { state: "dropped", reason: "capacity" };
|
|
231
|
+
}
|
|
232
|
+
const id = logSequence + 1;
|
|
233
|
+
return new Promise((resolve, reject) => {
|
|
234
|
+
const timer = setTimeout(() => {
|
|
235
|
+
logPending.delete(id);
|
|
236
|
+
resolve({ state: "unavailable", reason: "timeout" });
|
|
237
|
+
}, 1000);
|
|
238
|
+
logPending.set(id, { resolve, reject, timer });
|
|
239
|
+
try {
|
|
240
|
+
port.postMessage({
|
|
241
|
+
generation: config.generation,
|
|
242
|
+
runId,
|
|
243
|
+
kind: "log",
|
|
244
|
+
logId: id,
|
|
245
|
+
value,
|
|
246
|
+
});
|
|
247
|
+
logSequence = id;
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
clearTimeout(timer);
|
|
251
|
+
logPending.delete(id);
|
|
252
|
+
if (error instanceof Error && error.name === "DataCloneError")
|
|
253
|
+
reject(new TaskError("invalid_payload", "Task payload cannot be cloned for IPC."));
|
|
254
|
+
else
|
|
255
|
+
resolve({ state: "unavailable", reason: "channel" });
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
function request(kind, value) {
|
|
260
|
+
if (pending.size >= config.maxInFlight)
|
|
261
|
+
return Promise.reject(new Error("Task channel capacity exceeded."));
|
|
262
|
+
const id = sequence + 1;
|
|
263
|
+
const operation = new Promise((resolve, reject) => {
|
|
264
|
+
pending.set(id, { resolve, reject });
|
|
265
|
+
});
|
|
266
|
+
try {
|
|
267
|
+
port.postMessage({ generation: config.generation, runId, id, kind, value });
|
|
268
|
+
sequence = id;
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
pending
|
|
272
|
+
.get(id)
|
|
273
|
+
?.reject(error instanceof Error && error.name === "DataCloneError"
|
|
274
|
+
? new TaskError("invalid_payload", "Task payload cannot be cloned for IPC.")
|
|
275
|
+
: error instanceof Error
|
|
276
|
+
? error
|
|
277
|
+
: new Error("Task send failed."));
|
|
278
|
+
pending.delete(id);
|
|
279
|
+
}
|
|
280
|
+
return operation;
|
|
281
|
+
}
|
|
282
|
+
function enqueue(kind, value) {
|
|
283
|
+
if (finishing)
|
|
284
|
+
return Promise.reject(new TaskError("run_finished", "Task is finishing."));
|
|
285
|
+
if (queued >= config.maxInFlight)
|
|
286
|
+
return Promise.reject(new Error("Task channel capacity exceeded."));
|
|
287
|
+
queued++;
|
|
288
|
+
const operation = output
|
|
289
|
+
.then(() => request(kind, value))
|
|
290
|
+
.catch((error) => {
|
|
291
|
+
outputError ??= error;
|
|
292
|
+
throw error;
|
|
293
|
+
})
|
|
294
|
+
.finally(() => {
|
|
295
|
+
queued--;
|
|
296
|
+
});
|
|
297
|
+
output = operation;
|
|
298
|
+
void operation.catch(() => { });
|
|
299
|
+
return operation;
|
|
300
|
+
}
|
|
301
|
+
port.postMessage({
|
|
302
|
+
generation: config.generation,
|
|
303
|
+
kind: "ready",
|
|
304
|
+
value: {
|
|
305
|
+
$schema: declaration.$schema,
|
|
306
|
+
cid: config.bundle.cid,
|
|
307
|
+
inputSchema: declaration.inputSchema,
|
|
308
|
+
resultSchema: declaration.resultSchema,
|
|
309
|
+
messageSchema: declaration.messageSchema,
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
port.on("message", (envelope) => {
|
|
313
|
+
if (!envelope || envelope.generation !== config.generation)
|
|
314
|
+
return;
|
|
315
|
+
if (envelope.kind === "bundle-data") {
|
|
316
|
+
const read = reads.get(envelope.readId);
|
|
317
|
+
if (!read)
|
|
318
|
+
return;
|
|
319
|
+
reads.delete(envelope.readId);
|
|
320
|
+
if (envelope.error)
|
|
321
|
+
read.reject(new TaskError(envelope.error.code, envelope.error.message));
|
|
322
|
+
else
|
|
323
|
+
read.resolve(envelope);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
if (envelope.kind === "log-drop-ack") {
|
|
327
|
+
if (envelope.runId !== runId || !dropPending || envelope.logId !== dropPending.id)
|
|
328
|
+
return;
|
|
329
|
+
const operation = dropPending;
|
|
330
|
+
clearTimeout(operation.timer);
|
|
331
|
+
dropPending = undefined;
|
|
332
|
+
if (envelope.error || envelope.value?.state === "unavailable") {
|
|
333
|
+
dropReportingClosed = true;
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
reportedDroppedLogs = operation.count;
|
|
337
|
+
dropReportingClosed = false;
|
|
338
|
+
scheduleDroppedLogs();
|
|
339
|
+
}
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (envelope.kind === "log-ack") {
|
|
343
|
+
if (envelope.runId !== runId)
|
|
344
|
+
return;
|
|
345
|
+
const operation = logPending.get(envelope.logId);
|
|
346
|
+
if (!operation)
|
|
347
|
+
return;
|
|
348
|
+
logPending.delete(envelope.logId);
|
|
349
|
+
clearTimeout(operation.timer);
|
|
350
|
+
if (envelope.error)
|
|
351
|
+
operation.reject(new TaskError(envelope.error.code, envelope.error.message));
|
|
352
|
+
else
|
|
353
|
+
operation.resolve(envelope.value);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
if (envelope.kind === "ack") {
|
|
357
|
+
const operation = pending.get(envelope.id);
|
|
358
|
+
if (!operation)
|
|
359
|
+
return;
|
|
360
|
+
pending.delete(envelope.id);
|
|
361
|
+
if (envelope.error)
|
|
362
|
+
operation.reject(new TaskError(envelope.error.code, envelope.error.message));
|
|
363
|
+
else
|
|
364
|
+
operation.resolve();
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (envelope.kind === "ping") {
|
|
368
|
+
port.postMessage({ generation: config.generation, kind: "pong" });
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
if (envelope.runId !== runId && envelope.kind !== "run")
|
|
372
|
+
return;
|
|
373
|
+
if (envelope.kind === "cancel") {
|
|
374
|
+
port.postMessage({ generation: config.generation, runId, kind: "stopping" });
|
|
375
|
+
controller.abort();
|
|
376
|
+
settleLogs();
|
|
377
|
+
inbox.close();
|
|
378
|
+
for (const task of tasks.values())
|
|
379
|
+
task.abort();
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (envelope.kind === "withdraw") {
|
|
383
|
+
const task = tasks.get(envelope.taskId) ?? new AbortController();
|
|
384
|
+
tasks.set(envelope.taskId, task);
|
|
385
|
+
task.abort();
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (envelope.kind === "message") {
|
|
389
|
+
const message = envelope.value;
|
|
390
|
+
const task = tasks.get(message.taskId) ?? new AbortController();
|
|
391
|
+
tasks.set(message.taskId, task);
|
|
392
|
+
let confirmed = false;
|
|
393
|
+
const confirm = (state, reason) => {
|
|
394
|
+
if (confirmed || task.signal.aborted)
|
|
395
|
+
return Promise.reject(new Error("Message unavailable."));
|
|
396
|
+
confirmed = true;
|
|
397
|
+
return enqueue("message-confirm", {
|
|
398
|
+
taskId: message.taskId,
|
|
399
|
+
messageId: message.messageId,
|
|
400
|
+
state,
|
|
401
|
+
...(reason === undefined ? {} : { reason }),
|
|
402
|
+
});
|
|
403
|
+
};
|
|
404
|
+
inbox.push(Object.freeze({
|
|
405
|
+
messageId: message.messageId,
|
|
406
|
+
taskId: message.taskId,
|
|
407
|
+
caller: Object.freeze(message.caller),
|
|
408
|
+
signal: task.signal,
|
|
409
|
+
payload: message.payload,
|
|
410
|
+
accept: () => confirm("accepted"),
|
|
411
|
+
reject: (reason) => confirm("rejected", reason),
|
|
412
|
+
}));
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
if (envelope.kind !== "run" || runId !== undefined)
|
|
416
|
+
return;
|
|
417
|
+
runId = envelope.runId;
|
|
418
|
+
const context = Object.freeze({
|
|
419
|
+
runId: envelope.runId,
|
|
420
|
+
...(envelope.identity
|
|
421
|
+
? { generation: envelope.identity.generation, startedAt: envelope.identity.startedAt }
|
|
422
|
+
: {}),
|
|
423
|
+
scope: envelope.scope,
|
|
424
|
+
signal: controller.signal,
|
|
425
|
+
messages: inbox,
|
|
426
|
+
bundle: Object.freeze({ cid: config.bundle.cid, read: readBundle }),
|
|
427
|
+
progress: (value) => enqueue("progress", value),
|
|
428
|
+
checkpoint: (value) => enqueue("checkpoint", value),
|
|
429
|
+
log,
|
|
430
|
+
});
|
|
431
|
+
const reportFailure = async (reason) => {
|
|
432
|
+
const error = reason;
|
|
433
|
+
cleanupUncertain ||=
|
|
434
|
+
error instanceof TaskError &&
|
|
435
|
+
["reclamation_failed", "reclamation_unknown"].includes(error.code);
|
|
436
|
+
const evidence = error instanceof RunFailure ? error.result : undefined;
|
|
437
|
+
const failure = (reason, result) => ({
|
|
438
|
+
code: reason instanceof TaskError ? reason.code.slice(0, 128) : "run_failed",
|
|
439
|
+
message: reason instanceof Error ? reason.message.slice(0, 512) : "Task callback failed.",
|
|
440
|
+
...(result === undefined ? {} : { result }),
|
|
441
|
+
});
|
|
442
|
+
try {
|
|
443
|
+
await request("failed", failure(error, evidence));
|
|
444
|
+
}
|
|
445
|
+
catch (rejected) {
|
|
446
|
+
// A rejected evidence frame is not a terminal fact. Report the host's
|
|
447
|
+
// rejection without the rejected evidence before requesting release.
|
|
448
|
+
await request("failed", failure(rejected));
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
void (async () => {
|
|
452
|
+
try {
|
|
453
|
+
const value = await callback(envelope.input, context);
|
|
454
|
+
finishing = true;
|
|
455
|
+
finishDroppedLogs();
|
|
456
|
+
await output;
|
|
457
|
+
if (outputError !== undefined)
|
|
458
|
+
throw outputError;
|
|
459
|
+
await request("complete", value);
|
|
460
|
+
}
|
|
461
|
+
catch (caught) {
|
|
462
|
+
finishing = true;
|
|
463
|
+
finishDroppedLogs();
|
|
464
|
+
await output.catch(() => { });
|
|
465
|
+
cleanupUncertain ||=
|
|
466
|
+
caught instanceof TaskError &&
|
|
467
|
+
["reclamation_failed", "reclamation_unknown"].includes(caught.code);
|
|
468
|
+
const error = outputError ?? caught;
|
|
469
|
+
if (controller.signal.aborted &&
|
|
470
|
+
error instanceof Error &&
|
|
471
|
+
(error.name === "AbortError" ||
|
|
472
|
+
(error instanceof TaskError && ["ABORT_ERR", "run_canceled"].includes(error.code))))
|
|
473
|
+
return;
|
|
474
|
+
await reportFailure(error);
|
|
475
|
+
}
|
|
476
|
+
})().then(() => {
|
|
477
|
+
inbox.close();
|
|
478
|
+
controller.abort();
|
|
479
|
+
settleLogs();
|
|
480
|
+
for (const task of tasks.values())
|
|
481
|
+
task.abort();
|
|
482
|
+
port.postMessage({
|
|
483
|
+
generation: config.generation,
|
|
484
|
+
runId,
|
|
485
|
+
kind: cleanupUncertain ? "uncertain" : "released",
|
|
486
|
+
});
|
|
487
|
+
port.close();
|
|
488
|
+
}, () => {
|
|
489
|
+
inbox.close();
|
|
490
|
+
controller.abort();
|
|
491
|
+
settleLogs();
|
|
492
|
+
for (const task of tasks.values())
|
|
493
|
+
task.abort();
|
|
494
|
+
port.postMessage({ generation: config.generation, runId, kind: "uncertain" });
|
|
495
|
+
port.close();
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,46 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silvermoon-work/task-sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.0-canary-261109-1",
|
|
4
|
+
"description": "Generation-scoped Task Worker runtime and author callback types.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=22.13.0"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@silvermoon-work/task-protocol": "0.1.0-canary-261109-2"
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"repository": {
|
|
31
|
+
"type": "git",
|
|
32
|
+
"url": "git+https://github.com/silvermoon-work/task-engine.git",
|
|
33
|
+
"directory": "packages/task-sdk"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://github.com/silvermoon-work/task-engine/tree/main/packages/task-sdk#readme",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/silvermoon-work/task-engine/issues"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc -b",
|
|
41
|
+
"clean": "node -e \"for (const path of ['dist', '.cache']) require('node:fs').rmSync(path, { recursive: true, force: true })\"",
|
|
42
|
+
"lint": "biome lint .",
|
|
43
|
+
"test": "tsx --test \"test/*.test.ts\"",
|
|
44
|
+
"typecheck": "tsc -b --pretty false"
|
|
45
|
+
}
|
|
6
46
|
}
|