aipou-mcp-server 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/NOTICE +8 -0
  2. package/README.md +18 -0
  3. package/dist/bounded-input.d.ts +8 -0
  4. package/dist/bounded-input.js +21 -0
  5. package/dist/bounded-input.test.d.ts +1 -0
  6. package/dist/bounded-input.test.js +24 -0
  7. package/dist/claims.js +119 -31
  8. package/dist/doctor.d.ts +32 -0
  9. package/dist/doctor.js +112 -0
  10. package/dist/doctor.test.d.ts +1 -0
  11. package/dist/doctor.test.js +164 -0
  12. package/dist/evidence.d.ts +21 -0
  13. package/dist/evidence.js +14 -0
  14. package/dist/feedback.d.ts +17 -0
  15. package/dist/feedback.js +24 -0
  16. package/dist/identity.d.ts +3 -0
  17. package/dist/identity.js +25 -1
  18. package/dist/index.js +15121 -106
  19. package/dist/init.d.ts +8 -2
  20. package/dist/init.js +20 -7
  21. package/dist/init.test.js +18 -4
  22. package/dist/lock.js +47 -9
  23. package/dist/lock.test.d.ts +1 -0
  24. package/dist/lock.test.js +26 -0
  25. package/dist/observed-outcome-pilot.d.ts +16 -0
  26. package/dist/observed-outcome-pilot.js +59 -0
  27. package/dist/observed-outcome-pilot.test.d.ts +1 -0
  28. package/dist/observed-outcome-pilot.test.js +25 -0
  29. package/dist/paybox-link.d.ts +34 -0
  30. package/dist/paybox-link.js +52 -0
  31. package/dist/paybox-link.test.d.ts +1 -0
  32. package/dist/paybox-link.test.js +36 -0
  33. package/dist/private-json.d.ts +2 -0
  34. package/dist/private-json.js +39 -0
  35. package/dist/protocol.test.js +23 -0
  36. package/dist/receipt-metadata.d.ts +13 -0
  37. package/dist/receipt-metadata.js +28 -0
  38. package/dist/receipt-metadata.test.d.ts +1 -0
  39. package/dist/receipt-metadata.test.js +39 -0
  40. package/dist/receipt-verifier.d.ts +13 -0
  41. package/dist/receipt-verifier.js +125 -0
  42. package/dist/receipt-verifier.test.d.ts +1 -0
  43. package/dist/receipt-verifier.test.js +54 -0
  44. package/dist/receipts.js +11 -2
  45. package/dist/settlement-driver.d.ts +3 -0
  46. package/dist/settlement-driver.js +120 -0
  47. package/dist/settlement-driver.test.d.ts +1 -0
  48. package/dist/settlement-driver.test.js +78 -0
  49. package/dist/settlement-runner.d.ts +34 -0
  50. package/dist/settlement-runner.js +40 -0
  51. package/dist/settlement-runner.test.d.ts +1 -0
  52. package/dist/settlement-runner.test.js +128 -0
  53. package/dist/status.js +2 -0
  54. package/dist/store.d.ts +2 -0
  55. package/dist/store.js +33 -9
  56. package/dist/technocore-link.d.ts +34 -0
  57. package/dist/technocore-link.js +49 -0
  58. package/dist/technocore-link.test.d.ts +1 -0
  59. package/dist/technocore-link.test.js +36 -0
  60. package/dist/tool-metadata.test.d.ts +1 -0
  61. package/dist/tool-metadata.test.js +86 -0
  62. package/dist/types.d.ts +6 -0
  63. package/dist/usage-recovery.test.d.ts +1 -0
  64. package/dist/usage-recovery.test.js +121 -0
  65. package/package.json +7 -5
  66. package/server.json +2 -2
@@ -0,0 +1,21 @@
1
+ export type EvidenceState = "VERIFIED" | "OBSERVED" | "UNKNOWN" | "ABSENT";
2
+ /**
3
+ * A compact result vocabulary for displaying receipt-adjacent facts without
4
+ * letting any one fact become a universal completion claim.
5
+ */
6
+ export interface EvidenceReport {
7
+ receiptIntegrity: EvidenceState;
8
+ walletAuthorization: EvidenceState;
9
+ collectorSignature: EvidenceState;
10
+ hostExecution: EvidenceState;
11
+ delivery: EvidenceState;
12
+ businessAcceptance: EvidenceState;
13
+ settlement: EvidenceState;
14
+ externalEffect: EvidenceState;
15
+ }
16
+ export declare function receiptEvidenceReport(input: {
17
+ receiptIntegrity: boolean;
18
+ walletAuthorization: boolean;
19
+ collectorSignature: boolean;
20
+ hostExecution?: EvidenceState;
21
+ }): EvidenceReport;
@@ -0,0 +1,14 @@
1
+ export function receiptEvidenceReport(input) {
2
+ return {
3
+ receiptIntegrity: input.receiptIntegrity ? "VERIFIED" : "UNKNOWN",
4
+ walletAuthorization: input.walletAuthorization ? "VERIFIED" : "UNKNOWN",
5
+ collectorSignature: input.collectorSignature ? "VERIFIED" : "UNKNOWN",
6
+ hostExecution: input.hostExecution ?? "UNKNOWN",
7
+ // These require their own artifacts and verifiers. AIPOU receipts do not
8
+ // infer them from a completed local task.
9
+ delivery: "UNKNOWN",
10
+ businessAcceptance: "ABSENT",
11
+ settlement: "ABSENT",
12
+ externalEffect: "UNKNOWN"
13
+ };
14
+ }
@@ -0,0 +1,17 @@
1
+ /** Explicit local export only. No identifiers, task hashes, keys, paths or uploads. */
2
+ export declare function localFeedbackSummary(): Promise<{
3
+ schema: string;
4
+ version: string;
5
+ platform: NodeJS.Platform;
6
+ node: string;
7
+ localReceiptCount: number;
8
+ localActiveDays: number;
9
+ completedSessions: number;
10
+ activeSessions: number;
11
+ expiredSessions: number;
12
+ measuredUsageReceipts: number;
13
+ unmeasuredUsageReceipts: number;
14
+ unspecifiedUsageReceipts: number;
15
+ transmission: string;
16
+ interpretation: string;
17
+ }>;
@@ -0,0 +1,24 @@
1
+ import { getPackageVersion } from "./version.js";
2
+ import { exportStoredReceipts, protocolStateCounts } from "./store.js";
3
+ /** Explicit local export only. No identifiers, task hashes, keys, paths or uploads. */
4
+ export async function localFeedbackSummary() {
5
+ const receipts = await exportStoredReceipts();
6
+ const counts = await protocolStateCounts();
7
+ const activeDays = new Set(receipts.map((r) => r.recordedAt.slice(0, 10)));
8
+ return {
9
+ schema: "aipou-local-feedback-v1",
10
+ version: await getPackageVersion(),
11
+ platform: process.platform,
12
+ node: process.versions.node,
13
+ localReceiptCount: receipts.length,
14
+ localActiveDays: activeDays.size,
15
+ completedSessions: counts.completedSessions,
16
+ activeSessions: counts.activeSessions,
17
+ expiredSessions: counts.expiredSessions,
18
+ measuredUsageReceipts: receipts.filter((r) => r.tokenUsageMeasurement === "measured").length,
19
+ unmeasuredUsageReceipts: receipts.filter((r) => r.tokenUsageMeasurement === "unmeasured").length,
20
+ unspecifiedUsageReceipts: receipts.filter((r) => !r.tokenUsageMeasurement || r.tokenUsageMeasurement === "unspecified").length,
21
+ transmission: "none; review before sharing voluntarily",
22
+ interpretation: "one local installation; not unique-user, organic-adoption or revenue metrics",
23
+ };
24
+ }
@@ -6,6 +6,9 @@ export declare const authorizationTypes: {
6
6
  type: string;
7
7
  }[];
8
8
  };
9
+ export declare const DEFAULT_TASK_SESSION_TTL_SECONDS: number;
10
+ export declare function taskSessionExpiry(session: Pick<TaskSession, "issuedAt" | "expiresAt">): number;
11
+ export declare function isTaskSessionExpired(session: Pick<TaskSession, "issuedAt" | "expiresAt">, nowSeconds?: number): boolean;
9
12
  export declare function agentWallet(): Wallet;
10
13
  export declare function createTaskSession(input: {
11
14
  provider: string;
package/dist/identity.js CHANGED
@@ -12,6 +12,23 @@ export const authorizationTypes = {
12
12
  { name: "issuedAt", type: "uint256" }
13
13
  ]
14
14
  };
15
+ export const DEFAULT_TASK_SESSION_TTL_SECONDS = 24 * 60 * 60;
16
+ function taskSessionTtlSeconds() {
17
+ const configured = process.env.AIPOU_TASK_SESSION_TTL_SECONDS;
18
+ if (!configured)
19
+ return DEFAULT_TASK_SESSION_TTL_SECONDS;
20
+ const value = Number.parseInt(configured, 10);
21
+ if (!Number.isInteger(value) || value < 60 || value > 7 * DEFAULT_TASK_SESSION_TTL_SECONDS) {
22
+ throw new Error("AIPOU_TASK_SESSION_TTL_SECONDS must be an integer from 60 through 604800");
23
+ }
24
+ return value;
25
+ }
26
+ export function taskSessionExpiry(session) {
27
+ return session.expiresAt ?? session.issuedAt + taskSessionTtlSeconds();
28
+ }
29
+ export function isTaskSessionExpired(session, nowSeconds = Math.floor(Date.now() / 1000)) {
30
+ return nowSeconds >= taskSessionExpiry(session);
31
+ }
15
32
  function readKeyFile(keyFile) {
16
33
  try {
17
34
  return readFileSync(path.resolve(keyFile), "utf8").trim();
@@ -52,7 +69,14 @@ export async function createTaskSession(input) {
52
69
  issuedAt
53
70
  };
54
71
  const walletAuthorization = await wallet.signTypedData(domain, authorizationTypes, value);
55
- return { ...input, wallet: wallet.address, nonce, issuedAt, walletAuthorization };
72
+ return {
73
+ ...input,
74
+ wallet: wallet.address,
75
+ nonce,
76
+ issuedAt,
77
+ expiresAt: issuedAt + taskSessionTtlSeconds(),
78
+ walletAuthorization
79
+ };
56
80
  }
57
81
  export function verifyTaskAuthorization(session) {
58
82
  const domain = {