@ixo/decision-oracle 0.2.33 → 0.3.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 (55) hide show
  1. package/README.md +3 -1
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +12 -4
  4. package/dist/app.js.map +1 -1
  5. package/dist/cli/commands/facts-run.d.ts +3 -2
  6. package/dist/cli/commands/facts-run.d.ts.map +1 -1
  7. package/dist/cli/commands/facts-run.js +52 -108
  8. package/dist/cli/commands/facts-run.js.map +1 -1
  9. package/dist/config.d.ts +12 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +19 -0
  12. package/dist/config.js.map +1 -1
  13. package/dist/env.d.ts +5 -0
  14. package/dist/env.d.ts.map +1 -1
  15. package/dist/lib/facts/builder.d.ts +4 -9
  16. package/dist/lib/facts/builder.d.ts.map +1 -1
  17. package/dist/lib/facts/builder.js +12 -41
  18. package/dist/lib/facts/builder.js.map +1 -1
  19. package/dist/lib/facts/deps.d.ts +15 -0
  20. package/dist/lib/facts/deps.d.ts.map +1 -0
  21. package/dist/lib/facts/deps.js +37 -0
  22. package/dist/lib/facts/deps.js.map +1 -0
  23. package/dist/lib/facts/preview.d.ts +34 -0
  24. package/dist/lib/facts/preview.d.ts.map +1 -0
  25. package/dist/lib/facts/preview.js +46 -0
  26. package/dist/lib/facts/preview.js.map +1 -0
  27. package/dist/lib/openhands/why.d.ts +11 -0
  28. package/dist/lib/openhands/why.d.ts.map +1 -1
  29. package/dist/lib/openhands/why.js +32 -26
  30. package/dist/lib/openhands/why.js.map +1 -1
  31. package/dist/middleware/capability.d.ts +1 -1
  32. package/dist/middleware/capability.d.ts.map +1 -1
  33. package/dist/middleware/capability.js +4 -0
  34. package/dist/middleware/capability.js.map +1 -1
  35. package/dist/routes/v1/admin.d.ts.map +1 -1
  36. package/dist/routes/v1/admin.js +2 -1
  37. package/dist/routes/v1/admin.js.map +1 -1
  38. package/dist/routes/v1/index.d.ts.map +1 -1
  39. package/dist/routes/v1/index.js +2 -0
  40. package/dist/routes/v1/index.js.map +1 -1
  41. package/dist/routes/v1/info.d.ts.map +1 -1
  42. package/dist/routes/v1/info.js +7 -7
  43. package/dist/routes/v1/info.js.map +1 -1
  44. package/dist/routes/v1/practice.d.ts +39 -0
  45. package/dist/routes/v1/practice.d.ts.map +1 -0
  46. package/dist/routes/v1/practice.js +320 -0
  47. package/dist/routes/v1/practice.js.map +1 -0
  48. package/dist/workflows/evaluate.d.ts.map +1 -1
  49. package/dist/workflows/evaluate.js +2 -1
  50. package/dist/workflows/evaluate.js.map +1 -1
  51. package/docs/api.md +5 -2
  52. package/docs/guide.md +52 -0
  53. package/package.json +1 -1
  54. package/templates/project/.dev.vars.example +3 -0
  55. package/templates/project/wrangler.jsonc +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAQ5C,eAAO,MAAM,IAAI,qDAAqB,CAAC"}
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAY5C,eAAO,MAAM,IAAI,qDAAqB,CAAC"}
@@ -12,7 +12,7 @@ import { Hono } from "hono";
12
12
  import { oracleWebDid } from "../../lib/ixo/ucan.js";
13
13
  import { HIRE_PATH, SCAN_PATH } from "../../lib/openhands/routes.js";
14
14
  import { WHY_PATH } from "../../lib/openhands/why.js";
15
- import { advertisedPrice, reviewBillingActive } from "../../lib/payments/review-billing.js";
15
+ import { advertisedPrice, planIsIxoManaged, reviewBillingActive, } from "../../lib/payments/review-billing.js";
16
16
  import { effectivePricing, evaluationFeeFor, getOracle } from "../../oracle.js";
17
17
  import { nameOf } from "./api/protocols.js";
18
18
  export const info = new Hono();
@@ -35,6 +35,7 @@ info.get("/", async (c) => {
35
35
  // A marketplace listing changes by a redeploy, not by the request — long enough to spare a
36
36
  // crawler, short enough that a price/policy edit shows up within minutes.
37
37
  c.header("cache-control", "public, max-age=300");
38
+ const deps = { config, logger: c.get("logger"), trace: c.get("trace"), cache: c.env.CACHE_KV };
38
39
  return c.json({
39
40
  name,
40
41
  description,
@@ -79,12 +80,11 @@ info.get("/", async (c) => {
79
80
  // from the company's credits (IXO's plan for the oracle allows it; the collection's evaluation leg
80
81
  // stays empty) — or `escrow`, the collection's on-chain evaluation payment (`pricing`).
81
82
  // `pricePerReview` is the published per-review price, the Agent Card's.
82
- reviewBilling: await reviewBillingInfo({
83
- config,
84
- logger: c.get("logger"),
85
- trace: c.get("trace"),
86
- cache: c.env.CACHE_KV,
87
- }),
83
+ reviewBilling: await reviewBillingInfo(deps),
84
+ // Whether IXO runs this oracle (the engine plan's `ixoManaged`, what lets register accept a
85
+ // `upay` fee), so an app need not keep its own list of IXO's checkers. null: the engine could
86
+ // not say just now.
87
+ ixoManaged: await planIsIxoManaged(deps).catch(() => null),
88
88
  // An OpenHands checker (`openhands` in defineOracle) — the two webhooks the OpenHands app calls
89
89
  // on THIS host after an ask grants this oracle, and the claimant's "why" read (lib/openhands/
90
90
  // why.ts). Absent ⇒ not an OpenHands checker.
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * `POST /v1/practice-check` — what this oracle WOULD decide on a completion before the person hands
3
+ * it in (IXO-6360). A would-be claim on a watched collection runs the same build a claim's evaluate
4
+ * step runs — this oracle's own facts table, the real tools, the real AI, the real collection
5
+ * window, `now` as the clock and the would-be submitter as the claim's agent — and then the
6
+ * engine's preview route instead of `decide` (lib/facts/preview.ts, shared with `facts run
7
+ * --preview`). Nothing is persisted: no claim, chain write, fee, grant, duplicate-registry row,
8
+ * review task, archive copy or email, and the engine bills nothing. Only the AI spend is recorded,
9
+ * as a real check's is (`ai.tokens`, `ai_calls`), under a `practice-…` claim id.
10
+ *
11
+ * Two things differ from a real claim, both fail-closed: the stock duplicate lane INSERTS before it
12
+ * reads, so it is replaced by the dry-run placeholder (`uniqueNotRun`, band `review`); and the
13
+ * frequency count adds the would-be claim itself, which a real claim's count already holds.
14
+ *
15
+ * Caller: a UCAN `practice/check` (strict) from one of `PRACTICE_CHECK_CALLERS` — an app's server
16
+ * acting for its signed-in person. Unset ⇒ the route is off (404). Limited per submitter per
17
+ * collection, per submitter and per oracle, per UTC day (`PRACTICE_CHECK_LIMIT_*`).
18
+ */
19
+ import { Hono } from "hono";
20
+ import type { AppEnv } from "../../context.js";
21
+ import { type Decision } from "../../lib/engine/types.js";
22
+ import type { RubricView } from "../../lib/openhands/explain.js";
23
+ export declare const practice: Hono<AppEnv, import("hono/types").BlankSchema, "/">;
24
+ export type PracticeOutcome = "approve" | "review" | "reject";
25
+ export interface PracticeReason {
26
+ code: string;
27
+ outcome: "passed" | "failed" | "review";
28
+ reason: string;
29
+ }
30
+ /** The engine's would-be verdict in the contract's three words — read, never computed. */
31
+ export declare function outcomeOf(decision: Pick<Decision, "status" | "verdict">): PracticeOutcome;
32
+ /**
33
+ * Every gate and criterion the engine evaluated, each with the rubric's own sentence for its code
34
+ * (the engine's reason line when the rubric names none). A failed gate that held the claim for a
35
+ * person reads `review`. Display only, like explain.ts; a criterion reads as passed from half
36
+ * marks up, as the claimant's "why" does.
37
+ */
38
+ export declare function practiceReasons(decision: Decision, rubric: RubricView | null): PracticeReason[];
39
+ //# sourceMappingURL=practice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"practice.d.ts","sourceRoot":"","sources":["../../../src/routes/v1/practice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAE,KAAK,QAAQ,EAAmC,MAAM,wBAAwB,CAAC;AAYxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQ9D,eAAO,MAAM,QAAQ,qDAAqB,CAAC;AAoB3C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAuKD,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC,GAAG,eAAe,CAGzF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,cAAc,EAAE,CAkC/F"}
@@ -0,0 +1,320 @@
1
+ /**
2
+ * `POST /v1/practice-check` — what this oracle WOULD decide on a completion before the person hands
3
+ * it in (IXO-6360). A would-be claim on a watched collection runs the same build a claim's evaluate
4
+ * step runs — this oracle's own facts table, the real tools, the real AI, the real collection
5
+ * window, `now` as the clock and the would-be submitter as the claim's agent — and then the
6
+ * engine's preview route instead of `decide` (lib/facts/preview.ts, shared with `facts run
7
+ * --preview`). Nothing is persisted: no claim, chain write, fee, grant, duplicate-registry row,
8
+ * review task, archive copy or email, and the engine bills nothing. Only the AI spend is recorded,
9
+ * as a real check's is (`ai.tokens`, `ai_calls`), under a `practice-…` claim id.
10
+ *
11
+ * Two things differ from a real claim, both fail-closed: the stock duplicate lane INSERTS before it
12
+ * reads, so it is replaced by the dry-run placeholder (`uniqueNotRun`, band `review`); and the
13
+ * frequency count adds the would-be claim itself, which a real claim's count already holds.
14
+ *
15
+ * Caller: a UCAN `practice/check` (strict) from one of `PRACTICE_CHECK_CALLERS` — an app's server
16
+ * acting for its signed-in person. Unset ⇒ the route is off (404). Limited per submitter per
17
+ * collection, per submitter and per oracle, per UTC day (`PRACTICE_CHECK_LIMIT_*`).
18
+ */
19
+ import { Hono } from "hono";
20
+ import { z } from "zod";
21
+ import { CollectionId } from "../../contracts/index.js";
22
+ import { createEngineClient } from "../../lib/engine/client.js";
23
+ import { EngineError, isManifestUnusable } from "../../lib/engine/types.js";
24
+ import { AppError } from "../../lib/errors.js";
25
+ import { persistAiCalls } from "../../lib/facts/builder.js";
26
+ import { previewClaim, UNIQUE_NOT_RUN, uniqueNotRun } from "../../lib/facts/preview.js";
27
+ import { producerOf } from "../../lib/facts/tools.js";
28
+ import { countAgentClaimsInWindow, getCollection, } from "../../lib/ixo/blocksync/index.js";
29
+ import { readRubricView } from "../../lib/openhands/why.js";
30
+ import { makeReviewerNote, noteInput, reviewerNoteEnabled } from "../../lib/review/reviewer-note.js";
31
+ import { reviewTaskOf } from "../../lib/review/tasks.js";
32
+ import { inSpan } from "../../lib/spans.js";
33
+ import { validate } from "../../lib/validator.js";
34
+ import { getOracle } from "../../oracle.js";
35
+ export const practice = new Hono();
36
+ const Body = z.object({
37
+ collectionId: CollectionId,
38
+ submitter: z.string().regex(/^ixo1[02-9ac-hj-np-z]{38,58}$/, "expected an ixo1… address"),
39
+ answers: z.record(z.string(), z.unknown()),
40
+ attachments: z
41
+ .array(z.object({
42
+ /** The root question the file answers — what `tools.attachments.on()` filters by. */
43
+ question: z.string().min(1).max(200),
44
+ name: z.string().min(1).max(200),
45
+ mediaType: z.string().min(1).max(200),
46
+ dataUrl: z.string().regex(/^data:[^,]*;base64,/, "expected a base64 data: URL"),
47
+ }))
48
+ .max(20)
49
+ .optional(),
50
+ });
51
+ practice.post("/", validate("json", Body), async (c) => {
52
+ const config = c.get("config");
53
+ if (config.PRACTICE_CHECK_CALLERS.length === 0)
54
+ throw AppError.notFound("Not found");
55
+ if (!config.PRACTICE_CHECK_CALLERS.includes(c.get("principal").did)) {
56
+ throw AppError.forbidden("This caller may not run practice checks (PRACTICE_CHECK_CALLERS)");
57
+ }
58
+ const body = c.req.valid("json");
59
+ const { collectionId, submitter } = body;
60
+ const logger = c.get("logger");
61
+ const trace = c.get("trace");
62
+ const db = await c.var.db();
63
+ const watched = await db.query.watchedCollections.findFirst({
64
+ where: (t, { eq }) => eq(t.collectionId, collectionId),
65
+ });
66
+ if (!watched)
67
+ throw AppError.notFound(`This oracle does not check collection ${collectionId}`);
68
+ const blocksync = { config, trace };
69
+ const protocolDid = watched.protocolDid ?? (await getCollection(blocksync, collectionId))?.protocol;
70
+ if (!protocolDid)
71
+ throw AppError.notFound(`Collection ${collectionId} has no protocol`);
72
+ const engine = createEngineClient({ config, logger, trace, cache: c.env.CACHE_KV });
73
+ const manifest = await engine.getManifest(protocolDid).catch(unreachable);
74
+ if (isManifestUnusable(manifest)) {
75
+ throw cannotCheck("this ask's rules cannot be checked automatically", "rubric-unusable");
76
+ }
77
+ let attachments;
78
+ try {
79
+ attachments = (body.attachments ?? []).map((a) => ({
80
+ question: a.question,
81
+ name: a.name,
82
+ mediaType: a.mediaType,
83
+ // The bytes ARE the reference (no store to fetch them from); every reader in the kit takes a
84
+ // data: URL (lib/ixo/attachments.ts), as the CLI's dry run does.
85
+ url: a.dataUrl,
86
+ size: atob(a.dataUrl.slice(a.dataUrl.indexOf(",") + 1)).length,
87
+ }));
88
+ }
89
+ catch {
90
+ throw AppError.badRequest("An attachment's dataUrl is not valid base64");
91
+ }
92
+ const limits = await spendLimits(c, collectionId, submitter);
93
+ if (!limits.ok) {
94
+ c.header("Retry-After", String(limits.retryAfter));
95
+ return c.json({
96
+ error: {
97
+ code: "RATE_LIMITED",
98
+ message: `Practice limit reached: try again after ${limits.resetsAt}.`,
99
+ requestId: c.get("requestId"),
100
+ },
101
+ retryAfter: limits.retryAfter,
102
+ limits: { remaining: 0, resetsAt: limits.resetsAt },
103
+ }, 429);
104
+ }
105
+ const claim = {
106
+ claimId: `practice-${crypto.randomUUID()}`,
107
+ collectionId,
108
+ network: config.IXO_NETWORK,
109
+ // No store: every attachment carries its own bytes (the cellnode posture, `media: null`).
110
+ lane: "cellnode",
111
+ metadata: {
112
+ // The chain's spelling of a claim's agent: what `ctx.claim.submitter` / `submitterAddress`
113
+ // read, so a handler binding a report to its signer (Alpha's) sees the would-be signer.
114
+ agentDid: `did:ixo:${submitter}`,
115
+ agentAddress: submitter,
116
+ schemaType: null,
117
+ submissionDate: new Date().toISOString(),
118
+ amount: [],
119
+ payment: { useIntent: false, guaranteed: false, amount: [] },
120
+ evaluation: null,
121
+ },
122
+ body: body.answers,
123
+ attachments,
124
+ media: null,
125
+ };
126
+ const { allowAiChecks, allowImageChecks } = getOracle().config.policies;
127
+ const aiSpend = new Map();
128
+ let result;
129
+ try {
130
+ result = await previewClaim({
131
+ config,
132
+ logger,
133
+ metrics: c.get("metrics"),
134
+ span: inSpan,
135
+ trace,
136
+ cache: c.env.CACHE_KV,
137
+ media: null,
138
+ settings: { allowAiChecks, allowImageChecks },
139
+ // The oracle's own table; only the stock duplicate lane is swapped (header).
140
+ produceFacts: producerOf(getOracle().source.facts, { unique: uniqueNotRun }),
141
+ engine,
142
+ // For the AI ledger (`ai_calls`) only: the duplicate lane that would write is swapped, and
143
+ // no fact cache is opened — a practice claim id is never read again.
144
+ db,
145
+ env: c.env,
146
+ scope: practiceScope(blocksync),
147
+ aiSpend,
148
+ }, { claim, protocolDid, manifest });
149
+ }
150
+ catch (err) {
151
+ unreachable(err);
152
+ }
153
+ const { built, decision: preview } = result;
154
+ if (!built.ok)
155
+ throw cannotCheck("an automatic check did not produce a usable answer", built.reason);
156
+ if (!preview || preview.decision.status === "unusable") {
157
+ throw cannotCheck("this ask's rules cannot be checked automatically", "rubric-unusable");
158
+ }
159
+ const decision = preview.decision;
160
+ const outcome = outcomeOf(decision);
161
+ // Labels only: an unreadable rubric leaves the engine's reason lines, never fails the answer.
162
+ const rubric = await readRubricView(c.env, blocksync, built.rubricId, async () => protocolDid).catch(() => null);
163
+ const notes = [];
164
+ if (built.facts.unique?.digest === UNIQUE_NOT_RUN) {
165
+ notes.push("The check for copies of earlier answers runs only when you hand it in.");
166
+ }
167
+ if (outcome === "review" && reviewerNoteEnabled()) {
168
+ // The reviewer's note, made as the evaluate step makes it (one model call) and stored nowhere.
169
+ const aiCalls = [];
170
+ const review = "review" in manifest ? manifest.review : undefined;
171
+ const note = await makeReviewerNote({ config, logger, trace, env: c.env, cache: c.env.CACHE_KV, aiCalls }, claim.claimId, noteInput({
172
+ answers: built.facts.answers,
173
+ attachments: built.facts.attachments,
174
+ facts: { ext: built.facts.ext, ai: built.facts.ai },
175
+ tasks: decision.pendingTasks.map((id) => reviewTaskOf(id, review)),
176
+ }));
177
+ await persistAiCalls(db, claim.claimId, aiCalls, logger);
178
+ if (note)
179
+ notes.push(note.says, ...note.checkThese);
180
+ }
181
+ logger.info("practice.check", {
182
+ claimId: claim.claimId,
183
+ collectionId,
184
+ protocolDid,
185
+ rubricId: built.rubricId,
186
+ outcome,
187
+ aiSpend: Object.fromEntries(aiSpend),
188
+ });
189
+ c.get("metrics").count("practice.check", 1, { outcome, id: protocolDid });
190
+ return c.json({
191
+ outcome,
192
+ reasons: practiceReasons(decision, rubric),
193
+ notes,
194
+ limits: { remaining: limits.remaining, resetsAt: limits.resetsAt },
195
+ });
196
+ });
197
+ /** The engine's would-be verdict in the contract's three words — read, never computed. */
198
+ export function outcomeOf(decision) {
199
+ if (decision.status === "pending_review" || decision.verdict === "review")
200
+ return "review";
201
+ return decision.verdict === "reject" ? "reject" : "approve";
202
+ }
203
+ /**
204
+ * Every gate and criterion the engine evaluated, each with the rubric's own sentence for its code
205
+ * (the engine's reason line when the rubric names none). A failed gate that held the claim for a
206
+ * person reads `review`. Display only, like explain.ts; a criterion reads as passed from half
207
+ * marks up, as the claimant's "why" does.
208
+ */
209
+ export function practiceReasons(decision, rubric) {
210
+ const held = decision.status === "pending_review";
211
+ const engineReason = (code) => decision.reasons.find((r) => r.code === code)?.reason;
212
+ const reasons = [];
213
+ for (const gate of decision.gates) {
214
+ if (gate.outcome === "skipped" || gate.outcome === "not_reached")
215
+ continue;
216
+ const spec = rubric?.gates.find((g) => g.code === gate.code);
217
+ const reason = gate.code.startsWith("unique:")
218
+ ? (rubric?.unique?.label ?? "Not a copy of an earlier answer")
219
+ : gate.code.startsWith("frequency:")
220
+ ? (rubric?.frequency?.label ?? "Within the limit of answers per person")
221
+ : (spec?.reason ?? engineReason(gate.code) ?? gate.code);
222
+ // An unevaluated gate (an errored fact) follows the decision; a failed one, its rubric `onFail`.
223
+ const toPerson = gate.outcome === "unevaluated" || !spec ? held : spec.onFail === "review";
224
+ reasons.push({
225
+ code: gate.code,
226
+ outcome: gate.outcome === "passed" ? "passed" : toPerson && held ? "review" : "failed",
227
+ reason,
228
+ });
229
+ }
230
+ for (const criterion of decision.criteria) {
231
+ if (!criterion.pending && criterion.scoreBps === null)
232
+ continue;
233
+ const spec = rubric?.criteria.find((s) => s.code === criterion.code);
234
+ reasons.push({
235
+ code: criterion.code,
236
+ outcome: criterion.pending
237
+ ? "review"
238
+ : (criterion.scoreBps ?? 0) >= 5000
239
+ ? "passed"
240
+ : "failed",
241
+ reason: spec?.reason ?? engineReason(criterion.code) ?? criterion.code,
242
+ });
243
+ }
244
+ return reasons;
245
+ }
246
+ /**
247
+ * The chain lane's own scope reads (claim-source.ts), with one change: the would-be claim is not on
248
+ * chain yet, and a real claim's count holds itself (frequency-fact.ts: `count > max`), so it is
249
+ * counted here.
250
+ */
251
+ function practiceScope(blocksync) {
252
+ return {
253
+ async window(collectionId) {
254
+ const collection = await getCollection(blocksync, collectionId);
255
+ return collection && { startDate: collection.startDate, endDate: collection.endDate };
256
+ },
257
+ countSubmissions: async (claim, from, to) => claim.metadata.agentAddress
258
+ ? 1 +
259
+ (await countAgentClaimsInWindow(blocksync, {
260
+ collectionId: claim.collectionId,
261
+ agentAddress: claim.metadata.agentAddress,
262
+ fromISO: from.toISOString(),
263
+ toISO: to.toISOString(),
264
+ }))
265
+ : null,
266
+ submitterKey: async (claim) => claim.metadata.agentAddress,
267
+ };
268
+ }
269
+ const DAY_MS = 86_400_000;
270
+ /**
271
+ * Spend one practice check from three budgets — this submitter on this collection, this submitter,
272
+ * this oracle — each a count per UTC day in CACHE_KV, expiring with its day. Refused when any is
273
+ * spent; a refusal spends nothing, so one busy person never eats the oracle's budget by retrying.
274
+ * shortcut: KV is read-then-write and eventually consistent, so concurrent checks can overrun a
275
+ * limit by a few; move to a D1 counter if a cap must be exact.
276
+ */
277
+ async function spendLimits(c, collectionId, submitter) {
278
+ const config = c.get("config");
279
+ const kv = c.env.CACHE_KV;
280
+ const now = Date.now();
281
+ const day = Math.floor(now / DAY_MS);
282
+ const resetsAtMs = (day + 1) * DAY_MS;
283
+ const resetsAt = new Date(resetsAtMs).toISOString();
284
+ const budgets = [
285
+ [`practice:${day}:ask:${collectionId}:${submitter}`, config.PRACTICE_CHECK_LIMIT_ASK],
286
+ [`practice:${day}:submitter:${submitter}`, config.PRACTICE_CHECK_LIMIT_SUBMITTER],
287
+ [`practice:${day}:oracle`, config.PRACTICE_CHECK_LIMIT_ORACLE],
288
+ ];
289
+ const used = await Promise.all(budgets.map(async ([key]) => Number(await kv.get(key)) || 0));
290
+ const left = budgets.map(([, max], i) => max - (used[i] ?? 0));
291
+ if (left.some((n) => n <= 0)) {
292
+ c.get("metrics").count("practice.limited", 1, {});
293
+ return { ok: false, retryAfter: Math.ceil((resetsAtMs - now) / 1000), resetsAt };
294
+ }
295
+ const expirationTtl = Math.ceil((resetsAtMs - now) / 1000) + 60;
296
+ await Promise.all(budgets.map(([key], i) => kv.put(key, String((used[i] ?? 0) + 1), { expirationTtl }).catch((err) => {
297
+ c.get("logger").warn("practice.limit.write-failed", { detail: String(err) });
298
+ })));
299
+ return { ok: true, remaining: Math.min(...left) - 1, resetsAt };
300
+ }
301
+ /** A check that could not run: say so, never a verdict. */
302
+ function cannotCheck(why, reason) {
303
+ return new AppError(`No practice answer: ${why}. Nothing was decided; try again later.`, {
304
+ code: "UNAVAILABLE",
305
+ status: 503,
306
+ expose: true,
307
+ details: { reason },
308
+ });
309
+ }
310
+ /** The engine or a check's service (the AI, Blocksync, a source) did not answer: 502 / 503. */
311
+ function unreachable(err) {
312
+ if (err instanceof EngineError) {
313
+ throw new AppError(`No practice answer: the decision engine did not answer (${err.code}). Nothing was decided; try again later.`, { code: "UNAVAILABLE", status: 502, expose: true, details: { engine: err.code }, cause: err });
314
+ }
315
+ if (err instanceof AppError && err.status === 503) {
316
+ throw new AppError("No practice answer: an automatic check could not run right now (the AI or another service did not answer). Nothing was decided; try again in a moment.", { code: "UNAVAILABLE", status: 503, expose: true, cause: err });
317
+ }
318
+ throw err;
319
+ }
320
+ //# sourceMappingURL=practice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"practice.js","sourceRoot":"","sources":["../../../src/routes/v1/practice.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/workflows/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAmBxC,OAAO,EAAe,KAAK,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAmB1E,OAAO,EAAW,KAAK,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAWrE,wGAAwG;AACxG,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAC9C,4FAA4F;AAC5F,eAAO,MAAM,UAAU,eAAe,CAAC;AAoBvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;IAAK,EAAE;CAAU,CAAC;AAkDhD,MAAM,WAAW,eAAe;IAC9B,oGAAoG;IACpG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mGAAmG;IACnG,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAhC,YAA6B,GAAG,EAAE,SAAS,EAAI;IAE/C;;;OAGG;IACG,QAAQ,CACZ,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CAkIzB;IAED;qEACiE;YACnD,IAAI;IAgBlB;;;;;OAKG;YACW,WAAW;IAsBzB;;;;;OAKG;YACW,UAAU;IA6CxB;;;OAGG;YACW,UAAU;IAyBxB,gFAAgF;YAClE,WAAW;IAgIzB,kGAAkG;YACpF,OAAO;IAgBrB;;;;;;;;;;;;;;;;;;OAkBG;YACW,eAAe;IA2D7B;;;;;;;;;;;OAWG;YACW,MAAM;IA6HpB;;;;;;OAMG;YACW,eAAe;IAmC7B;;;;;;;;OAQG;YACW,MAAM;IAoCpB,wGAAwG;YAC1F,GAAG;IAmBjB;;;;OAIG;YACW,aAAa;IAmI3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAmBpB;;;;;;;;;OASG;YACW,YAAY;CAuC3B;AAYD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,GACjE,OAAO,CAAC,aAAa,CAAC,CAyFxB"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/workflows/evaluate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAoBxC,OAAO,EAAe,KAAK,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAmB1E,OAAO,EAAW,KAAK,UAAU,EAAa,MAAM,gBAAgB,CAAC;AAWrE,wGAAwG;AACxG,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,mBAAmB,CAAC;AAC9C,4FAA4F;AAC5F,eAAO,MAAM,UAAU,eAAe,CAAC;AAoBvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;IAAK,EAAE;CAAU,CAAC;AAkDhD,MAAM,WAAW,eAAe;IAC9B,oGAAoG;IACpG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mGAAmG;IACnG,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAhC,YAA6B,GAAG,EAAE,SAAS,EAAI;IAE/C;;;OAGG;IACG,QAAQ,CACZ,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CAkIzB;IAED;qEACiE;YACnD,IAAI;IAgBlB;;;;;OAKG;YACW,WAAW;IAsBzB;;;;;OAKG;YACW,UAAU;IA6CxB;;;OAGG;YACW,UAAU;IAyBxB,gFAAgF;YAClE,WAAW;IAgIzB,kGAAkG;YACpF,OAAO;IAgBrB;;;;;;;;;;;;;;;;;;OAkBG;YACW,eAAe;IA2D7B;;;;;;;;;;;OAWG;YACW,MAAM;IA6HpB;;;;;;OAMG;YACW,eAAe;IAmC7B;;;;;;;;OAQG;YACW,MAAM;IAoCpB,wGAAwG;YAC1F,GAAG;IAmBjB;;;;OAIG;YACW,aAAa;IAmI3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAmBpB;;;;;;;;;OASG;YACW,YAAY;CAuC3B;AAYD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;CAAE,GACjE,OAAO,CAAC,aAAa,CAAC,CAyFxB"}
@@ -31,7 +31,8 @@ import { archiveAnswer } from "../lib/archive.js";
31
31
  import { createEngineClient } from "../lib/engine/client.js";
32
32
  import { EngineError, isManifestUnusable, } from "../lib/engine/types.js";
33
33
  import { AppError } from "../lib/errors.js";
34
- import { buildFacts, factDeps } from "../lib/facts/builder.js";
34
+ import { buildFacts } from "../lib/facts/builder.js";
35
+ import { factDeps } from "../lib/facts/deps.js";
35
36
  import { factCacheDelete } from "../lib/facts/fact-cache.js";
36
37
  import { factsDigest } from "../lib/facts/factset.js";
37
38
  import { finalVerdictUpdate, registryVerdictToken } from "../lib/facts/stock/unique-store.js";