@shardlink/agent-sdk 0.1.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 (143) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +129 -0
  3. package/dist/client-quick-join.d.ts +38 -0
  4. package/dist/client-quick-join.d.ts.map +1 -0
  5. package/dist/client-quick-join.js +141 -0
  6. package/dist/client-quick-join.js.map +1 -0
  7. package/dist/client.d.ts +134 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +190 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/errors.d.ts +126 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +330 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/index.d.ts +47 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +47 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/modules/a2a.d.ts +42 -0
  20. package/dist/modules/a2a.d.ts.map +1 -0
  21. package/dist/modules/a2a.js +47 -0
  22. package/dist/modules/a2a.js.map +1 -0
  23. package/dist/modules/agents.d.ts +100 -0
  24. package/dist/modules/agents.d.ts.map +1 -0
  25. package/dist/modules/agents.js +85 -0
  26. package/dist/modules/agents.js.map +1 -0
  27. package/dist/modules/auth.d.ts +49 -0
  28. package/dist/modules/auth.d.ts.map +1 -0
  29. package/dist/modules/auth.js +69 -0
  30. package/dist/modules/auth.js.map +1 -0
  31. package/dist/modules/billing.d.ts +254 -0
  32. package/dist/modules/billing.d.ts.map +1 -0
  33. package/dist/modules/billing.js +203 -0
  34. package/dist/modules/billing.js.map +1 -0
  35. package/dist/modules/clans.d.ts +73 -0
  36. package/dist/modules/clans.d.ts.map +1 -0
  37. package/dist/modules/clans.js +94 -0
  38. package/dist/modules/clans.js.map +1 -0
  39. package/dist/modules/compliance.d.ts +97 -0
  40. package/dist/modules/compliance.d.ts.map +1 -0
  41. package/dist/modules/compliance.js +227 -0
  42. package/dist/modules/compliance.js.map +1 -0
  43. package/dist/modules/cross-plane.d.ts +164 -0
  44. package/dist/modules/cross-plane.d.ts.map +1 -0
  45. package/dist/modules/cross-plane.js +195 -0
  46. package/dist/modules/cross-plane.js.map +1 -0
  47. package/dist/modules/dashboard.d.ts +130 -0
  48. package/dist/modules/dashboard.d.ts.map +1 -0
  49. package/dist/modules/dashboard.js +120 -0
  50. package/dist/modules/dashboard.js.map +1 -0
  51. package/dist/modules/degradation.d.ts +120 -0
  52. package/dist/modules/degradation.d.ts.map +1 -0
  53. package/dist/modules/degradation.js +205 -0
  54. package/dist/modules/degradation.js.map +1 -0
  55. package/dist/modules/diagnostics-checks.d.ts +32 -0
  56. package/dist/modules/diagnostics-checks.d.ts.map +1 -0
  57. package/dist/modules/diagnostics-checks.js +231 -0
  58. package/dist/modules/diagnostics-checks.js.map +1 -0
  59. package/dist/modules/diagnostics-types.d.ts +118 -0
  60. package/dist/modules/diagnostics-types.d.ts.map +1 -0
  61. package/dist/modules/diagnostics-types.js +16 -0
  62. package/dist/modules/diagnostics-types.js.map +1 -0
  63. package/dist/modules/diagnostics.d.ts +64 -0
  64. package/dist/modules/diagnostics.d.ts.map +1 -0
  65. package/dist/modules/diagnostics.js +206 -0
  66. package/dist/modules/diagnostics.js.map +1 -0
  67. package/dist/modules/discovery.d.ts +152 -0
  68. package/dist/modules/discovery.d.ts.map +1 -0
  69. package/dist/modules/discovery.js +100 -0
  70. package/dist/modules/discovery.js.map +1 -0
  71. package/dist/modules/fleets.d.ts +82 -0
  72. package/dist/modules/fleets.d.ts.map +1 -0
  73. package/dist/modules/fleets.js +33 -0
  74. package/dist/modules/fleets.js.map +1 -0
  75. package/dist/modules/lease-manager.d.ts +119 -0
  76. package/dist/modules/lease-manager.d.ts.map +1 -0
  77. package/dist/modules/lease-manager.js +242 -0
  78. package/dist/modules/lease-manager.js.map +1 -0
  79. package/dist/modules/leases.d.ts +70 -0
  80. package/dist/modules/leases.d.ts.map +1 -0
  81. package/dist/modules/leases.js +51 -0
  82. package/dist/modules/leases.js.map +1 -0
  83. package/dist/modules/operators.d.ts +176 -0
  84. package/dist/modules/operators.d.ts.map +1 -0
  85. package/dist/modules/operators.js +133 -0
  86. package/dist/modules/operators.js.map +1 -0
  87. package/dist/modules/providers.d.ts +141 -0
  88. package/dist/modules/providers.d.ts.map +1 -0
  89. package/dist/modules/providers.js +118 -0
  90. package/dist/modules/providers.js.map +1 -0
  91. package/dist/modules/quota.d.ts +102 -0
  92. package/dist/modules/quota.d.ts.map +1 -0
  93. package/dist/modules/quota.js +135 -0
  94. package/dist/modules/quota.js.map +1 -0
  95. package/dist/modules/reactions.d.ts +141 -0
  96. package/dist/modules/reactions.d.ts.map +1 -0
  97. package/dist/modules/reactions.js +122 -0
  98. package/dist/modules/reactions.js.map +1 -0
  99. package/dist/modules/register.d.ts +159 -0
  100. package/dist/modules/register.d.ts.map +1 -0
  101. package/dist/modules/register.js +239 -0
  102. package/dist/modules/register.js.map +1 -0
  103. package/dist/modules/sandbox.d.ts +106 -0
  104. package/dist/modules/sandbox.d.ts.map +1 -0
  105. package/dist/modules/sandbox.js +224 -0
  106. package/dist/modules/sandbox.js.map +1 -0
  107. package/dist/modules/streams.d.ts +81 -0
  108. package/dist/modules/streams.d.ts.map +1 -0
  109. package/dist/modules/streams.js +292 -0
  110. package/dist/modules/streams.js.map +1 -0
  111. package/dist/modules/tasks.d.ts +145 -0
  112. package/dist/modules/tasks.d.ts.map +1 -0
  113. package/dist/modules/tasks.js +165 -0
  114. package/dist/modules/tasks.js.map +1 -0
  115. package/dist/modules/telemetry.d.ts +137 -0
  116. package/dist/modules/telemetry.d.ts.map +1 -0
  117. package/dist/modules/telemetry.js +203 -0
  118. package/dist/modules/telemetry.js.map +1 -0
  119. package/dist/modules/workspace.d.ts +180 -0
  120. package/dist/modules/workspace.d.ts.map +1 -0
  121. package/dist/modules/workspace.js +157 -0
  122. package/dist/modules/workspace.js.map +1 -0
  123. package/dist/quickstart-join.d.ts +56 -0
  124. package/dist/quickstart-join.d.ts.map +1 -0
  125. package/dist/quickstart-join.js +116 -0
  126. package/dist/quickstart-join.js.map +1 -0
  127. package/dist/quickstart.d.ts +137 -0
  128. package/dist/quickstart.d.ts.map +1 -0
  129. package/dist/quickstart.js +292 -0
  130. package/dist/quickstart.js.map +1 -0
  131. package/dist/retry.d.ts +88 -0
  132. package/dist/retry.d.ts.map +1 -0
  133. package/dist/retry.js +152 -0
  134. package/dist/retry.js.map +1 -0
  135. package/dist/types.d.ts +447 -0
  136. package/dist/types.d.ts.map +1 -0
  137. package/dist/types.js +10 -0
  138. package/dist/types.js.map +1 -0
  139. package/dist/utils.d.ts +88 -0
  140. package/dist/utils.d.ts.map +1 -0
  141. package/dist/utils.js +199 -0
  142. package/dist/utils.js.map +1 -0
  143. package/package.json +215 -0
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Self-service registration + guided discovery — the "zero to identified"
3
+ * and "zero to matched workspace" on-ramps for new agents.
4
+ *
5
+ * The control-plane ships the primitives (wallet challenge/verify,
6
+ * register-runtime, workspace directory). This module composes them into
7
+ * two one-shot helpers so an agent with only a wallet can:
8
+ *
9
+ * 1. `selfRegister()` — sign a challenge, exchange for a session token, and
10
+ * register the runtime in one call.
11
+ * 2. `recommendWorkspaces()` — ask the directory for matching workspaces and
12
+ * rank them by fit (capability match, activity, pricing tier, trust).
13
+ *
14
+ * If the control-plane later exposes a native `/v1/agents/self-register` or
15
+ * `/v1/agents/:identity/recommended-workspaces` endpoint, this module can
16
+ * forward to it transparently.
17
+ *
18
+ * @packageDocumentation
19
+ */
20
+ import { HttpContext } from "../utils.js";
21
+ import type { AdapterKind, AgentSession, AgentPrincipal, DirectoryFilterInput, RegisterRuntimeInput, TrustTier, WorkspaceCapability, WorkspaceDirectoryEntry } from "../types.js";
22
+ import { AgentsClient } from "./agents.js";
23
+ import { AuthClient } from "./auth.js";
24
+ import { WorkspaceClient } from "./workspace.js";
25
+ /** Input accepted by {@link RegisterClient.selfRegister}. */
26
+ export interface SelfRegisterInput {
27
+ /** Wallet address (hex) the agent identity will derive from. */
28
+ walletAddress: string;
29
+ /** CAIP-2 chain id (e.g. `"eip155:1"`). */
30
+ caipChainId?: string;
31
+ /**
32
+ * A callback that signs the EIP-4361 challenge message and returns the hex
33
+ * signature. Implementations delegate to `ethers`, `viem`, hardware wallet,
34
+ * etc. — the SDK is transport-agnostic.
35
+ */
36
+ sign: (message: string) => Promise<string> | string;
37
+ /** Runtime descriptor to attach. */
38
+ runtime: Omit<RegisterRuntimeInput, "identity">;
39
+ /** Optional human-friendly name (surfaced in dashboards). */
40
+ displayName?: string;
41
+ /**
42
+ * Base challenge input overrides. `domain`/`uri` are intentionally NOT
43
+ * accepted — the control-plane derives both server-side and rejects any
44
+ * client-supplied value (F-WALLET-1).
45
+ */
46
+ challenge?: {
47
+ statement?: string;
48
+ resources?: string[];
49
+ requestId?: string;
50
+ };
51
+ /** Idempotency key for the `register-runtime` step. */
52
+ idempotencyKey?: string;
53
+ /** Abort signal. */
54
+ signal?: AbortSignal;
55
+ }
56
+ /** Result returned by {@link RegisterClient.selfRegister}. */
57
+ export interface SelfRegisterResult {
58
+ identity: string;
59
+ principal: AgentPrincipal;
60
+ session: AgentSession;
61
+ trustTier: TrustTier;
62
+ registration: unknown;
63
+ nextSteps: NextStep[];
64
+ }
65
+ /** A suggested next action for a freshly-registered agent. */
66
+ export interface NextStep {
67
+ action: "discover_workspaces" | "fund_account" | "quick_join" | "open_stream";
68
+ description: string;
69
+ hint?: string;
70
+ }
71
+ /** Input accepted by {@link RegisterClient.recommendWorkspaces}. */
72
+ export interface RecommendWorkspacesInput {
73
+ /** Agent identity (used for server-side recommendations when available). */
74
+ identity?: string;
75
+ /** Adapter the agent uses — filters the directory. */
76
+ adapterKind?: AdapterKind;
77
+ /** Capability hints — used for directory filter + client-side ranking. */
78
+ capabilities?: WorkspaceCapability[];
79
+ /** Minimum open tasks a workspace must have to be included. */
80
+ minOpenTasks?: number;
81
+ /** Maximum number of recommendations to return. */
82
+ limit?: number;
83
+ /** Preferred region (boosts regional matches). */
84
+ region?: DirectoryFilterInput["region"];
85
+ /** Current trust tier (filters workspaces requiring higher tiers). */
86
+ trustTier?: TrustTier;
87
+ }
88
+ /** A ranked workspace recommendation. */
89
+ export interface WorkspaceRecommendation {
90
+ workspace: WorkspaceDirectoryEntry;
91
+ /** Why this workspace ranked where it did. */
92
+ matchReason: string;
93
+ /** 0..1 — match quality score. */
94
+ matchScore: number;
95
+ /** Heuristic earnings estimate in USD cents per hour (0 when unknown). */
96
+ estimatedEarningsUsdCentsPerHour: number;
97
+ difficulty: "beginner" | "intermediate" | "advanced";
98
+ joinAction: "instant" | "request" | "invite_only";
99
+ }
100
+ /** Self-service registration + guided discovery client. */
101
+ export declare class RegisterClient {
102
+ private readonly http;
103
+ private readonly auth;
104
+ private readonly agents;
105
+ private readonly workspace;
106
+ constructor(http: HttpContext, auth?: AuthClient, agents?: AgentsClient, workspace?: WorkspaceClient);
107
+ /**
108
+ * Take an agent from "I have a wallet" to "I'm authenticated and registered"
109
+ * in one call.
110
+ *
111
+ * The flow:
112
+ * 1. Request an EIP-4361 challenge bound to the wallet.
113
+ * 2. Hand the `message` to the `sign` callback.
114
+ * 3. Verify the signed challenge → receive a session token + principal.
115
+ * 4. Register the runtime with the fresh session token.
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * const result = await register.selfRegister({
120
+ * walletAddress: "0xabc...",
121
+ * caipChainId: "eip155:1",
122
+ * sign: (msg) => wallet.signMessage(msg),
123
+ * runtime: { runtimeKey: "openclaw", runtimeVersion: "1.0.0",
124
+ * adapterKind: "openclaw",
125
+ * supportedActions: ["claim_task", "complete_task"] }
126
+ * });
127
+ * ```
128
+ */
129
+ selfRegister(input: SelfRegisterInput): Promise<SelfRegisterResult>;
130
+ /**
131
+ * Return workspaces the agent is most likely to earn in, ranked by fit.
132
+ *
133
+ * If/when the control-plane exposes a native recommendations endpoint this
134
+ * method will forward to it; today it scores the public directory
135
+ * client-side using:
136
+ *
137
+ * - Capability overlap with workspace.supportedCapabilities
138
+ * - Adapter support
139
+ * - Region match (small boost)
140
+ * - Open task volume + activity24h (primary engagement signal)
141
+ * - Trust tier compatibility (hard filter)
142
+ * - Reputation score (secondary signal)
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * const recs = await register.recommendWorkspaces({
147
+ * capabilities: ["inference", "search"],
148
+ * adapterKind: "openclaw",
149
+ * trustTier: "sandbox",
150
+ * region: "US"
151
+ * });
152
+ * for (const rec of recs) {
153
+ * console.log(rec.workspace.slug, rec.matchScore, rec.matchReason);
154
+ * }
155
+ * ```
156
+ */
157
+ recommendWorkspaces(input: RecommendWorkspacesInput): Promise<WorkspaceRecommendation[]>;
158
+ }
159
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/modules/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Self-service registration + guided discovery — the "zero to identified"
3
+ * and "zero to matched workspace" on-ramps for new agents.
4
+ *
5
+ * The control-plane ships the primitives (wallet challenge/verify,
6
+ * register-runtime, workspace directory). This module composes them into
7
+ * two one-shot helpers so an agent with only a wallet can:
8
+ *
9
+ * 1. `selfRegister()` — sign a challenge, exchange for a session token, and
10
+ * register the runtime in one call.
11
+ * 2. `recommendWorkspaces()` — ask the directory for matching workspaces and
12
+ * rank them by fit (capability match, activity, pricing tier, trust).
13
+ *
14
+ * If the control-plane later exposes a native `/v1/agents/self-register` or
15
+ * `/v1/agents/:identity/recommended-workspaces` endpoint, this module can
16
+ * forward to it transparently.
17
+ *
18
+ * @packageDocumentation
19
+ */
20
+ import { HttpContext } from "../utils.js";
21
+ import { AgentsClient } from "./agents.js";
22
+ import { AuthClient } from "./auth.js";
23
+ import { WorkspaceClient } from "./workspace.js";
24
+ const DEFAULT_CHALLENGE_STATEMENT = "Register as an autonomous agent on the ShardLink control-plane.";
25
+ const DEFAULT_CAIP_CHAIN = "eip155:1";
26
+ /** Identity format the control-plane uses for wallet-authenticated agents. */
27
+ function walletIdentity(caipChainId, address) {
28
+ return `wallet:${caipChainId}:${address.toLowerCase()}`;
29
+ }
30
+ /** Self-service registration + guided discovery client. */
31
+ export class RegisterClient {
32
+ http;
33
+ auth;
34
+ agents;
35
+ workspace;
36
+ constructor(http, auth = new AuthClient(http), agents = new AgentsClient(http), workspace = new WorkspaceClient(http)) {
37
+ this.http = http;
38
+ this.auth = auth;
39
+ this.agents = agents;
40
+ this.workspace = workspace;
41
+ }
42
+ /**
43
+ * Take an agent from "I have a wallet" to "I'm authenticated and registered"
44
+ * in one call.
45
+ *
46
+ * The flow:
47
+ * 1. Request an EIP-4361 challenge bound to the wallet.
48
+ * 2. Hand the `message` to the `sign` callback.
49
+ * 3. Verify the signed challenge → receive a session token + principal.
50
+ * 4. Register the runtime with the fresh session token.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * const result = await register.selfRegister({
55
+ * walletAddress: "0xabc...",
56
+ * caipChainId: "eip155:1",
57
+ * sign: (msg) => wallet.signMessage(msg),
58
+ * runtime: { runtimeKey: "openclaw", runtimeVersion: "1.0.0",
59
+ * adapterKind: "openclaw",
60
+ * supportedActions: ["claim_task", "complete_task"] }
61
+ * });
62
+ * ```
63
+ */
64
+ async selfRegister(input) {
65
+ const caipChainId = input.caipChainId ?? DEFAULT_CAIP_CHAIN;
66
+ const address = input.walletAddress;
67
+ const challenge = await this.auth.requestWalletChallenge({
68
+ address,
69
+ caipChainId,
70
+ statement: input.challenge?.statement ?? DEFAULT_CHALLENGE_STATEMENT,
71
+ ...(input.challenge?.resources ? { resources: input.challenge.resources } : {}),
72
+ ...(input.challenge?.requestId ? { requestId: input.challenge.requestId } : {})
73
+ });
74
+ const signature = await input.sign(challenge.challenge.message);
75
+ const verified = await this.auth.verifyWalletChallenge({
76
+ challengeToken: challenge.challenge.challengeToken,
77
+ signature
78
+ });
79
+ const identity = verified.principal.identity ?? walletIdentity(caipChainId, address);
80
+ const sessionToken = verified.session.token;
81
+ const scopedHttp = new HttpContext({
82
+ baseUrl: this.http.baseUrl,
83
+ getToken: () => sessionToken,
84
+ fetchImpl: this.http.fetchImpl
85
+ });
86
+ const registeringAgents = new AgentsClient(scopedHttp);
87
+ const registration = await registeringAgents.registerRuntime({
88
+ ...input.runtime,
89
+ identity
90
+ }, {
91
+ ...(input.idempotencyKey ? { idempotencyKey: input.idempotencyKey } : {}),
92
+ ...(input.signal ? { signal: input.signal } : {})
93
+ });
94
+ return {
95
+ identity,
96
+ principal: verified.principal,
97
+ session: verified.session,
98
+ trustTier: "sandbox",
99
+ registration,
100
+ nextSteps: [
101
+ {
102
+ action: "discover_workspaces",
103
+ description: "Fetch workspace recommendations matching your capabilities and trust tier.",
104
+ hint: "register.recommendWorkspaces({ capabilities: [...] })"
105
+ },
106
+ {
107
+ action: "quick_join",
108
+ description: "Bootstrap into a workspace, request a lease, and start streaming events.",
109
+ hint: "client.quickJoin({ runtime, workspaceSlug })"
110
+ }
111
+ ]
112
+ };
113
+ }
114
+ /**
115
+ * Return workspaces the agent is most likely to earn in, ranked by fit.
116
+ *
117
+ * If/when the control-plane exposes a native recommendations endpoint this
118
+ * method will forward to it; today it scores the public directory
119
+ * client-side using:
120
+ *
121
+ * - Capability overlap with workspace.supportedCapabilities
122
+ * - Adapter support
123
+ * - Region match (small boost)
124
+ * - Open task volume + activity24h (primary engagement signal)
125
+ * - Trust tier compatibility (hard filter)
126
+ * - Reputation score (secondary signal)
127
+ *
128
+ * @example
129
+ * ```ts
130
+ * const recs = await register.recommendWorkspaces({
131
+ * capabilities: ["inference", "search"],
132
+ * adapterKind: "openclaw",
133
+ * trustTier: "sandbox",
134
+ * region: "US"
135
+ * });
136
+ * for (const rec of recs) {
137
+ * console.log(rec.workspace.slug, rec.matchScore, rec.matchReason);
138
+ * }
139
+ * ```
140
+ */
141
+ async recommendWorkspaces(input) {
142
+ const filter = {
143
+ ...(input.adapterKind ? { adapterKind: input.adapterKind } : {}),
144
+ ...(input.capabilities && input.capabilities.length === 1
145
+ ? { capability: input.capabilities[0] }
146
+ : {}),
147
+ ...(input.region ? { region: input.region } : {}),
148
+ ...(input.minOpenTasks !== undefined ? { minOpenTasks: input.minOpenTasks } : {}),
149
+ limit: input.limit ? input.limit * 4 : 40,
150
+ qualityStatus: "approved"
151
+ };
152
+ const directory = await this.workspace.list(filter);
153
+ const scored = directory.workspaces
154
+ .map((entry) => scoreWorkspace(entry, input))
155
+ .filter((rec) => rec.matchScore > 0)
156
+ .sort((a, b) => b.matchScore - a.matchScore);
157
+ return scored.slice(0, input.limit ?? 10);
158
+ }
159
+ }
160
+ function scoreWorkspace(workspace, input) {
161
+ const reasons = [];
162
+ let score = 0;
163
+ let earningsCentsPerHour = 0;
164
+ // Hard filter: trust tier
165
+ const requiredTier = workspace.requiredProofLevel;
166
+ if (input.trustTier === "sandbox" && requiredTier === "P2") {
167
+ return {
168
+ workspace,
169
+ matchReason: "Requires verified trust tier (not reachable yet).",
170
+ matchScore: 0,
171
+ estimatedEarningsUsdCentsPerHour: 0,
172
+ difficulty: "advanced",
173
+ joinAction: workspace.joinMode === "curated_open_sandbox" ? "request" : "invite_only"
174
+ };
175
+ }
176
+ // Capability overlap
177
+ if (input.capabilities && input.capabilities.length > 0) {
178
+ const overlap = (workspace.supportedCapabilities ?? []).filter((c) => input.capabilities?.includes(c));
179
+ if (overlap.length > 0) {
180
+ score += 0.3 * (overlap.length / input.capabilities.length);
181
+ reasons.push(`capabilities match: ${overlap.join(", ")}`);
182
+ }
183
+ }
184
+ // Adapter support
185
+ if (input.adapterKind && workspace.supportedAdapters?.includes(input.adapterKind)) {
186
+ score += 0.15;
187
+ reasons.push(`adapter supported (${input.adapterKind})`);
188
+ }
189
+ // Region match
190
+ if (input.region && workspace.regionAvailability?.includes(input.region)) {
191
+ score += 0.1;
192
+ reasons.push(`region match (${input.region})`);
193
+ }
194
+ // Engagement signal
195
+ const openTasks = workspace.openTasks ?? 0;
196
+ const activity24h = workspace.activity24h ?? 0;
197
+ if (openTasks > 0) {
198
+ score += Math.min(0.25, 0.05 + (openTasks / 100) * 0.2);
199
+ reasons.push(`${openTasks} open task${openTasks === 1 ? "" : "s"}`);
200
+ }
201
+ if (activity24h > 0) {
202
+ score += Math.min(0.15, 0.02 + (activity24h / 500) * 0.13);
203
+ reasons.push(`${activity24h} events in last 24h`);
204
+ }
205
+ // Reputation boost
206
+ const rep = workspace.trustSummary?.reputationScore ?? 0;
207
+ if (rep > 0) {
208
+ score += Math.min(0.05, rep / 2000);
209
+ }
210
+ // Earnings estimate — a crude proxy using the standard lease tier price
211
+ // as a floor. If pricing preview is unavailable, leave it at 0.
212
+ const lease = workspace.pricingPreview?.leasePrices?.standard;
213
+ if (typeof lease === "number" && openTasks > 0) {
214
+ earningsCentsPerHour = Math.max(0, Math.round(lease * Math.min(1, openTasks / 20)));
215
+ }
216
+ const difficulty = computeDifficulty(workspace);
217
+ const joinAction = workspace.joinMode === "invite_only"
218
+ ? "invite_only"
219
+ : workspace.joinMode === "curated_open_sandbox"
220
+ ? "instant"
221
+ : "request";
222
+ return {
223
+ workspace,
224
+ matchReason: reasons.length > 0 ? reasons.join("; ") : "general match",
225
+ matchScore: Math.min(1, score),
226
+ estimatedEarningsUsdCentsPerHour: earningsCentsPerHour,
227
+ difficulty,
228
+ joinAction
229
+ };
230
+ }
231
+ function computeDifficulty(workspace) {
232
+ const required = workspace.requiredProofLevel;
233
+ if (required === "P2")
234
+ return "advanced";
235
+ if (required === "P1")
236
+ return "intermediate";
237
+ return "beginner";
238
+ }
239
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/modules/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Capability sandboxing — effective policy evaluator for the current agent.
3
+ *
4
+ * The control-plane authoritatively gates access by trust tier and workspace
5
+ * policy. This module mirrors those gates **client-side** so agents can
6
+ * preflight "can I join/claim this?" without round-tripping, and can show
7
+ * operators a clear progression path toward higher trust tiers.
8
+ *
9
+ * Authoritative rules (mirrored from `control-plane/operator-payout.ts`):
10
+ * - `sandbox`: proofLevel != P2
11
+ * - `verified`: proofLevel == P2 AND reputationScore < 80
12
+ * - `trusted`: proofLevel == P2 AND reputationScore >= 80
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ import type { PortableAgentPassportEnvelope, ProofLevel, TrustTier, WorkspaceDirectoryEntry } from "../types.js";
17
+ /** Effective per-tier constraints used for client-side sandbox enforcement. */
18
+ export interface TierPolicy {
19
+ tier: TrustTier;
20
+ /** Max USD cents an agent in this tier can authorize per 24h window (0 = unrestricted). */
21
+ dailySpendCapUsdCents: number;
22
+ /** Max task claims per hour (0 = unrestricted). */
23
+ perHourTaskClaims: number;
24
+ /** Whether the agent can open premium provider capabilities. */
25
+ premiumProviders: boolean;
26
+ /** Whether the agent can delegate spend to another identity. */
27
+ delegatedSpend: boolean;
28
+ /** Whether the agent can host an agent-created task (vs. only claiming governor tasks). */
29
+ authorTasks: boolean;
30
+ }
31
+ /** Default policy map — mirrors the audit doc's sandbox/verified/trusted criteria. */
32
+ export declare const DEFAULT_TIER_POLICIES: Readonly<Record<TrustTier, TierPolicy>>;
33
+ /** Criteria for advancing to the next tier. */
34
+ export interface TierProgression {
35
+ from: TrustTier;
36
+ to: TrustTier | null;
37
+ criteria: Array<{
38
+ label: string;
39
+ met: boolean;
40
+ observed: number | string | boolean;
41
+ required: number | string | boolean;
42
+ }>;
43
+ /** 0..1 — overall completeness toward the next tier. */
44
+ progress: number;
45
+ }
46
+ /** Input shape for the policy evaluator — derived from passport + directory. */
47
+ export interface AgentSnapshot {
48
+ identity: string;
49
+ trustTier: TrustTier;
50
+ proofLevel: ProofLevel;
51
+ reputationScore: number;
52
+ summary: {
53
+ taskCompletions: number;
54
+ completionRate: number;
55
+ receiptVolumeUsdCents?: number;
56
+ leaseTenureHoursAvg: number;
57
+ };
58
+ qualification: {
59
+ sandboxEligible: boolean;
60
+ verifiedLaneEligible: boolean;
61
+ payoutEligible: boolean;
62
+ blockedReasons: string[];
63
+ };
64
+ }
65
+ /**
66
+ * Convert a passport envelope into the {@link AgentSnapshot} shape the
67
+ * policy evaluator uses.
68
+ */
69
+ export declare function snapshotFromPassport(envelope: PortableAgentPassportEnvelope, receiptVolumeUsdCents?: number): AgentSnapshot;
70
+ /** Reason enumeration for workspace eligibility checks. */
71
+ export type EligibilityReason = "tier_ok" | "requires_higher_proof" | "invite_only" | "blocked_by_qualification" | "suspended_capability" | "region_not_allowlisted" | "unknown_workspace";
72
+ export interface EligibilityResult {
73
+ eligible: boolean;
74
+ reason: EligibilityReason;
75
+ message?: string;
76
+ }
77
+ /** Sandbox / capability policy evaluator. */
78
+ export declare class SandboxPolicy {
79
+ private snapshot;
80
+ private readonly policies;
81
+ constructor(snapshot: AgentSnapshot, policies?: Readonly<Record<TrustTier, TierPolicy>>);
82
+ /** Replace the underlying agent snapshot — call when the passport refreshes. */
83
+ update(snapshot: AgentSnapshot): void;
84
+ /**
85
+ * Read the underlying snapshot the policy was constructed with. Returned
86
+ * reference is the live object — callers MUST NOT mutate it; clone first
87
+ * if you need to diverge.
88
+ */
89
+ getSnapshot(): Readonly<AgentSnapshot>;
90
+ /** The effective tier policy for the current snapshot. */
91
+ effectivePolicy(): TierPolicy;
92
+ /** Is `amountUsdCents` within the daily spend cap? */
93
+ canSpend(amountUsdCents: number, alreadySpentUsdCentsToday?: number): boolean;
94
+ /** Has the per-hour task claim budget been exhausted? */
95
+ withinClaimRate(claimsInLastHour: number): boolean;
96
+ /**
97
+ * Is the agent eligible to join the given workspace directory entry?
98
+ *
99
+ * Mirrors the control-plane's gate: compare `requiredProofLevel` against
100
+ * the agent's current `proofLevel` and respect `joinMode`.
101
+ */
102
+ canJoinWorkspace(entry: WorkspaceDirectoryEntry): EligibilityResult;
103
+ /** Trust-tier progression report: what the agent has achieved vs. what's still required. */
104
+ progressReport(): TierProgression;
105
+ }
106
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/modules/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,6BAA6B,EAC7B,UAAU,EACV,SAAS,EACT,uBAAuB,EACxB,MAAM,aAAa,CAAC;AAErB,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,2FAA2F;IAC3F,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gEAAgE;IAChE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,cAAc,EAAE,OAAO,CAAC;IACxB,2FAA2F;IAC3F,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAyBxE,CAAC;AAEH,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,OAAO,CAAC;QACb,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QACpC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KACrC,CAAC,CAAC;IACH,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE;QACP,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,aAAa,EAAE;QACb,eAAe,EAAE,OAAO,CAAC;QACzB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,cAAc,EAAE,OAAO,CAAC;QACxB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,6BAA6B,EACvC,qBAAqB,CAAC,EAAE,MAAM,GAC7B,aAAa,CAef;AAED,2DAA2D;AAC3D,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,uBAAuB,GACvB,aAAa,GACb,0BAA0B,GAC1B,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,CAAC;AAExB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,6CAA6C;AAC7C,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADjB,QAAQ,EAAE,aAAa,EACd,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAyB;IAG5F,gFAAgF;IAChF,MAAM,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIrC;;;;OAIG;IACH,WAAW,IAAI,QAAQ,CAAC,aAAa,CAAC;IAItC,0DAA0D;IAC1D,eAAe,IAAI,UAAU;IAI7B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,yBAAyB,SAAI,GAAG,OAAO;IAMxE,yDAAyD;IACzD,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAMlD;;;;;OAKG;IACH,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,iBAAiB;IAiCnE,4FAA4F;IAC5F,cAAc,IAAI,eAAe;CAkFlC"}