@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 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
- # Temporary Holding Version
1
+ # @silvermoon-work/task-sdk
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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"}
@@ -0,0 +1,3 @@
1
+ /** Replaced by the Bundle builder, never supplied by author code or workerData. */
2
+ export const binding = undefined;
3
+ //# sourceMappingURL=binding.js.map
@@ -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"}
@@ -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.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
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
  }