@happyvertical/smrt-ingestion 0.60.5 → 0.60.7
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/FEEDBACK.md +7 -0
- package/PROPOSALS.md +7 -0
- package/dist/chunks/{execution-Clcmi0sj.js → execution-ySzcTXW3.js} +36 -28
- package/dist/chunks/execution-ySzcTXW3.js.map +1 -0
- package/dist/chunks/{feedback-hDSMYjiG.js → feedback-CSi5pVUI.js} +57 -11
- package/dist/chunks/feedback-CSi5pVUI.js.map +1 -0
- package/dist/chunks/{reviewer-instruction-BeOYVCVk.js → reviewer-instruction-Bst9wIak.js} +2 -2
- package/dist/chunks/{reviewer-instruction-BeOYVCVk.js.map → reviewer-instruction-Bst9wIak.js.map} +1 -1
- package/dist/database-conflicts.d.ts +29 -0
- package/dist/database-conflicts.d.ts.map +1 -0
- package/dist/execution.d.ts +13 -2
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +1 -1
- package/dist/feedback.d.ts.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/models.js +1 -1
- package/dist/models.js.map +1 -1
- package/dist/proposals.d.ts +5 -0
- package/dist/proposals.d.ts.map +1 -1
- package/dist/proposals.js +16 -8
- package/dist/proposals.js.map +1 -1
- package/dist/server.js +3 -3
- package/dist/smrt-knowledge.json +12 -12
- package/package.json +13 -13
- package/dist/chunks/execution-Clcmi0sj.js.map +0 -1
- package/dist/chunks/feedback-hDSMYjiG.js.map +0 -1
|
@@ -1,6 +1,48 @@
|
|
|
1
|
-
import { i as intakeBindingDigest, k as __exportAll, n as IntakeExecutionService, o as feedbackActionTransaction, s as feedbackDiscoveryContext } from "./execution-
|
|
2
|
-
import { i as reviewerInstructionView } from "./reviewer-instruction-
|
|
1
|
+
import { i as intakeBindingDigest, k as __exportAll, n as IntakeExecutionService, o as feedbackActionTransaction, s as feedbackDiscoveryContext } from "./execution-ySzcTXW3.js";
|
|
2
|
+
import { i as reviewerInstructionView } from "./reviewer-instruction-Bst9wIak.js";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
|
+
//#region src/database-conflicts.ts
|
|
5
|
+
var CONFLICT_SQLSTATES = /* @__PURE__ */ new Set(["40P01", "40001"]);
|
|
6
|
+
var CONFLICT_MESSAGE = /deadlock detected|could not serialize access/i;
|
|
7
|
+
var SQLSTATE = /^[0-9A-Z]{5}$/;
|
|
8
|
+
var DRIVER_MESSAGE = /current transaction is aborted|deadlock detected|could not serialize access/i;
|
|
9
|
+
function* chain(error) {
|
|
10
|
+
const seen = /* @__PURE__ */ new Set();
|
|
11
|
+
let current = error;
|
|
12
|
+
for (let depth = 0; depth < 8; depth++) {
|
|
13
|
+
if (!current || typeof current !== "object" || seen.has(current)) return;
|
|
14
|
+
seen.add(current);
|
|
15
|
+
yield current;
|
|
16
|
+
current = current.cause;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function isTransactionConflict(error) {
|
|
20
|
+
for (const link of chain(error)) {
|
|
21
|
+
if (typeof link.code === "string" && CONFLICT_SQLSTATES.has(link.code)) return true;
|
|
22
|
+
if (typeof link.message === "string" && CONFLICT_MESSAGE.test(link.message)) return true;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
function isDatabaseFailure(error) {
|
|
27
|
+
for (const link of chain(error)) {
|
|
28
|
+
if (typeof link.code === "string" && (SQLSTATE.test(link.code) || link.code.startsWith("SQLITE_"))) return true;
|
|
29
|
+
if (typeof link.message === "string" && DRIVER_MESSAGE.test(link.message)) return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
function rethrowDatabaseFailure(error) {
|
|
34
|
+
if (isDatabaseFailure(error)) throw error;
|
|
35
|
+
}
|
|
36
|
+
async function retryTransactionConflicts(work, attempts = 5) {
|
|
37
|
+
for (let attempt = 1;; attempt++) try {
|
|
38
|
+
return await work();
|
|
39
|
+
} catch (error) {
|
|
40
|
+
if (attempt >= attempts || !isTransactionConflict(error)) throw error;
|
|
41
|
+
const pause = 10 * 2 ** attempt * (.5 + Math.random());
|
|
42
|
+
await new Promise((resolve) => setTimeout(resolve, pause));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
4
46
|
//#region src/feedback.ts
|
|
5
47
|
var feedback_exports = /* @__PURE__ */ __exportAll({
|
|
6
48
|
FeedbackRetrievalDeniedError: () => FeedbackRetrievalDeniedError,
|
|
@@ -454,8 +496,9 @@ var IntakeFeedbackService = class {
|
|
|
454
496
|
const args = object(data.args);
|
|
455
497
|
for (const [field, reference2] of Object.entries(offered.handler.references)) if (reference2.kind === "candidate" && Object.hasOwn(args, field) && !offered.candidates.some((candidate2) => candidate2.id === args[field] && candidate2.model === reference2.model)) return void 0;
|
|
456
498
|
return this.exampleOf(String(current.id), String(stored), data, ctx, guidance);
|
|
457
|
-
}, executor, input.providers ?? [input.model.provider]);
|
|
458
|
-
} catch {
|
|
499
|
+
}, executor, input.providers ?? [input.model.provider], void 0, true, false);
|
|
500
|
+
} catch (error) {
|
|
501
|
+
rethrowDatabaseFailure(error);
|
|
459
502
|
return;
|
|
460
503
|
}
|
|
461
504
|
}
|
|
@@ -512,7 +555,7 @@ var IntakeFeedbackService = class {
|
|
|
512
555
|
if (ctx.itemId !== itemId || ctx.origin !== "reviewer-selected" || !lineage && !ctx.settled || data.revision !== ctx.review.revision || data.bindingHash !== ctx.review.bindingHash || data.attemptId !== ctx.attemptId || data.handlerId !== ctx.handlerId || data.handlerVersion !== ctx.handlerVersion || intakeBindingDigest(args) !== intakeBindingDigest(ctx.args)) return void 0;
|
|
513
556
|
await current(ctx.db);
|
|
514
557
|
return example;
|
|
515
|
-
}, executor, providers, void 0, !lineage);
|
|
558
|
+
}, executor, providers, void 0, !lineage, false);
|
|
516
559
|
for (const entry of input.offered) try {
|
|
517
560
|
return await this.execution[feedbackDiscoveryContext](executor, itemId, entry.handler.id, entry.handler.version, async (context) => {
|
|
518
561
|
if (providers.some((provider) => !context.policy.providers.includes(provider))) throw new Error("Feedback source provider unavailable");
|
|
@@ -521,10 +564,13 @@ var IntakeFeedbackService = class {
|
|
|
521
564
|
}, async (context) => {
|
|
522
565
|
if (providers.some((provider) => !context.policy.providers.includes(provider))) throw new Error("Feedback source provider unavailable");
|
|
523
566
|
await current(context.db);
|
|
524
|
-
});
|
|
525
|
-
} catch {
|
|
567
|
+
}, false);
|
|
568
|
+
} catch (error) {
|
|
569
|
+
rethrowDatabaseFailure(error);
|
|
570
|
+
}
|
|
526
571
|
return;
|
|
527
|
-
} catch {
|
|
572
|
+
} catch (error) {
|
|
573
|
+
rethrowDatabaseFailure(error);
|
|
528
574
|
return;
|
|
529
575
|
}
|
|
530
576
|
}
|
|
@@ -544,7 +590,7 @@ var IntakeFeedbackService = class {
|
|
|
544
590
|
bytes = Buffer.byteLength(JSON.stringify(selection));
|
|
545
591
|
if (bytes > limit) throw new Error("Feedback limit");
|
|
546
592
|
return selection;
|
|
547
|
-
}, validate);
|
|
593
|
+
}, validate, false);
|
|
548
594
|
};
|
|
549
595
|
return visit(0, executor);
|
|
550
596
|
}
|
|
@@ -829,6 +875,6 @@ var IntakeFeedbackService = class {
|
|
|
829
875
|
}
|
|
830
876
|
};
|
|
831
877
|
//#endregion
|
|
832
|
-
export { IntakeFeedbackService as n, feedback_exports as r, FeedbackRetrievalDeniedError as t };
|
|
878
|
+
export { retryTransactionConflicts as a, isTransactionConflict as i, IntakeFeedbackService as n, feedback_exports as r, FeedbackRetrievalDeniedError as t };
|
|
833
879
|
|
|
834
|
-
//# sourceMappingURL=feedback-
|
|
880
|
+
//# sourceMappingURL=feedback-CSi5pVUI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feedback-CSi5pVUI.js","names":["handler","reference","candidate","row","digest","id"],"sources":["../../src/database-conflicts.ts","../../src/feedback.ts"],"sourcesContent":["/**\n * Database failures inside ingestion reads (#4651). Server-only.\n *\n * A PostgreSQL deadlock (`40P01`) or serialization failure (`40001`) rolls the\n * whole transaction back: it says nothing about the data, and the same work\n * may simply run again. Any driver error also leaves a PostgreSQL transaction\n * aborted, so code that excludes one bad row by catching its error must let a\n * driver error through instead of carrying on in a dead transaction.\n */\n\nconst CONFLICT_SQLSTATES = new Set(['40P01', '40001']);\nconst CONFLICT_MESSAGE = /deadlock detected|could not serialize access/i;\nconst SQLSTATE = /^[0-9A-Z]{5}$/;\nconst DRIVER_MESSAGE =\n /current transaction is aborted|deadlock detected|could not serialize access/i;\n\nfunction* chain(\n error: unknown,\n): Generator<{ code?: unknown; message?: unknown }> {\n const seen = new Set<unknown>();\n let current = error;\n for (let depth = 0; depth < 8; depth++) {\n if (!current || typeof current !== 'object' || seen.has(current)) return;\n seen.add(current);\n yield current as { code?: unknown; message?: unknown };\n current = (current as { cause?: unknown }).cause;\n }\n}\n\n/** True for a deadlock or serialization failure anywhere in the cause chain. */\nexport function isTransactionConflict(error: unknown): boolean {\n for (const link of chain(error)) {\n if (typeof link.code === 'string' && CONFLICT_SQLSTATES.has(link.code))\n return true;\n if (typeof link.message === 'string' && CONFLICT_MESSAGE.test(link.message))\n return true;\n }\n return false;\n}\n\n/**\n * True when the error came from the database driver (a SQLSTATE or SQLite\n * code, or the aborted-transaction wording), not from an ingestion or host\n * refusal. Such an error must propagate out of the transaction.\n */\nexport function isDatabaseFailure(error: unknown): boolean {\n for (const link of chain(error)) {\n if (\n typeof link.code === 'string' &&\n (SQLSTATE.test(link.code) || link.code.startsWith('SQLITE_'))\n )\n return true;\n if (typeof link.message === 'string' && DRIVER_MESSAGE.test(link.message))\n return true;\n }\n return false;\n}\n\n/** Rethrow a driver error; anything else is the caller's to handle. */\nexport function rethrowDatabaseFailure(error: unknown): void {\n if (isDatabaseFailure(error)) throw error;\n}\n\n/** Runs per conflict-retried unit of work, including the first. */\nexport const TRANSACTION_CONFLICT_ATTEMPTS = 5;\n\n/**\n * Run `work` (one complete transaction) again after a deadlock or\n * serialization failure, with a short jittered pause, up to\n * {@link TRANSACTION_CONFLICT_ATTEMPTS} runs. Any other error, and the last\n * conflict, propagate unchanged.\n */\nexport async function retryTransactionConflicts<T>(\n work: () => Promise<T>,\n attempts = TRANSACTION_CONFLICT_ATTEMPTS,\n): Promise<T> {\n for (let attempt = 1; ; attempt++) {\n try {\n return await work();\n } catch (error) {\n if (attempt >= attempts || !isTransactionConflict(error)) throw error;\n const pause = 10 * 2 ** attempt * (0.5 + Math.random());\n await new Promise((resolve) => setTimeout(resolve, pause));\n }\n }\n}\n","/** Initial optional-example denial; revocation after selection must remain fatal. */\nexport class FeedbackRetrievalDeniedError extends Error {\n constructor() {\n super('Feedback unavailable');\n this.name = 'FeedbackRetrievalDeniedError';\n }\n}\n\nimport { randomUUID } from 'node:crypto';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport { rethrowDatabaseFailure } from './database-conflicts.js';\nimport {\n intakeBindingDigest as digest,\n IntakeExecutionService,\n} from './execution.js';\nimport type {\n FeedbackConfiguration,\n FeedbackOperation,\n} from './feedback-contracts.js';\nimport type {\n AdoptRuleInput,\n FeedbackBinding,\n FeedbackExample,\n FeedbackReceipt,\n FeedbackReferences,\n FeedbackSelection,\n ObserveFeedbackInput,\n ReadRuleInput,\n RecordFeedbackInput,\n RoutingRule,\n RuleAdoption,\n RuleSuggestion,\n SuggestRuleInput,\n} from './feedback-dto.js';\nimport {\n type FeedbackActionContext,\n feedbackActionTransaction,\n feedbackDiscoveryContext,\n} from './feedback-internal.js';\nimport type { GenerationOutput } from './proposal-dto.js';\nimport { reviewerInstructionView } from './reviewer-instruction.js';\nimport type { IngestionOptions } from './server.js';\n\ntype Row = Record<string, unknown>;\nfunction object(value: unknown): Row {\n const result = typeof value === 'string' ? JSON.parse(value) : value;\n if (!result || typeof result !== 'object' || Array.isArray(result))\n throw new Error('Feedback unavailable');\n return result as Row;\n}\nfunction text(value: unknown, max = 512): asserts value is string {\n if (typeof value !== 'string' || !value.trim() || value.length > max)\n throw new Error('Invalid feedback');\n}\nfunction resultData(data: Row): Row {\n return {\n status: data.status,\n provider: data.provider,\n model: data.model,\n version: data.version,\n output: data.output,\n usage: data.usage,\n ...(Object.hasOwn(data, 'error') ? { error: data.error } : {}),\n ...(Object.hasOwn(data, 'confidence')\n ? { confidence: data.confidence }\n : {}),\n };\n}\nexport function feedbackTerms(value: string): string[] {\n return [\n ...new Set(value.toLowerCase().match(/[\\p{L}\\p{N}]+/gu) ?? []),\n ].sort();\n}\nexport function feedbackSimilarity(left: string, right: string): number {\n const a = new Set(feedbackTerms(left)),\n b = new Set(feedbackTerms(right));\n const union = new Set([...a, ...b]);\n return union.size\n ? [...a].filter((value) => b.has(value)).length / union.size\n : 0;\n}\nexport interface RetrieveFeedbackInput {\n itemId: string;\n query: string;\n offered: GenerationOutput['offered'];\n promptVersion: string;\n configurationVersion: string;\n model: { provider: string; model: string; version: string };\n providers?: string[];\n}\n/** Owning ingestion ledger. Generic LearningMemory's success/ancestor fallback semantics are deliberately not used. */\nexport class IntakeFeedbackService {\n private readonly execution: IntakeExecutionService;\n private readonly config: FeedbackConfiguration;\n private readonly lineage = new Set<string>();\n private exampleChecks = 0;\n constructor(\n private readonly options: IngestionOptions,\n execution?: IntakeExecutionService,\n ) {\n if (!options.execution || !options.feedback)\n throw new Error('Feedback not configured');\n this.config = { ...options.feedback };\n this.execution =\n execution ?? new IntakeExecutionService(options, options.execution);\n text(this.config.version);\n for (const [value, max] of [\n [this.config.maxExamples, 20],\n [this.config.maxScan, 1000],\n [this.config.maxBytes, 1000000],\n ])\n if (!Number.isSafeInteger(value) || value < 1 || value > max)\n throw new Error('Invalid feedback limits');\n if (\n this.config.onRecorded !== undefined &&\n typeof this.config.onRecorded !== 'function'\n )\n throw new Error('Invalid feedback hook');\n if (\n !Number.isFinite(this.config.minimumSimilarity) ||\n this.config.minimumSimilarity < 0.2 ||\n this.config.minimumSimilarity > 1\n )\n throw new Error('Invalid feedback similarity');\n }\n private configurationDigest() {\n const { version, maxExamples, maxScan, maxBytes, minimumSimilarity } =\n this.config;\n return digest({\n version,\n maxExamples,\n maxScan,\n maxBytes,\n minimumSimilarity,\n });\n }\n private routing(\n ctx: FeedbackActionContext,\n ): Pick<RoutingRule, 'args' | 'projection'> {\n // Read live trusted configuration again at publication/replay boundaries.\n const declarations = this.options.feedback?.routing;\n if (declarations === undefined) return { args: ctx.args };\n if (!Array.isArray(declarations))\n throw new Error('Invalid routing projection');\n const seen = new Set<string>();\n for (const declaration of declarations) {\n const entry = object(declaration);\n text(entry.handlerId);\n text(entry.handlerVersion);\n text(entry.version);\n const key = digest([entry.handlerId, entry.handlerVersion]);\n const handler = this.options.execution!.handlers.find(\n (handler) =>\n handler.id === entry.handlerId &&\n handler.version === entry.handlerVersion,\n );\n if (!handler || seen.has(key))\n throw new Error('Invalid routing projection');\n seen.add(key);\n const properties = object(handler.argsSchema.properties);\n if (\n !Array.isArray(entry.fields) ||\n !entry.fields.length ||\n entry.fields.length > 64 ||\n new Set(entry.fields).size !== entry.fields.length\n )\n throw new Error('Invalid routing projection');\n for (const field of entry.fields) {\n text(field);\n if (\n ['__proto__', 'prototype', 'constructor'].includes(field) ||\n !Object.hasOwn(properties, field)\n )\n throw new Error('Invalid routing projection');\n }\n }\n const selected = declarations.find(\n (entry) =>\n entry.handlerId === ctx.handlerId &&\n entry.handlerVersion === ctx.handlerVersion,\n );\n if (!selected) return { args: ctx.args };\n const fields = [...selected.fields].sort();\n const args = Object.fromEntries(\n fields\n .filter((field) => Object.hasOwn(ctx.args, field))\n .map((field) => [field, structuredClone(ctx.args[field])]),\n );\n if (!Object.keys(args).length)\n throw new Error('Routing values unavailable');\n return { args, projection: { version: selected.version, fields } };\n }\n private scope() {\n return this.options.scope;\n }\n private async rows(\n db: DatabaseInterface,\n where: string,\n params: unknown[] = [],\n ): Promise<Row[]> {\n const scope = this.scope();\n return (\n await db.query(\n `SELECT * FROM intake_feedback WHERE tenant_id=? AND confidential_scope_id=? AND ${where}`,\n scope.tenantId,\n scope.confidentialScopeId,\n ...params,\n )\n ).rows;\n }\n /**\n * Ask the host. `verify` (re-checking stored lineage) falls back to\n * `retrieve` when refused, so an authorizer that predates `verify` keeps\n * today's answer; only a refusal of both denies.\n */\n private async permits(\n db: DatabaseInterface,\n itemId: string,\n operation: FeedbackOperation,\n ): Promise<boolean> {\n const scope = this.scope();\n if (await this.config.authorize({ db, scope, itemId, operation }))\n return true;\n return (\n operation === 'verify' &&\n (await this.config.authorize({\n db,\n scope,\n itemId,\n operation: 'retrieve',\n }))\n );\n }\n private async authorize(\n ctx: FeedbackActionContext,\n operation: FeedbackOperation,\n ) {\n if (!(await this.permits(ctx.db, ctx.itemId, operation)))\n throw new Error('Feedback unavailable');\n }\n private checkBinding(input: FeedbackBinding, ctx: FeedbackActionContext) {\n if (\n input.itemId !== ctx.itemId ||\n input.actionId !== ctx.review.actionId ||\n input.expectedRevision !== ctx.review.revision ||\n input.expectedReviewVersion !== ctx.review.reviewVersion ||\n input.bindingHash !== ctx.review.bindingHash\n )\n throw new Error('Stale feedback binding');\n }\n private async insert(\n ctx: FeedbackActionContext,\n key: string,\n kind: string,\n data: Row,\n supersedesId: string | null = null,\n ): Promise<Row> {\n const serialized = JSON.stringify(data);\n if (\n Buffer.byteLength(serialized) >\n Math.min(this.config.maxBytes, ctx.context.policy.maxBytes)\n )\n throw new Error('Feedback limit');\n const scope = this.scope(),\n now = (this.options.now?.() ?? new Date()).toISOString();\n const row = {\n id: randomUUID(),\n slug: randomUUID(),\n context: '',\n created_at: now,\n updated_at: now,\n tenant_id: scope.tenantId,\n confidential_scope_id: scope.confidentialScopeId,\n item_id: ctx.itemId,\n request_key: key,\n supersedes_id: supersedesId,\n kind,\n data: serialized,\n };\n return (\n await ctx.db.query(\n `INSERT INTO intake_feedback (${Object.keys(row).join(',')}) VALUES (${Object.keys(\n row,\n )\n .map(() => '?')\n .join(',')}) RETURNING *`,\n ...Object.values(row),\n )\n ).rows[0];\n }\n private receipt(row: Row): FeedbackReceipt {\n return {\n id: String(row.id),\n digest: String(object(row.data).digest),\n kind: row.kind as FeedbackReceipt['kind'],\n };\n }\n /** Source text, pin and (when a model suggestion exists) generation versions. */\n private async provenance(ctx: FeedbackActionContext) {\n const output = object(ctx.result.output);\n // A reviewer-selected action on an extraction-only item carries no generation.\n const generation = output.proposals ? object(output.proposals) : undefined;\n const pin = generation\n ? object(generation.source)\n : { attemptId: ctx.attemptId, outputDigest: digest(ctx.result) };\n const provenance = generation ? object(generation.provenance) : undefined;\n if (generation && provenance?.feedback) {\n const inherited = object(provenance.feedback);\n const key = ctx.attemptId;\n if (this.lineage.has(key) || this.lineage.size >= 8)\n throw new Error('Feedback lineage unavailable');\n this.lineage.add(key);\n try {\n // Stored lineage is re-verified, never re-selected (#4504).\n await this.checkSelection(\n {\n itemId: ctx.itemId,\n query: String(inherited.query),\n offered: generation.offered as GenerationOutput['offered'],\n promptVersion: String(provenance.promptVersion),\n configurationVersion: String(provenance.configurationVersion),\n model: provenance.generative as RetrieveFeedbackInput['model'],\n providers: [\n String(object(provenance.generative).provider),\n ...(object(provenance.decision).configured\n ? [String(object(provenance.decision).provider)]\n : []),\n ],\n },\n inherited.selection as unknown as FeedbackReferences,\n ctx.db,\n 'verify',\n );\n } finally {\n this.lineage.delete(key);\n }\n }\n const scope = this.scope();\n const [source] = (\n await ctx.db.query(\n 'SELECT data,output_digest FROM intake_analysis_attempts WHERE tenant_id=? AND confidential_scope_id=? AND item_id=? AND id=?',\n scope.tenantId,\n scope.confidentialScopeId,\n ctx.itemId,\n pin.attemptId,\n )\n ).rows;\n if (!source || source.output_digest !== pin.outputDigest)\n throw new Error('Feedback source unavailable');\n const sourceResult = resultData(object(source.data));\n if (digest(sourceResult) !== pin.outputDigest)\n throw new Error('Feedback source integrity');\n const results = object(sourceResult.output).results;\n if (!Array.isArray(results))\n throw new Error('Feedback extraction unavailable');\n const query = results\n .flatMap((entry) => {\n const segments = object(entry).segments;\n return Array.isArray(segments)\n ? segments.map((segment) => String(object(segment).text ?? ''))\n : [];\n })\n .join('\\n')\n .slice(0, 4096);\n if (!provenance)\n return {\n generation: false as const,\n query,\n attemptId: ctx.attemptId,\n evidence: object(ctx.analysis).inputs,\n source: pin,\n };\n const model = object(provenance.generative);\n for (const field of ['provider', 'model', 'version']) text(model[field]);\n text(provenance.promptVersion);\n text(provenance.configurationVersion);\n // A judgment made under reviewer guidance references that guidance by id\n // and digest only; retrieval joins the text from the source's own record,\n // so instruction text never counts against the write budget.\n const instruction = this.instructionFor(ctx);\n return {\n generation: true as const,\n query,\n ...(instruction\n ? { instruction: { id: instruction.id, digest: instruction.digest } }\n : {}),\n model: {\n provider: String(model.provider),\n model: String(model.model),\n version: String(model.version),\n },\n promptVersion: String(provenance.promptVersion),\n configurationVersion: String(provenance.configurationVersion),\n attemptId: ctx.attemptId,\n evidence: object(ctx.analysis).inputs,\n source: pin,\n };\n }\n /** The example exactly as retrieval returns it; shared by the write-time size check. */\n private exampleOf(\n id: string,\n stored: string,\n data: Row,\n ctx: FeedbackActionContext,\n guidance?: { id: string; digest: string; text: string },\n ): FeedbackExample {\n return {\n feedbackId: id,\n digest: stored,\n itemId: ctx.itemId,\n actionId: ctx.review.actionId,\n revision: ctx.review.revision,\n handlerId: ctx.handlerId,\n handlerVersion: ctx.handlerVersion,\n judgment: data.judgment as 'correct' | 'incorrect',\n query: String(data.query),\n args: object(data.args),\n model: data.model as FeedbackExample['model'],\n promptVersion: String(data.promptVersion),\n configurationVersion: String(data.configurationVersion),\n ...(guidance ? { instruction: guidance } : {}),\n };\n }\n /**\n * The verified reviewer instruction the action's generation ran under: the\n * authenticated extraction record must match the generation's provenance.\n */\n private instructionFor(\n ctx: FeedbackActionContext,\n ): { id: string; digest: string; text: string } | undefined {\n const provenance = object(\n object(object(ctx.result.output).proposals).provenance,\n );\n const instructionRecord = object(\n object(ctx.analysis).configuration,\n ).reviewerInstruction;\n const recorded = provenance.reviewerInstruction\n ? object(provenance.reviewerInstruction)\n : undefined;\n if (!instructionRecord && !recorded) return undefined;\n const view = reviewerInstructionView(instructionRecord);\n if (!recorded || recorded.id !== view.id || recorded.digest !== view.digest)\n throw new Error('Feedback instruction integrity');\n return { id: view.id, digest: view.digest, text: view.text };\n }\n /** Internal saved-action gate; the execution owner supplies its transaction. */\n /**\n * The caller's own current interpretation judgment per displayed action\n * (#4503): not superseded, recorded by this actor, bound to the action's\n * displayed revision and binding, integrity-checked. Presentation only;\n * the caller has already read these actions under review authority.\n */\n async ownJudgments(\n itemId: string,\n actions: ReadonlyArray<{\n actionId: string;\n revision: number;\n bindingHash: string;\n }>,\n ): Promise<Map<string, import('./review-dto.js').ReviewFeedback>> {\n const result = new Map<string, import('./review-dto.js').ReviewFeedback>();\n if (!actions.length) return result;\n const wanted = new Map(actions.map((action) => [action.actionId, action]));\n const rows = await this.rows(\n this.options.db,\n \"item_id=? AND kind='interpretation' AND NOT EXISTS (SELECT 1 FROM intake_feedback successor WHERE successor.tenant_id=intake_feedback.tenant_id AND successor.confidential_scope_id=intake_feedback.confidential_scope_id AND successor.supersedes_id=intake_feedback.id)\",\n [itemId],\n );\n const newest = new Map<string, Row>();\n for (const row of rows) {\n let data: Row;\n try {\n data = object(row.data);\n } catch {\n continue;\n }\n const { digest: stored, ...body } = data;\n const action =\n typeof data.actionId === 'string'\n ? wanted.get(data.actionId)\n : undefined;\n if (\n !action ||\n typeof stored !== 'string' ||\n digest(body) !== stored ||\n data.reviewer !== this.scope().actorId ||\n data.revision !== action.revision ||\n data.bindingHash !== action.bindingHash ||\n !['correct', 'incorrect'].includes(String(data.judgment))\n )\n continue;\n const previous = newest.get(action.actionId);\n const at = (value: Row) => new Date(value.created_at as string).getTime();\n if (\n !previous ||\n at(row) > at(previous) ||\n (at(row) === at(previous) && String(row.id) > String(previous.id))\n )\n newest.set(action.actionId, row);\n }\n for (const [actionId, row] of newest) {\n const data = object(row.data);\n result.set(actionId, {\n id: String(row.id),\n judgment: data.judgment as 'correct' | 'incorrect',\n ...(typeof data.comment === 'string' && data.comment\n ? { comment: data.comment }\n : {}),\n recordedAt: new Date(row.created_at as string).toISOString(),\n });\n }\n return result;\n }\n async assertActionLineage(\n actionId: string,\n db: DatabaseInterface,\n proposalId: string,\n ): Promise<void> {\n await this.execution[feedbackActionTransaction](\n actionId,\n false,\n async (ctx) => {\n await this.provenance(ctx);\n },\n db,\n undefined,\n proposalId,\n );\n }\n async record(input: RecordFeedbackInput): Promise<FeedbackReceipt> {\n digest(input);\n text(input.requestId);\n if (\n !['correct', 'incorrect'].includes(input.judgment) ||\n (input.comment !== undefined &&\n (typeof input.comment !== 'string' || input.comment.length > 4000))\n )\n throw new Error('Invalid feedback');\n const frozen = structuredClone(input);\n return this.execution[feedbackActionTransaction](\n input.actionId,\n true,\n async (ctx) => {\n await this.authorize(ctx, 'capture');\n this.checkBinding(frozen, ctx);\n const requestHash = digest(frozen),\n key = `judgment:${frozen.requestId}`;\n const [replay] = await this.rows(\n ctx.db,\n 'item_id=? AND request_key=?',\n [ctx.itemId, key],\n );\n if (replay) {\n const data = object(replay.data);\n if (\n data.requestHash !== requestHash ||\n data.reviewer !== this.scope().actorId\n )\n throw new Error('Feedback request conflict');\n return this.receipt(replay);\n }\n if (frozen.supersedesId) {\n const [old] = await this.rows(\n ctx.db,\n 'item_id=? AND id=? AND kind=?',\n [ctx.itemId, frozen.supersedesId, 'interpretation'],\n );\n if (\n !old ||\n object(old.data).actionId !== frozen.actionId ||\n (await this.rows(ctx.db, 'supersedes_id=?', [old.id])).length\n )\n throw new Error('Feedback supersession conflict');\n }\n const { generation, ...provenance } = await this.provenance(ctx),\n routing = this.routing(ctx);\n // Interpretation judgments label a model suggestion; reviewer-selected\n // actions are captured as routing choices by their owning operation,\n // even when the item also carries a (different) model generation.\n if (!generation || ctx.origin === 'reviewer-selected')\n throw new Error('Feedback requires a model suggestion');\n const body = {\n version: 1,\n requestHash,\n reviewer: this.scope().actorId,\n actionId: ctx.review.actionId,\n revision: ctx.review.revision,\n reviewVersion: ctx.review.reviewVersion,\n bindingHash: ctx.review.bindingHash,\n handlerId: ctx.handlerId,\n handlerVersion: ctx.handlerVersion,\n args: ctx.args,\n ...(routing.projection ? { routing } : {}),\n judgment: frozen.judgment,\n comment: frozen.comment ?? '',\n ...provenance,\n };\n const row = await this.insert(\n ctx,\n key,\n 'interpretation',\n { ...body, digest: digest(body) },\n frozen.supersedesId ?? null,\n );\n // The judgment stores only the instruction reference, but retrieval\n // joins its text. Refuse here, inside the transaction, if that single\n // joined example could never fit the handler's read budget; otherwise\n // every later retrieval ranking it would fail closed scope-wide.\n const guidance = this.instructionFor(ctx);\n if (guidance) {\n const data = object(row.data);\n const selection = {\n version: this.config.version,\n configurationDigest: this.configurationDigest(),\n examples: [\n this.exampleOf(\n String(row.id),\n String(data.digest),\n data,\n ctx,\n guidance,\n ),\n ],\n };\n if (\n Buffer.byteLength(JSON.stringify(selection)) >\n Math.min(this.config.maxBytes, ctx.context.policy.maxBytes)\n )\n throw new Error('Feedback instruction exceeds retrieval budget');\n }\n const receipt = this.receipt(row);\n // Same transaction and executor: the host's entry commits or rolls\n // back with the judgment (#4522).\n await this.config.onRecorded?.({\n db: ctx.db,\n scope: this.scope(),\n receipt: structuredClone(receipt),\n input: structuredClone(frozen),\n });\n await this.authorize(ctx, 'capture');\n if (digest(routing) !== digest(this.routing(ctx)))\n throw new Error('Routing projection changed');\n return receipt;\n },\n );\n }\n /** Consume a durable owner event idempotently. Never derive correctness from these signals. */\n async observe(input: ObserveFeedbackInput): Promise<FeedbackReceipt> {\n digest(input);\n text(input.eventId);\n if (!['action_decision', 'downstream_outcome'].includes(input.kind))\n throw new Error('Invalid feedback kind');\n return this.execution[feedbackActionTransaction](\n input.actionId,\n true,\n async (ctx) => {\n await this.authorize(ctx, 'capture');\n this.checkBinding(input, ctx);\n const scope = this.scope();\n const table =\n input.kind === 'action_decision'\n ? 'intake_review_decisions'\n : 'intake_executions';\n const [event] = (\n await ctx.db.query(\n `SELECT * FROM ${table} WHERE tenant_id=? AND confidential_scope_id=? AND item_id=? AND action_id=? AND id=?`,\n scope.tenantId,\n scope.confidentialScopeId,\n ctx.itemId,\n input.actionId,\n input.eventId,\n )\n ).rows;\n if (!event || event.binding_hash !== ctx.review.bindingHash)\n throw new Error('Feedback event unavailable');\n const state =\n input.kind === 'action_decision' ? event.decision : event.state;\n if (\n input.kind === 'downstream_outcome' &&\n !['succeeded', 'failed', 'outcome_unknown'].includes(String(state))\n )\n throw new Error('Outcome is not terminal');\n const body = {\n version: 1,\n eventId: input.eventId,\n actionId: input.actionId,\n revision: ctx.review.revision,\n reviewer:\n input.kind === 'action_decision'\n ? object(event.data).reviewer\n : null,\n decisionMode:\n input.kind === 'action_decision'\n ? (object(event.data).mode ?? 'review')\n : null,\n selfDecision:\n input.kind === 'action_decision' &&\n object(event.data).selfDecision === true,\n observedBy: this.scope().actorId,\n principalId: object(event.data).principalId ?? null,\n signal: state,\n provenance: await this.provenance(ctx),\n };\n const key = `event:${input.kind}:${input.eventId}:${String(state)}`;\n const [existing] = await this.rows(\n ctx.db,\n 'item_id=? AND request_key=?',\n [ctx.itemId, key],\n );\n if (existing) return this.receipt(existing);\n const row = await this.insert(ctx, key, input.kind, {\n ...body,\n digest: digest(body),\n });\n await this.authorize(ctx, 'capture');\n return this.receipt(row);\n },\n );\n }\n private async example(\n row: Row,\n input: RetrieveFeedbackInput,\n executor?: DatabaseInterface,\n operation: 'retrieve' | 'verify' = 'retrieve',\n ): Promise<FeedbackExample | undefined> {\n if (++this.exampleChecks > this.config.maxScan) return undefined;\n try {\n const candidate = object(row.data);\n // Retention deliberately redacts ledger payloads. Reject tombstones before\n // issuing a UUID query: catching a PostgreSQL cast error cannot repair its transaction.\n if (\n typeof candidate.actionId !== 'string' ||\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(\n candidate.actionId,\n )\n )\n return undefined;\n return await this.execution[feedbackActionTransaction](\n candidate.actionId,\n false,\n async (ctx) => {\n await this.authorize(ctx, operation);\n await this.provenance(ctx);\n const guidance = this.instructionFor(ctx);\n const [current] = await this.rows(\n ctx.db,\n 'id=? AND kind=? AND NOT EXISTS (SELECT 1 FROM intake_feedback successor WHERE successor.tenant_id=intake_feedback.tenant_id AND successor.confidential_scope_id=intake_feedback.confidential_scope_id AND successor.supersedes_id=intake_feedback.id)',\n [row.id, 'interpretation'],\n );\n if (!current) return undefined;\n const data = object(current.data);\n const { digest: stored, ...body } = data;\n if (digest(body) !== stored) throw new Error('Feedback integrity');\n if (\n // A reviewer-selected action never labels a model suggestion. A\n // disposition says nothing about whether the suggestion was right.\n ctx.origin === 'reviewer-selected' ||\n data.revision !== ctx.review.revision ||\n data.bindingHash !== ctx.review.bindingHash ||\n data.attemptId !== ctx.attemptId ||\n data.promptVersion !== input.promptVersion ||\n data.configurationVersion !== input.configurationVersion ||\n digest(data.model) !== digest(input.model)\n )\n return undefined;\n // The stored reference must still name the source's verified record.\n const reference = data.instruction\n ? object(data.instruction)\n : undefined;\n if (\n !!reference !== !!guidance ||\n (reference &&\n (reference.id !== guidance?.id ||\n reference.digest !== guidance?.digest))\n )\n return undefined;\n const offered = input.offered.find(\n (entry) =>\n entry.handler.id === data.handlerId &&\n entry.handler.version === data.handlerVersion,\n );\n if (!offered) return undefined;\n const args = object(data.args);\n for (const [field, reference] of Object.entries(\n offered.handler.references,\n )) {\n if (\n reference.kind === 'candidate' &&\n Object.hasOwn(args, field) &&\n !offered.candidates.some(\n (candidate) =>\n candidate.id === args[field] &&\n candidate.model === reference.model,\n )\n )\n return undefined;\n }\n return this.exampleOf(\n String(current.id),\n String(stored),\n data,\n ctx,\n guidance,\n );\n },\n executor,\n input.providers ?? [input.model.provider],\n undefined,\n true,\n false,\n );\n } catch (error) {\n // A refusal excludes this example; a driver error has aborted the\n // shared PostgreSQL transaction and must not be swallowed (#4651).\n rethrowDatabaseFailure(error);\n return undefined;\n }\n }\n /** Reviewer routing choice, reusable without a model suggestion; fails closed like `example`. */\n private async routingExample(\n row: Row,\n input: RetrieveFeedbackInput,\n executor?: DatabaseInterface,\n /** Re-checking an earlier selection: only integrity and revocation count. */\n lineage = false,\n operation: 'retrieve' | 'verify' = 'retrieve',\n ): Promise<FeedbackExample | undefined> {\n if (++this.exampleChecks > this.config.maxScan) return undefined;\n try {\n const data = object(row.data);\n const { digest: stored, ...body } = data;\n const itemId = String(row.item_id);\n const uuid =\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n // Redacted tombstones carry no digest; reject before any UUID query.\n if (typeof stored !== 'string' || digest(body) !== stored)\n return undefined;\n const chosen = data.choice === 'handler';\n if (\n chosen &&\n (typeof data.actionId !== 'string' || !uuid.test(data.actionId))\n )\n return undefined;\n const offered = chosen\n ? input.offered.find(\n (entry) =>\n entry.handler.id === data.handlerId &&\n entry.handler.version === data.handlerVersion,\n )\n : undefined;\n if (chosen && !offered) return undefined;\n const args = chosen ? object(data.args) : {};\n if (offered)\n for (const [field, reference] of Object.entries(\n offered.handler.references,\n ))\n if (\n reference.kind === 'candidate' &&\n Object.hasOwn(args, field) &&\n !offered.candidates.some(\n (candidate) =>\n candidate.id === args[field] &&\n candidate.model === reference.model,\n )\n )\n return undefined;\n const providers = input.providers ?? [input.model.provider];\n const scope = this.scope();\n const current = async (db: DatabaseInterface) => {\n if (!(await this.permits(db, itemId, operation)))\n throw new Error('Feedback unavailable');\n const [attempt] = (\n await db.query(\n 'SELECT output_digest FROM intake_analysis_attempts WHERE tenant_id=? AND confidential_scope_id=? AND item_id=? AND id=?',\n scope.tenantId,\n scope.confidentialScopeId,\n itemId,\n data.attemptId,\n )\n ).rows;\n if (!attempt || attempt.output_digest !== data.attemptDigest)\n throw new Error('Feedback source unavailable');\n const evidence = data.evidence;\n if (!Array.isArray(evidence) || !evidence.length)\n throw new Error('Feedback source unavailable');\n for (const frozen of evidence) {\n const pinned = object(frozen);\n const [row] = (\n await db.query(\n \"SELECT content_hash FROM intake_evidence WHERE tenant_id=? AND confidential_scope_id=? AND item_id=? AND id=? AND state='durable'\",\n scope.tenantId,\n scope.confidentialScopeId,\n itemId,\n pinned.id,\n )\n ).rows;\n if (!row || row.content_hash !== pinned.hash)\n throw new Error('Feedback source unavailable');\n }\n if ((await this.rows(db, 'supersedes_id=?', [row.id])).length)\n throw new Error('Feedback superseded');\n };\n const example: FeedbackExample = {\n feedbackId: String(row.id),\n digest: stored,\n itemId,\n actionId: chosen ? String(data.actionId) : '',\n revision: chosen ? Number(data.revision) : 0,\n handlerId: chosen ? String(data.handlerId) : 'none',\n handlerVersion: chosen ? String(data.handlerVersion) : '',\n judgment: 'correct',\n query: String(data.query),\n args,\n kind: 'reviewer_routing',\n routing: {\n choice: chosen ? 'handler' : 'none',\n reason: typeof data.reason === 'string' ? data.reason : '',\n },\n };\n if (chosen)\n // The action binding, handler access, targets, providers and retention\n // are rechecked by the owning execution boundary.\n return await this.execution[feedbackActionTransaction](\n String(data.actionId),\n false,\n async (ctx) => {\n // Only an approved (or applied) reviewer choice is a routing example;\n // a later correction changes the revision and retires it until the\n // new revision is approved and captured again.\n if (\n ctx.itemId !== itemId ||\n ctx.origin !== 'reviewer-selected' ||\n // Settledness gates selection only; a later resolution, lapse or\n // outcome change must not revoke an example already used.\n (!lineage && !ctx.settled) ||\n data.revision !== ctx.review.revision ||\n data.bindingHash !== ctx.review.bindingHash ||\n data.attemptId !== ctx.attemptId ||\n data.handlerId !== ctx.handlerId ||\n data.handlerVersion !== ctx.handlerVersion ||\n digest(args) !== digest(ctx.args)\n )\n return undefined;\n await current(ctx.db);\n return example;\n },\n executor,\n providers,\n undefined,\n !lineage,\n false,\n );\n // No handler was chosen: the source item must still be readable under a\n // currently offered handler, with the generation recipients allowed.\n for (const entry of input.offered) {\n try {\n return await this.execution[feedbackDiscoveryContext](\n executor,\n itemId,\n entry.handler.id,\n entry.handler.version,\n async (context) => {\n if (\n providers.some(\n (provider) => !context.policy.providers.includes(provider),\n )\n )\n throw new Error('Feedback source provider unavailable');\n await current(context.db);\n return example;\n },\n async (context) => {\n if (\n providers.some(\n (provider) => !context.policy.providers.includes(provider),\n )\n )\n throw new Error('Feedback source provider unavailable');\n await current(context.db);\n },\n false,\n );\n } catch (error) {\n rethrowDatabaseFailure(error);\n /* try the next currently offered handler; none means excluded */\n }\n }\n return undefined;\n } catch (error) {\n rethrowDatabaseFailure(error);\n return undefined;\n }\n }\n private receivingContext(\n input: RetrieveFeedbackInput,\n executor: DatabaseInterface | undefined,\n work: (\n context: import('./execution-contracts.js').HandlerContext,\n ) => Promise<FeedbackSelection>,\n ): Promise<FeedbackSelection> {\n let limit = this.config.maxBytes;\n let bytes: number | undefined;\n const validate = async (\n context: import('./execution-contracts.js').HandlerContext,\n ) => {\n if (\n (input.providers ?? [input.model.provider]).some(\n (provider) => !context.policy.providers.includes(provider),\n )\n )\n throw new Error('Feedback recipient unavailable');\n limit = Math.min(limit, context.policy.maxBytes);\n if (bytes !== undefined && bytes > limit)\n throw new Error('Feedback limit');\n };\n const visit = (\n index: number,\n db: DatabaseInterface | undefined,\n ): Promise<FeedbackSelection> => {\n const entry = input.offered[index];\n return this.execution[feedbackDiscoveryContext](\n db,\n input.itemId,\n entry.handler.id,\n entry.handler.version,\n async (context) => {\n await validate(context);\n const selection =\n index + 1 < input.offered.length\n ? await visit(index + 1, context.db)\n : await work(context);\n bytes = Buffer.byteLength(JSON.stringify(selection));\n if (bytes > limit) throw new Error('Feedback limit');\n return selection;\n },\n validate,\n // Reading feedback never takes the receiving item's exclusive lock\n // either: a lineage re-check reaches here for a source item (#4651).\n false,\n );\n };\n return visit(0, executor);\n }\n async retrieve(\n input: RetrieveFeedbackInput,\n executor?: DatabaseInterface,\n ): Promise<FeedbackSelection> {\n text(input.query, 4096);\n const offered = input.offered[0];\n if (!offered)\n return {\n version: this.config.version,\n configurationDigest: this.configurationDigest(),\n examples: [],\n };\n const work = async (\n context: import('./execution-contracts.js').HandlerContext,\n ) => {\n const authorize = async (phase: 'initial' | 'final') => {\n if (\n !(await this.config.authorize({\n db: context.db,\n scope: this.scope(),\n itemId: input.itemId,\n operation: 'retrieve',\n }))\n ) {\n if (phase === 'initial') throw new FeedbackRetrievalDeniedError();\n throw new Error('Feedback unavailable');\n }\n };\n await authorize('initial');\n const scope = this.scope();\n const rows = (\n await context.db.query(\n \"SELECT * FROM intake_feedback WHERE tenant_id=? AND confidential_scope_id=? AND kind IN ('interpretation','reviewer_routing') ORDER BY id LIMIT ?\",\n scope.tenantId,\n scope.confidentialScopeId,\n this.config.maxScan,\n )\n ).rows;\n const ranked: Array<{ example: FeedbackExample; score: number }> = [];\n for (const row of rows) {\n const example =\n row.kind === 'reviewer_routing'\n ? await this.routingExample(row, input, context.db)\n : await this.example(row, input, context.db);\n if (!example) continue;\n const score = feedbackSimilarity(input.query, example.query);\n if (score >= this.config.minimumSimilarity)\n ranked.push({ example, score });\n }\n ranked.sort(\n (a, b) =>\n b.score - a.score ||\n a.example.feedbackId.localeCompare(b.example.feedbackId),\n );\n const selection = {\n version: this.config.version,\n configurationDigest: this.configurationDigest(),\n examples: ranked\n .slice(0, this.config.maxExamples)\n .map((entry) => entry.example),\n };\n await authorize('final');\n return selection;\n };\n return this.receivingContext(input, executor, work);\n }\n async assertSelection(\n input: RetrieveFeedbackInput,\n selection: FeedbackReferences,\n executor?: DatabaseInterface,\n ): Promise<void> {\n await this.checkSelection(input, selection, executor, 'retrieve');\n }\n /**\n * Re-verify the stored selection an existing generation was produced with\n * (#4504): the same checks as `assertSelection`, asked as `verify` (which\n * falls back to `retrieve` for authorizers that predate it).\n */\n async verifySelection(\n input: RetrieveFeedbackInput,\n selection: FeedbackReferences,\n executor?: DatabaseInterface,\n ): Promise<void> {\n await this.checkSelection(input, selection, executor, 'verify');\n }\n /**\n * `retrieve` revalidates a selection before provider disclosure; `verify`\n * re-checks the stored lineage of an existing generation (#4504).\n */\n private async checkSelection(\n input: RetrieveFeedbackInput,\n selection: FeedbackReferences,\n executor: DatabaseInterface | undefined,\n operation: 'retrieve' | 'verify',\n ): Promise<void> {\n if (\n selection.version !== this.config.version ||\n selection.configurationDigest !== this.configurationDigest() ||\n !Array.isArray(selection.examples) ||\n selection.examples.length > this.config.maxExamples ||\n new Set(selection.examples.map((example) => example.feedbackId)).size !==\n selection.examples.length ||\n Buffer.byteLength(JSON.stringify(selection)) > this.config.maxBytes\n )\n throw new Error('Feedback eligibility changed');\n const offered = input.offered[0];\n if (!offered) {\n if (selection.examples.length)\n throw new Error('Feedback eligibility changed');\n return;\n }\n const work = async (\n context: import('./execution-contracts.js').HandlerContext,\n ) => {\n if (!(await this.permits(context.db, input.itemId, operation)))\n throw new Error('Feedback unavailable');\n const examples: FeedbackExample[] = [];\n for (const expected of selection.examples) {\n const [row] = await this.rows(\n context.db,\n \"id=? AND kind IN ('interpretation','reviewer_routing')\",\n [expected.feedbackId],\n );\n const current = !row\n ? undefined\n : row.kind === 'reviewer_routing'\n ? await this.routingExample(row, input, context.db, true, operation)\n : await this.example(row, input, context.db, operation);\n if (\n !current ||\n current.digest !== expected.digest ||\n feedbackSimilarity(input.query, current.query) <\n this.config.minimumSimilarity\n )\n throw new Error('Feedback eligibility changed');\n examples.push(current);\n }\n if (!(await this.permits(context.db, input.itemId, operation)))\n throw new Error('Feedback unavailable');\n return { ...selection, examples };\n };\n await this.receivingContext(input, executor, work);\n }\n private async support(\n ctx: FeedbackActionContext,\n ids: string[],\n /** Re-checking stored support (read/adopt): only integrity and revocation count. */\n lineage = false,\n ): Promise<Array<{ id: string; digest: string; query: string }>> {\n if (\n !Array.isArray(ids) ||\n ids.length < 2 ||\n ids.length > this.config.maxExamples ||\n new Set(ids).size !== ids.length\n )\n throw new Error('Insufficient rule evidence');\n const provenance = await this.provenance(ctx),\n origins = new Set<string>(),\n result: Array<{ id: string; digest: string; query: string }> = [];\n for (const id of [...ids].sort()) {\n text(id);\n const [row] = await this.rows(\n ctx.db,\n \"id=? AND kind IN ('interpretation','reviewer_routing')\",\n [id],\n );\n if (!row) throw new Error('Rule evidence unavailable');\n const data = object(row.data);\n // A reviewer routing choice supports a rule only when it chose this handler.\n const routing = row.kind === 'reviewer_routing';\n if (\n routing &&\n (data.choice !== 'handler' || typeof data.actionId !== 'string')\n )\n throw new Error('Rule evidence unavailable');\n await this.execution[feedbackActionTransaction](\n String(data.actionId),\n false,\n async (source) => {\n await this.authorize(source, 'retrieve');\n await this.provenance(source);\n if (origins.has(source.itemId))\n throw new Error('Independent rule evidence required');\n origins.add(source.itemId);\n const { digest: stored, ...body } = data;\n const generationMatch = routing\n ? source.origin === 'reviewer-selected' &&\n (lineage || source.settled)\n : source.origin !== 'reviewer-selected' &&\n provenance.generation &&\n data.judgment === 'correct' &&\n data.promptVersion === provenance.promptVersion &&\n data.configurationVersion === provenance.configurationVersion &&\n digest(data.model) === digest(provenance.model) &&\n digest(data.routing ?? { args: data.args }) ===\n digest(this.routing(source));\n if (\n digest(body) !== stored ||\n !generationMatch ||\n data.revision !== source.review.revision ||\n data.bindingHash !== source.review.bindingHash ||\n data.attemptId !== source.attemptId ||\n data.handlerId !== source.handlerId ||\n data.handlerVersion !== source.handlerVersion ||\n data.handlerId !== ctx.handlerId ||\n data.handlerVersion !== ctx.handlerVersion ||\n digest(data.args) !== digest(source.args) ||\n digest(this.routing(source)) !== digest(this.routing(ctx)) ||\n (await this.rows(ctx.db, 'supersedes_id=?', [id])).length\n )\n throw new Error('Rule evidence unavailable');\n result.push({\n id,\n digest: String(stored),\n query: String(data.query),\n });\n },\n ctx.db,\n undefined,\n undefined,\n !(lineage && routing),\n );\n }\n return result;\n }\n async suggest(input: SuggestRuleInput): Promise<RuleSuggestion> {\n digest(input);\n text(input.requestId);\n if (!this.config.policy) throw new Error('Rule policy owner unavailable');\n return this.execution[feedbackActionTransaction](\n input.actionId,\n true,\n async (ctx) => {\n this.checkBinding(input, ctx);\n await this.authorize(ctx, 'suggest');\n const key = `rule:${input.requestId}`;\n // A replay returns the stored suggestion; its support is re-checked\n // as lineage (integrity and revocation), never re-selected.\n const [stored] = await this.rows(\n ctx.db,\n 'item_id=? AND request_key=?',\n [ctx.itemId, key],\n );\n if (stored) {\n if (object(stored.data).requestHash !== digest(input))\n throw new Error('Rule request conflict');\n await this.rule(ctx, String(stored.id));\n return this.ruleDTO(stored);\n }\n const support = await this.support(ctx, input.supportingFeedbackIds);\n const terms = feedbackTerms(support[0].query).filter((term) =>\n support.every((example) =>\n feedbackTerms(example.query).includes(term),\n ),\n );\n if (!terms.length) throw new Error('No shared routing evidence');\n const rule: RoutingRule = {\n handlerId: ctx.handlerId,\n handlerVersion: ctx.handlerVersion,\n matchTerms: terms,\n ...this.routing(ctx),\n };\n const preview = await this.config.policy!.preview({\n db: ctx.db,\n scope: this.scope(),\n rule: structuredClone(rule),\n });\n text(preview.version);\n text(preview.preview, 4000);\n const body = {\n version: 1,\n actionId: input.actionId,\n revision: ctx.review.revision,\n bindingHash: ctx.review.bindingHash,\n rule,\n supportingFeedback: support.map(({ id, digest }) => ({ id, digest })),\n expectedPolicyVersion: preview.version,\n preview: preview.preview,\n reviewer: this.scope().actorId,\n requestHash: digest(input),\n };\n const row = await this.insert(ctx, key, 'rule_suggestion', {\n ...body,\n digest: digest(body),\n });\n await this.authorize(ctx, 'suggest');\n await this.rule(ctx, String(row.id));\n return this.ruleDTO(row);\n },\n );\n }\n private ruleDTO(row: Row): RuleSuggestion {\n const data = object(row.data);\n return {\n id: String(row.id),\n digest: String(data.digest),\n itemId: String(row.item_id),\n rule: data.rule as unknown as RoutingRule,\n supportingFeedback:\n data.supportingFeedback as RuleSuggestion['supportingFeedback'],\n expectedPolicyVersion: String(data.expectedPolicyVersion),\n preview: String(data.preview),\n automaticActionEligible: false,\n };\n }\n private async rule(ctx: FeedbackActionContext, id: string): Promise<Row> {\n const [row] = await this.rows(ctx.db, 'item_id=? AND id=? AND kind=?', [\n ctx.itemId,\n id,\n 'rule_suggestion',\n ]);\n if (!row) throw new Error('Rule unavailable');\n const data = object(row.data),\n { digest: stored, ...body } = data;\n if (\n digest(body) !== stored ||\n data.actionId !== ctx.review.actionId ||\n data.revision !== ctx.review.revision ||\n data.bindingHash !== ctx.review.bindingHash\n )\n throw new Error('Stale rule');\n const rule = object(data.rule);\n if (\n rule.handlerId !== ctx.handlerId ||\n rule.handlerVersion !== ctx.handlerVersion ||\n digest({\n args: rule.args,\n ...(rule.projection ? { projection: rule.projection } : {}),\n }) !== digest(this.routing(ctx))\n )\n throw new Error('Rule routing projection changed');\n const support = data.supportingFeedback as Array<{\n id: string;\n digest: string;\n }>;\n const current = await this.support(\n ctx,\n support.map((entry) => entry.id),\n true,\n );\n if (\n digest(current.map(({ id, digest }) => ({ id, digest }))) !==\n digest(support)\n )\n throw new Error('Rule evidence changed');\n return row;\n }\n async readRule(input: ReadRuleInput): Promise<RuleSuggestion> {\n return this.execution[feedbackActionTransaction](\n input.actionId,\n true,\n async (ctx) => {\n this.checkBinding(input, ctx);\n await this.authorize(ctx, 'suggest');\n const suggestion = this.ruleDTO(\n await this.rule(ctx, input.suggestionId),\n );\n if (!this.config.policy)\n throw new Error('Rule policy owner unavailable');\n const current = await this.config.policy.preview({\n db: ctx.db,\n scope: this.scope(),\n rule: structuredClone(suggestion.rule),\n });\n if (\n current.version !== suggestion.expectedPolicyVersion ||\n current.preview !== suggestion.preview\n )\n throw new Error('Rule policy changed');\n await this.authorize(ctx, 'suggest');\n await this.rule(ctx, input.suggestionId);\n return suggestion;\n },\n );\n }\n async adopt(input: AdoptRuleInput): Promise<RuleAdoption> {\n digest(input);\n text(input.requestId);\n if (!this.config.policy) throw new Error('Rule policy owner unavailable');\n return this.execution[feedbackActionTransaction](\n input.actionId,\n true,\n async (ctx) => {\n this.checkBinding(input, ctx);\n await this.authorize(ctx, 'adopt');\n const row = await this.rule(ctx, input.suggestionId),\n suggestion = this.ruleDTO(row);\n if (\n input.expectedDigest !== suggestion.digest ||\n input.expectedPolicyVersion !== suggestion.expectedPolicyVersion\n )\n throw new Error('Stale rule');\n const requestHash = digest(input),\n key = `adopt:${input.requestId}`;\n const [replay] = await this.rows(\n ctx.db,\n 'item_id=? AND request_key=?',\n [ctx.itemId, key],\n );\n if (replay) {\n const data = object(replay.data);\n if (\n data.requestHash !== requestHash ||\n data.reviewer !== this.scope().actorId\n )\n throw new Error('Rule request conflict');\n return {\n id: String(replay.id),\n policyVersion: String(data.policyVersion),\n auditId: String(data.auditId),\n automaticActionEligible: false,\n };\n }\n const current = await this.config.policy!.preview({\n db: ctx.db,\n scope: this.scope(),\n rule: structuredClone(suggestion.rule),\n });\n if (current.version !== input.expectedPolicyVersion)\n throw new Error('Policy version changed');\n const applied = await this.config.policy!.adopt({\n db: ctx.db,\n scope: this.scope(),\n rule: structuredClone(suggestion.rule),\n expectedVersion: input.expectedPolicyVersion,\n requestId: input.requestId,\n });\n text(applied.version);\n text(applied.auditId);\n if (applied.version === input.expectedPolicyVersion)\n throw new Error('Policy version did not advance');\n const verified = await this.config.policy!.preview({\n db: ctx.db,\n scope: this.scope(),\n rule: structuredClone(suggestion.rule),\n });\n if (verified.version !== applied.version)\n throw new Error('Policy adoption mismatch');\n const body = {\n version: 1,\n requestHash,\n suggestionId: suggestion.id,\n suggestionDigest: suggestion.digest,\n previousPolicyVersion: input.expectedPolicyVersion,\n policyVersion: applied.version,\n auditId: applied.auditId,\n reviewer: this.scope().actorId,\n automaticActionEligible: false,\n };\n const saved = await this.insert(ctx, key, 'rule_adoption', {\n ...body,\n digest: digest(body),\n });\n await this.authorize(ctx, 'adopt');\n await this.rule(ctx, input.suggestionId);\n return {\n id: String(saved.id),\n policyVersion: applied.version,\n auditId: applied.auditId,\n automaticActionEligible: false,\n };\n },\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as intakeBindingDigest } from "./execution-
|
|
1
|
+
import { i as intakeBindingDigest } from "./execution-ySzcTXW3.js";
|
|
2
2
|
//#region src/reviewer-instruction.ts
|
|
3
3
|
var REVIEWER_INSTRUCTION_MAX_LENGTH = 4e3;
|
|
4
4
|
var ReviewerInstructionInvalidError = class extends Error {
|
|
@@ -30,4 +30,4 @@ function reviewerInstructionView(value) {
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { reviewerInstructionView as i, ReviewerInstructionInvalidError as n, ReviewerInstructionStaleError as r, REVIEWER_INSTRUCTION_MAX_LENGTH as t };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=reviewer-instruction-
|
|
33
|
+
//# sourceMappingURL=reviewer-instruction-Bst9wIak.js.map
|
package/dist/chunks/{reviewer-instruction-BeOYVCVk.js.map → reviewer-instruction-Bst9wIak.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer-instruction-
|
|
1
|
+
{"version":3,"file":"reviewer-instruction-Bst9wIak.js","names":[],"sources":["../../src/reviewer-instruction.ts"],"sourcesContent":["/** Shared server-side projection of the persisted reviewer instruction record. */\nimport { intakeBindingDigest as digest } from './execution.js';\nimport type { ReviewerInstruction } from './review-dto.js';\n\n/** Reviewer instruction text ceiling; the prompt input budget still applies. */\nexport const REVIEWER_INSTRUCTION_MAX_LENGTH = 4000;\n\n/**\n * Instruction text is empty, whitespace-only or longer than the ceiling. Hosts\n * surface it inline as a validation result, never as an access denial.\n */\nexport class ReviewerInstructionInvalidError extends Error {\n constructor() {\n super('Invalid reviewer instruction');\n this.name = 'ReviewerInstructionInvalidError';\n }\n}\n\n/**\n * The anchor generation is superseded or a reinterpretation is still in flight.\n * Hosts surface it as a refresh-and-retry signal, never as an access denial.\n */\nexport class ReviewerInstructionStaleError extends Error {\n constructor() {\n super('Stale reviewer instruction');\n this.name = 'ReviewerInstructionStaleError';\n }\n}\n\n/** Verify the record's own digest and project its browser-safe shape. */\nexport function reviewerInstructionView(value: unknown): ReviewerInstruction {\n const parsed: unknown = typeof value === 'string' ? JSON.parse(value) : value;\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))\n throw new Error('Reviewer instruction integrity');\n const { digest: stored, ...body } = parsed as Record<string, unknown>;\n if (\n body.kind !== 'reviewer_instruction' ||\n typeof stored !== 'string' ||\n typeof body.id !== 'string' ||\n typeof body.text !== 'string' ||\n typeof body.actorId !== 'string' ||\n typeof body.recordedAt !== 'string' ||\n (body.supersedesId !== null && typeof body.supersedesId !== 'string') ||\n digest(body) !== stored\n )\n throw new Error('Reviewer instruction integrity');\n return {\n id: body.id,\n text: body.text,\n actorId: body.actorId,\n recordedAt: body.recordedAt,\n supersedesId: body.supersedesId,\n digest: stored,\n };\n}\n"],"mappings":";;AAKO,IAAM,kCAAkC;AAMxC,IAAM,kCAAN,cAA8C,MAAM;CACzD,cAAc;EACZ,MAAM,8BAA8B;EACpC,KAAK,OAAO;CACd;AACF;AAMO,IAAM,gCAAN,cAA4C,MAAM;CACvD,cAAc;EACZ,MAAM,4BAA4B;EAClC,KAAK,OAAO;CACd;AACF;AAGO,SAAS,wBAAwB,OAAqC;CAC3E,MAAM,SAAkB,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;CACxE,IAAI,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAC/D,MAAM,IAAI,MAAM,gCAAgC;CAClD,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS;CACpC,IACE,KAAK,SAAS,0BACd,OAAO,WAAW,YAClB,OAAO,KAAK,OAAO,YACnB,OAAO,KAAK,SAAS,YACrB,OAAO,KAAK,YAAY,YACxB,OAAO,KAAK,eAAe,YAC1B,KAAK,iBAAiB,QAAQ,OAAO,KAAK,iBAAiB,YAC5D,oBAAO,IAAI,MAAM,QAEjB,MAAM,IAAI,MAAM,gCAAgC;CAClD,OAAO;EACL,IAAI,KAAK;EACT,MAAM,KAAK;EACX,SAAS,KAAK;EACd,YAAY,KAAK;EACjB,cAAc,KAAK;EACnB,QAAQ;CACV;AACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database failures inside ingestion reads (#4651). Server-only.
|
|
3
|
+
*
|
|
4
|
+
* A PostgreSQL deadlock (`40P01`) or serialization failure (`40001`) rolls the
|
|
5
|
+
* whole transaction back: it says nothing about the data, and the same work
|
|
6
|
+
* may simply run again. Any driver error also leaves a PostgreSQL transaction
|
|
7
|
+
* aborted, so code that excludes one bad row by catching its error must let a
|
|
8
|
+
* driver error through instead of carrying on in a dead transaction.
|
|
9
|
+
*/
|
|
10
|
+
/** True for a deadlock or serialization failure anywhere in the cause chain. */
|
|
11
|
+
export declare function isTransactionConflict(error: unknown): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* True when the error came from the database driver (a SQLSTATE or SQLite
|
|
14
|
+
* code, or the aborted-transaction wording), not from an ingestion or host
|
|
15
|
+
* refusal. Such an error must propagate out of the transaction.
|
|
16
|
+
*/
|
|
17
|
+
export declare function isDatabaseFailure(error: unknown): boolean;
|
|
18
|
+
/** Rethrow a driver error; anything else is the caller's to handle. */
|
|
19
|
+
export declare function rethrowDatabaseFailure(error: unknown): void;
|
|
20
|
+
/** Runs per conflict-retried unit of work, including the first. */
|
|
21
|
+
export declare const TRANSACTION_CONFLICT_ATTEMPTS = 5;
|
|
22
|
+
/**
|
|
23
|
+
* Run `work` (one complete transaction) again after a deadlock or
|
|
24
|
+
* serialization failure, with a short jittered pause, up to
|
|
25
|
+
* {@link TRANSACTION_CONFLICT_ATTEMPTS} runs. Any other error, and the last
|
|
26
|
+
* conflict, propagate unchanged.
|
|
27
|
+
*/
|
|
28
|
+
export declare function retryTransactionConflicts<T>(work: () => Promise<T>, attempts?: number): Promise<T>;
|
|
29
|
+
//# sourceMappingURL=database-conflicts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-conflicts.d.ts","sourceRoot":"","sources":["../src/database-conflicts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqBH,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAQ7D;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWzD;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE3D;AAED,mEAAmE;AACnE,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACtB,QAAQ,SAAgC,GACvC,OAAO,CAAC,CAAC,CAAC,CAUZ"}
|
package/dist/execution.d.ts
CHANGED
|
@@ -87,14 +87,25 @@ export declare class IntakeExecutionService {
|
|
|
87
87
|
private review;
|
|
88
88
|
/** Same-executor current review/evidence/target gate for the owning feedback ledger. */
|
|
89
89
|
/** Join an existing owning transaction; its outer boundary restores retention after rollback. */
|
|
90
|
-
[feedbackDiscoveryContext]<T>(db: DatabaseInterface | undefined, itemId: string, handlerId: string, handlerVersion: string, work: (context: HandlerContext) => Promise<T>, revalidate?: (context: HandlerContext) => Promise<void
|
|
90
|
+
[feedbackDiscoveryContext]<T>(db: DatabaseInterface | undefined, itemId: string, handlerId: string, handlerVersion: string, work: (context: HandlerContext) => Promise<T>, revalidate?: (context: HandlerContext) => Promise<void>,
|
|
91
|
+
/** False for a feedback read: no exclusive item lock (#4651). */
|
|
92
|
+
exclusive?: boolean): Promise<T>;
|
|
91
93
|
[feedbackActionTransaction]<T>(actionId: string, reviewer: boolean, work: (value: FeedbackActionContext) => Promise<T>, executor?: DatabaseInterface, requiredProviders?: string[], proposalId?: string,
|
|
92
94
|
/**
|
|
93
95
|
* Compare target revisions (default). A lineage re-check of a reviewer
|
|
94
96
|
* routing choice passes false: its meaning is the handler choice, so later
|
|
95
97
|
* writes to the target only need the target to remain accessible.
|
|
96
98
|
*/
|
|
97
|
-
targetRevisions?: boolean
|
|
99
|
+
targetRevisions?: boolean,
|
|
100
|
+
/**
|
|
101
|
+
* False when the work only reads an example (#4651). A read must not take
|
|
102
|
+
* the exclusive lock on the source item: retrieval visits many source
|
|
103
|
+
* items, in an order that differs per read, and held them to the end of
|
|
104
|
+
* the reading transaction, so parallel reads deadlocked on PostgreSQL.
|
|
105
|
+
* Unlocked, the binding is loaded before and after the work and both
|
|
106
|
+
* loads must agree, including the source item's analysis revision.
|
|
107
|
+
*/
|
|
108
|
+
exclusive?: boolean): Promise<T>;
|
|
98
109
|
private feedbackLineage;
|
|
99
110
|
getAction(actionId: string): Promise<ProposalReview>;
|
|
100
111
|
/** Bounded reload discovery. The cursor is an opaque action ID, never authority. */
|
package/dist/execution.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EAGZ,cAAc,EACd,sBAAsB,EAItB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAEhB,WAAW,EACX,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,aAAa,EAClB,oBAAoB,EACpB,YAAY,EACZ,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,mBAAmB,0BAA0B,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;oEACoE;AACpE,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD;AASD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA0BnC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;
|
|
1
|
+
{"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../src/execution.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,KAAK,EAEV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EACV,YAAY,EAGZ,cAAc,EACd,sBAAsB,EAItB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAEhB,WAAW,EACX,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,KAAK,aAAa,EAClB,oBAAoB,EACpB,YAAY,EACZ,KAAK,iBAAiB,EACvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,qBAAqB,EAC1B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,mBAAmB,0BAA0B,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;oEACoE;AACpE,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD;AASD,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA0BnC,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE1D;AA6CD,8FAA8F;AAC9F,qBAAa,sBAAsB;IAa/B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE7B;IACJ,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAIjB;gBAEgB,OAAO,EAAE,gBAAgB,EAC1C,MAAM,EAAE,sBAAsB;IAkBhC,OAAO,CAAC,GAAG;YAGG,EAAE;YAKF,aAAa;YA2Bb,gBAAgB;YAiChB,eAAe;YAoBf,eAAe;YAoCf,IAAI;YAeJ,MAAM;YA0BN,IAAI;IAiClB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,SAAS;IAuBjB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IAoBhB;;;;;OAKG;YACW,SAAS;YAmET,MAAM;YAsDN,SAAS;IAwCvB,uFAAuF;IACjF,oBAAoB,CAAC,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAC5C,OAAO,CAAC,CAAC,CAAC;IAKb,8EAA8E;IAC9E,CAAC,oBAAoB,CAAC,CAAC,CAAC,EACtB,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,EACzB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,EACrE,aAAa,UAAQ,GACpB,OAAO,CAAC,CAAC,CAAC;YA2CC,gBAAgB;YAoGhB,KAAK;IA6BnB;;;;;;;;;;;;;;;;OAgBG;IACG,CAAC,YAAY,CAAC,CAClB,IAAI,EAAE,GAAG,EACT,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,GACA,OAAO,CAAC,OAAO,CAAC;IA2BnB,OAAO,CAAC,MAAM;IAad,wFAAwF;IACxF,iGAAiG;IACjG,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAC1B,EAAE,EAAE,iBAAiB,GAAG,SAAS,EACjC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,EAC7C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC;IACvD,iEAAiE;IACjE,SAAS,UAAO,GACf,OAAO,CAAC,CAAC,CAAC;IAcb,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,OAAO,CAAC,CAAC,CAAC,EAClD,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAC5B,UAAU,CAAC,EAAE,MAAM;IACnB;;;;OAIG;IACH,eAAe,UAAO;IACtB;;;;;;;OAOG;IACH,SAAS,UAAO,GACf,OAAO,CAAC,CAAC,CAAC;YA8KC,eAAe;IA8BvB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwC1D,oFAAoF;IAC9E,WAAW,CACf,MAAM,EAAE,MAAM,EACd,KAAK,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9C,OAAO,CAAC,UAAU,CAAC;IAwPtB;;;;;;OAMG;YACW,YAAY;YAiKZ,OAAO;IAwGf,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAU3E;;;;OAIG;YACW,sBAAsB;IAkCpC,uFAAuF;YACzE,aAAa;IAkFrB,cAAc,CAClB,KAAK,EAAE,WAAW,EAClB,IAAI,GAAE,QAAQ,GAAG,YAAuB,GACvC,OAAO,CAAC,cAAc,CAAC;YA0JZ,cAAc;YA4Cd,QAAQ;YA0LR,SAAS;IAgFvB,OAAO,CAAC,QAAQ;YAMF,UAAU;YA8DV,MAAM;IAqEd,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmTpD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkG9D,uFAAuF;IACjF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA+EnE;;;;OAIG;YACW,YAAY;IAc1B,qDAAqD;YACvC,WAAW;IAYzB,OAAO,CAAC,cAAc;IAStB,4FAA4F;YAC9E,cAAc;IAsB5B,4FAA4F;YAC9E,cAAc;IAa5B,+FAA+F;YACjF,cAAc;IA+B5B,sGAAsG;YACxF,eAAe;IAiF7B,gGAAgG;IAC1F,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAoFnE,oFAAoF;IAC9E,kBAAkB,CACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAQvC;;;;OAIG;IACG,uBAAuB,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAsCvC,iGAAiG;IAC3F,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuF9D,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAgRzD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAsCxD;iFAC6E;IACvE,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;IAGpE;;+EAE2E;IACrE,gBAAgB,CACpB,KAAK,GAAE,iBAAsB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IA0F5B;;oBAEgB;YACF,wBAAwB;IAyBtC;iDAC6C;YAC/B,WAAW;CAgB1B;AAED,iGAAiG;AACjG,wBAAsB,oBAAoB,CACxC,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAChD,EACD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAC7C,OAAO,CAAC,YAAY,CAAC,CA6BvB"}
|
package/dist/execution.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as resolveIntakePolicy, i as intakeBindingDigest, n as IntakeExecutionService, r as continueIntakeReview, t as IntakeAccessDeniedError } from "./chunks/execution-
|
|
1
|
+
import { a as resolveIntakePolicy, i as intakeBindingDigest, n as IntakeExecutionService, r as continueIntakeReview, t as IntakeAccessDeniedError } from "./chunks/execution-ySzcTXW3.js";
|
|
2
2
|
export { IntakeAccessDeniedError, IntakeExecutionService, continueIntakeReview, intakeBindingDigest, resolveIntakePolicy };
|
package/dist/feedback.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qBAAa,4BAA6B,SAAQ,KAAK;;CAKtD;AAGD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
package/dist/manifest.json
CHANGED