@perkos/agent-sdk 0.7.1 → 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 +50 -0
  2. package/README.md +69 -17
  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 +2 -0
  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 +18 -2
  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,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":"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"}
@@ -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":"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"}
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"}
@@ -0,0 +1,141 @@
1
+ /** Optional public QA admission. Never holds evaluator credentials or wallet keys. */
2
+ import { evaluationJobId, prepareEvaluationJob, prepareEvaluationSubmission } from "../evaluation-commitments.js";
3
+ export const QA_EVALUATOR = "https://evaluator.qa.nayori.ai";
4
+ const MAX = 32768;
5
+ const READ_TIMEOUT_MS = 15000;
6
+ // Admission checks several paced chain reads before persisting the request.
7
+ const ADMISSION_TIMEOUT_MS = 45000;
8
+ const SAFE_ERRORS = {
9
+ admission_limit: "QA evaluation quota reached. Ask the operator to review capacity; do not automatically retry or change budgets.",
10
+ ineligible: "QA evaluation is not eligible. Check the on-chain job, commitments and review deadline before taking another action.",
11
+ unavailable: "QA evaluator is unavailable. Query evaluation status before any retry; admission may be uncertain.",
12
+ transport: "QA evaluation transport failed or timed out. Query the deterministic evaluation status before any retry; do not repeat a signed operation.",
13
+ };
14
+ export class QaEvaluationError extends Error {
15
+ code;
16
+ constructor(code) {
17
+ super(SAFE_ERRORS[code]);
18
+ this.code = code;
19
+ }
20
+ }
21
+ function check(ok) { if (!ok)
22
+ throw new Error("qa_evaluation_guard_failed"); }
23
+ export function qaEvaluation(profile, custody, reader, contracts, fetchImpl = globalThis.fetch.bind(globalThis)) {
24
+ check(profile.role === "provider" && profile.network === "testnet");
25
+ const contractsByAsset = { stx: contracts.stxCommerce, sbtc: contracts.sbtcCommerce };
26
+ async function binding(asset, jobId, mutating) {
27
+ check((asset === "stx" || asset === "sbtc") && /^[1-9][0-9]{0,38}$/.test(jobId) && BigInt(jobId) < 2n ** 128n);
28
+ const permit = await custody.status();
29
+ check(permit && permit.asset === asset && permit.jobId === jobId && permit.profile &&
30
+ Object.entries(profile).every(([k, v]) => permit.profile[k] === v));
31
+ check(typeof permit.amount === "string" && /^[1-9][0-9]*$/.test(permit.amount) &&
32
+ BigInt(permit.amount) <= (asset === "sbtc" ? 1000n : 100000n));
33
+ if (mutating) {
34
+ check(permit.enabled === true && typeof permit.expiresAt === "string" && Date.now() < Date.parse(permit.expiresAt));
35
+ check(Array.isArray(permit.operations) && permit.operations.some(e => e && e.action === "submit" && e.state === "confirmed"));
36
+ }
37
+ const contract = contractsByAsset[asset];
38
+ return { contract, amount: BigInt(permit.amount), expiresAt: String(permit.expiresAt), id: await evaluationJobId({ network: "testnet", contract, jobId }) };
39
+ }
40
+ async function http(path, init) {
41
+ let response;
42
+ try {
43
+ response = await fetchImpl(QA_EVALUATOR + path, { ...init, redirect: "error",
44
+ signal: AbortSignal.timeout(init?.method === "POST" ? ADMISSION_TIMEOUT_MS : READ_TIMEOUT_MS),
45
+ headers: { accept: "application/json", ...(init?.method === "POST" ? { "content-type": "application/json" } : {}) } });
46
+ }
47
+ catch {
48
+ throw new QaEvaluationError("transport");
49
+ }
50
+ check([200, 202, 404, 422, 429, 503].includes(response.status));
51
+ check(Number(response.headers.get("content-length") ?? 0) <= MAX && response.body);
52
+ const stream = response.body.getReader();
53
+ const chunks = [];
54
+ let length = 0;
55
+ try {
56
+ for (;;) {
57
+ const next = await stream.read();
58
+ if (next.done)
59
+ break;
60
+ length += next.value.byteLength;
61
+ check(length <= MAX);
62
+ chunks.push(next.value);
63
+ }
64
+ }
65
+ finally {
66
+ await stream.cancel();
67
+ stream.releaseLock();
68
+ }
69
+ const data = JSON.parse(Buffer.concat(chunks).toString("utf8"));
70
+ check(data && typeof data === "object" && !Array.isArray(data));
71
+ const error = data.error;
72
+ if (response.status === 429 && error === "evaluation_admission_limit")
73
+ throw new QaEvaluationError("admission_limit");
74
+ if (response.status === 422)
75
+ throw new QaEvaluationError("ineligible");
76
+ if (response.status === 503)
77
+ throw new QaEvaluationError("unavailable");
78
+ check([200, 202, 404].includes(response.status));
79
+ return { code: response.status, data: data };
80
+ }
81
+ function summary(data, id, contract, asset, jobId) {
82
+ check(data.id === id && data.network === "testnet" && data.contract === contract && data.asset === asset && data.jobId === jobId);
83
+ check(["queued", "leased", "blocked", "decision_ready", "broadcast_failed", "broadcast", "confirmed"].includes(String(data.status)));
84
+ check(data.txid === undefined || typeof data.txid === "string" && /^(0x)?[a-f0-9]{64}$/.test(data.txid));
85
+ // Do not reflect arbitrary public explanations, URLs, error text or response fields into the agent.
86
+ return { evaluationId: id, asset, jobId, status: data.status, ...(data.txid ? { txid: data.txid } : {}),
87
+ network: "testnet", settlementVerified: false, evidenceBytesVerified: false,
88
+ note: "Evaluator status is not escrow settlement. Verify the on-chain decision, deadlines and payout separately." };
89
+ }
90
+ return {
91
+ async status(asset, jobId) {
92
+ const { contract, id } = await binding(asset, jobId, false);
93
+ const result = await http("/v1/evaluations/" + id);
94
+ if (result.code === 404) {
95
+ check(result.data.error === "evaluation_not_found");
96
+ return { evaluationId: id, status: "not-found", settlementVerified: false };
97
+ }
98
+ check(result.code === 200);
99
+ return summary(result.data, id, contract, asset, jobId);
100
+ },
101
+ async request(input) {
102
+ const { asset, jobId, description, acceptanceCriteria, evidence } = input;
103
+ const { contract, amount, id, expiresAt } = await binding(asset, jobId, true);
104
+ check(Array.isArray(evidence) && evidence.length > 0 && evidence.length <= 5);
105
+ let total = 0;
106
+ for (const e of evidence) {
107
+ const url = new URL(e.uri);
108
+ check(url.origin === QA_EVALUATOR && !url.username && !url.password && !url.hash);
109
+ check(Number.isSafeInteger(e.sizeBytes) && e.sizeBytes >= 0 && e.sizeBytes <= 8192 &&
110
+ (e.mediaType === "text/plain" || e.mediaType === "application/json"));
111
+ total += e.sizeBytes;
112
+ }
113
+ check(total <= 16000);
114
+ const common = { network: "testnet", asset, contract, client: profile.client,
115
+ evaluator: profile.evaluator, description, acceptanceCriteria };
116
+ const prepared = await prepareEvaluationJob(common);
117
+ const submission = await prepareEvaluationSubmission({ ...common, provider: profile.provider, jobId, evidence });
118
+ const job = await reader.getJob(asset, BigInt(jobId));
119
+ check(job && job.id === BigInt(jobId) && job.asset === asset && job.client === profile.client &&
120
+ job.provider === profile.provider && job.evaluator === profile.evaluator && job.treasury === profile.treasury &&
121
+ job.budget === amount && job.description === prepared.description &&
122
+ job.deliverable?.replace(/^0x/, "") === Buffer.from(submission.deliverable).toString("hex"));
123
+ // Lookup first: a retry after an HTTP timeout must reuse the server's deterministic durable ID.
124
+ const prior = await http("/v1/evaluations/" + id);
125
+ if (prior.code === 200)
126
+ return summary(prior.data, id, contract, asset, jobId);
127
+ check(prior.code === 404 && prior.data.error === "evaluation_not_found");
128
+ check(job.status === "submitted" && typeof job.reviewDeadline === "bigint" && job.reviewDeadline > 0n &&
129
+ await reader.getEscrowBalance(asset, BigInt(jobId)) === amount);
130
+ check(Date.now() < Date.parse(expiresAt));
131
+ const response = await http("/v1/evaluations", { method: "POST", body: JSON.stringify({ commitmentVersion: "1",
132
+ evaluationId: id, network: "testnet", asset, contract, jobId,
133
+ job: { client: profile.client, provider: profile.provider, evaluator: profile.evaluator,
134
+ status: "submitted", description: job.description, reviewDeadlineBurn: job.reviewDeadline.toString() },
135
+ acceptanceCriteria, evidence }) });
136
+ check(response.code === 202);
137
+ return summary(response.data, id, contract, asset, jobId);
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=evaluation.js.map