@potential-guide/task-protocol 0.0.0-stage → 0.1.0-rc.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -2
  3. package/dist/bundle-files.d.ts +9 -0
  4. package/dist/bundle-files.d.ts.map +1 -0
  5. package/dist/bundle-files.js +93 -0
  6. package/dist/bundle-files.js.map +1 -0
  7. package/dist/bundle-paths.d.ts +15 -0
  8. package/dist/bundle-paths.d.ts.map +1 -0
  9. package/dist/bundle-paths.js +24 -0
  10. package/dist/bundle-paths.js.map +1 -0
  11. package/dist/bundle-reference.d.ts +9 -0
  12. package/dist/bundle-reference.d.ts.map +1 -0
  13. package/dist/bundle-reference.js +82 -0
  14. package/dist/bundle-reference.js.map +1 -0
  15. package/dist/bundle.d.ts +80 -0
  16. package/dist/bundle.d.ts.map +1 -0
  17. package/dist/bundle.js +342 -0
  18. package/dist/bundle.js.map +1 -0
  19. package/dist/index.d.ts +11 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +11 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/json.d.ts +22 -0
  24. package/dist/json.d.ts.map +1 -0
  25. package/dist/json.js +118 -0
  26. package/dist/json.js.map +1 -0
  27. package/dist/logs.d.ts +84 -0
  28. package/dist/logs.d.ts.map +1 -0
  29. package/dist/logs.js +81 -0
  30. package/dist/logs.js.map +1 -0
  31. package/dist/presentation.d.ts +11 -0
  32. package/dist/presentation.d.ts.map +1 -0
  33. package/dist/presentation.js +32 -0
  34. package/dist/presentation.js.map +1 -0
  35. package/dist/projection.d.ts +21 -0
  36. package/dist/projection.d.ts.map +1 -0
  37. package/dist/projection.js +619 -0
  38. package/dist/projection.js.map +1 -0
  39. package/dist/run.d.ts +82 -0
  40. package/dist/run.d.ts.map +1 -0
  41. package/dist/run.js +24 -0
  42. package/dist/run.js.map +1 -0
  43. package/dist/schema-runtime.d.ts +29 -0
  44. package/dist/schema-runtime.d.ts.map +1 -0
  45. package/dist/schema-runtime.js +340 -0
  46. package/dist/schema-runtime.js.map +1 -0
  47. package/dist/schema.d.ts +8 -0
  48. package/dist/schema.d.ts.map +1 -0
  49. package/dist/schema.js +69 -0
  50. package/dist/schema.js.map +1 -0
  51. package/dist/task-schema-uri.d.ts +2 -0
  52. package/dist/task-schema-uri.d.ts.map +1 -0
  53. package/dist/task-schema-uri.js +2 -0
  54. package/dist/task-schema-uri.js.map +1 -0
  55. package/dist/types.d.ts +563 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/worker.d.ts +6 -0
  60. package/dist/worker.d.ts.map +1 -0
  61. package/dist/worker.js +6 -0
  62. package/dist/worker.js.map +1 -0
  63. package/package.json +52 -3
package/dist/bundle.js ADDED
@@ -0,0 +1,342 @@
1
+ import { Ajv2020 } from "ajv/dist/2020.js";
2
+ import { isAlias, isMap, isScalar, isSeq, parseDocument } from "yaml";
3
+ import { isTaskBundlePath, taskBundleLimits } from "./bundle-paths.js";
4
+ import { canonical, fail, json, TaskError } from "./json.js";
5
+ import { compileInputSchema, compileJsonSchema, } from "./schema.js";
6
+ import { taskSchemaUri } from "./task-schema-uri.js";
7
+ export { taskSchemaUri } from "./task-schema-uri.js";
8
+ export const taskBundleSchema = {
9
+ $id: taskSchemaUri,
10
+ $comment: "IPFS UnixFS directory root CID identity. One CommonJS Worker per Run; generation-scoped business messages and independent log/log-ack, bounded cumulative log-drop/log-drop-ack diagnostics.",
11
+ type: "object",
12
+ additionalProperties: false,
13
+ required: [
14
+ "$schema",
15
+ "name",
16
+ "runtime",
17
+ "entry",
18
+ "include",
19
+ "inputSchema",
20
+ "resultSchema",
21
+ "messageSchema",
22
+ ],
23
+ properties: {
24
+ $schema: { const: taskSchemaUri },
25
+ name: {
26
+ type: "string",
27
+ minLength: 1,
28
+ pattern: "^[^\\s\\u0000-\\u001f\\u007f-\\u009f](?:(?:[^\\s\\u0000-\\u001f\\u007f-\\u009f]| )*[^\\s\\u0000-\\u001f\\u007f-\\u009f])?$",
29
+ },
30
+ runtime: {
31
+ type: "object",
32
+ additionalProperties: false,
33
+ required: ["type", "minVersion"],
34
+ properties: {
35
+ type: { const: "node" },
36
+ minVersion: {
37
+ type: "string",
38
+ pattern: "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$",
39
+ },
40
+ },
41
+ },
42
+ entry: { const: "worker.cjs" },
43
+ include: {
44
+ type: "array",
45
+ minItems: 2,
46
+ maxItems: taskBundleLimits.files,
47
+ uniqueItems: true,
48
+ items: {
49
+ type: "string",
50
+ pattern: "^(?:task\\.yaml|worker\\.cjs|(?:schemas|resources)/[^\\\\:*?<>|\\u0000-\\u001f]+)$",
51
+ },
52
+ },
53
+ inputSchema: { type: "object" },
54
+ resultSchema: { type: ["object", "boolean"] },
55
+ messageSchema: { type: ["object", "boolean"] },
56
+ },
57
+ };
58
+ export * from "./bundle-reference.js";
59
+ const validator = new Ajv2020({ strict: true, allowUnionTypes: true }).compile(taskBundleSchema);
60
+ export function parseTaskBundleYaml(bytes) {
61
+ if (bytes.byteLength > 64 * 1024)
62
+ fail("invalid_bundle", "YAML exceeds bounds.");
63
+ try {
64
+ const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
65
+ const document = parseDocument(text, { schema: "core", uniqueKeys: true, strict: true });
66
+ if (document.errors.length ||
67
+ document.warnings.length ||
68
+ document.directives?.yaml.explicit ||
69
+ (document.directives?.tags &&
70
+ Object.keys(document.directives.tags).some((key) => key !== "!!")))
71
+ fail("invalid_bundle", "Invalid JSON-subset YAML.");
72
+ function inspect(node, depth) {
73
+ if (depth > 32 || isAlias(node))
74
+ fail("invalid_bundle", "YAML aliases or excessive depth.");
75
+ if (isMap(node) || isSeq(node) || isScalar(node)) {
76
+ if (node.tag)
77
+ fail("invalid_bundle", "YAML tags are forbidden.");
78
+ if (isMap(node))
79
+ for (const pair of node.items) {
80
+ if (!isScalar(pair.key) || typeof pair.key.value !== "string")
81
+ fail("invalid_bundle", "YAML keys must be strings.");
82
+ inspect(pair.value, depth + 1);
83
+ }
84
+ if (isSeq(node))
85
+ for (const child of node.items)
86
+ inspect(child, depth + 1);
87
+ }
88
+ }
89
+ inspect(document.contents, 0);
90
+ return json(document.toJS({ maxAliasCount: 0 }), 1_048_576);
91
+ }
92
+ catch (error) {
93
+ if (error instanceof TaskError && error.code === "invalid_bundle")
94
+ throw error;
95
+ fail("invalid_bundle", "YAML must contain valid UTF-8 finite JSON.");
96
+ }
97
+ }
98
+ export function validateTaskBundle(value) {
99
+ const parsed = json(value, 1_048_576);
100
+ if (parsed &&
101
+ typeof parsed === "object" &&
102
+ !Array.isArray(parsed) &&
103
+ !Object.hasOwn(parsed, "include"))
104
+ fail("invalid_bundle", "Task Bundle has no exact include manifest. Rebuild with the current Task Bundle authoring tools and use the new CID.");
105
+ if (!validator(parsed))
106
+ fail("invalid_bundle", "Invalid task.yaml declaration.");
107
+ const declaration = parsed;
108
+ const folded = new Set();
109
+ const spellings = new Map();
110
+ for (const path of declaration.include) {
111
+ if (!isTaskBundlePath(path) || folded.has(path.toLowerCase()))
112
+ fail("invalid_bundle", "Task Bundle include requires unique, portable exact file paths.");
113
+ folded.add(path.toLowerCase());
114
+ let prefix = "";
115
+ for (const part of path.split("/")) {
116
+ prefix = prefix ? `${prefix}/${part}` : part;
117
+ const previous = spellings.get(prefix.toLowerCase());
118
+ if (previous !== undefined && previous !== prefix)
119
+ fail("invalid_bundle", "Task Bundle include has ambiguous path casing.");
120
+ spellings.set(prefix.toLowerCase(), prefix);
121
+ }
122
+ }
123
+ for (const path of declaration.include)
124
+ if (declaration.include.some((parent) => path.startsWith(`${parent}/`)))
125
+ fail("invalid_bundle", "Task Bundle include has a file/directory collision.");
126
+ if (!folded.has("task.yaml") || !folded.has("worker.cjs"))
127
+ fail("invalid_bundle", "Task Bundle include must contain task.yaml and worker.cjs.");
128
+ return declaration;
129
+ }
130
+ export function validateTaskBundleFiles(declaration, paths) {
131
+ const actual = new Set(paths);
132
+ if (actual.size !== declaration.include.length ||
133
+ declaration.include.some((path) => !actual.has(path)))
134
+ fail("invalid_bundle", "Task Bundle has missing or undeclared files; rebuild the complete artifact.");
135
+ }
136
+ const objectSchema = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
137
+ const schemaMaps = new Set([
138
+ "$defs",
139
+ "definitions",
140
+ "properties",
141
+ "patternProperties",
142
+ "dependentSchemas",
143
+ ]);
144
+ const schemaSingles = new Set([
145
+ "additionalProperties",
146
+ "unevaluatedProperties",
147
+ "propertyNames",
148
+ "items",
149
+ "unevaluatedItems",
150
+ "contains",
151
+ "not",
152
+ "if",
153
+ "then",
154
+ "else",
155
+ "contentSchema",
156
+ ]);
157
+ const schemaArrays = new Set(["allOf", "anyOf", "oneOf", "prefixItems"]);
158
+ /** Resolve only supplied resources. No network loader or ambient Schema registry exists. */
159
+ export function resolveBundleSchemas(declaration, resources, resourcePaths) {
160
+ if (resourcePaths &&
161
+ (resourcePaths.length !== resources.length ||
162
+ new Set(resourcePaths).size !== resourcePaths.length ||
163
+ resourcePaths.some((path) => !path.startsWith("schemas/") || !declaration.include.includes(path))))
164
+ fail("invalid_schema", "Schema resource paths must match the exact Bundle manifest.");
165
+ const registry = new Map();
166
+ const locations = new WeakMap();
167
+ const rootBase = "https://task.invalid/declaration";
168
+ let nodes = 0;
169
+ function absolute(value, base) {
170
+ try {
171
+ return new URL(value, base).href;
172
+ }
173
+ catch {
174
+ return fail("invalid_schema", "Invalid Schema URI.");
175
+ }
176
+ }
177
+ function add(id, node, base) {
178
+ const existing = registry.get(id);
179
+ if (existing && existing.node !== node) {
180
+ if (canonical(existing.node) !== canonical(node))
181
+ fail("invalid_schema", "Conflicting Schema resource identifier.");
182
+ return;
183
+ }
184
+ registry.set(id, { node, base });
185
+ }
186
+ function children(node, visit) {
187
+ for (const [key, value] of Object.entries(node)) {
188
+ if (schemaMaps.has(key) && objectSchema(value))
189
+ for (const child of Object.values(value)) {
190
+ if (typeof child === "boolean" || objectSchema(child))
191
+ visit(child);
192
+ }
193
+ if (schemaSingles.has(key) && (typeof value === "boolean" || objectSchema(value)))
194
+ visit(value);
195
+ if (schemaArrays.has(key) && Array.isArray(value))
196
+ for (const child of value)
197
+ if (typeof child === "boolean" || objectSchema(child))
198
+ visit(child);
199
+ }
200
+ }
201
+ function collect(node, base) {
202
+ if (++nodes > 4096)
203
+ fail("invalid_schema", "Schema resource budget exceeded.");
204
+ if (typeof node === "boolean")
205
+ return;
206
+ if (node.$schema !== undefined &&
207
+ node.$schema !== "https://json-schema.org/draft/2020-12/schema")
208
+ fail("invalid_schema", "Only JSON Schema Draft 2020-12 is supported.");
209
+ if (node.$id !== undefined) {
210
+ if (typeof node.$id !== "string")
211
+ fail("invalid_schema", "Schema $id must be a URI.");
212
+ base = absolute(node.$id, base);
213
+ if (new URL(base).hash)
214
+ fail("invalid_schema", "Schema $id must not contain a fragment.");
215
+ add(base, node, base);
216
+ }
217
+ locations.set(node, base);
218
+ if (node.$anchor !== undefined) {
219
+ if (typeof node.$anchor !== "string" || !/^[A-Za-z_][-A-Za-z0-9._]*$/.test(node.$anchor))
220
+ fail("invalid_schema", "Invalid Schema anchor.");
221
+ add(`${base}#${node.$anchor}`, node, base);
222
+ }
223
+ children(node, (child) => collect(child, base));
224
+ }
225
+ for (const resource of resources) {
226
+ if (!objectSchema(resource) || typeof resource.$id !== "string")
227
+ fail("invalid_schema", "Shared Schema requires an absolute $id.");
228
+ let id;
229
+ try {
230
+ id = new URL(resource.$id).href;
231
+ }
232
+ catch {
233
+ return fail("invalid_schema", "Shared Schema requires an absolute $id.");
234
+ }
235
+ collect(resource, id);
236
+ }
237
+ resourcePaths?.forEach((path, index) => {
238
+ const resource = resources[index];
239
+ add(absolute(path, `${rootBase}/`), resource, locations.get(resource));
240
+ });
241
+ const roots = [declaration.inputSchema, declaration.resultSchema, declaration.messageSchema];
242
+ roots.forEach((root, index) => {
243
+ const base = `${rootBase}/${index}`;
244
+ add(base, root, base);
245
+ collect(root, base);
246
+ });
247
+ let expansions = 0;
248
+ function expand(node, base, ancestors) {
249
+ if (++expansions > 16_384 || ancestors.size > 64)
250
+ fail("invalid_schema", "Schema reference expansion budget exceeded.");
251
+ if (typeof node === "boolean")
252
+ return node;
253
+ if (ancestors.has(node))
254
+ fail("invalid_schema", "Cyclic Schema references are unsupported.");
255
+ base = locations.get(node) ?? base;
256
+ const path = new Set(ancestors).add(node);
257
+ const result = {};
258
+ for (const [key, value] of Object.entries(node)) {
259
+ if (["$id", "$anchor", "$ref"].includes(key))
260
+ continue;
261
+ if (schemaMaps.has(key) && objectSchema(value)) {
262
+ result[key] = Object.fromEntries(Object.entries(value).map(([name, child]) => [
263
+ name,
264
+ typeof child === "boolean" || objectSchema(child) ? expand(child, base, path) : child,
265
+ ]));
266
+ }
267
+ else if (schemaSingles.has(key) && (typeof value === "boolean" || objectSchema(value))) {
268
+ result[key] = expand(value, base, path);
269
+ }
270
+ else if (schemaArrays.has(key) && Array.isArray(value)) {
271
+ result[key] = value.map((child) => typeof child === "boolean" || objectSchema(child) ? expand(child, base, path) : child);
272
+ }
273
+ else
274
+ result[key] = value;
275
+ }
276
+ if (node.$ref === undefined)
277
+ return result;
278
+ if (typeof node.$ref !== "string")
279
+ fail("invalid_schema", "Schema $ref must be a URI.");
280
+ const uri = absolute(node.$ref, base);
281
+ let target = registry.get(uri);
282
+ if (!target) {
283
+ const url = new URL(uri);
284
+ let fragment;
285
+ try {
286
+ fragment = decodeURIComponent(url.hash.slice(1));
287
+ }
288
+ catch {
289
+ return fail("invalid_schema", "Invalid Schema URI fragment encoding.");
290
+ }
291
+ url.hash = "";
292
+ const resource = registry.get(url.href);
293
+ if (!resource)
294
+ fail("invalid_schema", "Missing offline Schema resource.");
295
+ if (fragment && !fragment.startsWith("/")) {
296
+ target = registry.get(`${resource.base}#${fragment}`);
297
+ if (!target)
298
+ fail("invalid_schema", "Missing Schema anchor.");
299
+ }
300
+ else {
301
+ let selected = resource.node;
302
+ for (const part of fragment.split("/").slice(1)) {
303
+ if (/~(?:[^01]|$)/.test(part))
304
+ fail("invalid_schema", "Invalid Schema JSON Pointer.");
305
+ const key = part.replaceAll("~1", "/").replaceAll("~0", "~");
306
+ if ((!objectSchema(selected) && !Array.isArray(selected)) ||
307
+ !Object.hasOwn(selected, key))
308
+ fail("invalid_schema", "Missing Schema JSON Pointer.");
309
+ selected = selected[key];
310
+ }
311
+ if (typeof selected !== "boolean" && !objectSchema(selected))
312
+ fail("invalid_schema", "Reference does not select a Schema.");
313
+ target = { node: selected, base: resource.base };
314
+ }
315
+ }
316
+ const resolved = expand(target.node, target.base, path);
317
+ return Object.keys(result).length
318
+ ? { ...result, allOf: [...(Array.isArray(result.allOf) ? result.allOf : []), resolved] }
319
+ : resolved;
320
+ }
321
+ const input = expand(roots[0], `${rootBase}/0`, new Set());
322
+ function declaresObject(schema) {
323
+ return (typeof schema !== "boolean" &&
324
+ (schema.type === "object" ||
325
+ (Array.isArray(schema.allOf) &&
326
+ schema.allOf.some((child) => (typeof child === "boolean" || objectSchema(child)) && declaresObject(child)))));
327
+ }
328
+ if (typeof input !== "boolean" && input.type === undefined && declaresObject(input))
329
+ input.type = "object";
330
+ const result = expand(roots[1], `${rootBase}/1`, new Set());
331
+ const message = expand(roots[2], `${rootBase}/2`, new Set());
332
+ compileInputSchema(input);
333
+ compileJsonSchema(result);
334
+ compileJsonSchema(message);
335
+ return {
336
+ ...declaration,
337
+ inputSchema: input,
338
+ resultSchema: result,
339
+ messageSchema: message,
340
+ };
341
+ }
342
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from "./bundle.js";
2
+ export * from "./bundle-files.js";
3
+ export * from "./bundle-paths.js";
4
+ export * from "./json.js";
5
+ export * from "./logs.js";
6
+ export * from "./presentation.js";
7
+ export * from "./projection.js";
8
+ export * from "./run.js";
9
+ export * from "./schema.js";
10
+ export * from "./types.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export * from "./bundle.js";
2
+ export * from "./bundle-files.js";
3
+ export * from "./bundle-paths.js";
4
+ export * from "./json.js";
5
+ export * from "./logs.js";
6
+ export * from "./presentation.js";
7
+ export * from "./projection.js";
8
+ export * from "./run.js";
9
+ export * from "./schema.js";
10
+ export * from "./types.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
package/dist/json.d.ts ADDED
@@ -0,0 +1,22 @@
1
+ export type Json = null | boolean | number | string | Json[] | {
2
+ [key: string]: Json;
3
+ };
4
+ export type JsonObject = {
5
+ [key: string]: Json;
6
+ };
7
+ export declare class TaskError extends Error {
8
+ readonly code: string;
9
+ readonly details?: Json | undefined;
10
+ constructor(code: string, message: string, details?: Json | undefined);
11
+ }
12
+ export declare function fail(code: string, message: string): never;
13
+ /** Validate descriptors before reading values: neither getters nor toJSON run here. */
14
+ export declare function json(value: unknown, maxBytes?: number): Json;
15
+ export declare function object(value: unknown): JsonObject;
16
+ export declare function canonical(value: Json): string;
17
+ export declare function freeze<T>(value: T): T;
18
+ export declare function timestamp(value: unknown): string;
19
+ export declare function at(value: number): string;
20
+ export declare function positive(value: unknown, name: string): number;
21
+ export declare function ulid(value: unknown): string;
22
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AACvF,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAEjD,qBAAa,SAAU,SAAQ,KAAK;aAEhB,IAAI,EAAE,MAAM;aAEZ,OAAO,CAAC,EAAE,IAAI;gBAFd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,IAAI,YAAA;CAKjC;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAEzD;AAED,uFAAuF;AACvF,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAS,GAAG,IAAI,CA8C5D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAKjD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAQ7C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAMrC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAShD;AAED,wBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIxC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAI3C"}
package/dist/json.js ADDED
@@ -0,0 +1,118 @@
1
+ export class TaskError extends Error {
2
+ code;
3
+ details;
4
+ constructor(code, message, details) {
5
+ super(message);
6
+ this.code = code;
7
+ this.details = details;
8
+ this.name = "TaskError";
9
+ }
10
+ }
11
+ export function fail(code, message) {
12
+ throw new TaskError(code, message);
13
+ }
14
+ /** Validate descriptors before reading values: neither getters nor toJSON run here. */
15
+ export function json(value, maxBytes = 65_536) {
16
+ const ancestors = new Set();
17
+ let nodes = 0;
18
+ function visit(input, depth) {
19
+ if (++nodes > maxBytes || depth > 64)
20
+ fail("invalid_payload", "JSON structure exceeds limit.");
21
+ if (input === null || typeof input === "string" || typeof input === "boolean")
22
+ return input;
23
+ if (typeof input === "number" && Number.isFinite(input))
24
+ return input;
25
+ if (typeof input !== "object" || input === null)
26
+ fail("invalid_payload", "Only finite JSON values are accepted.");
27
+ if (ancestors.has(input))
28
+ fail("invalid_payload", "Cyclic JSON is not accepted.");
29
+ const array = Array.isArray(input);
30
+ if (Object.getPrototypeOf(input) !== (array ? Array.prototype : Object.prototype))
31
+ fail("invalid_payload", "Custom prototypes are not accepted.");
32
+ ancestors.add(input);
33
+ const descriptors = Object.getOwnPropertyDescriptors(input);
34
+ const keys = Reflect.ownKeys(descriptors);
35
+ const output = {};
36
+ const items = [];
37
+ if (array && keys.length !== input.length + 1)
38
+ fail("invalid_payload", "Sparse or decorated arrays are not accepted.");
39
+ for (const key of keys) {
40
+ if (typeof key !== "string")
41
+ fail("invalid_payload", "Symbol keys are not accepted.");
42
+ const descriptor = descriptors[key];
43
+ if (!descriptor || !("value" in descriptor))
44
+ fail("invalid_payload", "Accessors are not accepted.");
45
+ if (array && key === "length")
46
+ continue;
47
+ if (!descriptor.enumerable)
48
+ fail("invalid_payload", "Hidden properties are not accepted.");
49
+ if (array) {
50
+ if (key !== String(items.length))
51
+ fail("invalid_payload", "Invalid array keys.");
52
+ items.push(visit(descriptor.value, depth + 1));
53
+ }
54
+ else {
55
+ Object.defineProperty(output, key, {
56
+ value: visit(descriptor.value, depth + 1),
57
+ enumerable: true,
58
+ writable: true,
59
+ configurable: true,
60
+ });
61
+ }
62
+ }
63
+ ancestors.delete(input);
64
+ return array ? items : output;
65
+ }
66
+ const result = visit(value, 0);
67
+ if (new TextEncoder().encode(JSON.stringify(result)).byteLength > maxBytes)
68
+ fail("payload_too_large", "JSON payload exceeds byte limit.");
69
+ return result;
70
+ }
71
+ export function object(value) {
72
+ const parsed = json(value);
73
+ if (!parsed || Array.isArray(parsed) || typeof parsed !== "object")
74
+ fail("invalid_request", "Expected an object.");
75
+ return parsed;
76
+ }
77
+ export function canonical(value) {
78
+ if (Array.isArray(value))
79
+ return `[${value.map(canonical).join(",")}]`;
80
+ if (value && typeof value === "object")
81
+ return `{${Object.keys(value)
82
+ .sort()
83
+ .map((key) => `${JSON.stringify(key)}:${canonical(value[key] ?? null)}`)
84
+ .join(",")}}`;
85
+ return JSON.stringify(value);
86
+ }
87
+ export function freeze(value) {
88
+ if (value && typeof value === "object") {
89
+ for (const child of Object.values(value))
90
+ freeze(child);
91
+ Object.freeze(value);
92
+ }
93
+ return value;
94
+ }
95
+ export function timestamp(value) {
96
+ if (typeof value !== "string" ||
97
+ !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(value) ||
98
+ !Number.isFinite(Date.parse(value)) ||
99
+ new Date(value).toISOString() !== value)
100
+ fail("invalid_request", "Expected canonical UTC timestamp.");
101
+ return value;
102
+ }
103
+ export function at(value) {
104
+ if (!Number.isSafeInteger(value) || value < -62_167_219_200_000 || value > 253_402_300_799_999)
105
+ fail("invalid_request", "Time arithmetic overflow.");
106
+ return new Date(value).toISOString();
107
+ }
108
+ export function positive(value, name) {
109
+ if (typeof value !== "number" || !Number.isSafeInteger(value) || value <= 0)
110
+ fail("invalid_request", `${name} must be a positive safe integer.`);
111
+ return value;
112
+ }
113
+ export function ulid(value) {
114
+ if (typeof value !== "string" || !/^[0-7][0-9A-HJKMNP-TV-Z]{25}$/.test(value))
115
+ fail("invalid_request", "Expected canonical ULID.");
116
+ return value;
117
+ }
118
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"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"}
package/dist/logs.d.ts ADDED
@@ -0,0 +1,84 @@
1
+ import { type JsonObject } from "./json.js";
2
+ export type RunLogLevel = "debug" | "info" | "warn" | "error";
3
+ export interface RunLogInput {
4
+ level: RunLogLevel;
5
+ message: string;
6
+ fields?: JsonObject;
7
+ }
8
+ export type RunLogReceipt = {
9
+ state: "stored";
10
+ sequence: number;
11
+ } | {
12
+ state: "dropped";
13
+ reason: "capacity" | "entry_too_large";
14
+ } | {
15
+ state: "unavailable";
16
+ reason: "disabled" | "storage" | "channel" | "timeout" | "unsupported";
17
+ };
18
+ export interface RunLogEntry extends RunLogInput {
19
+ runId: string;
20
+ sequence: number;
21
+ receivedAt: string;
22
+ }
23
+ export interface RunLogState {
24
+ availability: "available" | "unsupported" | "disabled" | "truncated" | "expired" | "unavailable";
25
+ completeness: "open" | "complete" | "unknown";
26
+ dropped: number;
27
+ lastSequence: number;
28
+ firstSequence: number;
29
+ reason?: string;
30
+ }
31
+ export interface RunLogPage {
32
+ limits: Readonly<RunLogLimits>;
33
+ runId: string;
34
+ entries: RunLogEntry[];
35
+ state: RunLogState;
36
+ nextSequence: number;
37
+ hasMore: boolean;
38
+ gap: boolean;
39
+ }
40
+ export interface RunLogQuery {
41
+ afterSequence?: number;
42
+ limit?: number;
43
+ }
44
+ export interface RunLogSubscription {
45
+ readonly initial: RunLogPage;
46
+ pull(): RunLogPage;
47
+ close(): void;
48
+ }
49
+ export interface StoredRunLogs {
50
+ runId: string;
51
+ updatedAt: number;
52
+ bytes: number;
53
+ entries: RunLogEntry[];
54
+ state: RunLogState;
55
+ }
56
+ /** Separate from lifecycle facts, with the same single-host lease. */
57
+ export interface RunLogStorage {
58
+ markRunLogsUnavailable(owner: string, runId: string, now: number): void;
59
+ readRunLogs(runId: string): StoredRunLogs | undefined;
60
+ writeRunLogs(owner: string, value: StoredRunLogs): void;
61
+ pruneRunLogs(owner: string, before: number, maxBytes: number, maxRuns: number): void;
62
+ }
63
+ export interface RunLogLimits {
64
+ enabled: boolean;
65
+ entryBytes: number;
66
+ runBytes: number;
67
+ runEntries: number;
68
+ totalBytes: number;
69
+ maxRuns: number;
70
+ retentionMs: number;
71
+ pageSize: number;
72
+ maxSubscriptions: number;
73
+ }
74
+ export declare const defaultRunLogLimits: Readonly<RunLogLimits>;
75
+ export declare function validateRunLog(value: unknown): RunLogInput;
76
+ /** Bounded test/in-process backend; persistent hosts should use SQLite. */
77
+ export declare class MemoryRunLogStorage implements RunLogStorage {
78
+ private readonly records;
79
+ readRunLogs(id: string): StoredRunLogs | undefined;
80
+ writeRunLogs(_owner: string, value: StoredRunLogs): void;
81
+ markRunLogsUnavailable(owner: string, id: string, now: number): void;
82
+ pruneRunLogs(_owner: string, before: number, maxBytes: number, maxRuns: number): void;
83
+ }
84
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../src/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,UAAU,EAAQ,MAAM,WAAW,CAAC;AAExD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAC9D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AACD,MAAM,MAAM,aAAa,GACrB;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,UAAU,GAAG,iBAAiB,CAAA;CAAE,GAC5D;IACE,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;CACxE,CAAC;AACN,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;IACjG,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;CACd;AACD,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,IAAI,IAAI,UAAU,CAAC;IACnB,KAAK,IAAI,IAAI,CAAC;CACf;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,CAAC;CACpB;AACD,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;IACtD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACxD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACtF;AACD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AACD,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,YAAY,CAUrD,CAAC;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAwB1D;AAED,2EAA2E;AAC3E,qBAAa,mBAAoB,YAAW,aAAa;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIlD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAGxD,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAkBpE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;CActF"}