@ixo/decision-oracle 0.2.5 → 0.2.6

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 (83) hide show
  1. package/README.md +6 -3
  2. package/dist/cli/commands/init.d.ts +3 -1
  3. package/dist/cli/commands/init.d.ts.map +1 -1
  4. package/dist/cli/commands/init.js +42 -2
  5. package/dist/cli/commands/init.js.map +1 -1
  6. package/dist/cli/commands/oracle-init.d.ts.map +1 -1
  7. package/dist/cli/commands/oracle-init.js +13 -5
  8. package/dist/cli/commands/oracle-init.js.map +1 -1
  9. package/dist/cli/index.js +6 -3
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/cron/openhands.d.ts +9 -0
  12. package/dist/cron/openhands.d.ts.map +1 -0
  13. package/dist/cron/openhands.js +30 -0
  14. package/dist/cron/openhands.js.map +1 -0
  15. package/dist/cron/scan.d.ts.map +1 -1
  16. package/dist/cron/scan.js +3 -0
  17. package/dist/cron/scan.js.map +1 -1
  18. package/dist/db/schema.d.ts +158 -0
  19. package/dist/db/schema.d.ts.map +1 -1
  20. package/dist/db/schema.js +26 -0
  21. package/dist/db/schema.js.map +1 -1
  22. package/dist/define-oracle.d.ts +3 -0
  23. package/dist/define-oracle.d.ts.map +1 -1
  24. package/dist/define-oracle.js +13 -1
  25. package/dist/define-oracle.js.map +1 -1
  26. package/dist/env.d.ts +12 -0
  27. package/dist/env.d.ts.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/lib/ixo/blocksync/index.d.ts +4 -0
  31. package/dist/lib/ixo/blocksync/index.d.ts.map +1 -1
  32. package/dist/lib/ixo/blocksync/index.js +47 -1
  33. package/dist/lib/ixo/blocksync/index.js.map +1 -1
  34. package/dist/lib/ixo/blocksync/queries.d.ts +2 -0
  35. package/dist/lib/ixo/blocksync/queries.d.ts.map +1 -1
  36. package/dist/lib/ixo/blocksync/queries.js +17 -0
  37. package/dist/lib/ixo/blocksync/queries.js.map +1 -1
  38. package/dist/lib/ixo/chain.d.ts +1 -1
  39. package/dist/lib/ixo/chain.d.ts.map +1 -1
  40. package/dist/lib/openhands/backstop.d.ts +131 -0
  41. package/dist/lib/openhands/backstop.d.ts.map +1 -0
  42. package/dist/lib/openhands/backstop.js +513 -0
  43. package/dist/lib/openhands/backstop.js.map +1 -0
  44. package/dist/lib/openhands/chain.d.ts +218 -0
  45. package/dist/lib/openhands/chain.d.ts.map +1 -0
  46. package/dist/lib/openhands/chain.js +392 -0
  47. package/dist/lib/openhands/chain.js.map +1 -0
  48. package/dist/lib/openhands/options.d.ts +13 -0
  49. package/dist/lib/openhands/options.d.ts.map +1 -0
  50. package/dist/lib/openhands/options.js +28 -0
  51. package/dist/lib/openhands/options.js.map +1 -0
  52. package/dist/lib/openhands/routes.d.ts +73 -0
  53. package/dist/lib/openhands/routes.d.ts.map +1 -0
  54. package/dist/lib/openhands/routes.js +355 -0
  55. package/dist/lib/openhands/routes.js.map +1 -0
  56. package/dist/lib/openhands/store.d.ts +74 -0
  57. package/dist/lib/openhands/store.d.ts.map +1 -0
  58. package/dist/lib/openhands/store.js +148 -0
  59. package/dist/lib/openhands/store.js.map +1 -0
  60. package/dist/oracle.d.ts +52 -1
  61. package/dist/oracle.d.ts.map +1 -1
  62. package/dist/oracle.js +6 -0
  63. package/dist/oracle.js.map +1 -1
  64. package/dist/routes/v1/info.d.ts.map +1 -1
  65. package/dist/routes/v1/info.js +6 -0
  66. package/dist/routes/v1/info.js.map +1 -1
  67. package/dist/runtime.d.ts +6 -0
  68. package/dist/runtime.d.ts.map +1 -1
  69. package/dist/runtime.js +10 -0
  70. package/dist/runtime.js.map +1 -1
  71. package/dist/workflows/openhands-hire.d.ts +65 -0
  72. package/dist/workflows/openhands-hire.d.ts.map +1 -0
  73. package/dist/workflows/openhands-hire.js +203 -0
  74. package/dist/workflows/openhands-hire.js.map +1 -0
  75. package/docs/api.md +69 -6
  76. package/docs/guide.md +33 -0
  77. package/migrations/0025_openhands.sql +12 -0
  78. package/migrations/meta/0025_snapshot.json +2976 -0
  79. package/migrations/meta/_journal.json +7 -0
  80. package/package.json +1 -1
  81. package/skills/README.md +1 -1
  82. package/skills/add-openhands-support/SKILL.md +96 -86
  83. package/skills/create-oracle/SKILL.md +10 -4
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Every statement the OpenHands add-on runs against its two tables (db/schema.ts `openhandsState`,
3
+ * `openhandsHires`) — each one statement, so two passes or a pass and a webhook never interleave a
4
+ * read and a write that matter.
5
+ */
6
+ import { and, eq, gte, inArray, lt, sql } from "drizzle-orm";
7
+ import { openhandsHires, openhandsState } from "../../db/schema.js";
8
+ const DAY_MS = 86_400_000;
9
+ /** The rows the backstop resumes its rotating lanes from. */
10
+ export const WINDOW_CURSOR = "window";
11
+ export const PAUSED_CURSOR = "paused";
12
+ export const GRANTS_CURSOR = "grants";
13
+ /** One collection's restart budget — the backstop's and the webhook's, counted apart. */
14
+ export const restartBudgetName = (collectionId) => `restarts:${collectionId}`;
15
+ export const webhookBudgetName = (collectionId) => `restarts-webhook:${collectionId}`;
16
+ /** A collection whose `/openhands/scan` was coalesced, waiting for the minute tick. */
17
+ export const SCAN_DIRTY_PREFIX = "scan-dirty:";
18
+ export const scanDirtyName = (collectionId) => `${SCAN_DIRTY_PREFIX}${collectionId}`;
19
+ export async function readState(db, name) {
20
+ const row = await db.query.openhandsState.findFirst({
21
+ columns: { value: true },
22
+ where: eq(openhandsState.name, name),
23
+ });
24
+ return row?.value ?? null;
25
+ }
26
+ export async function writeState(db, name, value) {
27
+ await db
28
+ .insert(openhandsState)
29
+ .values({ name, value })
30
+ .onConflictDoUpdate({ target: openhandsState.name, set: { value } });
31
+ }
32
+ /** Delete a row only if it still holds `value` — a marker re-set meanwhile survives. */
33
+ export async function deleteStateIf(db, name, value) {
34
+ await db
35
+ .delete(openhandsState)
36
+ .where(and(eq(openhandsState.name, name), eq(openhandsState.value, value)));
37
+ }
38
+ /** Restarts allowed per collection per window, per budget (backstop, webhook). */
39
+ export const MAX_RESTARTS = 3;
40
+ /** The window the count is kept over — it starts at the first restart, not at midnight. */
41
+ export const RESTART_WINDOW_MS = DAY_MS;
42
+ /**
43
+ * The budget as a pure function of the stored row and the clock. A row that cannot be read opens a
44
+ * fresh window rather than blocking forever: a brake on a loop, not a ledger.
45
+ */
46
+ export function spendRestart(stored, now) {
47
+ const [rawCount = "", rawStart = ""] = (stored ?? "").split("|");
48
+ const count = /^\d+$/.test(rawCount) ? Number(rawCount) : Number.NaN;
49
+ const started = Date.parse(rawStart);
50
+ const elapsed = now.getTime() - started;
51
+ if (!Number.isFinite(count) || !Number.isFinite(started) || elapsed < 0) {
52
+ return { allowed: true, value: `1|${now.toISOString()}` };
53
+ }
54
+ if (elapsed >= RESTART_WINDOW_MS)
55
+ return { allowed: true, value: `1|${now.toISOString()}` };
56
+ if (count >= MAX_RESTARTS)
57
+ return { allowed: false, value: null };
58
+ return { allowed: true, value: `${count + 1}|${new Date(started).toISOString()}` };
59
+ }
60
+ /**
61
+ * Spend one restart from budget `name`, BEFORE the restart (one that then fails still counts —
62
+ * a restart that keeps failing is what the budget is for). A compare-and-swap on the value read:
63
+ * two overlapping passes spend ONE slot between them, and the loser hears `raced`.
64
+ */
65
+ export async function claimRestart(db, name, now) {
66
+ const before = await readState(db, name);
67
+ const budget = spendRestart(before, now);
68
+ if (!budget.allowed || budget.value === null)
69
+ return { denied: "exhausted" };
70
+ const won = await db
71
+ .insert(openhandsState)
72
+ .values({ name, value: budget.value })
73
+ .onConflictDoUpdate({
74
+ target: openhandsState.name,
75
+ set: { value: budget.value },
76
+ setWhere: sql `${openhandsState.value} IS ${before}`,
77
+ })
78
+ .returning({ value: openhandsState.value });
79
+ return won[0] ? { slot: won[0].value } : { denied: "raced" };
80
+ }
81
+ /** The coalesced scans waiting, oldest first, at most `limit`. */
82
+ export async function dirtyScans(db, limit) {
83
+ return db
84
+ .select({ name: openhandsState.name, value: openhandsState.value })
85
+ .from(openhandsState)
86
+ .where(and(gte(openhandsState.name, SCAN_DIRTY_PREFIX), lt(openhandsState.name, "scan-dirty;")))
87
+ .orderBy(openhandsState.value)
88
+ .limit(limit);
89
+ }
90
+ /** Rows pruned per kind per pass — the rest go on the next tick. */
91
+ const PRUNE_LIMIT = 500;
92
+ /**
93
+ * Delete restart budgets whose window ended more than a day ago — written for every collection ever
94
+ * restarted, and `spendRestart` opens a fresh window for such a row anyway. ISO-8601 in UTC
95
+ * compares as text; a value that does not parse is left for a human.
96
+ */
97
+ export async function pruneBudgets(db, now) {
98
+ const before = new Date(now.getTime() - RESTART_WINDOW_MS - DAY_MS).toISOString();
99
+ const prune = (prefix) => sql `
100
+ DELETE FROM openhands_state WHERE name IN (
101
+ SELECT name FROM openhands_state
102
+ WHERE name >= ${`${prefix}:`} AND name < ${`${prefix};`}
103
+ AND substr(value, instr(value, '|') + 1) < ${before}
104
+ LIMIT ${PRUNE_LIMIT})`;
105
+ const [a, b] = await db.batch([db.run(prune("restarts")), db.run(prune("restarts-webhook"))]);
106
+ return (a.meta?.changes ?? 0) + (b.meta?.changes ?? 0);
107
+ }
108
+ /**
109
+ * Write what the chain says about one collection's quota. `endsAt` undefined leaves the stored
110
+ * value alone: the mint step does not read the end date the way the window does.
111
+ */
112
+ export async function refreshHire(db, row) {
113
+ const values = {
114
+ collectionId: row.collectionId,
115
+ remaining: Math.max(0, Math.floor(row.remaining)),
116
+ mintQuota: Math.max(0, Math.floor(row.mintQuota)),
117
+ checkedAt: row.now.toISOString(),
118
+ endsAt: row.endsAt ?? null,
119
+ };
120
+ const { collectionId: _id, endsAt, ...always } = values;
121
+ await db
122
+ .insert(openhandsHires)
123
+ .values(values)
124
+ .onConflictDoUpdate({
125
+ target: openhandsHires.collectionId,
126
+ set: row.endsAt !== undefined ? { ...always, endsAt } : always,
127
+ });
128
+ }
129
+ /** Bound parameters per `IN (…)` — under D1's 100 per statement. */
130
+ const IN_CHUNK = 90;
131
+ export async function hireStates(db, ids) {
132
+ const out = new Map();
133
+ for (let i = 0; i < ids.length; i += IN_CHUNK) {
134
+ const rows = await db
135
+ .select({
136
+ collectionId: openhandsHires.collectionId,
137
+ checkedAt: openhandsHires.checkedAt,
138
+ endsAt: openhandsHires.endsAt,
139
+ })
140
+ .from(openhandsHires)
141
+ .where(inArray(openhandsHires.collectionId, ids.slice(i, i + IN_CHUNK)));
142
+ for (const row of rows) {
143
+ out.set(row.collectionId, { checkedAt: row.checkedAt, endsAt: row.endsAt ?? null });
144
+ }
145
+ }
146
+ return out;
147
+ }
148
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/lib/openhands/store.ts"],"names":[],"mappings":"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"}
package/dist/oracle.d.ts CHANGED
@@ -11,6 +11,7 @@
11
11
  import { z } from "zod";
12
12
  import type { ActPolicy } from "./act.js";
13
13
  import type { Config } from "./config.js";
14
+ import type { OracleEnv } from "./env.js";
14
15
  import type { FactsConfig } from "./facts/types.js";
15
16
  import type { FactsProducer } from "./lib/facts/producer.js";
16
17
  /**
@@ -56,6 +57,7 @@ export declare const OracleConfigSchema: z.ZodObject<{
56
57
  }, z.core.$strip>;
57
58
  facts: z.ZodOptional<z.ZodCustom<unknown, unknown>>;
58
59
  archive: z.ZodOptional<z.ZodCustom<unknown, unknown>>;
60
+ openhands: z.ZodOptional<z.ZodCustom<unknown, unknown>>;
59
61
  }, z.core.$strip>;
60
62
  /**
61
63
  * The rubric is the work order — read from the engine's rubric manifest (lib/facts/expected.ts),
@@ -66,7 +68,7 @@ export declare const OracleConfigSchema: z.ZodObject<{
66
68
  * `attachments`, `settings`) around it. The kit never decides and never binds — the engine judges
67
69
  * the facts against the live form.
68
70
  */
69
- export type OracleConfig = Omit<z.input<typeof OracleConfigSchema>, "facts" | "policies" | "archive"> & {
71
+ export type OracleConfig = Omit<z.input<typeof OracleConfigSchema>, "facts" | "policies" | "archive" | "openhands"> & {
70
72
  /** The policies, with the act seam typed: Zod carries the hook through, this is its contract. */
71
73
  policies: Omit<z.input<typeof OracleConfigSchema>["policies"], "act"> & {
72
74
  act?: ActPolicy;
@@ -84,7 +86,56 @@ export type OracleConfig = Omit<z.input<typeof OracleConfigSchema>, "facts" | "p
84
86
  * and `answer.json` no text or place (the claim's own `claim.json` always has everything).
85
87
  */
86
88
  archive?: ArchiveHooks;
89
+ /**
90
+ * Make this oracle an OpenHands checker (lib/openhands/): `openhands: {}` turns it on with the
91
+ * defaults. Needs the `HIRE_WORKFLOW` workflow binding (class `OpenhandsHire`) and, deployed, the
92
+ * `OPENHANDS_RATE_LIMITER` binding — `decision-oracle init --openhands` writes both.
93
+ */
94
+ openhands?: OpenhandsOptions;
87
95
  };
96
+ /** What an OpenHands ask looks like to `OpenhandsOptions.admit`, read before anything is minted. */
97
+ export interface OpenhandsAsk {
98
+ collectionId: string;
99
+ /** The ask's admin account — the collection's on-chain `admin`. */
100
+ admin: string;
101
+ /** The ask's deed entity (`did:ixo:entity:…`); null when the chain names none. */
102
+ entity: string | null;
103
+ }
104
+ /** What the hire or the backstop just read off the chain for one hired collection. */
105
+ export interface OpenhandsQuota {
106
+ collectionId: string;
107
+ /** Verdicts this oracle can still sign on it before the poster's grant must be re-minted. */
108
+ remaining: number;
109
+ /** The batch the next mint adds (the poster's cap, or 10 000 for an uncapped grant). */
110
+ mintQuota: number;
111
+ /**
112
+ * When the ask stops being judged (its end + 90 days), ISO-8601; null = no end date. Absent when
113
+ * this read did not look at the end date (the hire's mint step).
114
+ */
115
+ endsAt?: string | null;
116
+ }
117
+ export interface OpenhandsOptions {
118
+ /**
119
+ * Refuse an ask before this oracle mints, registers or spends anything on it: return a reason (the
120
+ * hire ends with it, final, logged) or null to serve it. Every engine decision is billed to THIS
121
+ * oracle's owner, so an oracle that charges no evaluation fee uses this to bound whose asks it
122
+ * judges. Absent ⇒ every ask whose admin granted this oracle is served — the register gates
123
+ * (protocol, fee) still apply. A throw retries the hire step.
124
+ */
125
+ admit?(ask: OpenhandsAsk, env: OracleEnv): Promise<string | null> | string | null;
126
+ /**
127
+ * The payout ceiling (`maxCustomAmount`) to write on the evaluate grant this oracle mints when
128
+ * the poster's meta-grant names none, given the collection's approval denom. Absent ⇒ none: the
129
+ * collection's own approval payment pays every approved claim — what a priced ask wants. Only an
130
+ * oracle whose `policies.act` NAMES amounts needs one.
131
+ */
132
+ maxCustomAmount?(approvalDenom: string | null): {
133
+ denom: string;
134
+ amount: string;
135
+ }[];
136
+ /** Told every quota read (hire and backstop) — e.g. to keep your own per-collection count. Fail-soft. */
137
+ onQuota?(quota: OpenhandsQuota, env: OracleEnv): Promise<void> | void;
138
+ }
88
139
  /** One public document the ask's entity anchors (a LinkedResource or a setting), read as it is now. */
89
140
  export interface ArchiveDoc {
90
141
  /** `{id}#done`, `{id}#pro`, … as anchored. */
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oracle.d.ts","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
package/dist/oracle.js CHANGED
@@ -152,6 +152,12 @@ const BaseConfigSchema = z.object({
152
152
  facts: z.custom().optional(),
153
153
  /** The answer archive's hooks (`ArchiveHooks` below) — Zod only carries them, like `facts`. */
154
154
  archive: z.custom().optional(),
155
+ /**
156
+ * The OpenHands add-on (`OpenhandsOptions` below): present ⇒ this oracle is an OpenHands checker —
157
+ * it answers the app's hire and scan webhooks, mints its own evaluate grant under the poster's
158
+ * meta-grant, and keeps every hired ask judging. Zod only carries it, like `archive`.
159
+ */
160
+ openhands: z.custom().optional(),
155
161
  });
156
162
  /**
157
163
  * A per-protocol price this oracle could never charge is refused at module evaluation, not
@@ -1 +1 @@
1
- {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oracle.js","sourceRoot":"","sources":["../src/oracle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGzD,8FAA8F;AAC9F,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,0CAA0C,CAAC;CACjF,CAAC,CAAC;AAEH;wFACwF;AACxF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC;KACpB,GAAG,EAAE;KACL,GAAG,CAAC,MAAM,EAAE,yCAAyC,CAAC;KACtD,UAAU,CAAC,MAAM,EAAE,+DAA+D,CAAC,CAAC;AAEvF;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC;IACxC,iFAAiF;IACjF,MAAM,EAAE,UAAU;IAClB,qGAAqG;IACrG,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;QAChB,OAAO;QACP,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACpC,CAAC,CAAC,YAAY,CAAC;YACb,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uCAAuC,EAAE,2BAA2B,CAAC;YAC7F,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;SACjC,CAAC;KACH,CAAC;IACF,+FAA+F;IAC/F,qFAAqF;CACtF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,0FAA0F;IAC1F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB;;;;;;;OAOG;IACH,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC;IACxC;;;;;OAKG;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB;;;;WAIG;QACH,UAAU,EAAE,SAAS;QACrB;;;;;;;;WAQG;QACH,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE;QACvD;;;;;;;WAOG;QACH,GAAG,EAAE,CAAC;aACH,MAAM,CAAC;YACN,cAAc,EAAE,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,QAAQ,EAAE;SAC5D,CAAC;aACD,QAAQ,EAAE;KACd,CAAC;IACF;;;;;;OAMG;IACH,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC,QAAQ,EAAE;IAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;QACjB,6FAA6F;QAC7F,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;QACrB;;;;WAIG;QACH,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE;QAC1B;;;;WAIG;QACH,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;QAC7B;;;;;;WAMG;QACH,GAAG,EAAE,CAAC,CAAC,MAAM,EAAW,CAAC,QAAQ,EAAE;QACnC;;;;WAIG;QACH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;QACjD;;;;;WAKG;QACH,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE;KACpC,CAAC;IACF;;;;OAIG;IACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAW,CAAC,QAAQ,EAAE;IACrC,+FAA+F;IAC/F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAW,CAAC,QAAQ,EAAE;IACvC;;;;OAIG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAW,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;IAC7E,MAAM,SAAS,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAC5C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,0CAA0C;IAC9E,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC;gBACzC,OAAO,EAAE,GAAG,QAAQ,6GAA6G;aAClI,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAC;gBAChD,OAAO,EAAE,GAAG,QAAQ,0GAA0G;aAC/H,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;gBAC3B,OAAO,EAAE,GAAG,QAAQ,yGAAyG;aAC9H,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AA0IH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA8D,EAC9D,WAAmB;IAEnB,OAAO,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC;QACzE,CAAC,CAAE,OAAO,CAAC,UAAU,CAAC,WAAW,CAAS;QAC1C,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAU,EACV,IAAgE;IAEhE,OAAO,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB;QACxD,CAAC,CAAC;YACE,GAAG,OAAO;YACV,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC,qBAAqB,EAAE;SACpF;QACH,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAaD;;;;;;GAMG;AACH,IAAI,OAAO,GAA0B,IAAI,CAAC;AAE1C,MAAM,UAAU,SAAS,CAAC,CAAiB;IACzC,mGAAmG;IACnG,kGAAkG;IAClG,8FAA8F;IAC9F,gGAAgG;IAChG,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC"}
@@ -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;AAK5C,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;AAM5C,eAAO,MAAM,IAAI,qDAAqB,CAAC"}
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import { Hono } from "hono";
12
12
  import { oracleWebDid } from "../../lib/ixo/ucan.js";
13
+ import { HIRE_PATH, SCAN_PATH } from "../../lib/openhands/routes.js";
13
14
  import { advertisedPrice, reviewBillingActive } from "../../lib/payments/review-billing.js";
14
15
  import { effectivePricing, getOracle } from "../../oracle.js";
15
16
  export const info = new Hono();
@@ -70,6 +71,11 @@ info.get("/", async (c) => {
70
71
  trace: c.get("trace"),
71
72
  cache: c.env.CACHE_KV,
72
73
  }),
74
+ // An OpenHands checker (`openhands` in defineOracle) — the two webhooks the OpenHands app calls
75
+ // on THIS host after an ask grants this oracle. Absent ⇒ not an OpenHands checker.
76
+ ...(getOracle().config.openhands !== undefined
77
+ ? { openhands: { hire: HIRE_PATH, scan: SCAN_PATH } }
78
+ : {}),
73
79
  });
74
80
  });
75
81
  //# sourceMappingURL=info.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,IAAI,EAAU,CAAC;AAEvC,oFAAoF;AACpF,KAAK,UAAU,iBAAiB,CAAC,IAA+C;IAC9E,IAAI,CAAC,CAAC,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAiB,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IACjG,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,MAAe;QACrB,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAe,EAAE,MAAM,EAAE;KAC5E,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACxB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/B,8FAA8F;IAC9F,2FAA2F;IAC3F,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,MAAM,CAAC;IACvF,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChE,2FAA2F;IAC3F,0EAA0E;IAC1E,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC;IACjD,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,IAAI;QACJ,WAAW;QACX,GAAG,EAAE,MAAM,CAAC,UAAU;QACtB,OAAO,EAAE,MAAM,CAAC,cAAc;QAC9B,gGAAgG;QAChG,4FAA4F;QAC5F,SAAS,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;QAC3C,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC;QAChC,kBAAkB;QAClB,4FAA4F;QAC5F,OAAO,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1C,QAAQ;QACR,2FAA2F;QAC3F,8FAA8F;QAC9F,6EAA6E;QAC7E,QAAQ,EAAE;YACR,OAAO,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;YACxC,UAAU,EAAE,MAAM,CAAC,oBAAoB,IAAI,IAAI;SAChD;QACD,uFAAuF;QACvF,oFAAoF;QACpF,8FAA8F;QAC9F,yFAAyF;QACzF,OAAO,EAAE;YACP,aAAa,EAAE,OAAO,IAAI,EAAE;YAC5B,cAAc,EAAE,QAAQ,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI;SAC5E;QACD,8FAA8F;QAC9F,mGAAmG;QACnG,wFAAwF;QACxF,wEAAwE;QACxE,aAAa,EAAE,MAAM,iBAAiB,CAAC;YACrC,MAAM;YACN,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACrB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ;SACtB,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/routes/v1/info.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -82,6 +82,12 @@ export declare function scanCollection(env: OracleEnv, collectionId: string): Pr
82
82
  * `input.cursor` is the one thing the HTTP route never exposes — see `RegisterInput` (lib/register.ts).
83
83
  */
84
84
  export declare function registerCollection(env: OracleEnv, input: RegisterInput): Promise<WatchedCollection>;
85
+ /**
86
+ * Re-run the OpenHands hire for one collection now (`openhands` on) — for an act policy that counts
87
+ * verdicts itself and sees an ask's evaluate quota running low before the backstop's next visit.
88
+ * Spends the collection's restart budget like the backstop does; `existing` = a run is in flight.
89
+ */
90
+ export declare function rehireOpenhands(env: OracleEnv, collectionId: string): Promise<"started" | "existing" | "restarted" | "throttled" | "failed">;
85
91
  /**
86
92
  * Sign and broadcast arbitrary messages as THIS oracle's account (lib/ixo/chain.ts
87
93
  * `getOracleSigner`) — the same sequence-managed signer the act lane uses, for a provider composing
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAIxB,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA4B5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1F;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAO5B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,EACpD,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOrE"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,KAAK,aAAa,EAEnB,MAAM,gBAAgB,CAAC;AAIxB,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,iBAAiB,CAAC,CA4B5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1F;AAED;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAO5B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,SAAS,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC,CAIxE;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,EACpD,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOrE"}
package/dist/runtime.js CHANGED
@@ -126,6 +126,16 @@ export async function registerCollection(env, input) {
126
126
  const config = loadConfig(env);
127
127
  return registerCollectionWithDeps({ config, trace: deps.trace, logger, metrics, db, env }, input);
128
128
  }
129
+ /**
130
+ * Re-run the OpenHands hire for one collection now (`openhands` on) — for an act policy that counts
131
+ * verdicts itself and sees an ask's evaluate quota running low before the backstop's next visit.
132
+ * Spends the collection's restart budget like the backstop does; `existing` = a run is in flight.
133
+ */
134
+ export async function rehireOpenhands(env, collectionId) {
135
+ const { ensureHire } = await import("./lib/openhands/backstop.js");
136
+ const { hireDeps } = await import("./lib/openhands/routes.js");
137
+ return ensureHire(hireDeps(env), collectionId);
138
+ }
129
139
  /**
130
140
  * Sign and broadcast arbitrary messages as THIS oracle's account (lib/ixo/chain.ts
131
141
  * `getOracleSigner`) — the same sequence-managed signer the act lane uses, for a provider composing
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The OpenHands hire: how an OpenHands ask becomes a collection this oracle watches (the
3
+ * `openhands` add-on, lib/openhands/).
4
+ *
5
+ * verify → mint → register → scan
6
+ *
7
+ * One durable instance per collection, and the instance id IS the collection id, so the webhook the
8
+ * OpenHands app calls right after the poster grants (lib/openhands/routes.ts) and the backstop that
9
+ * finds what the webhook missed (lib/openhands/backstop.ts) converge on exactly one run — whichever
10
+ * arrives second is an "already exists" the caller treats as success. A rerun (a raised ceiling,
11
+ * low quota) is cheap: verify re-reads, mint fires only when the chain says so, register skips a
12
+ * collection already watched, scan dedupes.
13
+ *
14
+ * A `NonRetryableError` is a real, final "no" (no ask on chain, an ask `admit` refuses, no
15
+ * meta-grant, a register gate) and ends the run with the reason on the instance. Step results stay
16
+ * small and serializable.
17
+ */
18
+ import { WorkflowEntrypoint, type WorkflowEvent, type WorkflowStep } from "cloudflare:workers";
19
+ import type { OracleEnv } from "../env.js";
20
+ export interface OpenhandsHireParams {
21
+ collectionId: string;
22
+ }
23
+ export declare class OpenhandsHire extends WorkflowEntrypoint<OracleEnv, OpenhandsHireParams> {
24
+ run(event: WorkflowEvent<OpenhandsHireParams>, step: WorkflowStep): Promise<{
25
+ minted: false;
26
+ remaining: number;
27
+ txHash?: undefined;
28
+ topUp?: undefined;
29
+ status: "active" | "paused";
30
+ skipped: true;
31
+ collectionId: string;
32
+ started: number;
33
+ } | {
34
+ minted: false;
35
+ remaining: number;
36
+ txHash?: undefined;
37
+ topUp?: undefined;
38
+ status: "active" | "paused";
39
+ skipped: false;
40
+ collectionId: string;
41
+ started: number;
42
+ } | {
43
+ minted: true;
44
+ txHash: string;
45
+ remaining: number;
46
+ topUp: boolean;
47
+ status: "active" | "paused";
48
+ skipped: true;
49
+ collectionId: string;
50
+ started: number;
51
+ } | {
52
+ minted: true;
53
+ txHash: string;
54
+ remaining: number;
55
+ topUp: boolean;
56
+ status: "active" | "paused";
57
+ skipped: false;
58
+ collectionId: string;
59
+ started: number;
60
+ }>;
61
+ private hire;
62
+ /** The quota row and the provider's hook. Fail-soft: the chain is the authority, not the row. */
63
+ private recordQuota;
64
+ }
65
+ //# sourceMappingURL=openhands-hire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openhands-hire.d.ts","sourceRoot":"","sources":["../../src/workflows/openhands-hire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAK/F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAqBxC,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAcD,qBAAa,aAAc,SAAQ,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACpE,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAY/E;YAEa,IAAI;IA8JlB,iGAAiG;YACnF,WAAW;CAa1B"}