@oneie/sdk 0.10.0 → 0.12.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.
@@ -0,0 +1,94 @@
1
+ /**
2
+ * GatewayClient — direct TypeDB access via api.one.ie.
3
+ *
4
+ * Use when you need raw TypeQL, authority checks, or path queries that aren't
5
+ * covered by SubstrateClient (which routes through one.ie/api/*).
6
+ *
7
+ * In CF Workers use subpath import: `@oneie/sdk/gateway`
8
+ */
9
+ const DEFAULT_GATEWAY = 'https://api.one.ie';
10
+ // Allowlist for identifiers that may appear in authority TypeQL — deny anything
11
+ // outside this charset rather than trying to escape arbitrary input into a query.
12
+ const SAFE_ID = /^[A-Za-z0-9_.:@+-]+$/;
13
+ const esc = (s) => s.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
14
+ export class GatewayClient {
15
+ base;
16
+ key;
17
+ constructor(env = {}) {
18
+ this.base = env.GATEWAY_URL ?? DEFAULT_GATEWAY;
19
+ this.key = env.GATEWAY_API_KEY ?? '';
20
+ }
21
+ headers() {
22
+ const h = { 'Content-Type': 'application/json' };
23
+ if (this.key)
24
+ h['Authorization'] = `Bearer ${this.key}`;
25
+ return h;
26
+ }
27
+ /** Run a TypeQL query against the gateway. Retries once on 429/5xx. */
28
+ async query(tql, write = false) {
29
+ const doFetch = () => fetch(`${this.base}/typedb/query`, {
30
+ method: 'POST',
31
+ headers: this.headers(),
32
+ body: JSON.stringify({ query: tql, transactionType: write ? 'write' : 'read', commit: write }),
33
+ });
34
+ let res = await doFetch();
35
+ if (!res.ok && [429, 502, 503, 504].includes(res.status)) {
36
+ await new Promise((r) => setTimeout(r, 500));
37
+ res = await doFetch();
38
+ }
39
+ if (!res.ok)
40
+ return [];
41
+ const data = (await res.json());
42
+ return data.answers ?? [];
43
+ }
44
+ /**
45
+ * Walk-up authority check — mirrors `web/src/lib/authority.ts`.
46
+ * Returns false on missing actor/slug, malformed identifiers, or gateway error (fail closed).
47
+ */
48
+ async canWalk(actorId, slug, capability) {
49
+ if (!actorId || !slug)
50
+ return false;
51
+ if (!SAFE_ID.test(actorId) || !SAFE_ID.test(slug) || !SAFE_ID.test(capability))
52
+ return false;
53
+ const rows = await this.query(`match
54
+ $me isa actor, has aid "${esc(actorId)}";
55
+ $g isa group, has gid $gid;
56
+ { $gid == "${esc(slug)}"; } or { $gid == "group:${esc(slug)}"; };
57
+ let $ok = can($me, $g, "${esc(capability)}");
58
+ $ok == true;
59
+ select $me; limit 1;`).catch(() => []);
60
+ return rows.length > 0;
61
+ }
62
+ /**
63
+ * Find the best agent actors for a skill, ranked by path strength from `from`.
64
+ * Returns actor aids in descending strength order (up to 5).
65
+ */
66
+ async suggestRoute(from, skill) {
67
+ const rows = await this.query(`match
68
+ $from isa actor, has aid "${esc(from)}";
69
+ (source: $from, target: $to) isa path, has strength $s;
70
+ (provider: $to, offered: $sk) isa capability;
71
+ $sk has skill-id "${esc(skill)}";
72
+ $to has aid $aid;
73
+ sort $s desc; limit 5;
74
+ select $aid;`);
75
+ return rows.map((r) => r.aid);
76
+ }
77
+ /**
78
+ * Top paths originating from a specific actor, ranked by strength.
79
+ * Use SubstrateClient.highways(limit, from) for the same result over the HTTP substrate API.
80
+ */
81
+ async actorHighways(actorUid, limit = 10) {
82
+ const rows = await this.query(`match
83
+ $from isa actor, has aid "${esc(actorUid)}";
84
+ $e (source: $from, target: $to) isa path, has strength $s;
85
+ $to has aid $tid;
86
+ sort $s desc; limit ${limit};
87
+ select $tid, $s;`);
88
+ return rows.map((r) => {
89
+ const row = r;
90
+ return { to: row.tid, strength: row.s };
91
+ });
92
+ }
93
+ }
94
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,6 +10,8 @@ export { SubstrateClient } from "./client.js";
10
10
  export { SubstrateClient as OneieClient } from "./client.js";
11
11
  export { BrainClient } from "./brain.js";
12
12
  export type { BrainEnv } from "./brain.js";
13
+ export { GatewayClient } from "./gateway.js";
14
+ export type { GatewayEnv } from "./gateway.js";
13
15
  export { emit as telemetryEmit, isDisabled as isTelemetryDisabled, sessionId } from "./telemetry.js";
14
16
  export * from "./errors.js";
15
17
  export * from "./schemas.js";
@@ -20,6 +22,7 @@ export type { CatalogEntry } from "./meta.js";
20
22
  export { buildReceiverPayload, generatedRegion, injectRegion } from "./openapi.js";
21
23
  export * from "./pay.js";
22
24
  export * from "./skills.js";
25
+ export * from "./broadcast.js";
23
26
  export { readWorkspaceSoul, buildSoulSuffix } from "./soul.js";
24
27
  export type { SoulDb } from "./soul.js";
25
28
  export { oneFetch, createAgent } from "./fetch.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACnJ,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,UAAU,IAAI,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjF,eAAO,MAAM,WAAW,EAAE,MAA6C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACnJ,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,UAAU,IAAI,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/D,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGjF,eAAO,MAAM,WAAW,EAAE,MAA6C,CAAA"}
package/dist/index.js CHANGED
@@ -7,6 +7,7 @@ export { launchToken } from "./launch.js";
7
7
  export { SubstrateClient } from "./client.js";
8
8
  export { SubstrateClient as OneieClient } from "./client.js";
9
9
  export { BrainClient } from "./brain.js";
10
+ export { GatewayClient } from "./gateway.js";
10
11
  export { emit as telemetryEmit, isDisabled as isTelemetryDisabled, sessionId } from "./telemetry.js";
11
12
  export * from "./errors.js";
12
13
  export * from "./schemas.js";
@@ -15,6 +16,7 @@ export { metaCatalog, metaRecipe, metaSchema, ownerOnly } from "./meta.js";
15
16
  export { buildReceiverPayload, generatedRegion, injectRegion } from "./openapi.js";
16
17
  export * from "./pay.js";
17
18
  export * from "./skills.js";
19
+ export * from "./broadcast.js";
18
20
  export { readWorkspaceSoul, buildSoulSuffix } from "./soul.js";
19
21
  export { oneFetch, createAgent } from "./fetch.js";
20
22
  export { PaymentError, BudgetExceededError, X402NetworkError } from "./fetch.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,UAAU,IAAI,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjF,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,MAAM,CAAC,MAAM,WAAW,GAAY,GAA2B,CAAC,OAAO,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,UAAU,IAAI,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErG,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnF,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjF,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACvD,MAAM,CAAC,MAAM,WAAW,GAAY,GAA2B,CAAC,OAAO,CAAA"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ export declare const StageSchema: z.ZodEnum<{
3
+ OFFER: "OFFER";
4
+ ESCROW: "ESCROW";
5
+ EXECUTE: "EXECUTE";
6
+ VERIFY: "VERIFY";
7
+ SETTLE: "SETTLE";
8
+ RECEIPT: "RECEIPT";
9
+ DISPUTE: "DISPUTE";
10
+ FADE: "FADE";
11
+ }>;
12
+ export type Stage = z.infer<typeof StageSchema>;
13
+ export type Verb = "counter" | "accept" | "reject" | "escrow" | "deliver" | "verify" | "settle" | "dispute";
14
+ export declare const RubricSchema: z.ZodObject<{
15
+ fit: z.ZodNumber;
16
+ form: z.ZodNumber;
17
+ truth: z.ZodNumber;
18
+ taste: z.ZodNumber;
19
+ }, z.core.$strip>;
20
+ export type Rubric = z.infer<typeof RubricSchema>;
21
+ export declare const DealSchema: z.ZodObject<{
22
+ id: z.ZodString;
23
+ buyer: z.ZodString;
24
+ seller: z.ZodString;
25
+ skill: z.ZodString;
26
+ price: z.ZodNumber;
27
+ currency: z.ZodDefault<z.ZodString>;
28
+ deadline: z.ZodString;
29
+ rubric: z.ZodOptional<z.ZodObject<{
30
+ fit: z.ZodNumber;
31
+ form: z.ZodNumber;
32
+ truth: z.ZodNumber;
33
+ taste: z.ZodNumber;
34
+ }, z.core.$strip>>;
35
+ stage: z.ZodEnum<{
36
+ OFFER: "OFFER";
37
+ ESCROW: "ESCROW";
38
+ EXECUTE: "EXECUTE";
39
+ VERIFY: "VERIFY";
40
+ SETTLE: "SETTLE";
41
+ RECEIPT: "RECEIPT";
42
+ DISPUTE: "DISPUTE";
43
+ FADE: "FADE";
44
+ }>;
45
+ version: z.ZodDefault<z.ZodNumber>;
46
+ escrowRef: z.ZodOptional<z.ZodString>;
47
+ result: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
48
+ scores: z.ZodOptional<z.ZodObject<{
49
+ fit: z.ZodNumber;
50
+ form: z.ZodNumber;
51
+ truth: z.ZodNumber;
52
+ taste: z.ZodNumber;
53
+ }, z.core.$strip>>;
54
+ }, z.core.$strip>;
55
+ export type Deal = z.infer<typeof DealSchema>;
56
+ export declare const VALID: Readonly<Record<Stage, ReadonlySet<Verb>>>;
57
+ export declare class InvalidTransition extends Error {
58
+ readonly stage: Stage;
59
+ readonly verb: Verb;
60
+ constructor(stage: Stage, verb: Verb);
61
+ }
62
+ export declare function advance(deal: Deal, verb: Verb, scores?: Rubric): Deal;
63
+ //# sourceMappingURL=market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../src/market.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,WAAW;;;;;;;;;EAStB,CAAC;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAIhD,MAAM,MAAM,IAAI,GACZ,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAId,eAAO,MAAM,YAAY;;;;;iBAKvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAcrB,CAAC;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAM9C,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAS5D,CAAC;AAIF,qBAAa,iBAAkB,SAAQ,KAAK;aAExB,KAAK,EAAE,KAAK;aACZ,IAAI,EAAE,IAAI;gBADV,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI;CAK7B;AAUD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAkCrE"}
package/dist/market.js ADDED
@@ -0,0 +1,92 @@
1
+ import { z } from "zod";
2
+ // ── Stages (locked — rename breaks KV-persisted deals) ──────────────────────
3
+ export const StageSchema = z.enum([
4
+ "OFFER", // terms proposed; counter/accept/reject legal
5
+ "ESCROW", // accepted; payment being locked
6
+ "EXECUTE", // escrow confirmed; work in progress
7
+ "VERIFY", // work delivered; rubric scoring in progress
8
+ "SETTLE", // rubric passed; payment releasing
9
+ "RECEIPT", // terminal — success
10
+ "DISPUTE", // terminal — contested; refund in flight
11
+ "FADE", // terminal — rejected or expired
12
+ ]);
13
+ // ── Deal schema ──────────────────────────────────────────────────────────────
14
+ export const RubricSchema = z.object({
15
+ fit: z.number().min(0).max(1),
16
+ form: z.number().min(0).max(1),
17
+ truth: z.number().min(0).max(1),
18
+ taste: z.number().min(0).max(1),
19
+ });
20
+ export const DealSchema = z.object({
21
+ id: z.string().uuid(),
22
+ buyer: z.string().min(1),
23
+ seller: z.string().min(1),
24
+ skill: z.string().min(1),
25
+ price: z.number().nonnegative(),
26
+ currency: z.string().default("credits"),
27
+ deadline: z.string().datetime(), // ISO-8601
28
+ rubric: RubricSchema.optional(), // thresholds (not scores) — set by buyer
29
+ stage: StageSchema,
30
+ version: z.number().int().nonnegative().default(0),
31
+ escrowRef: z.string().optional(), // pay.one.ie quote/claim id
32
+ result: z.record(z.string(), z.unknown()).optional(), // delivered work blob
33
+ scores: RubricSchema.optional(), // actual scores set by market:verify
34
+ });
35
+ // ── VALID — legal verbs per stage ────────────────────────────────────────────
36
+ const TERMINAL = new Set(["RECEIPT", "DISPUTE", "FADE"]);
37
+ export const VALID = {
38
+ OFFER: new Set(["counter", "accept", "reject", "dispute"]),
39
+ ESCROW: new Set(["escrow", "dispute"]),
40
+ EXECUTE: new Set(["deliver", "dispute"]),
41
+ VERIFY: new Set(["verify", "dispute"]),
42
+ SETTLE: new Set(["settle", "dispute"]),
43
+ RECEIPT: new Set(),
44
+ DISPUTE: new Set(),
45
+ FADE: new Set(),
46
+ };
47
+ // ── Errors ───────────────────────────────────────────────────────────────────
48
+ export class InvalidTransition extends Error {
49
+ stage;
50
+ verb;
51
+ constructor(stage, verb) {
52
+ super(`invalid transition: ${verb} is not legal in stage ${stage}`);
53
+ this.stage = stage;
54
+ this.verb = verb;
55
+ this.name = "InvalidTransition";
56
+ }
57
+ }
58
+ // ── advance() — the only way to mutate stage ─────────────────────────────────
59
+ const RUBRIC_PASS_THRESHOLD = 0.65;
60
+ function composite(scores) {
61
+ return (scores.fit + scores.form + scores.truth + scores.taste) / 4;
62
+ }
63
+ export function advance(deal, verb, scores) {
64
+ if (!VALID[deal.stage].has(verb)) {
65
+ throw new InvalidTransition(deal.stage, verb);
66
+ }
67
+ switch (verb) {
68
+ case "counter":
69
+ return { ...deal, version: deal.version + 1 };
70
+ case "accept":
71
+ return { ...deal, stage: "ESCROW", version: deal.version + 1 };
72
+ case "reject":
73
+ return { ...deal, stage: "FADE", version: deal.version + 1 };
74
+ case "escrow":
75
+ return { ...deal, stage: "EXECUTE", version: deal.version + 1 };
76
+ case "deliver":
77
+ return { ...deal, stage: "VERIFY", version: deal.version + 1 };
78
+ case "verify": {
79
+ if (!scores)
80
+ throw new Error("verify requires scores");
81
+ const next = composite(scores) >= RUBRIC_PASS_THRESHOLD ? "SETTLE" : "DISPUTE";
82
+ return { ...deal, stage: next, scores, version: deal.version + 1 };
83
+ }
84
+ case "settle":
85
+ return { ...deal, stage: "RECEIPT", version: deal.version + 1 };
86
+ case "dispute":
87
+ if (TERMINAL.has(deal.stage))
88
+ throw new InvalidTransition(deal.stage, verb);
89
+ return { ...deal, stage: "DISPUTE", version: deal.version + 1 };
90
+ }
91
+ }
92
+ //# sourceMappingURL=market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../src/market.ts"],"names":[],"mappings":"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"}
package/dist/meta.d.ts CHANGED
@@ -4,7 +4,7 @@ import { type ReceiverName, type RecipeName } from "./receivers.js";
4
4
  * catalog: an agent reads these to discover what it can call, each capability's
5
5
  * cost/reversibility/settlement, and one receiver's exact request schema —
6
6
  * before it acts. Handlers in the service bind these to a caller's role; the
7
- * functions themselves carry no runtime dependency. See `plans/agent-first-spec.md`.
7
+ * functions themselves carry no runtime dependency. See `text/agent-first-spec-plan.md`.
8
8
  */
9
9
  /** One catalog row — the agent-facing slice of a receiver declaration. */
10
10
  export interface CatalogEntry {
package/dist/openapi.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * payload; here we derive a real `oneOf` over every receiver's request schema
5
5
  * (via `z.toJSONSchema`), each member tagged with the agent-ergonomic metadata
6
6
  * as `x-` extensions. Pure functions — the CLI (`scripts/generate-openapi.ts`)
7
- * does the file I/O. See `plans/agent-first-spec.md`.
7
+ * does the file I/O. See `text/agent-first-spec-plan.md`.
8
8
  */
9
9
  export declare const RECEIVER_REGION_BEGIN = " # BEGIN generated:receivers \u2014 bun run generate:openapi (do not edit by hand)";
10
10
  export declare const RECEIVER_REGION_END = " # END generated:receivers";
package/dist/openapi.js CHANGED
@@ -6,7 +6,7 @@ import { RECEIVERS } from "./receivers.js";
6
6
  * payload; here we derive a real `oneOf` over every receiver's request schema
7
7
  * (via `z.toJSONSchema`), each member tagged with the agent-ergonomic metadata
8
8
  * as `x-` extensions. Pure functions — the CLI (`scripts/generate-openapi.ts`)
9
- * does the file I/O. See `plans/agent-first-spec.md`.
9
+ * does the file I/O. See `text/agent-first-spec-plan.md`.
10
10
  */
11
11
  export const RECEIVER_REGION_BEGIN = " # BEGIN generated:receivers — bun run generate:openapi (do not edit by hand)";
12
12
  export const RECEIVER_REGION_END = " # END generated:receivers";