@perkos/agent-sdk 0.7.0 → 0.8.0-rc.1

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/CHANGELOG.md +74 -0
  2. package/README.md +98 -44
  3. package/dist/builders.d.ts +5 -1
  4. package/dist/builders.d.ts.map +1 -1
  5. package/dist/builders.js +155 -11
  6. package/dist/builders.js.map +1 -1
  7. package/dist/client.d.ts +8 -1
  8. package/dist/client.d.ts.map +1 -1
  9. package/dist/client.js +168 -26
  10. package/dist/client.js.map +1 -1
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +6 -4
  13. package/dist/constants.js.map +1 -1
  14. package/dist/custody/backend.d.ts +4 -0
  15. package/dist/custody/backend.d.ts.map +1 -0
  16. package/dist/custody/backend.js +149 -0
  17. package/dist/custody/backend.js.map +1 -0
  18. package/dist/custody/cli.d.ts +3 -0
  19. package/dist/custody/cli.d.ts.map +1 -0
  20. package/dist/custody/cli.js +43 -0
  21. package/dist/custody/cli.js.map +1 -0
  22. package/dist/custody/engine.d.ts +54 -0
  23. package/dist/custody/engine.d.ts.map +1 -0
  24. package/dist/custody/engine.js +115 -0
  25. package/dist/custody/engine.js.map +1 -0
  26. package/dist/custody/ledger.d.ts +24 -0
  27. package/dist/custody/ledger.d.ts.map +1 -0
  28. package/dist/custody/ledger.js +122 -0
  29. package/dist/custody/ledger.js.map +1 -0
  30. package/dist/custody/permit.d.ts +42 -0
  31. package/dist/custody/permit.d.ts.map +1 -0
  32. package/dist/custody/permit.js +91 -0
  33. package/dist/custody/permit.js.map +1 -0
  34. package/dist/custody/socket.d.ts +11 -0
  35. package/dist/custody/socket.d.ts.map +1 -0
  36. package/dist/custody/socket.js +118 -0
  37. package/dist/custody/socket.js.map +1 -0
  38. package/dist/evaluation-commitments.d.ts +47 -0
  39. package/dist/evaluation-commitments.d.ts.map +1 -0
  40. package/dist/evaluation-commitments.js +96 -0
  41. package/dist/evaluation-commitments.js.map +1 -0
  42. package/dist/index.d.ts +6 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +3 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/mcp/cli.d.ts +3 -0
  47. package/dist/mcp/cli.d.ts.map +1 -0
  48. package/dist/mcp/cli.js +36 -0
  49. package/dist/mcp/cli.js.map +1 -0
  50. package/dist/mcp/evaluation.d.ts +33 -0
  51. package/dist/mcp/evaluation.d.ts.map +1 -0
  52. package/dist/mcp/evaluation.js +141 -0
  53. package/dist/mcp/evaluation.js.map +1 -0
  54. package/dist/mcp/server.d.ts +27 -0
  55. package/dist/mcp/server.d.ts.map +1 -0
  56. package/dist/mcp/server.js +207 -0
  57. package/dist/mcp/server.js.map +1 -0
  58. package/dist/policy.d.ts.map +1 -1
  59. package/dist/policy.js +7 -2
  60. package/dist/policy.js.map +1 -1
  61. package/dist/service-fees.d.ts +15 -0
  62. package/dist/service-fees.d.ts.map +1 -0
  63. package/dist/service-fees.js +109 -0
  64. package/dist/service-fees.js.map +1 -0
  65. package/dist/types.d.ts +66 -2
  66. package/dist/types.d.ts.map +1 -1
  67. package/docs/ARCHITECTURE.md +31 -15
  68. package/docs/EXISTING_AGENT.md +123 -0
  69. package/docs/HERMES_BUYER.md +91 -0
  70. package/docs/HERMES_CHECKPOINTS.md +88 -0
  71. package/docs/HERMES_CUSTODY.md +164 -0
  72. package/docs/HERMES_MCP.md +157 -0
  73. package/docs/HERMES_PROVIDER.md +98 -0
  74. package/docs/RELEASE_0.8.0_RC1.md +60 -0
  75. package/docs/SERVICE_FEES.md +108 -0
  76. package/docs/TESTNET_QUICKSTART.md +123 -0
  77. package/docs/VALIDATION_AND_RELEASE.md +82 -0
  78. package/docs/WALLET_SIGNER_SETUP.md +52 -0
  79. package/examples/service-fees.ts +36 -0
  80. package/examples/testnet-journal.ts +57 -0
  81. package/examples/testnet-lifecycle.ts +188 -294
  82. package/examples/testnet.env.example +12 -14
  83. package/package.json +7 -1
@@ -0,0 +1,91 @@
1
+ /** Operator-owned QA authorization. Never constructed from an LLM tool argument. */
2
+ import { createHash } from "node:crypto";
3
+ import { parseProfile, QA_CONTRACTS } from "../mcp/server.js";
4
+ import { prepareEvaluationJob, prepareEvaluationSubmission } from "../evaluation-commitments.js";
5
+ export const GAS_PER_ACTION = 5000n;
6
+ export const ACTIONS = ["register", "create", "set-budget", "fund", "assign", "submit", "finalize"];
7
+ export function guard(ok) { if (!ok)
8
+ throw new Error("custody_guard_failed"); }
9
+ export function object(value, keys) {
10
+ guard(value && typeof value === "object" && !Array.isArray(value));
11
+ const r = value;
12
+ guard(Object.keys(r).length === keys.length && keys.every(k => Object.hasOwn(r, k)));
13
+ return r;
14
+ }
15
+ export function positive(value) {
16
+ guard(typeof value === "string" && /^[1-9][0-9]{0,38}$/.test(value));
17
+ const n = BigInt(value);
18
+ guard(n < 2n ** 128n);
19
+ return n;
20
+ }
21
+ export function hash(value) {
22
+ // Objects entering this function are reconstructed in a fixed field order.
23
+ return createHash("sha256").update(JSON.stringify(value)).digest("hex");
24
+ }
25
+ export function commitmentInput(p) {
26
+ return { network: "testnet", asset: p.asset,
27
+ contract: p.asset === "stx" ? QA_CONTRACTS.stxCommerce : QA_CONTRACTS.sbtcCommerce,
28
+ client: p.profile.client, evaluator: p.profile.evaluator,
29
+ description: p.description, acceptanceCriteria: p.acceptanceCriteria };
30
+ }
31
+ export async function parsePermit(value) {
32
+ const r = object(value, ["version", "id", "profile", "asset", "amount", "gasBudget", "expiresAt",
33
+ "expiredAt", "jobId", "description", "acceptanceCriteria", "agentName", "actions", "evidenceOrigins", "serviceFeeConsent"]);
34
+ guard(r.version === 1 && typeof r.id === "string" && /^[a-z0-9-]{1,64}$/.test(r.id));
35
+ const profile = parseProfile(r.profile);
36
+ guard(r.asset === "stx" || r.asset === "sbtc");
37
+ guard(positive(r.amount) <= (r.asset === "stx" ? 100000n : 1000n));
38
+ guard(positive(r.gasBudget) <= GAS_PER_ACTION * 7n);
39
+ positive(r.expiredAt);
40
+ guard(r.jobId === null || positive(r.jobId) > 0n);
41
+ guard(typeof r.expiresAt === "string" && /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.000Z$/.test(r.expiresAt)
42
+ && Number.isFinite(Date.parse(r.expiresAt)) && new Date(r.expiresAt).toISOString() === r.expiresAt);
43
+ guard(typeof r.description === "string" && typeof r.agentName === "string" && /^[\w -]{1,64}$/.test(r.agentName));
44
+ guard(r.serviceFeeConsent === "200bps-net-after-evaluation");
45
+ guard(Array.isArray(r.actions) && r.actions.length > 0 && new Set(r.actions).size === r.actions.length);
46
+ const allowed = profile.role === "client" ? ACTIONS.filter(a => a !== "submit") : ["register", "submit"];
47
+ guard(r.actions.every(a => allowed.includes(a)));
48
+ guard(profile.role !== "provider" || r.jobId !== null);
49
+ guard(r.jobId === null ? r.actions.includes("create") : !r.actions.includes("create"));
50
+ guard(Array.isArray(r.evidenceOrigins) && r.evidenceOrigins.length <= 5 && r.evidenceOrigins.every(o => {
51
+ if (typeof o !== "string")
52
+ return false;
53
+ const url = new URL(o);
54
+ return url.protocol === "https:" && url.origin === o && !url.username && !url.password;
55
+ }));
56
+ guard(Array.isArray(r.acceptanceCriteria));
57
+ const criteria = r.acceptanceCriteria.map(v => {
58
+ const c = object(v, ["id", "requirement", "verification"]);
59
+ guard([c.id, c.requirement, c.verification].every(v => typeof v === "string"));
60
+ return Object.freeze({ id: c.id, requirement: c.requirement, verification: c.verification });
61
+ });
62
+ const p = { version: 1, id: r.id, profile, asset: r.asset, amount: r.amount,
63
+ gasBudget: r.gasBudget, expiresAt: r.expiresAt, expiredAt: r.expiredAt,
64
+ jobId: r.jobId, description: r.description, acceptanceCriteria: Object.freeze(criteria),
65
+ agentName: r.agentName, actions: Object.freeze([...r.actions]),
66
+ evidenceOrigins: Object.freeze([...r.evidenceOrigins]), serviceFeeConsent: r.serviceFeeConsent };
67
+ await prepareEvaluationJob(commitmentInput(p));
68
+ return Object.freeze(p);
69
+ }
70
+ export async function parseExecution(value, p, jobId) {
71
+ guard(value && typeof value === "object");
72
+ const action = value.action;
73
+ const r = object(value, action === "submit" ? ["action", "evidence"] : ["action"]);
74
+ guard(p.actions.includes(r.action));
75
+ if (r.action !== "submit")
76
+ return { action: r.action };
77
+ guard(jobId && Array.isArray(r.evidence) && r.evidence.length > 0 && r.evidence.length <= 5);
78
+ let bytes = 0;
79
+ const evidence = r.evidence.map(item => {
80
+ const e = object(item, ["id", "uri", "sha256", "mediaType", "sizeBytes"]);
81
+ guard(typeof e.uri === "string" && p.evidenceOrigins.includes(new URL(e.uri).origin));
82
+ guard(e.mediaType === "text/plain" || e.mediaType === "application/json");
83
+ guard(Number.isSafeInteger(e.sizeBytes) && Number(e.sizeBytes) >= 0 && Number(e.sizeBytes) <= 8192);
84
+ bytes += Number(e.sizeBytes);
85
+ return { id: e.id, uri: e.uri, sha256: e.sha256, mediaType: e.mediaType, sizeBytes: e.sizeBytes };
86
+ });
87
+ guard(bytes <= 16000);
88
+ await prepareEvaluationSubmission({ ...commitmentInput(p), provider: p.profile.provider, jobId, evidence });
89
+ return { action: "submit", evidence };
90
+ }
91
+ //# sourceMappingURL=permit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permit.js","sourceRoot":"","sources":["../../src/custody/permit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Server } from "node:net";
2
+ import type { CustodyEngine } from "./engine.js";
3
+ import type { HermesProfile } from "../mcp/server.js";
4
+ export interface CustodyPort {
5
+ status(): Promise<unknown>;
6
+ execute(request: unknown): Promise<unknown>;
7
+ }
8
+ /** No TCP listener. Parent must be signer-owned, group-traversable but not group-writable. */
9
+ export declare function listenCustody(path: string, engine: CustodyEngine): Promise<Server>;
10
+ export declare function custodyPort(path: string, permitHash: string, profile: Readonly<HermesProfile>): CustodyPort;
11
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/custody/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7C;AAKD,8FAA8F;AAC9F,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAqCxF;AACD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,WAAW,CA4B3G"}
@@ -0,0 +1,118 @@
1
+ import { createServer, createConnection } from "node:net";
2
+ import { chmodSync, lstatSync, realpathSync } from "node:fs";
3
+ import { dirname, isAbsolute } from "node:path";
4
+ import { guard, object } from "./permit.js";
5
+ const MAX = 32768;
6
+ function pathGuard(path) {
7
+ guard(isAbsolute(path) && Buffer.byteLength(path) <= 100 && realpathSync(dirname(path)) === dirname(path));
8
+ }
9
+ /** No TCP listener. Parent must be signer-owned, group-traversable but not group-writable. */
10
+ export async function listenCustody(path, engine) {
11
+ pathGuard(path);
12
+ const parent = lstatSync(dirname(path));
13
+ guard(parent.isDirectory() && parent.uid === process.getuid?.() && (parent.mode & 0o777) === 0o710);
14
+ const server = createServer(socket => {
15
+ let bytes = Buffer.alloc(0), used = false;
16
+ socket.setTimeout(30000, () => socket.destroy());
17
+ socket.on("error", () => { });
18
+ socket.on("data", async (chunk) => {
19
+ if (used) {
20
+ socket.destroy();
21
+ return;
22
+ }
23
+ bytes = Buffer.concat([bytes, chunk]);
24
+ if (bytes.length > MAX) {
25
+ socket.destroy();
26
+ return;
27
+ }
28
+ if (!bytes.includes(10))
29
+ return;
30
+ used = true;
31
+ try {
32
+ guard(bytes.at(-1) === 10 && bytes.indexOf(10) === bytes.length - 1);
33
+ const input = JSON.parse(bytes.toString("utf8"));
34
+ const r = object(input, ["permitHash", "method", "request"]);
35
+ guard(r.permitHash === engine.status().permitHash);
36
+ let result;
37
+ if (r.method === "status") {
38
+ object(r.request, []);
39
+ result = await engine.reconcile();
40
+ }
41
+ else {
42
+ guard(r.method === "execute");
43
+ result = await engine.execute(r.request);
44
+ }
45
+ socket.end(JSON.stringify({ ok: true, result }) + "\n");
46
+ }
47
+ catch {
48
+ socket.end(JSON.stringify({ ok: false, error: "Reconcile custody status before retrying. An operation may already be signed or broadcast." }) + "\n");
49
+ }
50
+ });
51
+ });
52
+ server.maxConnections = 8;
53
+ await new Promise((resolve, reject) => {
54
+ const error = (e) => reject(e);
55
+ server.once("error", error);
56
+ server.listen(path, () => {
57
+ try {
58
+ chmodSync(path, 0o660);
59
+ server.off("error", error);
60
+ resolve();
61
+ }
62
+ catch (e) {
63
+ server.close();
64
+ reject(e);
65
+ }
66
+ });
67
+ });
68
+ return server;
69
+ }
70
+ export function custodyPort(path, permitHash, profile) {
71
+ pathGuard(path);
72
+ guard(/^[a-f0-9]{64}$/.test(permitHash));
73
+ async function call(method, request) {
74
+ const message = JSON.stringify({ permitHash, method, request }) + "\n";
75
+ guard(Buffer.byteLength(message) <= MAX);
76
+ const result = await new Promise((resolve, reject) => {
77
+ const socket = createConnection(path);
78
+ let bytes = Buffer.alloc(0), done = false;
79
+ const fail = () => { if (!done) {
80
+ done = true;
81
+ socket.destroy();
82
+ reject(new Error("custody_unavailable_reconcile"));
83
+ } };
84
+ socket.setTimeout(30000, fail);
85
+ socket.on("error", fail);
86
+ socket.on("end", () => { if (!done)
87
+ fail(); });
88
+ socket.on("connect", () => socket.write(message));
89
+ socket.on("data", chunk => {
90
+ bytes = Buffer.concat([bytes, chunk]);
91
+ if (bytes.length > MAX)
92
+ return fail();
93
+ if (!bytes.includes(10))
94
+ return;
95
+ try {
96
+ guard(bytes.at(-1) === 10 && bytes.indexOf(10) === bytes.length - 1);
97
+ const data = JSON.parse(bytes.toString("utf8"));
98
+ guard(data.ok === true && data.result);
99
+ done = true;
100
+ socket.destroy();
101
+ resolve(data.result);
102
+ }
103
+ catch {
104
+ fail();
105
+ }
106
+ });
107
+ });
108
+ const r = result;
109
+ guard(r.permitHash === permitHash && r.profile && Object.entries(profile).every(([k, v]) => r.profile[k] === v));
110
+ return result;
111
+ }
112
+ return { status: () => call("status", {}), execute: async (request) => {
113
+ // Verify role binding before sending a mutating request to the separate signer.
114
+ await call("status", {});
115
+ return call("execute", request);
116
+ } };
117
+ }
118
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/custody/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQ5C,MAAM,GAAG,GAAG,KAAK,CAAC;AAClB,SAAS,SAAS,CAAC,IAAY;IAC7B,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7G,CAAC;AACD,8FAA8F;AAC9F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,MAAqB;IACrE,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IACpG,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE;QACnC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;QAC1C,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAC,KAAK,EAAC,EAAE;YAC9B,IAAI,IAAI,EAAE,CAAC;gBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACvC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAE,OAAO;YAChC,IAAI,GAAG,IAAI,CAAC;YACZ,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBACjD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC7D,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;gBACnD,IAAI,MAAe,CAAC;gBACpB,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAAC,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;gBAAC,CAAC;qBACnF,CAAC;oBAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;oBAAC,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAAC,CAAC;gBACjF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,4FAA4F,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACxJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC;gBAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAAC,OAAO,EAAE,CAAC;YAAC,CAAC;YACtE,OAAO,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,UAAkB,EAAE,OAAgC;IAC5F,SAAS,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1D,KAAK,UAAU,IAAI,CAAC,MAA4B,EAAE,OAAgB;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;QACvE,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;YACjF,MAAM,IAAI,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;gBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC;YACzH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI;gBAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBACxB,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;oBAAE,OAAO,IAAI,EAAE,CAAC;gBAC7E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAAE,OAAO;gBAChC,IAAI,CAAC;oBACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACrE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAsC,CAAC;oBACrF,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC;oBAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9F,CAAC;gBAAC,MAAM,CAAC;oBAAC,IAAI,EAAE,CAAC;gBAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,MAAmE,CAAC;QAC9E,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjH,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YAClE,gFAAgF;YAChF,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5D,CAAC,EAAE,CAAC;AACN,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Nayori commitment profile v1. Kept byte-identical in SDK and Evaluator.
3
+ * Only JSON primitives, lexicographic ASCII keys, ordered arrays and UTF-8.
4
+ * Hashes bind manifests; they do not prove evidence truth or authorize wallet spending.
5
+ */
6
+ export interface EvaluationCriterion {
7
+ readonly id: string;
8
+ readonly requirement: string;
9
+ readonly verification: string;
10
+ }
11
+ export interface EvaluationEvidence {
12
+ readonly id: string;
13
+ readonly uri: string;
14
+ readonly sha256: string;
15
+ readonly mediaType: string;
16
+ readonly sizeBytes: number;
17
+ }
18
+ export interface CriteriaCommitmentInput {
19
+ readonly network: "testnet";
20
+ readonly asset: "stx" | "sbtc";
21
+ readonly contract: string;
22
+ readonly client: string;
23
+ readonly evaluator: string;
24
+ readonly description: string;
25
+ readonly acceptanceCriteria: readonly EvaluationCriterion[];
26
+ }
27
+ export interface EvidenceCommitmentInput extends CriteriaCommitmentInput {
28
+ readonly jobId: string;
29
+ readonly provider: string;
30
+ readonly evidence: readonly EvaluationEvidence[];
31
+ }
32
+ export declare function prepareEvaluationJob(input: CriteriaCommitmentInput): Promise<{
33
+ criteriaHash: string;
34
+ description: string;
35
+ }>;
36
+ export declare function parseEvaluationDescription(description: string): {
37
+ description: string;
38
+ criteriaHash: string;
39
+ };
40
+ export declare function prepareEvaluationSubmission(input: EvidenceCommitmentInput): Promise<{
41
+ evidenceHash: string;
42
+ deliverable: Uint8Array<ArrayBuffer>;
43
+ criteriaHash: string;
44
+ description: string;
45
+ }>;
46
+ export declare function evaluationJobId(input: Pick<EvidenceCommitmentInput, "network" | "contract" | "jobId">): Promise<string>;
47
+ //# sourceMappingURL=evaluation-commitments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-commitments.d.ts","sourceRoot":"","sources":["../src/evaluation-commitments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AACD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AACD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC7D;AACD,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAClD;AA2CD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,uBAAuB;;;GAGxE;AACD,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM;;;EAQ7D;AACD,wBAAsB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB;;;;;GA0B/E;AACD,wBAAsB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAS7H"}
@@ -0,0 +1,96 @@
1
+ const CRITERIA = "\nnayori-criteria-v1:";
2
+ const EVIDENCE = "ny1:";
3
+ const HASH = /^[0-9a-f]{64}$/;
4
+ const PRINCIPAL = /^ST[A-Z0-9]{20,41}$/;
5
+ function ensure(condition) {
6
+ if (!condition)
7
+ throw new Error("invalid_evaluation_commitment");
8
+ }
9
+ function text(value, max) {
10
+ ensure(typeof value === "string" && value.length > 0 && value.length <= max);
11
+ // Reject lone surrogates instead of hashing lossy UTF-8 replacements.
12
+ ensure(!/[\uD800-\uDFFF]/u.test(value));
13
+ }
14
+ function canonical(value) {
15
+ if (Array.isArray(value))
16
+ return "[" + value.map(canonical).join(",") + "]";
17
+ if (value !== null && typeof value === "object") {
18
+ const record = value;
19
+ return "{" + Object.keys(record).sort().map(k => JSON.stringify(k) + ":" + canonical(record[k])).join(",") + "}";
20
+ }
21
+ return JSON.stringify(value);
22
+ }
23
+ async function digest(domain, value) {
24
+ const bytes = new TextEncoder().encode(domain + "\n" + canonical(value));
25
+ return Array.from(new Uint8Array(await globalThis.crypto.subtle.digest("SHA-256", bytes)), byte => byte.toString(16).padStart(2, "0")).join("");
26
+ }
27
+ function criteriaManifest(input) {
28
+ ensure(input.network === "testnet" && ["stx", "sbtc"].includes(input.asset));
29
+ ensure(/^ST[A-Z0-9]{20,41}\.[a-z][a-z0-9-]{0,39}$/.test(input.contract));
30
+ ensure(PRINCIPAL.test(input.client) && PRINCIPAL.test(input.evaluator) && input.client !== input.evaluator);
31
+ text(input.description, 512 - CRITERIA.length - 64);
32
+ ensure(/^[\x20-\x7e\n\r\t]+$/.test(input.description) && !input.description.includes("nayori-criteria-"));
33
+ ensure(Array.isArray(input.acceptanceCriteria) && input.acceptanceCriteria.length >= 1 && input.acceptanceCriteria.length <= 20);
34
+ const acceptanceCriteria = input.acceptanceCriteria.map(item => {
35
+ text(item.id, 64);
36
+ ensure(/^[a-zA-Z0-9._-]+$/.test(item.id));
37
+ text(item.requirement, 1024);
38
+ text(item.verification, 1024);
39
+ return { id: item.id, requirement: item.requirement, verification: item.verification };
40
+ });
41
+ ensure(new Set(acceptanceCriteria.map(item => item.id)).size === acceptanceCriteria.length);
42
+ return { schemaVersion: "1", network: input.network, asset: input.asset, contract: input.contract,
43
+ client: input.client, evaluator: input.evaluator, description: input.description, acceptanceCriteria };
44
+ }
45
+ export async function prepareEvaluationJob(input) {
46
+ const criteriaHash = await digest("nayori/criteria/v1", criteriaManifest(input));
47
+ return { criteriaHash, description: input.description + CRITERIA + criteriaHash };
48
+ }
49
+ export function parseEvaluationDescription(description) {
50
+ text(description, 512);
51
+ const index = description.lastIndexOf(CRITERIA);
52
+ ensure(index > 0);
53
+ const plainDescription = description.slice(0, index);
54
+ const criteriaHash = description.slice(index + CRITERIA.length);
55
+ ensure(HASH.test(criteriaHash) && !plainDescription.includes("nayori-criteria-"));
56
+ return { description: plainDescription, criteriaHash };
57
+ }
58
+ export async function prepareEvaluationSubmission(input) {
59
+ const criteria = await prepareEvaluationJob(input);
60
+ ensure(/^[1-9][0-9]{0,38}$/.test(input.jobId) && BigInt(input.jobId) < 2n ** 128n);
61
+ ensure(PRINCIPAL.test(input.provider) && ![input.client, input.evaluator].includes(input.provider));
62
+ ensure(Array.isArray(input.evidence) && input.evidence.length >= 1 && input.evidence.length <= 50);
63
+ const evidence = input.evidence.map(item => {
64
+ text(item.id, 64);
65
+ ensure(/^[a-zA-Z0-9._-]+$/.test(item.id));
66
+ text(item.uri, 2048);
67
+ const uri = new URL(item.uri);
68
+ ensure(uri.protocol === "https:" && !uri.username && !uri.password && !uri.hash);
69
+ ensure(HASH.test(item.sha256) && !/^0+$/.test(item.sha256));
70
+ text(item.mediaType, 128);
71
+ ensure(Number.isSafeInteger(item.sizeBytes) && item.sizeBytes >= 0 && item.sizeBytes <= 25_000_000);
72
+ return { id: item.id, uri: item.uri, sha256: item.sha256, mediaType: item.mediaType, sizeBytes: item.sizeBytes };
73
+ });
74
+ ensure(new Set(evidence.map(item => item.id)).size === evidence.length);
75
+ const evidenceHash = await digest("nayori/evidence/v1", {
76
+ schemaVersion: "1", network: input.network, asset: input.asset, contract: input.contract,
77
+ jobId: input.jobId, client: input.client, provider: input.provider, evaluator: input.evaluator,
78
+ criteriaHash: criteria.criteriaHash, evidence,
79
+ });
80
+ // Existing submit-work ABI is (buff 64): four ASCII version bytes + 32 raw digest bytes.
81
+ const deliverable = new Uint8Array(36);
82
+ deliverable.set(new TextEncoder().encode(EVIDENCE));
83
+ deliverable.set(Uint8Array.from(evidenceHash.match(/../g), pair => parseInt(pair, 16)), 4);
84
+ return { ...criteria, evidenceHash, deliverable };
85
+ }
86
+ export async function evaluationJobId(input) {
87
+ ensure(input.network === "testnet" && /^ST[A-Z0-9]{20,41}\.[a-z][a-z0-9-]{0,39}$/.test(input.contract));
88
+ ensure(/^[1-9][0-9]{0,38}$/.test(input.jobId) && BigInt(input.jobId) < 2n ** 128n);
89
+ const hash = await digest("nayori/evaluation-id/v1", {
90
+ network: input.network, contract: input.contract, jobId: input.jobId,
91
+ });
92
+ // Deterministic UUID-shaped identifier, not a credential.
93
+ return hash.slice(0, 8) + "-" + hash.slice(8, 12) + "-5" + hash.slice(13, 16) +
94
+ "-a" + hash.slice(17, 20) + "-" + hash.slice(20, 32);
95
+ }
96
+ //# sourceMappingURL=evaluation-commitments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation-commitments.js","sourceRoot":"","sources":["../src/evaluation-commitments.ts"],"names":[],"mappings":"AAgCA,MAAM,QAAQ,GAAG,uBAAuB,CAAC;AACzC,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,IAAI,GAAG,gBAAgB,CAAC;AAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,SAAS,MAAM,CAAC,SAAkB;IAChC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;AACnE,CAAC;AACD,SAAS,IAAI,CAAC,KAAc,EAAE,GAAW;IACvC,MAAM,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IAC7E,sEAAsE;IACtE,MAAM,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AACD,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACnH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AACD,KAAK,UAAU,MAAM,CAAC,MAAc,EAAE,KAAc;IAClD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,EACvF,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzD,CAAC;AACD,SAAS,gBAAgB,CAAC,KAA8B;IACtD,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IAC5G,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC1G,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACjI,MAAM,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;IACzF,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5F,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QAC/F,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAC3G,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAA8B;IACvE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,GAAG,QAAQ,GAAG,YAAY,EAAE,CAAC;AACpF,CAAC;AACD,MAAM,UAAU,0BAA0B,CAAC,WAAmB;IAC5D,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClB,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAClF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AACzD,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAA8B;IAC9E,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;IACnF,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC1B,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,CAAC;QACpG,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACnH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE;QACtD,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxF,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;QAC9F,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,QAAQ;KAC9C,CAAC,CAAC;IACH,yFAAyF;IACzF,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IACvC,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAE,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,OAAO,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AACpD,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAsE;IAC1G,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxG,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,yBAAyB,EAAE;QACnD,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;KACrE,CAAC,CAAC;IACH,0DAA0D;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;QAC3E,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,15 @@
1
1
  export { PerkOSClient } from "./client.js";
2
+ export { prepareEvaluationJob, prepareEvaluationSubmission, parseEvaluationDescription, evaluationJobId } from "./evaluation-commitments.js";
3
+ export type { EvaluationCriterion, EvaluationEvidence, CriteriaCommitmentInput, EvidenceCommitmentInput } from "./evaluation-commitments.js";
4
+ export { SERVICE_FEE_BASIS_POINTS, quoteServiceFee, supportsServiceFees, } from "./service-fees.js";
5
+ export type { ServiceFeeAcceptance, ServiceFeeSplit, ServiceFeePolicy, ServiceFeeSettlement, JobServiceFeeRecord, InitializeServiceFeeProtocolInput, WaiveServiceFeeInput, WaiveServiceFeePlanInput, RefundServiceFeePlanInput, } from "./types.js";
2
6
  export { PerkOSTransactionBuilder } from "./builders.js";
3
7
  export { SpendingPolicy } from "./policy.js";
4
8
  export { HeadlessSigner, StacksConnectSigner } from "./signers.js";
5
9
  export { TransactionTracker } from "./tracker.js";
6
10
  export { PerkOSError } from "./errors.js";
7
11
  export { NAYORI_PARTNER_SCOPES, NayoriPartnerApiError, NayoriPartnerClient, createStacksConnectPartnerSigner, } from "./partner.js";
8
- export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES } from "./constants.js";
12
+ export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES, } from "./constants.js";
9
13
  export { resolveConfig, toHash32, toUint } from "./validation.js";
10
14
  export { normalizeTxid } from "./txid.js";
11
15
  export { PERKOS_X402_ASSET_TRANSFER_METHOD, PERKOS_X402_PAYMENT_FLOW, PERKOS_X402_SCHEME, PerkOSX402SchemeClient, STACKS_X402_NETWORKS, X402_VERSION, createPerkOSX402PaymentRequired, decodePaymentRequiredHeader, decodePaymentResponseHeader, decodePaymentSignatureHeader, encodePaymentRequiredHeader, encodePaymentResponseHeader, encodePaymentSignatureHeader, fromStacksX402Network, parsePerkOSX402PaymentPayload, parsePerkOSX402Requirement, toStacksX402Network, } from "./x402.js";
@@ -14,7 +18,7 @@ export { NAYORI_X402_DIRECT_ASSETS, NAYORI_X402_DIRECT_ASSET_TRANSFER_METHOD, NA
14
18
  export { LeatherSigner, NAYORI_X402_PAYMENT_INTENT_PREFIX, NAYORI_X402_PAYMENT_INTENT_VERSION, NayoriX402PaymentClient, NayoriX402PaymentPolicy, PolicySigner, buildNayoriX402UnsignedPaymentTransaction, createNayoriX402PaymentIntent, } from "./x402-paying.js";
15
19
  export { MPP_PAYMENT_SCHEME, NAYORI_MPP_CREDENTIAL_HEADER, NAYORI_MPP_INTENT, NAYORI_MPP_METHOD, NAYORI_MPP_PROFILE, NAYORI_MPP_TRANSACTION_FORMAT, NayoriMppVerificationError, buildNayoriMppUnsignedPaymentTransaction, canonicalizeNayoriMppJson, createNayoriMppUsdcStacksChallenge, createNayoriMppUsdcStacksCredential, createNayoriMppUsdcStacksReceipt, decodeNayoriMppChallengeHeader, decodeNayoriMppCredentialHeader, decodeNayoriMppJson, decodeNayoriMppReceiptHeader, decodeNayoriMppUsdcStacksRequest, encodeNayoriMppChallengeHeader, encodeNayoriMppCredentialHeader, encodeNayoriMppJson, encodeNayoriMppReceiptHeader, nayoriMppStacksReplayKey, verifyNayoriMppUsdcStacksPayment, } from "./mpp.js";
16
20
  export type { HeadlessSignerOptions, HeadlessTransactionExecutor, HeadlessTransactionRequest, PrivateKeyMaterial, PrivateKeyProvider, StacksConnectContractCallParams, StacksConnectRequest, StacksConnectSignerOptions, } from "./signers.js";
17
- export type { TrackerFetch, TransactionTrackerOptions, } from "./tracker.js";
21
+ export type { TrackerFetch, TransactionTrackerOptions } from "./tracker.js";
18
22
  export type { AgentEndpoint, AgentRecord, AppealDecisionInput, Amount, AmountLike, AssignProviderInput, ConfirmationOptions, ConfirmedTransactionReceipt, ContractCallPlan, ContractId, CreateJobInput, DecisionRecord, DecisionSettlementInput, FundJobInput, Hash32Input, JobAmountInput, JobDecision, JobRecord, JobStatus, PaymentAsset, PerkOSConfig, PerkOSContracts, PerkOSNetwork, PerkOSOperation, PerkOSSigner, RateProviderInput, ReadOnlyCall, ReadOnlyTransport, RecordDecisionInput, RegisterAgentInput, ReputationRecord, ReputationSyncRecord, ResolvedPerkOSConfig, ResolveAppealInput, ResolveAppealPlanInput, SettleJobInput, SignerResult, SpendingApproval, SpendingPolicyInput, SubmitWorkInput, TransactionIntent, TransactionConfirmation, TransactionConfirmationStatus, TransactionReceipt, TransactionResultValue, TransactionTrackerLike, UpdateAgentInput, } from "./types.js";
19
23
  export type { PerkOSErrorCode, PerkOSErrorDetails } from "./errors.js";
20
24
  export type { NayoriPartnerAccessToken, NayoriPartnerChallenge, NayoriPartnerCredentials, NayoriPartnerFetch, NayoriPartnerMessageSignature, NayoriPartnerMessageSigner, NayoriPartnerNetwork, NayoriPartnerScope, StacksConnectMessageRequest, } from "./partner.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  export { PerkOSClient } from "./client.js";
2
+ export { prepareEvaluationJob, prepareEvaluationSubmission, parseEvaluationDescription, evaluationJobId } from "./evaluation-commitments.js";
3
+ export { SERVICE_FEE_BASIS_POINTS, quoteServiceFee, supportsServiceFees, } from "./service-fees.js";
2
4
  export { PerkOSTransactionBuilder } from "./builders.js";
3
5
  export { SpendingPolicy } from "./policy.js";
4
6
  export { HeadlessSigner, StacksConnectSigner } from "./signers.js";
5
7
  export { TransactionTracker } from "./tracker.js";
6
8
  export { PerkOSError } from "./errors.js";
7
9
  export { NAYORI_PARTNER_SCOPES, NayoriPartnerApiError, NayoriPartnerClient, createStacksConnectPartnerSigner, } from "./partner.js";
8
- export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES } from "./constants.js";
10
+ export { DEFAULT_DEPLOYMENTS, JOB_STATUS, CLARITY_ERROR_MESSAGES, } from "./constants.js";
9
11
  export { resolveConfig, toHash32, toUint } from "./validation.js";
10
12
  export { normalizeTxid } from "./txid.js";
11
13
  export { PERKOS_X402_ASSET_TRANSFER_METHOD, PERKOS_X402_PAYMENT_FLOW, PERKOS_X402_SCHEME, PerkOSX402SchemeClient, STACKS_X402_NETWORKS, X402_VERSION, createPerkOSX402PaymentRequired, decodePaymentRequiredHeader, decodePaymentResponseHeader, decodePaymentSignatureHeader, encodePaymentRequiredHeader, encodePaymentResponseHeader, encodePaymentSignatureHeader, fromStacksX402Network, parsePerkOSX402PaymentPayload, parsePerkOSX402Requirement, toStacksX402Network, } from "./x402.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,wCAAwC,EACxC,+BAA+B,EAC/B,oCAAoC,EACpC,yBAAyB,EACzB,iCAAiC,EACjC,2BAA2B,EAC3B,iCAAiC,EACjC,oCAAoC,EACpC,mCAAmC,EACnC,qBAAqB,EACrB,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,iCAAiC,EACjC,kCAAkC,EAClC,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,yCAAyC,EACzC,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,wCAAwC,EACxC,yBAAyB,EACzB,kCAAkC,EAClC,mCAAmC,EACnC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE7I,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAY3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,gCAAgC,GACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,YAAY,EACZ,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,EAC5B,qBAAqB,EACrB,6BAA6B,EAC7B,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,yBAAyB,EACzB,wCAAwC,EACxC,+BAA+B,EAC/B,oCAAoC,EACpC,yBAAyB,EACzB,iCAAiC,EACjC,2BAA2B,EAC3B,iCAAiC,EACjC,oCAAoC,EACpC,mCAAmC,EACnC,qBAAqB,EACrB,gCAAgC,EAChC,kBAAkB,EAClB,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,iCAAiC,EACjC,kCAAkC,EAClC,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,yCAAyC,EACzC,6BAA6B,GAC9B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,0BAA0B,EAC1B,wCAAwC,EACxC,yBAAyB,EACzB,kCAAkC,EAClC,mCAAmC,EACnC,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,4BAA4B,EAC5B,gCAAgC,EAChC,8BAA8B,EAC9B,+BAA+B,EAC/B,mBAAmB,EACnB,4BAA4B,EAC5B,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,UAAU,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ import { constants, openSync, closeSync, fstatSync, readFileSync } from "node:fs";
3
+ import { isAbsolute } from "node:path";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { createHermesMcp, parseProfile } from "./server.js";
6
+ import { custodyPort } from "../custody/socket.js";
7
+ async function main() {
8
+ const args = process.argv.slice(2);
9
+ if (args.length === 1 && args[0] === "--help") {
10
+ console.log("nayori-mcp --config /absolute/public-profile.json [--custody-socket /ipc/nayori.sock --permit-hash SHA256 [--enable-qa-evaluation]]\nDefault: QA read/prepare only. Evaluation requires provider custody. Never provide private keys to MCP.");
11
+ return;
12
+ }
13
+ const enableEvaluation = args.at(-1) === "--enable-qa-evaluation";
14
+ if (enableEvaluation)
15
+ args.pop();
16
+ if (![2, 6].includes(args.length) || args[0] !== "--config" || !isAbsolute(args[1]) ||
17
+ args.length === 6 && (args[2] !== "--custody-socket" || args[4] !== "--permit-hash"))
18
+ throw new Error("config_required");
19
+ const fd = openSync(args[1], constants.O_RDONLY | constants.O_NOFOLLOW);
20
+ let profile;
21
+ try {
22
+ const s = fstatSync(fd);
23
+ if (!s.isFile() || s.size > 4096)
24
+ throw new Error("invalid_profile");
25
+ profile = JSON.parse(readFileSync(fd, "utf8"));
26
+ }
27
+ finally {
28
+ closeSync(fd);
29
+ }
30
+ const parsed = parseProfile(profile);
31
+ const custody = args.length === 6 ? custodyPort(args[3], args[5], parsed) : undefined;
32
+ const server = createHermesMcp(parsed, undefined, custody, enableEvaluation);
33
+ await server.connect(new StdioServerTransport());
34
+ }
35
+ main().catch(() => { console.error("Nayori MCP could not start. Supply a valid public QA profile; never include private keys."); process.exitCode = 1; });
36
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAClF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,8OAA8O,CAAC,CAAC;QAAC,OAAO;IACtQ,CAAC;IACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,wBAAwB,CAAC;IAClE,IAAI,gBAAgB;QAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC;QAClF,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC3H,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACrE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;YAAS,CAAC;QAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAE,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IAC7E,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACnD,CAAC;AACD,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,2FAA2F,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ /** Optional public QA admission. Never holds evaluator credentials or wallet keys. */
2
+ import { type EvaluationCriterion, type EvaluationEvidence } from "../evaluation-commitments.js";
3
+ import type { PerkOSClient } from "../client.js";
4
+ import type { CustodyPort } from "../custody/socket.js";
5
+ import type { HermesProfile } from "./server.js";
6
+ export declare const QA_EVALUATOR = "https://evaluator.qa.nayori.ai";
7
+ declare const SAFE_ERRORS: {
8
+ readonly admission_limit: "QA evaluation quota reached. Ask the operator to review capacity; do not automatically retry or change budgets.";
9
+ readonly ineligible: "QA evaluation is not eligible. Check the on-chain job, commitments and review deadline before taking another action.";
10
+ readonly unavailable: "QA evaluator is unavailable. Query evaluation status before any retry; admission may be uncertain.";
11
+ readonly transport: "QA evaluation transport failed or timed out. Query the deterministic evaluation status before any retry; do not repeat a signed operation.";
12
+ };
13
+ export declare class QaEvaluationError extends Error {
14
+ readonly code: keyof typeof SAFE_ERRORS;
15
+ constructor(code: keyof typeof SAFE_ERRORS);
16
+ }
17
+ export interface EvaluationInput {
18
+ asset: "stx" | "sbtc";
19
+ jobId: string;
20
+ description: string;
21
+ acceptanceCriteria: EvaluationCriterion[];
22
+ evidence: EvaluationEvidence[];
23
+ }
24
+ export interface EvaluationPort {
25
+ request(input: EvaluationInput): Promise<unknown>;
26
+ status(asset: "stx" | "sbtc", jobId: string): Promise<unknown>;
27
+ }
28
+ export declare function qaEvaluation(profile: Readonly<HermesProfile>, custody: CustodyPort, reader: Pick<PerkOSClient, "getJob" | "getEscrowBalance">, contracts: {
29
+ stxCommerce: string;
30
+ sbtcCommerce: string;
31
+ }, fetchImpl?: typeof fetch): EvaluationPort;
32
+ export {};
33
+ //# sourceMappingURL=evaluation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluation.d.ts","sourceRoot":"","sources":["../../src/mcp/evaluation.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,OAAO,EACL,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,eAAO,MAAM,YAAY,mCAAmC,CAAC;AAK7D,QAAA,MAAM,WAAW;;;;;CAKP,CAAC;AACX,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,WAAW;gBAA9B,IAAI,EAAE,MAAM,OAAO,WAAW;CACpD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAC1D,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;IAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAC3E;AACD,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE;AACD,wBAAgB,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EACjF,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,kBAAkB,CAAC,EACzD,SAAS,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,EACxD,SAAS,GAAE,OAAO,KAAyC,GAAG,cAAc,CA4F7E"}