@opendatalabs/personal-server-ts-core 1.13.1 → 1.15.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 (40) hide show
  1. package/dist/api/index.d.ts +8 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +8 -1
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/derivatives/answer-shape.d.ts +83 -0
  6. package/dist/derivatives/answer-shape.d.ts.map +1 -0
  7. package/dist/derivatives/answer-shape.js +320 -0
  8. package/dist/derivatives/answer-shape.js.map +1 -0
  9. package/dist/derivatives/api.d.ts +11 -2
  10. package/dist/derivatives/api.d.ts.map +1 -1
  11. package/dist/derivatives/api.js +114 -1
  12. package/dist/derivatives/api.js.map +1 -1
  13. package/dist/derivatives/compute.d.ts +6 -0
  14. package/dist/derivatives/compute.d.ts.map +1 -1
  15. package/dist/derivatives/compute.js +106 -10
  16. package/dist/derivatives/compute.js.map +1 -1
  17. package/dist/derivatives/index.d.ts +3 -2
  18. package/dist/derivatives/index.d.ts.map +1 -1
  19. package/dist/derivatives/index.js +2 -1
  20. package/dist/derivatives/index.js.map +1 -1
  21. package/dist/derivatives/prompt.d.ts +35 -0
  22. package/dist/derivatives/prompt.d.ts.map +1 -1
  23. package/dist/derivatives/prompt.js +96 -8
  24. package/dist/derivatives/prompt.js.map +1 -1
  25. package/dist/derivatives/registration.d.ts +2 -0
  26. package/dist/derivatives/registration.d.ts.map +1 -1
  27. package/dist/derivatives/registration.js +8 -0
  28. package/dist/derivatives/registration.js.map +1 -1
  29. package/dist/derivatives/scheduler.d.ts +28 -2
  30. package/dist/derivatives/scheduler.d.ts.map +1 -1
  31. package/dist/derivatives/scheduler.js +106 -9
  32. package/dist/derivatives/scheduler.js.map +1 -1
  33. package/dist/derivatives/store.d.ts.map +1 -1
  34. package/dist/derivatives/store.js +4 -0
  35. package/dist/derivatives/store.js.map +1 -1
  36. package/dist/derivatives/types.d.ts +20 -1
  37. package/dist/derivatives/types.d.ts.map +1 -1
  38. package/dist/derivatives/types.js +3 -0
  39. package/dist/derivatives/types.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,320 @@
1
+ /**
2
+ * The declared shape of a question's answer.
3
+ *
4
+ * Without one an answer is free text, so a builder can ask for anything the
5
+ * prompt saw and get it back verbatim in a string field. A registration may
6
+ * instead declare, up front, the fields its answer is made of; the compute
7
+ * step then instructs the model to answer in that shape and validates the
8
+ * reply against it, so a 1-5 score is a number between 1 and 5 and not a
9
+ * field the raw conversations can be poured into. The declaration is part
10
+ * of what the owner approves, which is also what makes a later recompute
11
+ * the same promise: a new version matches the shape the old one did.
12
+ *
13
+ * The grammar is deliberately tiny and flat: a list of named fields with a
14
+ * primitive type and a couple of constraints, no nesting and no free-text
15
+ * keys. Everything a builder can put in it is bounded (see the limits
16
+ * below), so a shape cannot be used to smuggle a second prompt past the
17
+ * 8000-character cap on the question text.
18
+ */
19
+ import { z } from "zod";
20
+ import { DerivativeQuestionInvalidError } from "../errors/catalog.js";
21
+ export const MAX_ANSWER_SHAPE_FIELDS = 16;
22
+ export const MAX_ANSWER_FIELD_NAME_CHARS = 64;
23
+ /** Also the cap on a declared `maxLength`, and the default when none is. */
24
+ export const MAX_ANSWER_STRING_CHARS = 4_000;
25
+ export const MAX_ANSWER_ENUM_VALUES = 32;
26
+ export const MAX_ANSWER_ENUM_VALUE_CHARS = 64;
27
+ /** Field names are identifiers: they go into the prompt verbatim. */
28
+ const FIELD_NAME = /^[A-Za-z][A-Za-z0-9_]*$/;
29
+ const FIELD_TYPES = [
30
+ "string",
31
+ "number",
32
+ "integer",
33
+ "boolean",
34
+ "enum",
35
+ ];
36
+ /** Keys accepted on a field, by type. Anything else is refused. */
37
+ const KEYS_BY_TYPE = {
38
+ string: ["name", "type", "required", "maxLength"],
39
+ number: ["name", "type", "required", "min", "max"],
40
+ integer: ["name", "type", "required", "min", "max"],
41
+ boolean: ["name", "type", "required"],
42
+ enum: ["name", "type", "required", "values"],
43
+ };
44
+ function isRecord(value) {
45
+ return value !== null && typeof value === "object" && !Array.isArray(value);
46
+ }
47
+ function invalid(message, details) {
48
+ throw new DerivativeQuestionInvalidError(message, {
49
+ field: "answerShape",
50
+ ...details,
51
+ });
52
+ }
53
+ function parseFieldName(value, index) {
54
+ if (typeof value !== "string" || value === "") {
55
+ invalid(`answerShape.fields[${index}].name must be a non-empty string`, {
56
+ index,
57
+ });
58
+ }
59
+ if (value.length > MAX_ANSWER_FIELD_NAME_CHARS) {
60
+ invalid(`answerShape.fields[${index}].name is ${value.length} characters; the maximum is ${MAX_ANSWER_FIELD_NAME_CHARS}`, { index, max: MAX_ANSWER_FIELD_NAME_CHARS });
61
+ }
62
+ if (!FIELD_NAME.test(value)) {
63
+ invalid(`answerShape.fields[${index}].name must start with a letter and hold only letters, digits and underscores`, { index });
64
+ }
65
+ return value;
66
+ }
67
+ function parseBound(value, index, key, integer) {
68
+ if (typeof value !== "number" || !Number.isFinite(value)) {
69
+ invalid(`answerShape.fields[${index}].${key} must be a finite number`, {
70
+ index,
71
+ key,
72
+ });
73
+ }
74
+ if (integer && !Number.isSafeInteger(value)) {
75
+ invalid(`answerShape.fields[${index}].${key} must be a safe integer for an integer field`, { index, key });
76
+ }
77
+ return value;
78
+ }
79
+ function parseEnumValues(value, index) {
80
+ if (!Array.isArray(value) || value.length === 0) {
81
+ invalid(`answerShape.fields[${index}].values must be a non-empty array of strings`, { index });
82
+ }
83
+ if (value.length > MAX_ANSWER_ENUM_VALUES) {
84
+ invalid(`answerShape.fields[${index}].values lists ${value.length} values; the maximum is ${MAX_ANSWER_ENUM_VALUES}`, { index, max: MAX_ANSWER_ENUM_VALUES });
85
+ }
86
+ const values = [];
87
+ for (const entry of value) {
88
+ if (typeof entry !== "string" || entry === "") {
89
+ invalid(`answerShape.fields[${index}].values must hold non-empty strings`, { index });
90
+ }
91
+ if (entry.length > MAX_ANSWER_ENUM_VALUE_CHARS) {
92
+ invalid(`answerShape.fields[${index}].values holds a ${entry.length} character value; the maximum is ${MAX_ANSWER_ENUM_VALUE_CHARS}`, { index, max: MAX_ANSWER_ENUM_VALUE_CHARS });
93
+ }
94
+ // Enum values are the one place a builder writes free text into the
95
+ // prompt. Line breaks would let a value pose as its own instruction
96
+ // line in the shape description, so they are refused outright.
97
+ if (/[\n\r\t]/.test(entry)) {
98
+ invalid(`answerShape.fields[${index}].values must not hold line breaks or tabs`, { index });
99
+ }
100
+ if (values.includes(entry)) {
101
+ invalid(`answerShape.fields[${index}].values lists the same value twice`, { index });
102
+ }
103
+ values.push(entry);
104
+ }
105
+ return values;
106
+ }
107
+ function parseField(value, index) {
108
+ if (!isRecord(value)) {
109
+ invalid(`answerShape.fields[${index}] must be an object`, { index });
110
+ }
111
+ const name = parseFieldName(value.name, index);
112
+ if (typeof value.type !== "string" ||
113
+ !FIELD_TYPES.includes(value.type)) {
114
+ invalid(`answerShape.fields[${index}].type must be one of ${FIELD_TYPES.join(", ")}`, { index });
115
+ }
116
+ const type = value.type;
117
+ const allowed = KEYS_BY_TYPE[type];
118
+ for (const key of Object.keys(value)) {
119
+ if (!allowed.includes(key)) {
120
+ invalid(`answerShape.fields[${index}] does not accept "${key}" on a ${type} field`, { index, key: key.slice(0, MAX_ANSWER_FIELD_NAME_CHARS) });
121
+ }
122
+ }
123
+ // A declared field is part of the promise, so it is required unless the
124
+ // registration says otherwise.
125
+ let required = true;
126
+ if (value.required !== undefined && value.required !== null) {
127
+ if (typeof value.required !== "boolean") {
128
+ invalid(`answerShape.fields[${index}].required must be a boolean`, {
129
+ index,
130
+ });
131
+ }
132
+ required = value.required;
133
+ }
134
+ const field = { name, type, required };
135
+ if (type === "string") {
136
+ let maxLength = MAX_ANSWER_STRING_CHARS;
137
+ if (value.maxLength !== undefined && value.maxLength !== null) {
138
+ if (typeof value.maxLength !== "number" ||
139
+ !Number.isSafeInteger(value.maxLength) ||
140
+ value.maxLength < 1 ||
141
+ value.maxLength > MAX_ANSWER_STRING_CHARS) {
142
+ invalid(`answerShape.fields[${index}].maxLength must be an integer between 1 and ${MAX_ANSWER_STRING_CHARS}`, { index, max: MAX_ANSWER_STRING_CHARS });
143
+ }
144
+ maxLength = value.maxLength;
145
+ }
146
+ field.maxLength = maxLength;
147
+ }
148
+ if (type === "number" || type === "integer") {
149
+ const integer = type === "integer";
150
+ if (value.min !== undefined && value.min !== null) {
151
+ field.min = parseBound(value.min, index, "min", integer);
152
+ }
153
+ if (value.max !== undefined && value.max !== null) {
154
+ field.max = parseBound(value.max, index, "max", integer);
155
+ }
156
+ if (field.min !== undefined &&
157
+ field.max !== undefined &&
158
+ field.min > field.max) {
159
+ invalid(`answerShape.fields[${index}].min is greater than its max`, {
160
+ index,
161
+ });
162
+ }
163
+ }
164
+ if (type === "enum") {
165
+ field.values = parseEnumValues(value.values, index);
166
+ }
167
+ return field;
168
+ }
169
+ /**
170
+ * Validate the optional `answerShape` of a registration body. Absent (or
171
+ * null, like `model`) means free text, the original behavior.
172
+ */
173
+ export function parseAnswerShapeInput(value) {
174
+ if (value === undefined || value === null)
175
+ return null;
176
+ if (!isRecord(value)) {
177
+ invalid("answerShape must be an object with a fields array", {});
178
+ }
179
+ for (const key of Object.keys(value)) {
180
+ if (key !== "fields") {
181
+ invalid(`answerShape does not accept "${key}"`, {
182
+ key: key.slice(0, MAX_ANSWER_FIELD_NAME_CHARS),
183
+ });
184
+ }
185
+ }
186
+ if (!Array.isArray(value.fields) || value.fields.length === 0) {
187
+ invalid("answerShape.fields must be a non-empty array", {});
188
+ }
189
+ if (value.fields.length > MAX_ANSWER_SHAPE_FIELDS) {
190
+ invalid(`answerShape.fields lists ${value.fields.length} fields; the maximum is ${MAX_ANSWER_SHAPE_FIELDS}`, { max: MAX_ANSWER_SHAPE_FIELDS });
191
+ }
192
+ const fields = [];
193
+ const names = new Set();
194
+ value.fields.forEach((entry, index) => {
195
+ const field = parseField(entry, index);
196
+ if (names.has(field.name)) {
197
+ invalid(`answerShape.fields names "${field.name}" twice`, { index });
198
+ }
199
+ names.add(field.name);
200
+ fields.push(field);
201
+ });
202
+ return { fields };
203
+ }
204
+ /**
205
+ * Compile the declaration to the zod schema the reply is checked against.
206
+ * The object STRIPS unknown keys rather than refusing them: a model that
207
+ * adds chatter next to the declared fields still produces a valid answer,
208
+ * and the extra key never reaches the record.
209
+ */
210
+ export function compileAnswerShape(shape) {
211
+ const entries = {};
212
+ for (const field of shape.fields) {
213
+ let schema;
214
+ switch (field.type) {
215
+ case "string":
216
+ schema = z.string().max(field.maxLength ?? MAX_ANSWER_STRING_CHARS);
217
+ break;
218
+ case "number":
219
+ case "integer": {
220
+ // zod rejects NaN and Infinity for `number` already, so the bounds
221
+ // are the only thing left to apply.
222
+ let numeric = field.type === "integer" ? z.int() : z.number();
223
+ if (field.min !== undefined)
224
+ numeric = numeric.min(field.min);
225
+ if (field.max !== undefined)
226
+ numeric = numeric.max(field.max);
227
+ schema = numeric;
228
+ break;
229
+ }
230
+ case "boolean":
231
+ schema = z.boolean();
232
+ break;
233
+ case "enum":
234
+ schema = z.enum(field.values ?? []);
235
+ break;
236
+ }
237
+ entries[field.name] = field.required ? schema : schema.nullish();
238
+ }
239
+ return z.object(entries);
240
+ }
241
+ /**
242
+ * Check one candidate answer object against a compiled shape. On success
243
+ * the value is rebuilt in declaration order with the optional fields the
244
+ * model left out (or nulled) dropped, so the stored value has one form.
245
+ */
246
+ export function validateAnswerShape(shape, compiled, candidate) {
247
+ const parsed = compiled.safeParse(candidate);
248
+ if (!parsed.success) {
249
+ return {
250
+ ok: false,
251
+ // zod's messages state the constraint ("expected int", "<=5") and
252
+ // never echo the received value, so they are safe to hand back to
253
+ // the model in the corrective turn.
254
+ issues: parsed.error.issues.map((issue) => {
255
+ const path = issue.path.join(".");
256
+ return path ? `${path}: ${issue.message}` : issue.message;
257
+ }),
258
+ };
259
+ }
260
+ const value = {};
261
+ for (const field of shape.fields) {
262
+ const entry = parsed.data[field.name];
263
+ if (entry === undefined || entry === null)
264
+ continue;
265
+ value[field.name] = entry;
266
+ }
267
+ return { ok: true, value };
268
+ }
269
+ function describeField(field) {
270
+ const requirement = field.required ? "required" : "optional";
271
+ switch (field.type) {
272
+ case "string":
273
+ return `"${field.name}": string, at most ${field.maxLength ?? MAX_ANSWER_STRING_CHARS} characters (${requirement})`;
274
+ case "number":
275
+ case "integer": {
276
+ const kind = field.type === "integer" ? "integer" : "number";
277
+ const range = field.min !== undefined && field.max !== undefined
278
+ ? ` between ${field.min} and ${field.max}`
279
+ : field.min !== undefined
280
+ ? ` of at least ${field.min}`
281
+ : field.max !== undefined
282
+ ? ` of at most ${field.max}`
283
+ : "";
284
+ return `"${field.name}": ${kind}${range} (${requirement})`;
285
+ }
286
+ case "boolean":
287
+ return `"${field.name}": true or false (${requirement})`;
288
+ case "enum":
289
+ return `"${field.name}": exactly one of ${(field.values ?? [])
290
+ .map((entry) => JSON.stringify(entry))
291
+ .join(", ")} (${requirement})`;
292
+ }
293
+ }
294
+ /** The shape as prompt lines, one per field, in declaration order. */
295
+ export function describeAnswerShape(shape) {
296
+ return shape.fields.map((field) => ` ${describeField(field)}`);
297
+ }
298
+ /**
299
+ * The human-readable rendering kept in the record's `answer` string. The
300
+ * structured value next to it is authoritative; this is what a reader that
301
+ * only knows the old free-text field sees.
302
+ */
303
+ export function renderShapedAnswer(shape, value) {
304
+ return shape.fields
305
+ .filter((field) => value[field.name] !== undefined)
306
+ .map((field) => `${field.name}: ${String(value[field.name])}`)
307
+ .join("\n");
308
+ }
309
+ /** Deep copy, so a stored shape is never aliased by a view or a caller. */
310
+ export function cloneAnswerShape(shape) {
311
+ if (!shape)
312
+ return null;
313
+ return {
314
+ fields: shape.fields.map((field) => ({
315
+ ...field,
316
+ ...(field.values ? { values: [...field.values] } : {}),
317
+ })),
318
+ };
319
+ }
320
+ //# sourceMappingURL=answer-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"answer-shape.js","sourceRoot":"","sources":["../../src/derivatives/answer-shape.ts"],"names":[],"mappings":"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"}
@@ -23,11 +23,20 @@ import { type QuestionStore } from "./types.js";
23
23
  /** Registration bodies are small; anything larger is refused up front. */
24
24
  export declare const MAX_QUESTION_BODY_BYTES: number;
25
25
  export interface PersonalServerDerivativesApiDeps {
26
- auth: Pick<PersonalServerApiAuthPort, "authorizeOwner" | "authorizeWrite" | "authorizeWriteSession">;
26
+ auth: Pick<PersonalServerApiAuthPort, "authorizeOwner" | "authorizeWrite" | "authorizeWriteSession" | "authorizeBuilderRead">;
27
27
  /** Absent = the compute layer is not wired; every route answers 503. */
28
28
  compute?: {
29
29
  store: QuestionStore;
30
- scheduler: Pick<RecomputeScheduler, "requestRecompute" | "markSourceChanged">;
30
+ scheduler: Pick<RecomputeScheduler, "requestRecompute" | "markSourceChanged"> & {
31
+ /**
32
+ * Next scheduled automatic retry of a failed question (ISO time), or
33
+ * null. Optional so a minimal scheduler stays a valid dependency; the
34
+ * status route then reports no retry.
35
+ */
36
+ nextRetryAt?(questionId: string): string | null;
37
+ /** True while a retry compute is running (timer fired, not settled). */
38
+ retryInFlight?(questionId: string): boolean;
39
+ };
31
40
  } | null;
32
41
  now?: () => Date;
33
42
  createQuestionId?: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/derivatives/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAGjC,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,QAAY,CAAC;AAEjD,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,IAAI,CACR,yBAAyB,EACzB,gBAAgB,GAAG,gBAAgB,GAAG,uBAAuB,CAC9D,CAAC;IACF,wEAAwE;IACxE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,kBAAkB,GAAG,mBAAmB,CACzC,CAAC;KACH,GAAG,IAAI,CAAC;IACT,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAChE,CAAC;CACH;AA0GD,wBAAsB,sCAAsC,CAC1D,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,gCAAgC,EACtC,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,QAAQ,CAAC,CA+LnB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/derivatives/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAaH,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAGjC,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,QAAY,CAAC;AAKjD,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,IAAI,CACR,yBAAyB,EACvB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,sBAAsB,CACzB,CAAC;IACF,wEAAwE;IACxE,OAAO,CAAC,EAAE;QACR,KAAK,EAAE,aAAa,CAAC;QACrB,SAAS,EAAE,IAAI,CACb,kBAAkB,EAClB,kBAAkB,GAAG,mBAAmB,CACzC,GAAG;YACF;;;;eAIG;YACH,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;YAChD,wEAAwE;YACxE,aAAa,CAAC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;SAC7C,CAAC;KACH,GAAG,IAAI,CAAC;IACT,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KAChE,CAAC;CACH;AAuOD,wBAAsB,sCAAsC,CAC1D,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,gCAAgC,EACtC,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,QAAQ,CAAC,CAqMnB"}
@@ -19,10 +19,14 @@
19
19
  */
20
20
  import { ContentTooLargeError, DerivativeComputeUnavailableError, DerivativeDerivedScopeRequiredError, DerivativeQuestionNotFoundError, DerivativeSourceNotGrantedError, ProtocolError, } from "../errors/catalog.js";
21
21
  import { parseJsonObjectBody } from "../contracts/http.js";
22
+ import { parseDataScopeContract } from "../contracts/data.js";
23
+ import { selectedGrantId } from "../api/index.js";
22
24
  import { createQuestionRegistration, parseQuestionInput, uncoveredSourceScopes, } from "./registration.js";
23
25
  import { questionRegistrationView, } from "./types.js";
24
26
  /** Registration bodies are small; anything larger is refused up front. */
25
27
  export const MAX_QUESTION_BODY_BYTES = 16 * 1024;
28
+ /** Poll hint served while a retry compute is in flight (no scheduled time). */
29
+ const RETRY_IN_FLIGHT_POLL_SECONDS = 5;
26
30
  function jsonResponse(body, init) {
27
31
  const headers = new Headers(init?.headers);
28
32
  headers.set("Content-Type", "application/json");
@@ -97,12 +101,117 @@ async function loadForCaller(deps, request, store, questionId) {
97
101
  }
98
102
  return { registration, writer };
99
103
  }
104
+ /**
105
+ * `GET /v1/derivatives/status?derivedScope=<scope>`: the lifecycle of the
106
+ * question behind a derived scope, for the party that will READ the answer.
107
+ *
108
+ * Authorization is the data read's (`authorizeBuilderRead`, i.e. a live
109
+ * grant covering the derived scope, or the owner) — deliberately NOT the
110
+ * write-session path, because a consent-flow reader holds only a bare read
111
+ * entry and can never open a write session. Nothing is served and nothing
112
+ * is charged: this is authorization only, no x402 challenge and no
113
+ * RECORD_DATA_ACCESS receipt, the same bar as the lineage read.
114
+ *
115
+ * The view is deliberately narrow: lifecycle only. The question text, the
116
+ * source scopes, the question id, the registrar and the raw error string
117
+ * stay owner-only — `errorCode` is a closed vocabulary precisely so a
118
+ * stored error like "source scope X is deleted" cannot leak a scope name.
119
+ * One class needs the same care as the raw string: `grant_invalid` arises
120
+ * only from a builder-registered question, so a third-party reader gets
121
+ * `internal` instead of learning who registered.
122
+ * Auth runs before the store lookup, so an uncovered caller cannot probe
123
+ * which scopes have questions behind them.
124
+ *
125
+ * Like every Web3Signed read (data, lineage), the signature covers the
126
+ * path, not the query; per-scope authorization is enforced live against
127
+ * the caller's grant on each request.
128
+ */
129
+ async function handleStatusRoute(request, url, deps, store, scheduler, now) {
130
+ if (request.method !== "GET") {
131
+ return errorResponse(405, "METHOD_NOT_ALLOWED", "Method not allowed");
132
+ }
133
+ const derivedScopeParam = url.searchParams.get("derivedScope");
134
+ if (!derivedScopeParam) {
135
+ throw new DerivativeDerivedScopeRequiredError();
136
+ }
137
+ // Same grammar gate as every scope-taking route, before anything is
138
+ // authorized: an arbitrary string never reaches the grant policy.
139
+ const scopeResult = parseDataScopeContract(derivedScopeParam);
140
+ if (!scopeResult.ok) {
141
+ return errorResponse(scopeResult.status, scopeResult.body.error, scopeResult.body.message);
142
+ }
143
+ const derivedScope = scopeResult.scope;
144
+ const auth = (await deps.auth.authorizeBuilderRead({
145
+ request,
146
+ scope: derivedScope,
147
+ grantId: selectedGrantId(request, url),
148
+ })) ?? undefined;
149
+ const registrations = await store.list({ derivedScope });
150
+ if (registrations.length === 0) {
151
+ throw new DerivativeQuestionNotFoundError({ derivedScope });
152
+ }
153
+ // Several registrations may share a derived scope, and data serving is
154
+ // registration-agnostic: if ANY of them is ready, the scope has an answer
155
+ // and the reader must not be told "failed" by a duplicate that never
156
+ // wrote anything. Report the most optimistic true state — ready, then an
157
+ // in-flight recompute, then never-computed, then failed — and within a
158
+ // class let the most recently updated registration speak.
159
+ const STATUS_PRECEDENCE = {
160
+ ready: 0,
161
+ stale: 1,
162
+ pending: 2,
163
+ failed: 3,
164
+ };
165
+ const registration = registrations.reduce((best, candidate) => {
166
+ const byStatus = STATUS_PRECEDENCE[candidate.status] - STATUS_PRECEDENCE[best.status];
167
+ if (byStatus !== 0)
168
+ return byStatus < 0 ? candidate : best;
169
+ return candidate.updatedAt >= best.updatedAt ? candidate : best;
170
+ });
171
+ const nextRetryAt = scheduler.nextRetryAt?.(registration.questionId) ?? null;
172
+ // While the retry compute is RUNNING there is no scheduled time, but null
173
+ // would be the terminal "will never retry" signature; serve a short poll
174
+ // hint instead. 0 is never served — it invites a tight poll loop.
175
+ const retryAfterSeconds = nextRetryAt !== null
176
+ ? Math.max(1, Math.ceil((Date.parse(nextRetryAt) - now().getTime()) / 1000))
177
+ : scheduler.retryInFlight?.(registration.questionId)
178
+ ? RETRY_IN_FLIGHT_POLL_SECONDS
179
+ : null;
180
+ // `grant_invalid` can only come from the live re-check of a REGISTERING
181
+ // BUILDER's grant, which an owner-registered question never runs. Serving
182
+ // it to a third-party reader would therefore disclose the registrar class
183
+ // the rest of this view withholds. The owner and the registrar itself lose
184
+ // nothing — they are the two parties who can act on it — and everyone else
185
+ // reads the honest generic class: something is wrong server-side and no
186
+ // retry is coming.
187
+ const registrarView = auth === undefined ||
188
+ auth.grantId === "owner" ||
189
+ auth.grantId === "policy-bypass" ||
190
+ (registration.registeredBy.kind === "builder" &&
191
+ typeof auth.builder === "string" &&
192
+ sameBuilder(registration.registeredBy.builder, auth.builder));
193
+ const disclosedErrorCode = registration.errorCode === "grant_invalid" && !registrarView
194
+ ? "internal"
195
+ : registration.errorCode;
196
+ return jsonResponse({
197
+ derivedScope: registration.derivedScope,
198
+ status: registration.status,
199
+ lastComputedAt: registration.lastComputedAt,
200
+ derivedVersion: registration.derivedVersion,
201
+ derivedCollectedAt: registration.derivedCollectedAt,
202
+ // Null unless failed, whatever an old store row holds: a stale question
203
+ // is a recompute in progress, not a terminal failure.
204
+ errorCode: registration.status === "failed" ? disclosedErrorCode : null,
205
+ retryAfterSeconds,
206
+ });
207
+ }
100
208
  export async function handlePersonalServerDerivativesRequest(request, deps, options = {}) {
101
209
  try {
102
210
  const url = new URL(request.url);
103
211
  const pathname = stripBasePath(url.pathname, options.basePath);
104
212
  const parts = pathname.split("/").filter(Boolean);
105
- if (parts[0] !== "questions" || parts.length > 3) {
213
+ const isStatusRoute = parts[0] === "status" && parts.length === 1;
214
+ if (!isStatusRoute && (parts[0] !== "questions" || parts.length > 3)) {
106
215
  return errorResponse(404, "NOT_FOUND", "Not found");
107
216
  }
108
217
  const compute = deps.compute;
@@ -110,6 +219,10 @@ export async function handlePersonalServerDerivativesRequest(request, deps, opti
110
219
  throw new DerivativeComputeUnavailableError();
111
220
  const { store, scheduler } = compute;
112
221
  const now = deps.now ?? (() => new Date());
222
+ // /status — the reader-facing lifecycle view of a derived scope.
223
+ if (isStatusRoute) {
224
+ return await handleStatusRoute(request, url, deps, store, scheduler, now);
225
+ }
113
226
  // /questions
114
227
  if (parts.length === 1) {
115
228
  if (request.method === "GET") {
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/derivatives/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/derivatives/api.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,12 @@ export interface DerivativeAnswerRecord {
74
74
  questionId: string;
75
75
  question: string;
76
76
  answer: string;
77
+ /**
78
+ * The validated structured answer, present only when the question
79
+ * declared an answer shape. `answer` stays a string either way (readers
80
+ * depend on it), holding a rendering of this value.
81
+ */
82
+ answerData?: Record<string, unknown>;
77
83
  evidence: string | null;
78
84
  model: string;
79
85
  computedAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../src/derivatives/compute.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAO/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,IAAI,IAAI,CAAC;IACvB,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,yDAAyD;IACzD,WAAW,EAAE,KAAK,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,gEAAgE;IAChE,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,KAAK,IAAI,CAAC;IACX,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C;;;OAGG;IACH,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,oBAAoB,CAAA;CAAE,GACvD;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,YAAY,EAAE,oBAAoB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAAA;CAAE,CAAC;AAqC9E,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,yEAAyE;IACzE,OAAO,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAmBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,IAAI,EACf,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,GACxC,MAAM,CAUR;AAwLD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,cAAc,CAAC,CAmKzB"}
1
+ {"version":3,"file":"compute.d.ts","sourceRoot":"","sources":["../../src/derivatives/compute.ts"],"names":[],"mappings":"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"}