@agenthifive/openclaw 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 (65) hide show
  1. package/README.md +124 -0
  2. package/dist/client.d.ts +27 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +136 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/index.d.ts +16 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +23 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/jwt-utils.d.ts +29 -0
  11. package/dist/jwt-utils.d.ts.map +1 -0
  12. package/dist/jwt-utils.js +55 -0
  13. package/dist/jwt-utils.js.map +1 -0
  14. package/dist/patch-verify.d.ts +28 -0
  15. package/dist/patch-verify.d.ts.map +1 -0
  16. package/dist/patch-verify.js +72 -0
  17. package/dist/patch-verify.js.map +1 -0
  18. package/dist/pending-approvals.d.ts +55 -0
  19. package/dist/pending-approvals.d.ts.map +1 -0
  20. package/dist/pending-approvals.js +95 -0
  21. package/dist/pending-approvals.js.map +1 -0
  22. package/dist/prompt-reference.d.ts +51 -0
  23. package/dist/prompt-reference.d.ts.map +1 -0
  24. package/dist/prompt-reference.js +645 -0
  25. package/dist/prompt-reference.js.map +1 -0
  26. package/dist/register.d.ts +20 -0
  27. package/dist/register.d.ts.map +1 -0
  28. package/dist/register.js +551 -0
  29. package/dist/register.js.map +1 -0
  30. package/dist/runtime.d.ts +66 -0
  31. package/dist/runtime.d.ts.map +1 -0
  32. package/dist/runtime.js +87 -0
  33. package/dist/runtime.js.map +1 -0
  34. package/dist/session-context.d.ts +39 -0
  35. package/dist/session-context.d.ts.map +1 -0
  36. package/dist/session-context.js +58 -0
  37. package/dist/session-context.js.map +1 -0
  38. package/dist/setup-wizard.d.ts +28 -0
  39. package/dist/setup-wizard.d.ts.map +1 -0
  40. package/dist/setup-wizard.js +303 -0
  41. package/dist/setup-wizard.js.map +1 -0
  42. package/dist/tools.d.ts +27 -0
  43. package/dist/tools.d.ts.map +1 -0
  44. package/dist/tools.js +128 -0
  45. package/dist/tools.js.map +1 -0
  46. package/dist/types.d.ts +93 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +2 -0
  49. package/dist/types.js.map +1 -0
  50. package/dist/vault-action-proxy.d.ts +75 -0
  51. package/dist/vault-action-proxy.d.ts.map +1 -0
  52. package/dist/vault-action-proxy.js +152 -0
  53. package/dist/vault-action-proxy.js.map +1 -0
  54. package/dist/vault-provider.d.ts +52 -0
  55. package/dist/vault-provider.d.ts.map +1 -0
  56. package/dist/vault-provider.js +37 -0
  57. package/dist/vault-provider.js.map +1 -0
  58. package/dist/vault-token-manager.d.ts +42 -0
  59. package/dist/vault-token-manager.d.ts.map +1 -0
  60. package/dist/vault-token-manager.js +124 -0
  61. package/dist/vault-token-manager.js.map +1 -0
  62. package/openclaw.plugin.json +59 -0
  63. package/package.json +58 -0
  64. package/patches/README.md +85 -0
  65. package/patches/model-auth.patch +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-reference.js","sourceRoot":"","sources":["../src/prompt-reference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * OpenClaw plugin entry point.
3
+ *
4
+ * This file is referenced by the `openclaw.extensions` field in package.json.
5
+ * OpenClaw's plugin loader calls `register(api)` at startup.
6
+ *
7
+ * We deliberately avoid importing any OpenClaw types at compile time —
8
+ * the `api` parameter is typed loosely so this package has zero dependency
9
+ * on OpenClaw internals. This keeps it publishable as a standalone npm package.
10
+ */
11
+ declare function register(api: any): void;
12
+ declare const _default: {
13
+ id: string;
14
+ name: string;
15
+ version: string;
16
+ description: string;
17
+ register: typeof register;
18
+ };
19
+ export default _default;
20
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2hBH,iBAAS,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA6HhC;;;;;;;;AAMD,wBAOE"}
@@ -0,0 +1,551 @@
1
+ /**
2
+ * OpenClaw plugin entry point.
3
+ *
4
+ * This file is referenced by the `openclaw.extensions` field in package.json.
5
+ * OpenClaw's plugin loader calls `register(api)` at startup.
6
+ *
7
+ * We deliberately avoid importing any OpenClaw types at compile time —
8
+ * the `api` parameter is typed loosely so this package has zero dependency
9
+ * on OpenClaw internals. This keeps it publishable as a standalone npm package.
10
+ */
11
+ import { VaultClient } from "./client.js";
12
+ import { execute, approvalRequest, approvalCommit, connectionsList, connectionRevoke, } from "./tools.js";
13
+ import { writeReferenceFiles, buildChunkedPrompt, buildApiReferencePrompt } from "./prompt-reference.js";
14
+ import { VaultTokenManager } from "./vault-token-manager.js";
15
+ import { VaultActionProxy } from "./vault-action-proxy.js";
16
+ import { initPendingApprovals, loadPendingApprovals, savePendingApprovals, loadFallbackNotifications, saveFallbackNotifications, } from "./pending-approvals.js";
17
+ import { parseSessionKey, setCurrentSessionContext } from "./session-context.js";
18
+ import { VaultCredentialProvider } from "./vault-provider.js";
19
+ import { setVaultBearerToken, setCredentialProvider, setProxiedProviders } from "./runtime.js";
20
+ import { verifyPatches } from "./patch-verify.js";
21
+ import { runSetupWizard, parseSetupArgs } from "./setup-wizard.js";
22
+ // ---------------------------------------------------------------------------
23
+ // Constants
24
+ // ---------------------------------------------------------------------------
25
+ const DEFAULT_BASE_URL = "https://app.agenthifive.com";
26
+ const PLUGIN_ID = "agenthifive";
27
+ const PLUGIN_VERSION = "0.1.0";
28
+ // ---------------------------------------------------------------------------
29
+ // Module-scoped singletons (lifecycle managed by register/stop)
30
+ // ---------------------------------------------------------------------------
31
+ let _tokenManager = null;
32
+ let _actionProxy = null;
33
+ /** Shared mutable auth object — updated in-place by token manager's onRefresh callback */
34
+ let _managedAuth = null;
35
+ // ---------------------------------------------------------------------------
36
+ // Config helpers
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Build an OpenClawPluginConfig from the raw pluginConfig provided by OpenClaw.
40
+ * Applies defaults and normalizes the auth config.
41
+ */
42
+ function buildConfig(raw) {
43
+ const baseUrl = raw.baseUrl || DEFAULT_BASE_URL;
44
+ const authRaw = (raw.auth ?? {});
45
+ const mode = authRaw.mode;
46
+ let auth;
47
+ if (mode === "bearer") {
48
+ auth = { mode: "bearer", token: authRaw.token };
49
+ }
50
+ else {
51
+ // Default to agent mode
52
+ const privateKeyRaw = authRaw.privateKey;
53
+ let privateKey;
54
+ if (privateKeyRaw) {
55
+ try {
56
+ // Accept both raw JSON and base64-encoded JWK
57
+ privateKey = JSON.parse(privateKeyRaw);
58
+ }
59
+ catch {
60
+ privateKey = JSON.parse(Buffer.from(privateKeyRaw, "base64").toString("utf-8"));
61
+ }
62
+ }
63
+ else {
64
+ throw new Error("AgentHiFive plugin: auth.privateKey is required for agent mode");
65
+ }
66
+ // Validate key type — only ES256 (EC P-256) is supported
67
+ if (privateKey.kty !== "EC") {
68
+ throw new Error(`AgentHiFive plugin: private key must be EC type (got "${privateKey.kty ?? "unknown"}")`);
69
+ }
70
+ if (privateKey.crv && privateKey.crv !== "P-256") {
71
+ throw new Error(`AgentHiFive plugin: private key must use P-256 curve for ES256 (got "${privateKey.crv}")`);
72
+ }
73
+ auth = {
74
+ mode: "agent",
75
+ agentId: authRaw.agentId,
76
+ privateKey,
77
+ ...(authRaw.tokenAudience ? { tokenAudience: authRaw.tokenAudience } : {}),
78
+ };
79
+ }
80
+ return {
81
+ baseUrl,
82
+ auth,
83
+ pollTimeoutMs: raw.pollTimeoutMs ?? 300_000,
84
+ pollIntervalMs: raw.pollIntervalMs ?? 3_000,
85
+ };
86
+ }
87
+ // ---------------------------------------------------------------------------
88
+ // Tool builders — convert our tool definitions to OpenClaw's AgentTool format
89
+ // ---------------------------------------------------------------------------
90
+ /**
91
+ * Build all 5 vault tools as OpenClaw AgentTool objects.
92
+ *
93
+ * OpenClaw uses @mariozechner/pi-agent-core's AgentTool interface:
94
+ * { name, label, description, parameters (TypeBox TSchema), execute }
95
+ *
96
+ * We use the `registerTool` factory form which receives a context object
97
+ * and returns tool(s). This avoids importing pi-agent-core at compile time.
98
+ * Instead we build plain objects that match the expected shape — OpenClaw's
99
+ * loader coerces them via its own adapter.
100
+ */
101
+ function buildVaultTools(client, config) {
102
+ return [
103
+ {
104
+ name: "agenthifive_execute",
105
+ label: "AgentHiFive Execute",
106
+ description: "Execute an HTTP request through the AgentHiFive Vault proxy (Model B). The Vault handles authentication and policy enforcement. Returns the provider API response or an approval requirement.",
107
+ parameters: {
108
+ type: "object",
109
+ properties: {
110
+ connectionId: {
111
+ type: "string",
112
+ description: "The connection ID to use for this request",
113
+ },
114
+ service: {
115
+ type: "string",
116
+ description: "Service name (alternative to connectionId for single-connection services)",
117
+ },
118
+ method: {
119
+ type: "string",
120
+ description: "HTTP method",
121
+ enum: ["GET", "POST", "PUT", "DELETE", "PATCH"],
122
+ },
123
+ url: {
124
+ type: "string",
125
+ description: "Target URL for the provider API",
126
+ },
127
+ query: {
128
+ type: "object",
129
+ description: "Query parameters as key-value pairs",
130
+ },
131
+ headers: {
132
+ type: "object",
133
+ description: "Additional headers (Authorization is injected by Vault)",
134
+ },
135
+ body: {
136
+ description: "Request body (for POST, PUT, PATCH)",
137
+ },
138
+ approvalId: {
139
+ type: "string",
140
+ description: "Approval request ID to bypass a require_approval guard",
141
+ },
142
+ },
143
+ required: ["method", "url"],
144
+ },
145
+ execute: async (_toolCallId, params) => {
146
+ const input = {
147
+ method: params.method,
148
+ url: params.url,
149
+ };
150
+ if (params.connectionId)
151
+ input.connectionId = params.connectionId;
152
+ if (params.service)
153
+ input.service = params.service;
154
+ if (params.query)
155
+ input.query = params.query;
156
+ if (params.headers)
157
+ input.headers = params.headers;
158
+ if (params.body !== undefined)
159
+ input.body = params.body;
160
+ if (params.approvalId)
161
+ input.approvalId = params.approvalId;
162
+ const result = await execute(client, input);
163
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
164
+ },
165
+ },
166
+ {
167
+ name: "agenthifive_approval_request",
168
+ label: "AgentHiFive Approval Request",
169
+ description: "Create a step-up approval request for a sensitive action. The user must approve via the AgentHiFive dashboard before the action executes.",
170
+ parameters: {
171
+ type: "object",
172
+ properties: {
173
+ connectionId: {
174
+ type: "string",
175
+ description: "The connection ID for this action",
176
+ },
177
+ actionDescription: {
178
+ type: "string",
179
+ description: "Human-readable description of the action",
180
+ },
181
+ method: {
182
+ type: "string",
183
+ description: "HTTP method for the action",
184
+ enum: ["GET", "POST", "PUT", "DELETE", "PATCH"],
185
+ },
186
+ url: {
187
+ type: "string",
188
+ description: "Target URL for the action",
189
+ },
190
+ body: {
191
+ description: "Request body for the action",
192
+ },
193
+ },
194
+ required: ["connectionId", "actionDescription", "method", "url"],
195
+ },
196
+ execute: async (_toolCallId, params) => {
197
+ const input = {
198
+ connectionId: params.connectionId,
199
+ actionDescription: params.actionDescription,
200
+ method: params.method,
201
+ url: params.url,
202
+ };
203
+ if (params.body !== undefined)
204
+ input.body = params.body;
205
+ const result = await approvalRequest(client, input);
206
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
207
+ },
208
+ },
209
+ {
210
+ name: "agenthifive_approval_commit",
211
+ label: "AgentHiFive Approval Commit",
212
+ description: "Wait for a step-up approval request to be resolved. Blocks until the user approves, denies, or the request expires.",
213
+ parameters: {
214
+ type: "object",
215
+ properties: {
216
+ approvalRequestId: {
217
+ type: "string",
218
+ description: "The approval request ID from approval_request or execute",
219
+ },
220
+ timeoutMs: {
221
+ type: "number",
222
+ description: "Timeout in milliseconds (default: 300000 = 5 min)",
223
+ },
224
+ },
225
+ required: ["approvalRequestId"],
226
+ },
227
+ execute: async (_toolCallId, params) => {
228
+ const input = {
229
+ approvalRequestId: params.approvalRequestId,
230
+ };
231
+ if (typeof params.timeoutMs === "number")
232
+ input.timeoutMs = params.timeoutMs;
233
+ const result = await approvalCommit(client, input, config.pollTimeoutMs, config.pollIntervalMs);
234
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
235
+ },
236
+ },
237
+ {
238
+ name: "agenthifive_connections_list",
239
+ label: "AgentHiFive Connections List",
240
+ description: "List all connections available to this agent. Shows provider, status, and granted scopes for each connection.",
241
+ parameters: {
242
+ type: "object",
243
+ properties: {},
244
+ },
245
+ execute: async () => {
246
+ const result = await connectionsList(client);
247
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
248
+ },
249
+ },
250
+ {
251
+ name: "agenthifive_connection_revoke",
252
+ label: "AgentHiFive Connection Revoke",
253
+ description: "Immediately revoke a connection. This blocks all future token vending and execution through this connection.",
254
+ parameters: {
255
+ type: "object",
256
+ properties: {
257
+ connectionId: {
258
+ type: "string",
259
+ description: "The connection ID to revoke",
260
+ },
261
+ },
262
+ required: ["connectionId"],
263
+ },
264
+ execute: async (_toolCallId, params) => {
265
+ const result = await connectionRevoke(client, {
266
+ connectionId: params.connectionId,
267
+ });
268
+ return { content: [{ type: "text", text: JSON.stringify(result) }] };
269
+ },
270
+ },
271
+ ];
272
+ }
273
+ // ---------------------------------------------------------------------------
274
+ // Approval notification — polls pending approvals, injects resolved ones
275
+ // ---------------------------------------------------------------------------
276
+ async function checkPendingApprovals(config, logger) {
277
+ const pending = loadPendingApprovals();
278
+ if (pending.length === 0) {
279
+ return null;
280
+ }
281
+ if (!_actionProxy) {
282
+ return null;
283
+ }
284
+ const notifications = [];
285
+ const stillPending = [];
286
+ for (const approval of pending) {
287
+ // Skip expired approvals
288
+ if (approval.expiresAt && new Date(approval.expiresAt) < new Date()) {
289
+ notifications.push(`- Your request "${approval.summary}" has EXPIRED. Submit a new request without approvalId.`);
290
+ continue;
291
+ }
292
+ try {
293
+ const response = await fetch(`${config.baseUrl}/v1/approvals/${approval.approvalRequestId}`, {
294
+ method: "GET",
295
+ headers: _actionProxy.buildAuthHeader(),
296
+ signal: AbortSignal.timeout(5_000),
297
+ });
298
+ if (!response.ok) {
299
+ stillPending.push(approval);
300
+ continue;
301
+ }
302
+ const body = (await response.json());
303
+ const status = body.approval?.status ?? body.status;
304
+ if (status === "approved") {
305
+ notifications.push(`- Your request "${approval.summary}" was APPROVED. ` +
306
+ `Re-submit the exact same vault_execute call with approvalId: "${approval.approvalRequestId}"`);
307
+ }
308
+ else if (status === "denied") {
309
+ notifications.push(`- Your request "${approval.summary}" was DENIED by the workspace owner.`);
310
+ }
311
+ else if (status === "expired" || status === "consumed") {
312
+ notifications.push(`- Your request "${approval.summary}" is ${status}. Submit a new request if needed.`);
313
+ }
314
+ else {
315
+ stillPending.push(approval);
316
+ }
317
+ }
318
+ catch {
319
+ stillPending.push(approval);
320
+ }
321
+ }
322
+ savePendingApprovals(stillPending);
323
+ // Consume fallback notifications from approval watcher
324
+ const fallbacks = loadFallbackNotifications();
325
+ if (fallbacks.length > 0) {
326
+ for (const fb of fallbacks) {
327
+ notifications.push(fb.notificationText);
328
+ }
329
+ saveFallbackNotifications([]);
330
+ }
331
+ if (notifications.length === 0) {
332
+ return null;
333
+ }
334
+ return [
335
+ `<vault-approval-updates>`,
336
+ `The following step-up approval requests have been resolved since your last turn:`,
337
+ ...notifications,
338
+ `</vault-approval-updates>`,
339
+ ].join("\n");
340
+ }
341
+ // ---------------------------------------------------------------------------
342
+ // Agent auth initialization (ES256 token management)
343
+ // ---------------------------------------------------------------------------
344
+ async function initAgentAuth(config, pluginConfig, logger) {
345
+ if (config.auth.mode !== "agent") {
346
+ // Bearer mode — set up directly without token manager
347
+ _managedAuth = { mode: "bearer", token: config.auth.token };
348
+ _actionProxy = new VaultActionProxy({
349
+ baseUrl: config.baseUrl,
350
+ auth: _managedAuth,
351
+ timeoutMs: 65_000,
352
+ });
353
+ // Set runtime state for patch consumers
354
+ setVaultBearerToken(config.auth.token);
355
+ initRuntimeProvider(config, pluginConfig, logger);
356
+ return;
357
+ }
358
+ // Agent mode — ES256 JWT-based auth with background token refresh
359
+ _managedAuth = { mode: "bearer", token: "" };
360
+ _tokenManager = new VaultTokenManager({
361
+ baseUrl: config.baseUrl,
362
+ agentId: config.auth.agentId,
363
+ privateKey: config.auth.privateKey,
364
+ ...(config.auth.tokenAudience ? { tokenAudience: config.auth.tokenAudience } : {}),
365
+ });
366
+ _tokenManager.onRefresh = (newToken) => {
367
+ if (_managedAuth) {
368
+ _managedAuth.token = newToken;
369
+ }
370
+ };
371
+ _tokenManager.onAuthFailure = () => {
372
+ logger.error?.("AgentHiFive: agent key pair rejected (401). Generate a new bootstrap secret " +
373
+ "from the AgentHiFive dashboard, then reconfigure.");
374
+ };
375
+ // Initial token exchange with retries
376
+ const retryDelays = [5_000, 10_000, 30_000, 60_000];
377
+ let lastError;
378
+ for (let attempt = 0; attempt <= retryDelays.length; attempt++) {
379
+ try {
380
+ await _tokenManager.init();
381
+ logger.info?.("AgentHiFive: agent auth initialized successfully");
382
+ _actionProxy = new VaultActionProxy({
383
+ baseUrl: config.baseUrl,
384
+ auth: _managedAuth,
385
+ timeoutMs: 65_000,
386
+ onTokenRefresh: () => _tokenManager?.forceRefresh() ?? Promise.resolve(false),
387
+ });
388
+ // Set runtime state for patch consumers
389
+ setVaultBearerToken(_managedAuth.token);
390
+ // Keep runtime token in sync with background refresh
391
+ const prevOnRefresh = _tokenManager.onRefresh;
392
+ _tokenManager.onRefresh = (newToken) => {
393
+ prevOnRefresh?.(newToken);
394
+ setVaultBearerToken(newToken);
395
+ };
396
+ initRuntimeProvider(config, pluginConfig, logger);
397
+ return;
398
+ }
399
+ catch (err) {
400
+ lastError = err;
401
+ if (attempt < retryDelays.length) {
402
+ const delay = retryDelays[attempt];
403
+ logger.error?.(`AgentHiFive: token exchange failed (attempt ${attempt + 1}/${retryDelays.length + 1}), ` +
404
+ `retrying in ${delay / 1000}s: ${err instanceof Error ? err.message : String(err)}`);
405
+ await new Promise((resolve) => setTimeout(resolve, delay));
406
+ }
407
+ }
408
+ }
409
+ logger.error?.(`AgentHiFive: agent auth failed after ${retryDelays.length + 1} attempts. ` +
410
+ `Tools will still work via VaultClient but action proxy is unavailable. ` +
411
+ `Last error: ${lastError instanceof Error ? lastError.message : String(lastError)}`);
412
+ }
413
+ // ---------------------------------------------------------------------------
414
+ // Runtime provider initialization (for patch consumers)
415
+ // ---------------------------------------------------------------------------
416
+ function initRuntimeProvider(config, pluginConfig, logger) {
417
+ // Set proxied providers list
418
+ const proxied = (pluginConfig.proxiedProviders ?? []);
419
+ setProxiedProviders(proxied);
420
+ // Set credential provider (currently a stub that returns null —
421
+ // all access goes through Model B. When credential vending is
422
+ // implemented, this will resolve real API keys from the vault.)
423
+ if (!_managedAuth)
424
+ return;
425
+ const provider = new VaultCredentialProvider({
426
+ baseUrl: config.baseUrl,
427
+ auth: _managedAuth,
428
+ timeoutMs: 30_000,
429
+ cacheTtlMs: 300_000,
430
+ });
431
+ setCredentialProvider(provider);
432
+ if (proxied.length > 0) {
433
+ logger.info?.(`AgentHiFive: proxied providers: ${proxied.join(", ")}`);
434
+ }
435
+ }
436
+ // ---------------------------------------------------------------------------
437
+ // Plugin registration
438
+ // ---------------------------------------------------------------------------
439
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
440
+ function register(api) {
441
+ const pluginConfig = (api.pluginConfig ?? {});
442
+ const config = buildConfig(pluginConfig);
443
+ const client = new VaultClient(config);
444
+ const logger = api.logger ?? console;
445
+ logger.info?.(`AgentHiFive plugin v${PLUGIN_VERSION} initializing (${config.baseUrl})`);
446
+ // ── Initialize agent auth (token manager + action proxy) ─────────────
447
+ // Fire-and-forget — tools work via VaultClient regardless; action proxy
448
+ // is only needed for approval polling.
449
+ initAgentAuth(config, pluginConfig, logger).catch((err) => {
450
+ logger.error?.(`AgentHiFive: auth init failed: ${err instanceof Error ? err.message : String(err)}`);
451
+ });
452
+ // ── Verify patches (non-blocking) ──────────────────────────────────────
453
+ verifyPatches(logger).catch(() => {
454
+ // Verification failure is non-fatal
455
+ });
456
+ // ── Initialize pending approvals state ───────────────────────────────
457
+ const stateDir = (api.stateDir ?? api.dataDir);
458
+ if (stateDir) {
459
+ initPendingApprovals(stateDir, logger);
460
+ }
461
+ // ── Register tools ──────────────────────────────────────────────────────
462
+ const tools = buildVaultTools(client, config);
463
+ for (const tool of tools) {
464
+ api.registerTool(tool);
465
+ }
466
+ // ── Register prompt injection hook ──────────────────────────────────────
467
+ const connectedProviders = (pluginConfig.connectedProviders ?? []);
468
+ if (stateDir) {
469
+ // Chunked mode — write reference files and inject lean pointer
470
+ try {
471
+ const { basePath, serviceFiles } = writeReferenceFiles(stateDir, logger);
472
+ const prompt = buildChunkedPrompt(basePath, serviceFiles);
473
+ api.on("before_agent_start", (_event, ctx) => {
474
+ // Track session context for approval routing
475
+ if (ctx?.sessionKey) {
476
+ const parsed = parseSessionKey(ctx.sessionKey);
477
+ const sessionCtx = {
478
+ sessionKey: ctx.sessionKey,
479
+ };
480
+ if (parsed.channel)
481
+ sessionCtx.channel = parsed.channel;
482
+ if (parsed.peerId)
483
+ sessionCtx.peerId = parsed.peerId;
484
+ if (parsed.peerKind)
485
+ sessionCtx.peerKind = parsed.peerKind;
486
+ setCurrentSessionContext(sessionCtx);
487
+ }
488
+ return { prependContext: prompt };
489
+ }, { priority: 10 });
490
+ logger.info?.(`Chunked prompt injection enabled (${serviceFiles.length} service files)`);
491
+ }
492
+ catch (err) {
493
+ logger.warn?.(`Chunked reference write failed, falling back to inline mode: ${err instanceof Error ? err.stack : String(err)}`);
494
+ // Fall back to inline mode
495
+ if (connectedProviders.length > 0) {
496
+ api.on("before_prompt_build", () => {
497
+ const prompt = buildApiReferencePrompt(connectedProviders);
498
+ if (prompt) {
499
+ return { prependContext: prompt };
500
+ }
501
+ }, { priority: 10 });
502
+ }
503
+ }
504
+ }
505
+ else if (connectedProviders.length > 0) {
506
+ // No state dir — use inline mode
507
+ api.on("before_prompt_build", () => {
508
+ const prompt = buildApiReferencePrompt(connectedProviders);
509
+ if (prompt) {
510
+ return { prependContext: prompt };
511
+ }
512
+ }, { priority: 10 });
513
+ logger.info?.(`Inline prompt injection enabled for providers: ${connectedProviders.join(", ")}`);
514
+ }
515
+ // ── Register approval notification hook ─────────────────────────────────
516
+ api.on("before_agent_start", async () => {
517
+ if (!stateDir)
518
+ return undefined;
519
+ try {
520
+ const notification = await checkPendingApprovals(config, logger);
521
+ return notification ? { prependContext: notification } : undefined;
522
+ }
523
+ catch (err) {
524
+ logger.error?.(`Approval notification check failed: ${err instanceof Error ? err.stack : String(err)}`);
525
+ return undefined;
526
+ }
527
+ }, { priority: 5 });
528
+ // ── Register setup-vault command ─────────────────────────────────────────
529
+ if (typeof api.registerCommand === "function") {
530
+ api.registerCommand({
531
+ name: "setup-vault",
532
+ description: "Set up AgentHiFive vault integration (bootstrap agent, discover capabilities)",
533
+ handler: async (args) => {
534
+ const opts = parseSetupArgs(args);
535
+ await runSetupWizard(opts);
536
+ },
537
+ });
538
+ }
539
+ logger.info?.("AgentHiFive plugin registered successfully");
540
+ }
541
+ // ---------------------------------------------------------------------------
542
+ // Default export — OpenClaw plugin definition
543
+ // ---------------------------------------------------------------------------
544
+ export default {
545
+ id: PLUGIN_ID,
546
+ name: "AgentHiFive Vault",
547
+ version: PLUGIN_VERSION,
548
+ description: "Vault-managed credentials, brokered API proxy, and policy-governed access for AI agents",
549
+ register,
550
+ };
551
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,eAAe,EACf,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQnE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AACvD,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,8EAA8E;AAC9E,gEAAgE;AAChE,8EAA8E;AAE9E,IAAI,aAAa,GAA6B,IAAI,CAAC;AACnD,IAAI,YAAY,GAA4B,IAAI,CAAC;AACjD,0FAA0F;AAC1F,IAAI,YAAY,GAA6C,IAAI,CAAC;AAElE,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,WAAW,CAAC,GAA4B;IAC/C,MAAM,OAAO,GAAI,GAAG,CAAC,OAAkB,IAAI,gBAAgB,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAc,CAAC;IAEpC,IAAI,IAAkC,CAAC;IACvC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,KAAe,EAAE,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,wBAAwB;QACxB,MAAM,aAAa,GAAG,OAAO,CAAC,UAAgC,CAAC;QAC/D,IAAI,UAAsB,CAAC;QAC3B,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,8CAA8C;gBAC9C,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAe,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CACzC,CAAC;YAClB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,yDAAyD;QACzD,IAAI,UAAU,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,yDAAyD,UAAU,CAAC,GAAG,IAAI,SAAS,IAAI,CACzF,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CACb,wEAAwE,UAAU,CAAC,GAAG,IAAI,CAC3F,CAAC;QACJ,CAAC;QACD,IAAI,GAAG;YACL,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,OAAO,CAAC,OAAiB;YAClC,UAAU;YACV,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAuB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI;QACJ,aAAa,EAAG,GAAG,CAAC,aAAwB,IAAI,OAAO;QACvD,cAAc,EAAG,GAAG,CAAC,cAAyB,IAAI,KAAK;KACxD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,SAAS,eAAe,CAAC,MAAmB,EAAE,MAA4B;IACxE,OAAO;QACL;YACE,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EACT,+LAA+L;YACjM,UAAU,EAAE;gBACV,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE;oBACV,YAAY,EAAE;wBACZ,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,2CAA2C;qBACzD;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,QAAiB;wBACvB,WAAW,EACT,2EAA2E;qBAC9E;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,aAAa;wBAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;qBAChD;oBACD,GAAG,EAAE;wBACH,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,iCAAiC;qBAC/C;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,qCAAqC;qBACnD;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,QAAiB;wBACvB,WAAW,EACT,yDAAyD;qBAC5D;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,qCAAqC;qBACnD;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAiB;wBACvB,WAAW,EACT,wDAAwD;qBAC3D;iBACF;gBACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;aAC5B;YACD,OAAO,EAAE,KAAK,EACZ,WAAmB,EACnB,MAA+B,EAC/B,EAAE;gBACF,MAAM,KAAK,GAAiB;oBAC1B,MAAM,EAAE,MAAM,CAAC,MAAgC;oBAC/C,GAAG,EAAE,MAAM,CAAC,GAAa;iBAC1B,CAAC;gBACF,IAAI,MAAM,CAAC,YAAY;oBACrB,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAsB,CAAC;gBACrD,IAAI,MAAM,CAAC,OAAO;oBAAE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAiB,CAAC;gBAC7D,IAAI,MAAM,CAAC,KAAK;oBACd,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAA+B,CAAC;gBACvD,IAAI,MAAM,CAAC,OAAO;oBAChB,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAiC,CAAC;gBAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBACxD,IAAI,MAAM,CAAC,UAAU;oBACnB,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAoB,CAAC;gBAEjD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAC5C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACF;QACD;YACE,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,8BAA8B;YACrC,WAAW,EACT,2IAA2I;YAC7I,UAAU,EAAE;gBACV,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE;oBACV,YAAY,EAAE;wBACZ,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,mCAAmC;qBACjD;oBACD,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,0CAA0C;qBACxD;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,4BAA4B;wBACzC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;qBAChD;oBACD,GAAG,EAAE;wBACH,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,2BAA2B;qBACzC;oBACD,IAAI,EAAE;wBACJ,WAAW,EAAE,6BAA6B;qBAC3C;iBACF;gBACD,QAAQ,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,CAAC;aACjE;YACD,OAAO,EAAE,KAAK,EACZ,WAAmB,EACnB,MAA+B,EAC/B,EAAE;gBACF,MAAM,KAAK,GAAyB;oBAClC,YAAY,EAAE,MAAM,CAAC,YAAsB;oBAC3C,iBAAiB,EAAE,MAAM,CAAC,iBAA2B;oBACrD,MAAM,EAAE,MAAM,CAAC,MAAwC;oBACvD,GAAG,EAAE,MAAM,CAAC,GAAa;iBAC1B,CAAC;gBACF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;oBAAE,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;gBAExD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACpD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACF;QACD;YACE,IAAI,EAAE,6BAA6B;YACnC,KAAK,EAAE,6BAA6B;YACpC,WAAW,EACT,qHAAqH;YACvH,UAAU,EAAE;gBACV,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE;oBACV,iBAAiB,EAAE;wBACjB,IAAI,EAAE,QAAiB;wBACvB,WAAW,EACT,0DAA0D;qBAC7D;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,QAAiB;wBACvB,WAAW,EACT,mDAAmD;qBACtD;iBACF;gBACD,QAAQ,EAAE,CAAC,mBAAmB,CAAC;aAChC;YACD,OAAO,EAAE,KAAK,EACZ,WAAmB,EACnB,MAA+B,EAC/B,EAAE;gBACF,MAAM,KAAK,GAAwB;oBACjC,iBAAiB,EAAE,MAAM,CAAC,iBAA2B;iBACtD,CAAC;gBACF,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ;oBACtC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,MAAM,EACN,KAAK,EACL,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,cAAc,CACtB,CAAC;gBACF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACF;QACD;YACE,IAAI,EAAE,8BAA8B;YACpC,KAAK,EAAE,8BAA8B;YACrC,WAAW,EACT,+GAA+G;YACjH,UAAU,EAAE;gBACV,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE,EAAE;aACf;YACD,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACF;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,KAAK,EAAE,+BAA+B;YACtC,WAAW,EACT,8GAA8G;YAChH,UAAU,EAAE;gBACV,IAAI,EAAE,QAAiB;gBACvB,UAAU,EAAE;oBACV,YAAY,EAAE;wBACZ,IAAI,EAAE,QAAiB;wBACvB,WAAW,EAAE,6BAA6B;qBAC3C;iBACF;gBACD,QAAQ,EAAE,CAAC,cAAc,CAAC;aAC3B;YACD,OAAO,EAAE,KAAK,EACZ,WAAmB,EACnB,MAA+B,EAC/B,EAAE;gBACF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE;oBAC5C,YAAY,EAAE,MAAM,CAAC,YAAsB;iBAC5C,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;SACF;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAE9E,KAAK,UAAU,qBAAqB,CAClC,MAA4B,EAC5B,MAAoB;IAEpB,MAAM,OAAO,GAAG,oBAAoB,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,yBAAyB;QACzB,IAAI,QAAQ,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YACpE,aAAa,CAAC,IAAI,CAChB,mBAAmB,QAAQ,CAAC,OAAO,yDAAyD,CAC7F,CAAC;YACF,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,iBAAiB,QAAQ,CAAC,iBAAiB,EAAE,EAAE;gBAC3F,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,YAAY,CAAC,eAAe,EAAE;gBACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;aACnC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwD,CAAC;YAC5F,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YAEpD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBAC1B,aAAa,CAAC,IAAI,CAChB,mBAAmB,QAAQ,CAAC,OAAO,kBAAkB;oBACnD,iEAAiE,QAAQ,CAAC,iBAAiB,GAAG,CACjG,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,aAAa,CAAC,IAAI,CAChB,mBAAmB,QAAQ,CAAC,OAAO,sCAAsC,CAC1E,CAAC;YACJ,CAAC;iBAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBACzD,aAAa,CAAC,IAAI,CAChB,mBAAmB,QAAQ,CAAC,OAAO,QAAQ,MAAM,mCAAmC,CACrF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAEnC,uDAAuD;IACvD,MAAM,SAAS,GAAG,yBAAyB,EAAE,CAAC;IAC9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QACD,yBAAyB,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,0BAA0B;QAC1B,kFAAkF;QAClF,GAAG,aAAa;QAChB,2BAA2B;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAE9E,KAAK,UAAU,aAAa,CAC1B,MAA4B,EAC5B,YAAqC,EACrC,MAAoB;IAEpB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjC,sDAAsD;QACtD,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5D,YAAY,GAAG,IAAI,gBAAgB,CAAC;YAClC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,YAAY;YAClB,SAAS,EAAE,MAAM;SAClB,CAAC,CAAC;QACH,wCAAwC;QACxC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAClD,OAAO;IACT,CAAC;IAED,kEAAkE;IAClE,YAAY,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAE7C,aAAa,GAAG,IAAI,iBAAiB,CAAC;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO;QAC5B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU;QAClC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;IAEH,aAAa,CAAC,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC7C,IAAI,YAAY,EAAE,CAAC;YACjB,YAAY,CAAC,KAAK,GAAG,QAAQ,CAAC;QAChC,CAAC;IACH,CAAC,CAAC;IAEF,aAAa,CAAC,aAAa,GAAG,GAAG,EAAE;QACjC,MAAM,CAAC,KAAK,EAAE,CACZ,8EAA8E;YAC5E,mDAAmD,CACtD,CAAC;IACJ,CAAC,CAAC;IAEF,sCAAsC;IACtC,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,SAAkB,CAAC;IACvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,EAAE,CAAC,kDAAkD,CAAC,CAAC;YAElE,YAAY,GAAG,IAAI,gBAAgB,CAAC;gBAClC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,MAAM;gBACjB,cAAc,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;aAC9E,CAAC,CAAC;YAEH,wCAAwC;YACxC,mBAAmB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACxC,qDAAqD;YACrD,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC;YAC9C,aAAa,CAAC,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE;gBAC7C,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;gBAC1B,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC,CAAC;YACF,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,IAAI,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAE,CAAC;gBACpC,MAAM,CAAC,KAAK,EAAE,CACZ,+CAA+C,OAAO,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,KAAK;oBACvF,eAAe,KAAK,GAAG,IAAI,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtF,CAAC;gBACF,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CACZ,wCAAwC,WAAW,CAAC,MAAM,GAAG,CAAC,aAAa;QACzE,yEAAyE;QACzE,eAAe,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACtF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,SAAS,mBAAmB,CAC1B,MAA4B,EAC5B,YAAqC,EACrC,MAAoB;IAEpB,6BAA6B;IAC7B,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,gBAAgB,IAAI,EAAE,CAAa,CAAC;IAClE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,gEAAgE;IAChE,8DAA8D;IAC9D,gEAAgE;IAChE,IAAI,CAAC,YAAY;QAAE,OAAO;IAC1B,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAAC;QAC3C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,MAAM;QACjB,UAAU,EAAE,OAAO;KACpB,CAAC,CAAC;IACH,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAEhC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,EAAE,CAAC,mCAAmC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E,8DAA8D;AAC9D,SAAS,QAAQ,CAAC,GAAQ;IACxB,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAA4B,CAAC;IACzE,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC;IAErC,MAAM,CAAC,IAAI,EAAE,CAAC,uBAAuB,cAAc,kBAAkB,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IAExF,wEAAwE;IACxE,wEAAwE;IACxE,uCAAuC;IACvC,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACxD,MAAM,CAAC,KAAK,EAAE,CAAC,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAC/B,oCAAoC;IACtC,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAuB,CAAC;IACrE,IAAI,QAAQ,EAAE,CAAC;QACb,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,2EAA2E;IAC3E,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,2EAA2E;IAC3E,MAAM,kBAAkB,GAAG,CAAC,YAAY,CAAC,kBAAkB,IAAI,EAAE,CAAa,CAAC;IAE/E,IAAI,QAAQ,EAAE,CAAC;QACb,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACzE,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAE1D,GAAG,CAAC,EAAE,CACJ,oBAAoB,EACpB,CAAC,MAAe,EAAE,GAA6B,EAAE,EAAE;gBACjD,6CAA6C;gBAC7C,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;oBACpB,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC/C,MAAM,UAAU,GAAkD;wBAChE,UAAU,EAAE,GAAG,CAAC,UAAU;qBAC3B,CAAC;oBACF,IAAI,MAAM,CAAC,OAAO;wBAAE,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;oBACxD,IAAI,MAAM,CAAC,MAAM;wBAAE,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;oBACrD,IAAI,MAAM,CAAC,QAAQ;wBAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC3D,wBAAwB,CAAC,UAAU,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACpC,CAAC,EACD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;YAEF,MAAM,CAAC,IAAI,EAAE,CACX,qCAAqC,YAAY,CAAC,MAAM,iBAAiB,CAC1E,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,EAAE,CAAC,gEAAgE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChI,2BAA2B;YAC3B,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,GAAG,CAAC,EAAE,CACJ,qBAAqB,EACrB,GAAG,EAAE;oBACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;oBAC3D,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;oBACpC,CAAC;gBACH,CAAC,EACD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,iCAAiC;QACjC,GAAG,CAAC,EAAE,CACJ,qBAAqB,EACrB,GAAG,EAAE;YACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YACpC,CAAC;QACH,CAAC,EACD,EAAE,QAAQ,EAAE,EAAE,EAAE,CACjB,CAAC;QACF,MAAM,CAAC,IAAI,EAAE,CACX,kDAAkD,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,GAAG,CAAC,EAAE,CACJ,oBAAoB,EACpB,KAAK,IAAI,EAAE;QACT,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjE,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,EAAE,CAAC,uCAAuC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACxG,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,EACD,EAAE,QAAQ,EAAE,CAAC,EAAE,CAChB,CAAC;IAEF,4EAA4E;IAC5E,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QAC9C,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,+EAA+E;YAC5F,OAAO,EAAE,KAAK,EAAE,IAAc,EAAE,EAAE;gBAChC,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,CAAC,4CAA4C,CAAC,CAAC;AAC9D,CAAC;AAED,8EAA8E;AAC9E,8CAA8C;AAC9C,8EAA8E;AAE9E,eAAe;IACb,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,cAAc;IACvB,WAAW,EACT,yFAAyF;IAC3F,QAAQ;CACT,CAAC"}