{"id":"e6d75cb8-03cf-40e7-8d83-058c836f81d1","entityType":"agent","slug":"clawhub-w3h9uf-hashbox-plugin","name":"@hashingcorp/hashbox-plugin","canonicalUrl":"https://www.xpersona.co/agent/clawhub-w3h9uf-hashbox-plugin","canonicalPath":"/agent/clawhub-w3h9uf-hashbox-plugin","generatedAt":"2026-10-11T15:14:45.857Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":null},"description":"Connects an AI agent to the HashBox iOS app via Firebase webhook to send push notifications with articles, metrics, or audit data.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1727tb3mjjns1rfvfmkhz0gcs88402q:hashbox-plugin","sourceUrl":"https://clawhub.ai/w3h9uf/hashbox-plugin","homepage":"https://clawhub.ai/w3h9uf/skills/hashbox-plugin","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/w3h9uf/hashbox-plugin","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/w3h9uf/skills/hashbox-plugin","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"@hashingcorp/hashbox-plugin technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":null},"stars":null,"forks":null,"downloads":1071,"packageName":null,"latestVersion":"0.4.10","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:54:28.103Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T11:54:28.183Z","lastCrawledAt":"2026-10-11T11:54:28.103Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T11:54:28.103Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.10","createdAt":"2026-02-21T01:09:06.891Z","changelog":"- Added new entrypoint file: index.ts - Updated dependencies and lockfile in package.json and package-lock.json - Modified src/openclaw-entry.ts for internal improvements - Updated tests in tests/clawhub-publishing.test.ts - No changes to usage, setup, or documentation in SKILL.md","fileCount":24,"zipByteSize":45593},{"version":"0.4.5","createdAt":"2026-02-20T04:59:05.877Z","changelog":"hashbox-plugin v0.4.5 - Updated dependencies in package.json and package-lock.json. - Internal changes to src/openclaw-entry.ts. - No documentation or usage changes.","fileCount":23,"zipByteSize":45253},{"version":"0.4.4","createdAt":"2026-02-20T04:53:16.004Z","changelog":"- Switched build output from TypeScript (`index.ts`) to compiled JavaScript (`index.js`). - Updated dependencies in `package.json` and `package-lock.json`. - Adjusted tests to support new code structure. - Removed source TypeScript entry, signaling JavaScript as the published entry point.","fileCount":23,"zipByteSize":45170},{"version":"0.4.3","createdAt":"2026-02-20T04:43:07.881Z","changelog":"- Updated dependencies in package.json and package-lock.json. - Made minor updates to PROGRESS.md. - No changes to core usage or API documented in SKILL.md.","fileCount":23,"zipByteSize":45157},{"version":"0.4.2","createdAt":"2026-02-20T04:17:10.720Z","changelog":"hashbox-plugin 0.4.2 - Migrated main TypeScript entry from index.js to index.ts. - Updated package dependencies in package.json and package-lock.json. - Expanded or updated test coverage in tests/clawhub-publishing.test.ts. - Removed old JavaScript entry file (index.js).","fileCount":23,"zipByteSize":44883},{"version":"0.4.1","createdAt":"2026-02-20T04:12:22.585Z","changelog":"- Added main entry point file: index.js. - Updated dependencies in package.json and package-lock.json. - Modified or added tests in tests/clawhub-publishing.test.ts. - No changes to public API or documentation.","fileCount":23,"zipByteSize":44889},{"version":"0.4.0","createdAt":"2026-02-20T04:00:20.301Z","changelog":"Version 0.4.0 - Added OpenClaw plugin manifest (openclaw.plugin.json) and new entry point (src/openclaw-entry.ts) for deeper OpenClaw integration. - Updated dependencies in package.json and package-lock.json. - Modified tests/clawhub-publishing.test.ts to support new plugin features.","fileCount":22,"zipByteSize":44605},{"version":"0.3.0","createdAt":"2026-02-20T02:25:28.627Z","changelog":"- Introduced new command listener and Firebase client modules for improved notification handling. - Added tests for command listener and Firebase client functionality. - Refactored core logic for better modularity in `src/index.ts` and related files. - Updated types and enhanced code structure for maintainability.","fileCount":20,"zipByteSize":42587}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1727tb3mjjns1rfvfmkhz0gcs88402q:hashbox-plugin","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s1727tb3mjjns1rfvfmkhz0gcs88402q:hashbox-plugin` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/w3h9uf/hashbox-plugin before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T15:14:45.853Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-w3h9uf-hashbox-plugin/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":null},"readme":"Skill: @hashingcorp/hashbox-plugin\n\nOwner: w3h9uf\n\nSummary: Connects an AI agent to the HashBox iOS app via Firebase webhook to send push notifications with articles, metrics, or audit data.\n\nTags: latest:0.4.10\n\nVersion history:\n\nv0.4.10 | 2026-02-21T01:09:06.891Z | auto\n\n- Added new entrypoint file: index.ts\n- Updated dependencies and lockfile in package.json and package-lock.json\n- Modified src/openclaw-entry.ts for internal improvements\n- Updated tests in tests/clawhub-publishing.test.ts\n- No changes to usage, setup, or documentation in SKILL.md\n\nv0.4.5 | 2026-02-20T04:59:05.877Z | auto\n\nhashbox-plugin v0.4.5\n\n- Updated dependencies in package.json and package-lock.json.\n- Internal changes to src/openclaw-entry.ts.\n- No documentation or usage changes.\n\nv0.4.4 | 2026-02-20T04:53:16.004Z | auto\n\n- Switched build output from TypeScript (`index.ts`) to compiled JavaScript (`index.js`).\n- Updated dependencies in `package.json` and `package-lock.json`.\n- Adjusted tests to support new code structure.\n- Removed source TypeScript entry, signaling JavaScript as the published entry point.\n\nv0.4.3 | 2026-02-20T04:43:07.881Z | auto\n\n- Updated dependencies in package.json and package-lock.json.\n- Made minor updates to PROGRESS.md.\n- No changes to core usage or API documented in SKILL.md.\n\nv0.4.2 | 2026-02-20T04:17:10.720Z | auto\n\nhashbox-plugin 0.4.2\n\n- Migrated main TypeScript entry from index.js to index.ts.\n- Updated package dependencies in package.json and package-lock.json.\n- Expanded or updated test coverage in tests/clawhub-publishing.test.ts.\n- Removed old JavaScript entry file (index.js).\n\nv0.4.1 | 2026-02-20T04:12:22.585Z | auto\n\n- Added main entry point file: index.js.\n- Updated dependencies in package.json and package-lock.json.\n- Modified or added tests in tests/clawhub-publishing.test.ts.\n- No changes to public API or documentation.\n\nv0.4.0 | 2026-02-20T04:00:20.301Z | auto\n\nVersion 0.4.0\n\n- Added OpenClaw plugin manifest (openclaw.plugin.json) and new entry point (src/openclaw-entry.ts) for deeper OpenClaw integration.\n- Updated dependencies in package.json and package-lock.json.\n- Modified tests/clawhub-publishing.test.ts to support new plugin features.\n\nv0.3.0 | 2026-02-20T02:25:28.627Z | auto\n\n- Introduced new command listener and Firebase client modules for improved notification handling.\n- Added tests for command listener and Firebase client functionality.\n- Refactored core logic for better modularity in `src/index.ts` and related files.\n- Updated types and enhanced code structure for maintainability.\n\nv0.2.0 | 2026-02-19T12:46:47.530Z | auto\n\n- BREAKING: MetricEntry and AuditEntry types were renamed to MetricItem and AuditFinding, with corresponding property changes.\n- Updated send_hashbox_notification API: payload parameter now accepts updated MetricItem[] and AuditFinding[] shapes.\n- Documentation and usage examples refreshed in SKILL.md to reflect the new data types and payload structure.\n- Package updated to version 0.2.0.\n\nv0.1.0 | 2026-02-19T03:43:08.623Z | auto\n\nInitial release of hashbox-plugin.\n\n- Integrates OpenClaw AI agents with the HashBox iOS app via Firebase webhook for push notifications.\n- Provides tools to configure the API connection (`configure_hashbox`) using an `HB-` token.\n- Supports sending three notification payload types (`article`, `metric`, and `audit`) with custom channels and content.\n- Local configuration storage in `hashbox_config.json`.\n- Detailed setup instructions and example usage included.\n\nArchive index:\n\nArchive v0.4.10: 24 files, 45593 bytes\n\nFiles: CLAUDE.md (717b), index.js (179b), index.ts (227b), openclaw.plugin.json (132b), package-lock.json (89384b), package.json (1125b), PROGRESS.md (5111b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4601b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2956b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (134b)\n\nFile v0.4.10:SKILL.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\n## Setup\n\n### Prerequisites\n\n1. A HashBox iOS app account\n2. A valid `HB-` prefixed API token from your HashBox dashboard\n\n### Configuration\n\nBefore using the plugin, configure it with your HashBox API token using the `configure_hashbox` tool:\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-your-token-here\"\n})\n```\n\nThis stores your configuration locally in `hashbox_config.json`.\n\n## Usage\n\n### configure_hashbox\n\nSets up the HashBox connection by saving your API token.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n**Example:**\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-abc123\"\n})\n```\n\n### send_hashbox_notification\n\nSends a push notification to the HashBox iOS app through the configured Firebase webhook.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Icon/emoji for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Content body (string for article) or structured data (array for metric/audit) |\n\n**Example (article):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n})\n```\n\n**Example (metric):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n})\n```\n\n**Example (audit):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n})\n```\n\n## Dependencies\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.10:README.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\nOr via ClawHub:\n\n```bash\nclawhub install hashbox-plugin\n```\n\n## Quick Start\n\n### 1. Configure your token\n\n```\nconfigure_hashbox({ \"token\": \"HB-your-token-here\" })\n```\n\n### 2. Send a notification\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"AI Trends\",\n  \"channelIcon\": \"🤖\",\n  \"title\": \"Daily Summary\",\n  \"contentOrData\": \"Here's what happened today...\"\n})\n```\n\n## Tools\n\n### configure_hashbox\n\nSaves your HashBox API token locally so the agent can push notifications.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n### send_hashbox_notification\n\nPushes curated news, summaries, or system metrics to your HashBox iOS app.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Single emoji icon for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Markdown string for articles, or structured data for metrics/audits |\n\n#### Payload Examples\n\n**Article:**\n```json\n{\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n}\n```\n\n**Metric:**\n```json\n{\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n}\n```\n\n**Audit:**\n```json\n{\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n}\n```\n\n## Programmatic Usage\n\n```typescript\nimport { hashBoxPlugin, configureHashBox, sendHashBoxNotification } from \"hashbox-plugin\";\n\n// Register with OpenClaw\nregisterPlugin(hashBoxPlugin);\n\n// Or use directly\nawait configureHashBox(\"HB-your-token\");\nconst result = await sendHashBoxNotification(\n  \"article\", \"AI Trends\", \"🤖\", \"Hello\", \"Test content\"\n);\nconsole.log(result.status); // 200\n```\n\n## Requirements\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.10:_meta.json\n\n{\n  \"ownerId\": \"kn79m8gc9nt66cgjxewsam144581em6d\",\n  \"slug\": \"hashbox-plugin\",\n  \"version\": \"0.4.10\",\n  \"publishedAt\": 1771636146891\n}\n\nFile v0.4.10:CLAUDE.md\n\n# CLAUDE.md — hashbox-plugin\n\n> System-level directives. All Claude Code agents MUST obey.\n\n## [Project Identity]\n- **Name**: hashbox-plugin\n- **Description**: OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\n- **Language**: TypeScript\n\n## [Tech Stack]\n| Layer | Technology |\n|---|---|\n| language | TypeScript |\n| framework | Node.js |\n| styling | N/A |\n| database | Local JSON file (hashbox_config.json) |\n| orm | N/A |\n\n## [Rules]\n1. Conventional Commits only.\n2. Write tests for all new code.\n3. No `any` types. No `console.log` in production.\n4. Update PROGRESS.md before every commit.\n5. Tasks flow: pending -> in-progress -> ready-for-test -> done.\n\nFile v0.4.10:PROGRESS.md\n\n# PROGRESS.md — hashbox-plugin\n\n**Last Updated**: 2026-02-20\n\n## [Current Epic]\n**Epic**: Core Implementation\n**Status**: DONE — gap fixes in-progress\n\n## [Todo Backlog]\n| # | Priority | Task | Notes |\n|---|---|---|---|\n\n## [In Progress]\n| Task | Agent | Started | Branch |\n|---|---|---|---|\n\n## [Completed]\n| Task | Completed | Commit |\n|---|---|---|\n| Migrate openclaw-entry.ts from Zod to TypeBox for OpenClaw SDK compatibility (v0.4.3) | 2026-02-20 | fix: migrate to typebox |\n| QA passed for 937bd6e8 | 2026-02-19 | test: QA passed for 937bd6e8 |\n| Refactor pushToHashBox.ts: add input validation for nested HashBoxRequest envelope | 2026-02-19 | task/937bd6e8 |\n| QA passed for fc1ec717 | 2026-02-19 | test: QA passed for fc1ec717 |\n| Refactor types.ts to match hash-box backend WebhookBody schema (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) | 2026-02-19 | task/fc1ec717 |\n| Add ClawHub publishing support (SKILL.md + openclaw manifest) | 2026-02-18 | feat: add ClawHub publishing support |\n| Implement complete hashbox-plugin package (types, setupHashBox, pushToHashBox, plugin entry, tests) | 2026-02-18 | task/b1aa6373 |\n| QA passed for b1aa6373 | 2026-02-18 | task/b1aa6373 |\n| Fix webhook URL and token passing in pushToHashBox.ts | 2026-02-19 | fix: correct webhook URL and token passing |\n| QA passed for e8722c9b | 2026-02-19 | test: QA passed for e8722c9b |\n| Fix MetricEntry/AuditEntry types to match spec, add channelName/channelIcon to HashBoxPayload | 2026-02-19 | task/20668827 |\n| QA passed for 20668827 | 2026-02-19 | test: QA passed for 20668827 |\n| Fix SKILL.md documentation to match actual API signatures | 2026-02-19 | task/f9659042 |\n| QA passed for f9659042 | 2026-02-19 | test: QA passed for f9659042 |\n| Resolve merge conflict markers in PROGRESS.md and update task statuses | 2026-02-19 | task/b8c6d87c |\n| QA passed for b8c6d87c | 2026-02-19 | test: QA passed for b8c6d87c |\n\n## 错题本 / Error Log\n> New entries prepend here.\n\n- **2026-02-20**: Migrated openclaw-entry.ts from Zod to TypeBox (@sinclair/typebox). Replaced z.object/z.string/z.enum/z.union/z.any with Type.Object/Type.String/Type.Union+Type.Literal/Type.Unknown. Fixed execute signature from `async (args) =>` to `async execute(_toolCallId, params)`. Removed zod dependency, added @sinclair/typebox. Bumped version to 0.4.3. 58/58 tests pass (5 test files). tsc --noEmit clean. npm run build clean.\n- **2026-02-19**: QA review passed for 937bd6e8. 31/31 tests pass (3 test files). pushToHashBox.ts refactored to add input validation (validateChannel, validatePayloadData) for HashBoxRequest envelope. 5 new validation tests added. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for fc1ec717. 26/26 tests pass (3 test files). types.ts refactored to match hash-box backend WebhookBody/Codable schema: new types (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) with nested channel/payload structure. pushToHashBox.ts, index.ts exports, tests, README.md, SKILL.md all updated consistently. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: Refactored types.ts to match hash-box backend WebhookBody/Codable schema. Removed old MetricEntry, AuditEntry, HashBoxPayload, PayloadType. Added ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest. Updated pushToHashBox.ts to build HashBoxRequest with nested channel/payload structure. Updated all tests. 26/26 tests pass. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for b8c6d87c. 26/26 tests pass (3 test files). PROGRESS.md merge conflicts resolved, task statuses updated. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for f9659042. 26/26 tests pass (3 test files). SKILL.md updated: removed stale `webhook_url` param from `configure_hashbox`, corrected `send_hashbox_notification` params to match actual 5-arg signature (`payloadType`, `channelName`, `channelIcon`, `title`, `contentOrData`), added examples for all payload types. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for 20668827. 26/26 tests pass (3 test files). MetricEntry: `unit` made optional, `trend` added. AuditEntry: replaced `field/oldValue/newValue` with `timestamp/event/severity/details`. HashBoxPayload includes `channelName`/`channelIcon`. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for e8722c9b. 26/26 tests pass (3 test files). Webhook URL corrected, token passed as query param, payload includes channelName/channelIcon. No `any` types, no `console.log` in production.\n- **2026-02-18**: QA review passed. 7/7 tests pass. No bugs, no `any` types, no `console.log` in production. TypeScript compiles cleanly.\n\n## [Blocked]\n| Task | Blocked By | Since |\n|---|---|---|\n\nFile v0.4.10:openclaw.plugin.json\n\n{\n  \"id\": \"hashbox-plugin\",\n  \"configSchema\": {\n    \"type\": \"object\",\n    \"additionalProperties\": false,\n    \"properties\": {}\n  }\n}\n\nFile v0.4.10:package-lock.json\n\n{\n  \"name\": \"hashbox-plugin\",\n  \"version\": \"0.4.10\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"hashbox-plugin\",\n      \"version\": \"0.4.10\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@sinclair/typebox\": \"^0.34.48\",\n        \"firebase\": \"^12.9.0\"\n      },\n      \"devDependencies\": {\n        \"@types/node\": \"^25.2.3\",\n        \"typescript\": \"^5.9.3\",\n        \"vitest\": \"^4.0.18\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@esbuild/aix-ppc64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz\",\n      \"integrity\": \"sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"aix\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz\",\n      \"integrity\": \"sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/freebsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/freebsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-arm\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz\",\n      \"integrity\": \"sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-ia32\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz\",\n      \"integrity\": \"sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==\",\n      \"cpu\": [\n        \"ia32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-loong64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz\",\n      \"integrity\": \"sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-mips64el\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz\",\n      \"integrity\": \"sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==\",\n      \"cpu\": [\n        \"mips64el\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-ppc64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz\",\n      \"integrity\": \"sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-riscv64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz\",\n      \"integrity\": \"sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-s390x\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz\",\n      \"integrity\": \"sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/netbsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"netbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/netbsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"netbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openbsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openbsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openharmony-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openharmony\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/sunos-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"sunos\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-ia32\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz\",\n      \"integrity\": \"sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==\",\n      \"cpu\": [\n        \"ia32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@firebase/ai\": {\n      \"version\": \"2.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/ai/-/ai-2.8.0.tgz\",\n      \"integrity\": \"sha512-grWYGFPsSo+pt+6CYeKR0kWnUfoLLS3xgWPvNrhAS5EPxl6xWq7+HjDZqX24yLneETyl45AVgDsTbVgxeWeRfg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\",\n        \"@firebase/app-types\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics\": {\n      \"version\": \"0.10.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz\",\n      \"integrity\": \"sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics-compat\": {\n      \"version\": \"0.2.25\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz\",\n      \"integrity\": \"sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/analytics\": \"0.10.19\",\n        \"@firebase/analytics-types\": \"0.8.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics-types\": {\n      \"version\": \"0.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz\",\n      \"integrity\": \"sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app\": {\n      \"version\": \"0.14.8\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app/-/app-0.14.8.tgz\",\n      \"integrity\": \"sha512-WiE9uCGRLUnShdjb9iP20sA3ToWrBbNXr14/N5mow7Nls9dmKgfGaGX5cynLvrltxq2OrDLh1VDNaUgsnS/k/g==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/app-check\": {\n      \"version\": \"0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz\",\n      \"integrity\": \"sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/app-check-compat\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz\",\n      \"integrity\": \"sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check\": \"0.11.0\",\n        \"@firebase/app-check-types\": \"0.5.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/app-check-interop-types\": {\n      \"version\": \"0.3.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz\",\n      \"integrity\": \"sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app-check-types\": {\n      \"version\": \"0.5.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz\",\n      \"integrity\": \"sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app-compat\": {\n      \"version\": \"0.5.8\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.8.tgz\",\n      \"integrity\": \"sha512-4De6SUZ36zozl9kh5rZSxKWULpgty27rMzZ6x+xkoo7+NWyhWyFdsdvhFsWhTw/9GGj0wXIcbTjwHYCUIUuHyg==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"@firebase/app\": \"0.14.8\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/app-types\": {\n      \"version\": \"0.9.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz\",\n      \"integrity\": \"sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true\n    },\n    \"node_modules/@firebase/auth\": {\n      \"version\": \"1.12.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth/-/auth-1.12.0.tgz\",\n      \"integrity\": \"sha512-zkvLpsrxynWHk07qGrUDfCSqKf4AvfZGEqJ7mVCtYGjNNDbGE71k0Yn84rg8QEZu4hQw1BC0qDEHzpNVBcSVmA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\",\n        \"@react-native-async-storage/async-storage\": \"^2.2.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"@react-native-async-storage/async-storage\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@firebase/auth-compat\": {\n      \"version\": \"0.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.2.tgz\",\n      \"integrity\": \"sha512-8UhCzF6pav9bw/eXA8Zy1QAKssPRYEYXaWagie1ewLTwHkXv6bKp/j6/IwzSYQP67sy/BMFXIFaCCsoXzFLr7A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/auth\": \"1.12.0\",\n        \"@firebase/auth-types\": \"0.13.0\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/auth-interop-types\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz\",\n      \"integrity\": \"sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/auth-types\": {\n      \"version\": \"0.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz\",\n      \"integrity\": \"sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/component\": {\n      \"version\": \"0.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz\",\n      \"integrity\": \"sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/data-connect\": {\n      \"version\": \"0.3.12\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.12.tgz\",\n      \"integrity\": \"sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/database\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz\",\n      \"integrity\": \"sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"faye-websocket\": \"0.11.4\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/database-compat\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz\",\n      \"integrity\": \"sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/database\": \"1.1.0\",\n        \"@firebase/database-types\": \"1.0.16\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/database-types\": {\n      \"version\": \"1.0.16\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz\",\n      \"integrity\": \"sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-types\": \"0.9.3\",\n        \"@firebase/util\": \"1.13.0\"\n      }\n    },\n    \"node_modules/@firebase/firestore\": {\n      \"version\": \"4.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore/-/firestore-4.11.0.tgz\",\n      \"integrity\": \"sha512-Zb88s8rssBd0J2Tt+NUXMPt2sf+Dq7meatKiJf5t9oto1kZ8w9gK59Koe1uPVbaKfdgBp++N/z0I4G/HamyEhg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"@firebase/webchannel-wrapper\": \"1.0.5\",\n        \"@grpc/grpc-js\": \"~1.9.0\",\n        \"@grpc/proto-loader\": \"^0.7.8\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/firestore-compat\": {\n      \"version\": \"0.4.5\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.5.tgz\",\n      \"integrity\": \"sha512-yVX1CkVvqBI4qbA56uZo42xFA4TNU0ICQ+9AFDvYq9U9Xu6iAx9lFDAk/tN+NGereQQXXCSnpISwc/oxsQqPLA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/firestore\": \"4.11.0\",\n        \"@firebase/firestore-types\": \"3.0.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/firestore-types\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz\",\n      \"integrity\": \"sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/functions\": {\n      \"version\": \"0.13.1\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions/-/functions-0.13.1.tgz\",\n      \"integrity\": \"sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/messaging-interop-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/functions-compat\": {\n      \"version\": \"0.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.1.tgz\",\n      \"integrity\": \"sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/functions\": \"0.13.1\",\n        \"@firebase/functions-types\": \"0.6.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/functions-types\": {\n      \"version\": \"0.6.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz\",\n      \"integrity\": \"sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/installations\": {\n      \"version\": \"0.6.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz\",\n      \"integrity\": \"sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/installations-compat\": {\n      \"version\": \"0.2.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz\",\n      \"integrity\": \"sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/installations-types\": \"0.5.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/installations-types\": {\n      \"version\": \"0.5.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz\",\n      \"integrity\": \"sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/logger\": {\n      \"version\": \"0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz\",\n      \"integrity\": \"sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/messaging\": {\n      \"version\": \"0.12.23\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz\",\n      \"integrity\": \"sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/messaging-interop-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/messaging-compat\": {\n      \"version\": \"0.2.23\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz\",\n      \"integrity\": \"sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/messaging\": \"0.12.23\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/messaging-interop-types\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz\",\n      \"integrity\": \"sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/performance\": {\n      \"version\": \"0.7.9\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance/-/performance-0.7.9.tgz\",\n      \"integrity\": \"sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\",\n        \"web-vitals\": \"^4.2.4\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/performance-compat\": {\n      \"version\": \"0.2.22\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.22.tgz\",\n      \"integrity\": \"sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/performance\": \"0.7.9\",\n        \"@firebase/performance-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/performance-types\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz\",\n      \"integrity\": \"sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/remote-config\": {\n      \"version\": \"0.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.8.0.tgz\",\n      \"integrity\": \"sha512-sJz7C2VACeE257Z/3kY9Ap2WXbFsgsDLfaGfZmmToKAK39ipXxFan+vzB9CSbF6mP7bzjyzEnqPcMXhAnYE6fQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/remote-config-compat\": {\n      \"version\": \"0.2.21\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.21.tgz\",\n      \"integrity\": \"sha512-9+lm0eUycxbu8GO25JfJe4s6R2xlDqlVt0CR6CvN9E6B4AFArEV4qfLoDVRgIEB7nHKwvH2nYRocPWfmjRQTnw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/remote-config\": \"0.8.0\",\n        \"@firebase/remote-config-types\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/remote-config-types\": {\n      \"version\": \"0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz\",\n      \"integrity\": \"sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/storage\": {\n      \"version\": \"0.14.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz\",\n      \"integrity\": \"sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/storage-compat\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz\",\n      \"integrity\": \"sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/storage\": \"0.14.0\",\n        \"@firebase/storage-types\": \"0.8.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/storage-types\": {\n      \"version\": \"0.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz\",\n      \"integrity\": \"sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/util\": {\n      \"version\": \"1.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz\",\n      \"integrity\": \"sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==\",\n      \"hasInstallScript\": true,\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/webchannel-wrapper\": {\n      \"version\": \"1.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz\",\n      \"integrity\": \"sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@grpc/grpc-js\": {\n      \"version\": \"1.9.15\",\n      \"resolved\": \"https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz\",\n      \"integrity\": \"sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@grpc/proto-loader\": \"^0.7.8\",\n        \"@types/node\": \">=12.12.47\"\n      },\n      \"engines\": {\n        \"node\": \"^8.13.0 || >=10.10.0\"\n      }\n    },\n    \"node_modules/@grpc/proto-loader\": {\n      \"version\": \"0.7.15\",\n      \"resolved\": \"https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz\",\n      \"integrity\": \"sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"lodash.camelcase\": \"^4.3.0\",\n        \"long\": \"^5.0.0\",\n        \"protobufjs\": \"^7.2.5\",\n        \"yargs\": \"^17.7.2\"\n      },\n      \"bin\": {\n        \"proto-loader-gen-types\": \"build/bin/proto-loader-gen-types.js\"\n      },\n      \"engines\": {\n        \"node\": \">=6\"\n      }\n    },\n    \"node_modules/@jridgewell/sourcemap-codec\": {\n      \"version\": \"1.5.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\",\n      \"integrity\": \"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@protobufjs/aspromise\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz\",\n      \"integrity\": \"sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/base64\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz\",\n      \"integrity\": \"sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/codegen\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz\",\n      \"integrity\": \"sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/eventemitter\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz\",\n      \"integrity\": \"sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/fetch\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz\",\n      \"integrity\": \"sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==\",\n      \"license\": \"BSD-3-Clause\",\n      \"dependencies\": {\n        \"@protobufjs/aspromise\": \"^1.1.1\",\n        \"@protobufjs/inquire\": \"^1.1.0\"\n      }\n    },\n    \"node_modules/@protobufjs/float\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz\",\n      \"integrity\": \"sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/inquire\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz\",\n      \"integrity\": \"sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/path\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz\",\n      \"integrity\": \"sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/pool\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz\",\n      \"integrity\": \"sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/utf8\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz\",\n      \"integrity\": \"sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@rollup/rollup-android-arm-eabi\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.58.0.tgz\",\n      \"integrity\": \"sha512-mr0tmS/4FoVk1cnaeN244A/wjvGDNItZKR8hRhnmCzygyRXYtKF5jVDSIILR1U97CTzAYmbgIj/Dukg62ggG5w==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-android-arm64\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.58.0.tgz\",\n      \"integrity\": \"sha512-+s++dbp+/RTte62mQD9wLSbiMTV+xr/PeRJEc/sFZFSBRlHPNPVaf5FXlzAL77Mr8FtSfQqCN+I598M8U41ccQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-darwin-arm64\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.58.0.tgz\",\n      \"integrity\": \"sha512-MFWBwTcYs0jZbINQBXHfSrpSQJq3IUOakcKPzfeSznONop14Pxuqa0Kg19GD0rNBMPQI2tFtu3UzapZpH0Uc1Q==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-darwin-x64\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.58.0.tgz\",\n      \"integrity\": \"sha512-yiKJY7pj9c9JwzuKYLFaDZw5gma3fI9bkPEIyofvVfsPqjCWPglSHdpdwXpKGvDeYDms3Qal8qGMEHZ1M/4Udg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-freebsd-arm64\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.58.0.tgz\",\n      \"integrity\": \"sha512-x97kCoBh5MOevpn/CNK9W1x8BEzO238541BGWBc315uOlN0AD/ifZ1msg+ZQB05Ux+VF6EcYqpiagfLJ8U3LvQ==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-freebsd-x64\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.58.0.tgz\",\n      \"integrity\": \"sha512-Aa8jPoZ6IQAG2eIrcXPpjRcMjROMFxCt1UYPZZtCxRV68WkuSigYtQ/7Zwrcr2IvtNJo7T2JfDXyMLxq5L4Jlg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm-gnueabihf\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.58.0.tgz\",\n      \"integrity\": \"sha512-Ob8YgT5kD/lSIYW2Rcngs5kNB/44Q2RzBSPz9brf2WEtcGR7/f/E9HeHn1wYaAwKBni+bdXEwgHvUd0x12lQSA==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm-musleabihf\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.58.0.tgz\",\n      \"integrity\": \"sha512-K+RI5oP1ceqoadvNt1FecL17Qtw/n9BgRSzxif3rTL2QlIu88ccvY+Y9nnHe/cmT5zbH9+bpiJuG1mGHRVwF4Q==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm64-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-T+17JAsCKUjmbopcKepJjHWHXSjeW7O5PL7lEFaeQmiVyw4kkc5/lyYKzrv6ElWRX/MrEWfPiJWqbTvfIvjM1Q==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm64-musl\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.58.0.tgz\",\n      \"integrity\": \"sha512-cCePktb9+6R9itIJdeCFF9txPU7pQeEHB5AbHu/MKsfH/k70ZtOeq1k4YAtBv9Z7mmKI5/wOLYjQ+B9QdxR6LA==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-loong64-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-iekUaLkfliAsDl4/xSdoCJ1gnnIXvoNz85C8U8+ZxknM5pBStfZjeXgB8lXobDQvvPRCN8FPmmuTtH+z95HTmg==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-loong64-musl\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.58.0.tgz\",\n      \"integrity\": \"sha512-68ofRgJNl/jYJbxFjCKE7IwhbfxOl1muPN4KbIqAIe32lm22KmU7E8OPvyy68HTNkI2iV/c8y2kSPSm2mW/Q9Q==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-ppc64-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-dpz8vT0i+JqUKuSNPCP5SYyIV2Lh0sNL1+FhM7eLC457d5B9/BC3kDPp5BBftMmTNsBarcPcoz5UGSsnCiw4XQ==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-ppc64-musl\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.58.0.tgz\",\n      \"integrity\": \"sha512-4gdkkf9UJ7tafnweBCR/mk4jf3Jfl0cKX9Np80t5i78kjIH0ZdezUv/JDI2VtruE5lunfACqftJ8dIMGN4oHew==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-riscv64-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-YFS4vPnOkDTD/JriUeeZurFYoJhPf9GQQEF/v4lltp3mVcBmnsAdjEWhr2cjUCZzZNzxCG0HZOvJU44UGHSdzw==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-riscv64-musl\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.58.0.tgz\",\n      \"integrity\": \"sha512-x2xgZlFne+QVNKV8b4wwaCS8pwq3y14zedZ5DqLzjdRITvreBk//4Knbcvm7+lWmms9V9qFp60MtUd0/t/PXPw==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-s390x-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-jIhrujyn4UnWF8S+DHSkAkDEO3hLX0cjzxJZPLF80xFyzyUIYgSMRcYQ3+uqEoyDD2beGq7Dj7edi8OnJcS/hg==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-x64-gnu\": {\n      \"version\": \"4.58.0\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.58.0.tgz\",\n      \"integrity\": \"sha512-+410Srdoh78MKSJxTQ+hZ/Mx+ajd6RjjPwBPNd0R3J9FtL6ZA0GqiiyNjCO9In0IzZkCNrpGymSfn+kgyPQocg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\n\nFile v0.4.10:package.json\n\n{\n  \"name\": \"hashbox-plugin\",\n  \"version\": \"0.4.10\",\n  \"description\": \"OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\",\n  \"main\": \"index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"tsc\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"lint\": \"tsc --noEmit\"\n  },\n  \"keywords\": [\n    \"openclaw\",\n    \"plugin\",\n    \"hashbox\",\n    \"push-notifications\",\n    \"firebase\"\n  ],\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/node\": \"^25.2.3\",\n    \"typescript\": \"^5.9.3\",\n    \"vitest\": \"^4.0.18\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"index.ts\",\n    \"src\",\n    \"dist\",\n    \"openclaw.plugin.json\",\n    \"README.md\",\n    \"SKILL.md\"\n  ],\n  \"openclaw\": {\n    \"extensions\": \"./dist/openclaw-entry.js\",\n    \"slots\": [\n      \"tool\"\n    ],\n    \"catalog\": {\n      \"name\": \"hashbox-plugin\",\n      \"description\": \"Connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\"\n    }\n  },\n  \"dependencies\": {\n    \"@sinclair/typebox\": \"^0.34.48\",\n    \"firebase\": \"^12.9.0\"\n  }\n}\n\nFile v0.4.10:tsconfig.json\n\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"Node16\",\n    \"moduleResolution\": \"Node16\",\n    \"strict\": true,\n    \"outDir\": \"dist\",\n    \"rootDir\": \"src\",\n    \"declaration\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \"dist\", \"tests\"]\n}\n\nArchive v0.4.5: 23 files, 45253 bytes\n\nFiles: CLAUDE.md (717b), index.js (179b), openclaw.plugin.json (132b), package-lock.json (89382b), package.json (1097b), PROGRESS.md (5111b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4535b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2698b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nFile v0.4.5:SKILL.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\n## Setup\n\n### Prerequisites\n\n1. A HashBox iOS app account\n2. A valid `HB-` prefixed API token from your HashBox dashboard\n\n### Configuration\n\nBefore using the plugin, configure it with your HashBox API token using the `configure_hashbox` tool:\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-your-token-here\"\n})\n```\n\nThis stores your configuration locally in `hashbox_config.json`.\n\n## Usage\n\n### configure_hashbox\n\nSets up the HashBox connection by saving your API token.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n**Example:**\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-abc123\"\n})\n```\n\n### send_hashbox_notification\n\nSends a push notification to the HashBox iOS app through the configured Firebase webhook.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Icon/emoji for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Content body (string for article) or structured data (array for metric/audit) |\n\n**Example (article):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n})\n```\n\n**Example (metric):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n})\n```\n\n**Example (audit):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n})\n```\n\n## Dependencies\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.5:README.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\nOr via ClawHub:\n\n```bash\nclawhub install hashbox-plugin\n```\n\n## Quick Start\n\n### 1. Configure your token\n\n```\nconfigure_hashbox({ \"token\": \"HB-your-token-here\" })\n```\n\n### 2. Send a notification\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"AI Trends\",\n  \"channelIcon\": \"🤖\",\n  \"title\": \"Daily Summary\",\n  \"contentOrData\": \"Here's what happened today...\"\n})\n```\n\n## Tools\n\n### configure_hashbox\n\nSaves your HashBox API token locally so the agent can push notifications.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n### send_hashbox_notification\n\nPushes curated news, summaries, or system metrics to your HashBox iOS app.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Single emoji icon for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Markdown string for articles, or structured data for metrics/audits |\n\n#### Payload Examples\n\n**Article:**\n```json\n{\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n}\n```\n\n**Metric:**\n```json\n{\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n}\n```\n\n**Audit:**\n```json\n{\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n}\n```\n\n## Programmatic Usage\n\n```typescript\nimport { hashBoxPlugin, configureHashBox, sendHashBoxNotification } from \"hashbox-plugin\";\n\n// Register with OpenClaw\nregisterPlugin(hashBoxPlugin);\n\n// Or use directly\nawait configureHashBox(\"HB-your-token\");\nconst result = await sendHashBoxNotification(\n  \"article\", \"AI Trends\", \"🤖\", \"Hello\", \"Test content\"\n);\nconsole.log(result.status); // 200\n```\n\n## Requirements\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.5:_meta.json\n\n{\n  \"ownerId\": \"kn79m8gc9nt66cgjxewsam144581em6d\",\n  \"slug\": \"hashbox-plugin\",\n  \"version\": \"0.4.5\",\n  \"publishedAt\": 1771563545877\n}\n\nFile v0.4.5:CLAUDE.md\n\n# CLAUDE.md — hashbox-plugin\n\n> System-level directives. All Claude Code agents MUST obey.\n\n## [Project Identity]\n- **Name**: hashbox-plugin\n- **Description**: OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\n- **Language**: TypeScript\n\n## [Tech Stack]\n| Layer | Technology |\n|---|---|\n| language | TypeScript |\n| framework | Node.js |\n| styling | N/A |\n| database | Local JSON file (hashbox_config.json) |\n| orm | N/A |\n\n## [Rules]\n1. Conventional Commits only.\n2. Write tests for all new code.\n3. No `any` types. No `console.log` in production.\n4. Update PROGRESS.md before every commit.\n5. Tasks flow: pending -> in-progress -> ready-for-test -> done.\n\nFile v0.4.5:PROGRESS.md\n\n# PROGRESS.md — hashbox-plugin\n\n**Last Updated**: 2026-02-20\n\n## [Current Epic]\n**Epic**: Core Implementation\n**Status**: DONE — gap fixes in-progress\n\n## [Todo Backlog]\n| # | Priority | Task | Notes |\n|---|---|---|---|\n\n## [In Progress]\n| Task | Agent | Started | Branch |\n|---|---|---|---|\n\n## [Completed]\n| Task | Completed | Commit |\n|---|---|---|\n| Migrate openclaw-entry.ts from Zod to TypeBox for OpenClaw SDK compatibility (v0.4.3) | 2026-02-20 | fix: migrate to typebox |\n| QA passed for 937bd6e8 | 2026-02-19 | test: QA passed for 937bd6e8 |\n| Refactor pushToHashBox.ts: add input validation for nested HashBoxRequest envelope | 2026-02-19 | task/937bd6e8 |\n| QA passed for fc1ec717 | 2026-02-19 | test: QA passed for fc1ec717 |\n| Refactor types.ts to match hash-box backend WebhookBody schema (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) | 2026-02-19 | task/fc1ec717 |\n| Add ClawHub publishing support (SKILL.md + openclaw manifest) | 2026-02-18 | feat: add ClawHub publishing support |\n| Implement complete hashbox-plugin package (types, setupHashBox, pushToHashBox, plugin entry, tests) | 2026-02-18 | task/b1aa6373 |\n| QA passed for b1aa6373 | 2026-02-18 | task/b1aa6373 |\n| Fix webhook URL and token passing in pushToHashBox.ts | 2026-02-19 | fix: correct webhook URL and token passing |\n| QA passed for e8722c9b | 2026-02-19 | test: QA passed for e8722c9b |\n| Fix MetricEntry/AuditEntry types to match spec, add channelName/channelIcon to HashBoxPayload | 2026-02-19 | task/20668827 |\n| QA passed for 20668827 | 2026-02-19 | test: QA passed for 20668827 |\n| Fix SKILL.md documentation to match actual API signatures | 2026-02-19 | task/f9659042 |\n| QA passed for f9659042 | 2026-02-19 | test: QA passed for f9659042 |\n| Resolve merge conflict markers in PROGRESS.md and update task statuses | 2026-02-19 | task/b8c6d87c |\n| QA passed for b8c6d87c | 2026-02-19 | test: QA passed for b8c6d87c |\n\n## 错题本 / Error Log\n> New entries prepend here.\n\n- **2026-02-20**: Migrated openclaw-entry.ts from Zod to TypeBox (@sinclair/typebox). Replaced z.object/z.string/z.enum/z.union/z.any with Type.Object/Type.String/Type.Union+Type.Literal/Type.Unknown. Fixed execute signature from `async (args) =>` to `async execute(_toolCallId, params)`. Removed zod dependency, added @sinclair/typebox. Bumped version to 0.4.3. 58/58 tests pass (5 test files). tsc --noEmit clean. npm run build clean.\n- **2026-02-19**: QA review passed for 937bd6e8. 31/31 tests pass (3 test files). pushToHashBox.ts refactored to add input validation (validateChannel, validatePayloadData) for HashBoxRequest envelope. 5 new validation tests added. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for fc1ec717. 26/26 tests pass (3 test files). types.ts refactored to match hash-box backend WebhookBody/Codable schema: new types (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) with nested channel/payload structure. pushToHashBox.ts, index.ts exports, tests, README.md, SKILL.md all updated consistently. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: Refactored types.ts to match hash-box backend WebhookBody/Codable schema. Removed old MetricEntry, AuditEntry, HashBoxPayload, PayloadType. Added ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest. Updated pushToHashBox.ts to build HashBoxRequest with nested channel/payload structure. Updated all tests. 26/26 tests pass. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for b8c6d87c. 26/26 tests pass (3 test files). PROGRESS.md merge conflicts resolved, task statuses updated. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for f9659042. 26/26 tests pass (3 test files). SKILL.md updated: removed stale `webhook_url` param from `configure_hashbox`, corrected `send_hashbox_notification` params to match actual 5-arg signature (`payloadType`, `channelName`, `channelIcon`, `title`, `contentOrData`), added examples for all payload types. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for 20668827. 26/26 tests pass (3 test files). MetricEntry: `unit` made optional, `trend` added. AuditEntry: replaced `field/oldValue/newValue` with `timestamp/event/severity/details`. HashBoxPayload includes `channelName`/`channelIcon`. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for e8722c9b. 26/26 tests pass (3 test files). Webhook URL corrected, token passed as query param, payload includes channelName/channelIcon. No `any` types, no `console.log` in production.\n- **2026-02-18**: QA review passed. 7/7 tests pass. No bugs, no `any` types, no `console.log` in production. TypeScript compiles cleanly.\n\n## [Blocked]\n| Task | Blocked By | Since |\n|---|---|---|\n\nFile v0.4.5:openclaw.plugin.json\n\n{\n  \"id\": \"hashbox-plugin\",\n  \"configSchema\": {\n    \"type\": \"object\",\n    \"additionalProperties\": false,\n    \"properties\": {}\n  }\n}\n\nFile v0.4.5:package-lock.json\n\n{\n  \"name\": \"hashbox-plugin\",\n  \"version\": \"0.4.5\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"hashbox-plugin\",\n      \"version\": \"0.4.5\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@sinclair/typebox\": \"^0.34.48\",\n        \"firebase\": \"^12.9.0\"\n      },\n      \"devDependencies\": {\n        \"@types/node\": \"^25.2.3\",\n        \"typescript\": \"^5.9.3\",\n        \"vitest\": \"^4.0.18\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@esbuild/aix-ppc64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz\",\n      \"integrity\": \"sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"aix\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz\",\n      \"integrity\": \"sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/freebsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/freebsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-arm\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz\",\n      \"integrity\": \"sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-ia32\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz\",\n      \"integrity\": \"sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==\",\n      \"cpu\": [\n        \"ia32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-loong64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz\",\n      \"integrity\": \"sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-mips64el\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz\",\n      \"integrity\": \"sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==\",\n      \"cpu\": [\n        \"mips64el\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-ppc64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz\",\n      \"integrity\": \"sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-riscv64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz\",\n      \"integrity\": \"sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-s390x\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz\",\n      \"integrity\": \"sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/linux-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/netbsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"netbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/netbsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"netbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openbsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openbsd-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openbsd\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/openharmony-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"openharmony\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/sunos-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"sunos\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-ia32\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz\",\n      \"integrity\": \"sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==\",\n      \"cpu\": [\n        \"ia32\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/win32-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"win32\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@firebase/ai\": {\n      \"version\": \"2.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/ai/-/ai-2.8.0.tgz\",\n      \"integrity\": \"sha512-grWYGFPsSo+pt+6CYeKR0kWnUfoLLS3xgWPvNrhAS5EPxl6xWq7+HjDZqX24yLneETyl45AVgDsTbVgxeWeRfg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\",\n        \"@firebase/app-types\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics\": {\n      \"version\": \"0.10.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics/-/analytics-0.10.19.tgz\",\n      \"integrity\": \"sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics-compat\": {\n      \"version\": \"0.2.25\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics-compat/-/analytics-compat-0.2.25.tgz\",\n      \"integrity\": \"sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/analytics\": \"0.10.19\",\n        \"@firebase/analytics-types\": \"0.8.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/analytics-types\": {\n      \"version\": \"0.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/analytics-types/-/analytics-types-0.8.3.tgz\",\n      \"integrity\": \"sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app\": {\n      \"version\": \"0.14.8\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app/-/app-0.14.8.tgz\",\n      \"integrity\": \"sha512-WiE9uCGRLUnShdjb9iP20sA3ToWrBbNXr14/N5mow7Nls9dmKgfGaGX5cynLvrltxq2OrDLh1VDNaUgsnS/k/g==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/app-check\": {\n      \"version\": \"0.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check/-/app-check-0.11.0.tgz\",\n      \"integrity\": \"sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/app-check-compat\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-compat/-/app-check-compat-0.4.0.tgz\",\n      \"integrity\": \"sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check\": \"0.11.0\",\n        \"@firebase/app-check-types\": \"0.5.3\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/app-check-interop-types\": {\n      \"version\": \"0.3.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz\",\n      \"integrity\": \"sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app-check-types\": {\n      \"version\": \"0.5.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-check-types/-/app-check-types-0.5.3.tgz\",\n      \"integrity\": \"sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/app-compat\": {\n      \"version\": \"0.5.8\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.5.8.tgz\",\n      \"integrity\": \"sha512-4De6SUZ36zozl9kh5rZSxKWULpgty27rMzZ6x+xkoo7+NWyhWyFdsdvhFsWhTw/9GGj0wXIcbTjwHYCUIUuHyg==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"@firebase/app\": \"0.14.8\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/app-types\": {\n      \"version\": \"0.9.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz\",\n      \"integrity\": \"sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==\",\n      \"license\": \"Apache-2.0\",\n      \"peer\": true\n    },\n    \"node_modules/@firebase/auth\": {\n      \"version\": \"1.12.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth/-/auth-1.12.0.tgz\",\n      \"integrity\": \"sha512-zkvLpsrxynWHk07qGrUDfCSqKf4AvfZGEqJ7mVCtYGjNNDbGE71k0Yn84rg8QEZu4hQw1BC0qDEHzpNVBcSVmA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\",\n        \"@react-native-async-storage/async-storage\": \"^2.2.0\"\n      },\n      \"peerDependenciesMeta\": {\n        \"@react-native-async-storage/async-storage\": {\n          \"optional\": true\n        }\n      }\n    },\n    \"node_modules/@firebase/auth-compat\": {\n      \"version\": \"0.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.6.2.tgz\",\n      \"integrity\": \"sha512-8UhCzF6pav9bw/eXA8Zy1QAKssPRYEYXaWagie1ewLTwHkXv6bKp/j6/IwzSYQP67sy/BMFXIFaCCsoXzFLr7A==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/auth\": \"1.12.0\",\n        \"@firebase/auth-types\": \"0.13.0\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/auth-interop-types\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz\",\n      \"integrity\": \"sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/auth-types\": {\n      \"version\": \"0.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.13.0.tgz\",\n      \"integrity\": \"sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/component\": {\n      \"version\": \"0.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz\",\n      \"integrity\": \"sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/data-connect\": {\n      \"version\": \"0.3.12\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/data-connect/-/data-connect-0.3.12.tgz\",\n      \"integrity\": \"sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/database\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz\",\n      \"integrity\": \"sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"faye-websocket\": \"0.11.4\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/database-compat\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz\",\n      \"integrity\": \"sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/database\": \"1.1.0\",\n        \"@firebase/database-types\": \"1.0.16\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/database-types\": {\n      \"version\": \"1.0.16\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz\",\n      \"integrity\": \"sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-types\": \"0.9.3\",\n        \"@firebase/util\": \"1.13.0\"\n      }\n    },\n    \"node_modules/@firebase/firestore\": {\n      \"version\": \"4.11.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore/-/firestore-4.11.0.tgz\",\n      \"integrity\": \"sha512-Zb88s8rssBd0J2Tt+NUXMPt2sf+Dq7meatKiJf5t9oto1kZ8w9gK59Koe1uPVbaKfdgBp++N/z0I4G/HamyEhg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"@firebase/webchannel-wrapper\": \"1.0.5\",\n        \"@grpc/grpc-js\": \"~1.9.0\",\n        \"@grpc/proto-loader\": \"^0.7.8\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/firestore-compat\": {\n      \"version\": \"0.4.5\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.4.5.tgz\",\n      \"integrity\": \"sha512-yVX1CkVvqBI4qbA56uZo42xFA4TNU0ICQ+9AFDvYq9U9Xu6iAx9lFDAk/tN+NGereQQXXCSnpISwc/oxsQqPLA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/firestore\": \"4.11.0\",\n        \"@firebase/firestore-types\": \"3.0.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/firestore-types\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.3.tgz\",\n      \"integrity\": \"sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/functions\": {\n      \"version\": \"0.13.1\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions/-/functions-0.13.1.tgz\",\n      \"integrity\": \"sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/app-check-interop-types\": \"0.3.3\",\n        \"@firebase/auth-interop-types\": \"0.2.4\",\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/messaging-interop-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/functions-compat\": {\n      \"version\": \"0.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.4.1.tgz\",\n      \"integrity\": \"sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/functions\": \"0.13.1\",\n        \"@firebase/functions-types\": \"0.6.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/functions-types\": {\n      \"version\": \"0.6.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.6.3.tgz\",\n      \"integrity\": \"sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/installations\": {\n      \"version\": \"0.6.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations/-/installations-0.6.19.tgz\",\n      \"integrity\": \"sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/installations-compat\": {\n      \"version\": \"0.2.19\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations-compat/-/installations-compat-0.2.19.tgz\",\n      \"integrity\": \"sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/installations-types\": \"0.5.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/installations-types\": {\n      \"version\": \"0.5.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.5.3.tgz\",\n      \"integrity\": \"sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/logger\": {\n      \"version\": \"0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz\",\n      \"integrity\": \"sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/messaging\": {\n      \"version\": \"0.12.23\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging/-/messaging-0.12.23.tgz\",\n      \"integrity\": \"sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/messaging-interop-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"idb\": \"7.1.1\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/messaging-compat\": {\n      \"version\": \"0.2.23\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging-compat/-/messaging-compat-0.2.23.tgz\",\n      \"integrity\": \"sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/messaging\": \"0.12.23\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/messaging-interop-types\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/messaging-interop-types/-/messaging-interop-types-0.2.3.tgz\",\n      \"integrity\": \"sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/performance\": {\n      \"version\": \"0.7.9\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance/-/performance-0.7.9.tgz\",\n      \"integrity\": \"sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\",\n        \"web-vitals\": \"^4.2.4\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/performance-compat\": {\n      \"version\": \"0.2.22\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance-compat/-/performance-compat-0.2.22.tgz\",\n      \"integrity\": \"sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/performance\": \"0.7.9\",\n        \"@firebase/performance-types\": \"0.2.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/performance-types\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.2.3.tgz\",\n      \"integrity\": \"sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/remote-config\": {\n      \"version\": \"0.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config/-/remote-config-0.8.0.tgz\",\n      \"integrity\": \"sha512-sJz7C2VACeE257Z/3kY9Ap2WXbFsgsDLfaGfZmmToKAK39ipXxFan+vzB9CSbF6mP7bzjyzEnqPcMXhAnYE6fQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/installations\": \"0.6.19\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/remote-config-compat\": {\n      \"version\": \"0.2.21\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config-compat/-/remote-config-compat-0.2.21.tgz\",\n      \"integrity\": \"sha512-9+lm0eUycxbu8GO25JfJe4s6R2xlDqlVt0CR6CvN9E6B4AFArEV4qfLoDVRgIEB7nHKwvH2nYRocPWfmjRQTnw==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/logger\": \"0.5.0\",\n        \"@firebase/remote-config\": \"0.8.0\",\n        \"@firebase/remote-config-types\": \"0.5.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/remote-config-types\": {\n      \"version\": \"0.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/remote-config-types/-/remote-config-types-0.5.0.tgz\",\n      \"integrity\": \"sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@firebase/storage\": {\n      \"version\": \"0.14.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage/-/storage-0.14.0.tgz\",\n      \"integrity\": \"sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/storage-compat\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.4.0.tgz\",\n      \"integrity\": \"sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@firebase/component\": \"0.7.0\",\n        \"@firebase/storage\": \"0.14.0\",\n        \"@firebase/storage-types\": \"0.8.3\",\n        \"@firebase/util\": \"1.13.0\",\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      },\n      \"peerDependencies\": {\n        \"@firebase/app-compat\": \"0.x\"\n      }\n    },\n    \"node_modules/@firebase/storage-types\": {\n      \"version\": \"0.8.3\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.8.3.tgz\",\n      \"integrity\": \"sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==\",\n      \"license\": \"Apache-2.0\",\n      \"peerDependencies\": {\n        \"@firebase/app-types\": \"0.x\",\n        \"@firebase/util\": \"1.x\"\n      }\n    },\n    \"node_modules/@firebase/util\": {\n      \"version\": \"1.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz\",\n      \"integrity\": \"sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==\",\n      \"hasInstallScript\": true,\n      \"license\": \"Apache-2.0\",\n      \"peer\": true,\n      \"dependencies\": {\n        \"tslib\": \"^2.1.0\"\n      },\n      \"engines\": {\n        \"node\": \">=20.0.0\"\n      }\n    },\n    \"node_modules/@firebase/webchannel-wrapper\": {\n      \"version\": \"1.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-1.0.5.tgz\",\n      \"integrity\": \"sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==\",\n      \"license\": \"Apache-2.0\"\n    },\n    \"node_modules/@grpc/grpc-js\": {\n      \"version\": \"1.9.15\",\n      \"resolved\": \"https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.15.tgz\",\n      \"integrity\": \"sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"@grpc/proto-loader\": \"^0.7.8\",\n        \"@types/node\": \">=12.12.47\"\n      },\n      \"engines\": {\n        \"node\": \"^8.13.0 || >=10.10.0\"\n      }\n    },\n    \"node_modules/@grpc/proto-loader\": {\n      \"version\": \"0.7.15\",\n      \"resolved\": \"https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz\",\n      \"integrity\": \"sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==\",\n      \"license\": \"Apache-2.0\",\n      \"dependencies\": {\n        \"lodash.camelcase\": \"^4.3.0\",\n        \"long\": \"^5.0.0\",\n        \"protobufjs\": \"^7.2.5\",\n        \"yargs\": \"^17.7.2\"\n      },\n      \"bin\": {\n        \"proto-loader-gen-types\": \"build/bin/proto-loader-gen-types.js\"\n      },\n      \"engines\": {\n        \"node\": \">=6\"\n      }\n    },\n    \"node_modules/@jridgewell/sourcemap-codec\": {\n      \"version\": \"1.5.5\",\n      \"resolved\": \"https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz\",\n      \"integrity\": \"sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\n      \"dev\": true,\n      \"license\": \"MIT\"\n    },\n    \"node_modules/@protobufjs/aspromise\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz\",\n      \"integrity\": \"sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/base64\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz\",\n      \"integrity\": \"sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/codegen\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz\",\n      \"integrity\": \"sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/eventemitter\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz\",\n      \"integrity\": \"sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/fetch\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz\",\n      \"integrity\": \"sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==\",\n      \"license\": \"BSD-3-Clause\",\n      \"dependencies\": {\n        \"@protobufjs/aspromise\": \"^1.1.1\",\n        \"@protobufjs/inquire\": \"^1.1.0\"\n      }\n    },\n    \"node_modules/@protobufjs/float\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz\",\n      \"integrity\": \"sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/inquire\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz\",\n      \"integrity\": \"sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/path\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz\",\n      \"integrity\": \"sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/pool\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz\",\n      \"integrity\": \"sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@protobufjs/utf8\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz\",\n      \"integrity\": \"sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==\",\n      \"license\": \"BSD-3-Clause\"\n    },\n    \"node_modules/@rollup/rollup-android-arm-eabi\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.57.1.tgz\",\n      \"integrity\": \"sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-android-arm64\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.57.1.tgz\",\n      \"integrity\": \"sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-darwin-arm64\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz\",\n      \"integrity\": \"sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-darwin-x64\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.57.1.tgz\",\n      \"integrity\": \"sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-freebsd-arm64\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.57.1.tgz\",\n      \"integrity\": \"sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-freebsd-x64\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.57.1.tgz\",\n      \"integrity\": \"sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"freebsd\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm-gnueabihf\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.57.1.tgz\",\n      \"integrity\": \"sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm-musleabihf\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.57.1.tgz\",\n      \"integrity\": \"sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm64-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-arm64-musl\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz\",\n      \"integrity\": \"sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-loong64-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-loong64-musl\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.57.1.tgz\",\n      \"integrity\": \"sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==\",\n      \"cpu\": [\n        \"loong64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-ppc64-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-ppc64-musl\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.57.1.tgz\",\n      \"integrity\": \"sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-riscv64-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-riscv64-musl\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.57.1.tgz\",\n      \"integrity\": \"sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==\",\n      \"cpu\": [\n        \"riscv64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-s390x-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==\",\n      \"cpu\": [\n        \"s390x\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n      ]\n    },\n    \"node_modules/@rollup/rollup-linux-x64-gnu\": {\n      \"version\": \"4.57.1\",\n      \"resolved\": \"https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.57.1.tgz\",\n      \"integrity\": \"sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"linux\"\n\n\nFile v0.4.5:package.json\n\n{\n  \"name\": \"hashbox-plugin\",\n  \"version\": \"0.4.5\",\n  \"description\": \"OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\",\n  \"main\": \"index.js\",\n  \"types\": \"dist/index.d.ts\",\n  \"scripts\": {\n    \"build\": \"tsc\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"lint\": \"tsc --noEmit\"\n  },\n  \"keywords\": [\n    \"openclaw\",\n    \"plugin\",\n    \"hashbox\",\n    \"push-notifications\",\n    \"firebase\"\n  ],\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"@types/node\": \"^25.2.3\",\n    \"typescript\": \"^5.9.3\",\n    \"vitest\": \"^4.0.18\"\n  },\n  \"engines\": {\n    \"node\": \">=18.0.0\"\n  },\n  \"files\": [\n    \"index.js\",\n    \"dist\",\n    \"openclaw.plugin.json\",\n    \"README.md\",\n    \"SKILL.md\"\n  ],\n  \"openclaw\": {\n    \"extensions\": \"./dist/openclaw-entry.js\",\n    \"slots\": [\n      \"tool\"\n    ],\n    \"catalog\": {\n      \"name\": \"hashbox-plugin\",\n      \"description\": \"Connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\"\n    }\n  },\n  \"dependencies\": {\n    \"@sinclair/typebox\": \"^0.34.48\",\n    \"firebase\": \"^12.9.0\"\n  }\n}\n\nFile v0.4.5:tsconfig.json\n\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"Node16\",\n    \"moduleResolution\": \"Node16\",\n    \"strict\": true,\n    \"outDir\": \"dist\",\n    \"rootDir\": \"src\",\n    \"declaration\": true,\n    \"esModuleInterop\": true,\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true\n  },\n  \"include\": [\"src\"],\n  \"exclude\": [\"node_modules\", \"dist\", \"tests\"]\n}\n\nArchive v0.4.4: 23 files, 45170 bytes\n\nFiles: CLAUDE.md (717b), index.js (179b), openclaw.plugin.json (132b), package-lock.json (89382b), package.json (1097b), PROGRESS.md (5111b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4215b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2698b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nFile v0.4.4:SKILL.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\n## Setup\n\n### Prerequisites\n\n1. A HashBox iOS app account\n2. A valid `HB-` prefixed API token from your HashBox dashboard\n\n### Configuration\n\nBefore using the plugin, configure it with your HashBox API token using the `configure_hashbox` tool:\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-your-token-here\"\n})\n```\n\nThis stores your configuration locally in `hashbox_config.json`.\n\n## Usage\n\n### configure_hashbox\n\nSets up the HashBox connection by saving your API token.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n**Example:**\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-abc123\"\n})\n```\n\n### send_hashbox_notification\n\nSends a push notification to the HashBox iOS app through the configured Firebase webhook.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Icon/emoji for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Content body (string for article) or structured data (array for metric/audit) |\n\n**Example (article):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n})\n```\n\n**Example (metric):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n})\n```\n\n**Example (audit):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n})\n```\n\n## Dependencies\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.4:README.md\n\n# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\nOr via ClawHub:\n\n```bash\nclawhub install hashbox-plugin\n```\n\n## Quick Start\n\n### 1. Configure your token\n\n```\nconfigure_hashbox({ \"token\": \"HB-your-token-here\" })\n```\n\n### 2. Send a notification\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"AI Trends\",\n  \"channelIcon\": \"🤖\",\n  \"title\": \"Daily Summary\",\n  \"contentOrData\": \"Here's what happened today...\"\n})\n```\n\n## Tools\n\n### configure_hashbox\n\nSaves your HashBox API token locally so the agent can push notifications.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n### send_hashbox_notification\n\nPushes curated news, summaries, or system metrics to your HashBox iOS app.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Single emoji icon for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Markdown string for articles, or structured data for metrics/audits |\n\n#### Payload Examples\n\n**Article:**\n```json\n{\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n}\n```\n\n**Metric:**\n```json\n{\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n}\n```\n\n**Audit:**\n```json\n{\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n}\n```\n\n## Programmatic Usage\n\n```typescript\nimport { hashBoxPlugin, configureHashBox, sendHashBoxNotification } from \"hashbox-plugin\";\n\n// Register with OpenClaw\nregisterPlugin(hashBoxPlugin);\n\n// Or use directly\nawait configureHashBox(\"HB-your-token\");\nconst result = await sendHashBoxNotification(\n  \"article\", \"AI Trends\", \"🤖\", \"Hello\", \"Test content\"\n);\nconsole.log(result.status); // 200\n```\n\n## Requirements\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT\n\nFile v0.4.4:_meta.json\n\n{\n  \"ownerId\": \"kn79m8gc9nt66cgjxewsam144581em6d\",\n  \"slug\": \"hashbox-plugin\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1771563196004\n}\n\nFile v0.4.4:CLAUDE.md\n\n# CLAUDE.md — hashbox-plugin\n\n> System-level directives. All Claude Code agents MUST obey.\n\n## [Project Identity]\n- **Name**: hashbox-plugin\n- **Description**: OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\n- **Language**: TypeScript\n\n## [Tech Stack]\n| Layer | Technology |\n|---|---|\n| language | TypeScript |\n| framework | Node.js |\n| styling | N/A |\n| database | Local JSON file (hashbox_config.json) |\n| orm | N/A |\n\n## [Rules]\n1. Conventional Commits only.\n2. Write tests for all new code.\n3. No `any` types. No `console.log` in production.\n4. Update PROGRESS.md before every commit.\n5. Tasks flow: pending -> in-progress -> ready-for-test -> done.\n\nFile v0.4.4:PROGRESS.md\n\n# PROGRESS.md — hashbox-plugin\n\n**Last Updated**: 2026-02-20\n\n## [Current Epic]\n**Epic**: Core Implementation\n**Status**: DONE — gap fixes in-progress\n\n## [Todo Backlog]\n| # | Priority | Task | Notes |\n|---|---|---|---|\n\n## [In Progress]\n| Task | Agent | Started | Branch |\n|---|---|---|---|\n\n## [Completed]\n| Task | Completed | Commit |\n|---|---|---|\n| Migrate openclaw-entry.ts from Zod to TypeBox for OpenClaw SDK compatibility (v0.4.3) | 2026-02-20 | fix: migrate to typebox |\n| QA passed for 937bd6e8 | 2026-02-19 | test: QA passed for 937bd6e8 |\n| Refactor pushToHashBox.ts: add input validation for nested HashBoxRequest envelope | 2026-02-19 | task/937bd6e8 |\n| QA passed for fc1ec717 | 2026-02-19 | test: QA passed for fc1ec717 |\n| Refactor types.ts to match hash-box backend WebhookBody schema (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) | 2026-02-19 | task/fc1ec717 |\n| Add ClawHub publishing support (SKILL.md + openclaw manifest) | 2026-02-18 | feat: add ClawHub publishing support |\n| Implement complete hashbox-plugin package (types, setupHashBox, pushToHashBox, plugin entry, tests) | 2026-02-18 | task/b1aa6373 |\n| QA passed for b1aa6373 | 2026-02-18 | task/b1aa6373 |\n| Fix webhook URL and token passing in pushToHashBox.ts | 2026-02-19 | fix: correct webhook URL and token passing |\n| QA passed for e8722c9b | 2026-02-19 | test: QA passed for e8722c9b |\n| Fix MetricEntry/AuditEntry types to match spec, add channelName/channelIcon to HashBoxPayload | 2026-02-19 | task/20668827 |\n| QA passed for 20668827 | 2026-02-19 | test: QA passed for 20668827 |\n| Fix SKILL.md documentation to match actual API signatures | 2026-02-19 | task/f9659042 |\n| QA passed for f9659042 | 2026-02-19 | test: QA passed for f9659042 |\n| Resolve merge conflict markers in PROGRESS.md and update task statuses | 2026-02-19 | task/b8c6d87c |\n| QA passed for b8c6d87c | 2026-02-19 | test: QA passed for b8c6d87c |\n\n## 错题本 / Error Log\n> New entries prepend here.\n\n- **2026-02-20**: Migrated openclaw-entry.ts from Zod to TypeBox (@sinclair/typebox). Replaced z.object/z.string/z.enum/z.union/z.any with Type.Object/Type.String/Type.Union+Type.Literal/Type.Unknown. Fixed execute signature from `async (args) =>` to `async execute(_toolCallId, params)`. Removed zod dependency, added @sinclair/typebox. Bumped version to 0.4.3. 58/58 tests pass (5 test files). tsc --noEmit clean. npm run build clean.\n- **2026-02-19**: QA review passed for 937bd6e8. 31/31 tests pass (3 test files). pushToHashBox.ts refactored to add input validation (validateChannel, validatePayloadData) for HashBoxRequest envelope. 5 new validation tests added. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for fc1ec717. 26/26 tests pass (3 test files). types.ts refactored to match hash-box backend WebhookBody/Codable schema: new types (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) with nested channel/payload structure. pushToHashBox.ts, index.ts exports, tests, README.md, SKILL.md all updated consistently. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: Refactored types.ts to match hash-box backend WebhookBody/Codable schema. Removed old MetricEntry, AuditEntry, HashBoxPayload, PayloadType. Added ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest. Updated pushToHashBox.ts to build HashBoxRequest with nested channel/payload structure. Updated all tests. 26/26 tests pass. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for b8c6d87c. 26/26 tests pass (3 test files). PROGRESS.md merge conflicts resolved, task statuses updated. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for f9659042. 26/26 tests pass (3 test files). SKILL.md updated: removed stale `webhook_url` param from `configure_hashbox`, corrected `send_hashbox_notification` params to match actual 5-arg signature (`payloadType`, `channelName`, `channelIcon`, `title`, `contentOrData`), added examples for all payload types. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for 20668827. 26/26 tests pass (3 test files). MetricEntry: `unit` made optional, `trend` added. AuditEntry: replaced `field/oldValue/newValue` with `timestamp/event/severity/details`. HashBoxPayload includes `channelName`/`channelIcon`. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for e8722c9b. 26/26 tests pass (3 test files). Webhook URL corrected, token passed as query param, payload includes channelName/channelIcon. No `any` types, no `console.log` in production.\n- **2026-02-18**: QA review passed. 7/7 tests pass. No bugs, no `any` types, no `console.log` in production. TypeScript compiles cleanly.\n\n## [Blocked]\n| Task | Blocked By | Since |\n|---|---|---|\n\nFile v0.4.4:openclaw.plugin.json\n\n{\n  \"id\": \"hashbox-plugin\",\n  \"configSchema\": {\n    \"type\": \"object\",\n    \"additionalProperties\": false,\n    \"properties\": {}\n  }\n}\n\nFile v0.4.4:package-lock.json\n\n{\n  \"name\": \"hashbox-plugin\",\n  \"version\": \"0.4.4\",\n  \"lockfileVersion\": 3,\n  \"requires\": true,\n  \"packages\": {\n    \"\": {\n      \"name\": \"hashbox-plugin\",\n      \"version\": \"0.4.4\",\n      \"license\": \"MIT\",\n      \"dependencies\": {\n        \"@sinclair/typebox\": \"^0.34.48\",\n        \"firebase\": \"^12.9.0\"\n      },\n      \"devDependencies\": {\n        \"@types/node\": \"^25.2.3\",\n        \"typescript\": \"^5.9.3\",\n        \"vitest\": \"^4.0.18\"\n      },\n      \"engines\": {\n        \"node\": \">=18.0.0\"\n      }\n    },\n    \"node_modules/@esbuild/aix-ppc64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz\",\n      \"integrity\": \"sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==\",\n      \"cpu\": [\n        \"ppc64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"aix\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz\",\n      \"integrity\": \"sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==\",\n      \"cpu\": [\n        \"arm\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/android-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"android\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz\",\n      \"integrity\": \"sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==\",\n      \"cpu\": [\n        \"arm64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/darwin-x64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz\",\n      \"integrity\": \"sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==\",\n      \"cpu\": [\n        \"x64\"\n      ],\n      \"dev\": true,\n      \"license\": \"MIT\",\n      \"optional\": true,\n      \"os\": [\n        \"darwin\"\n      ],\n      \"engines\": {\n        \"node\": \">=18\"\n      }\n    },\n    \"node_modules/@esbuild/freebsd-arm64\": {\n      \"version\": \"0.27.3\",\n      \"resolved\": \"https://registry.npmjs.org/@esbuild/freebsd-arm64/-\n\nArchive v0.4.3: 23 files, 45157 bytes\n\nFiles: CLAUDE.md (717b), index.ts (152b), openclaw.plugin.json (132b), package-lock.json (89382b), package.json (1097b), PROGRESS.md (5111b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4215b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2698b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.4.2: 23 files, 44883 bytes\n\nFiles: CLAUDE.md (717b), index.ts (152b), openclaw.plugin.json (132b), package-lock.json (89419b), package.json (1082b), PROGRESS.md (4545b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4048b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2698b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.4.1: 23 files, 44889 bytes\n\nFiles: CLAUDE.md (717b), index.js (154b), openclaw.plugin.json (132b), package-lock.json (89419b), package.json (1082b), PROGRESS.md (4545b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4048b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2698b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.4.0: 22 files, 44605 bytes\n\nFiles: CLAUDE.md (717b), openclaw.plugin.json (132b), package-lock.json (89419b), package.json (1080b), PROGRESS.md (4545b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/openclaw-entry.ts (4048b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2478b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.3.0: 20 files, 42587 bytes\n\nFiles: CLAUDE.md (717b), package-lock.json (89037b), package.json (1012b), PROGRESS.md (4545b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/commandListener.ts (2199b), src/firebaseClient.ts (1889b), src/index.ts (3641b), src/pushToHashBox.ts (3104b), src/setupHashBox.ts (3020b), src/types.ts (1784b), tests/clawhub-publishing.test.ts (2460b), tests/commandListener.test.ts (6692b), tests/firebaseClient.test.ts (3992b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (5613b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.2.0: 16 files, 24927 bytes\n\nFiles: CLAUDE.md (717b), package-lock.json (48358b), package.json (961b), PROGRESS.md (4545b), README.md (2668b), scripts/local-test.ts (7397b), SKILL.md (2434b), src/index.ts (1398b), src/pushToHashBox.ts (3457b), src/setupHashBox.ts (563b), src/types.ts (1084b), tests/clawhub-publishing.test.ts (2460b), tests/pushToHashBox.test.ts (7761b), tests/setupHashBox.test.ts (1456b), tsconfig.json (372b), _meta.json (133b)\n\nArchive v0.1.0: 16 files, 24238 bytes\n\nFiles: CLAUDE.md (717b), package-lock.json (48358b), package.json (961b), PROGRESS.md (2855b), README.md (2739b), scripts/local-test.ts (7397b), SKILL.md (2505b), src/index.ts (1350b), src/pushToHashBox.ts (2389b), src/setupHashBox.ts (563b), src/types.ts (1124b), tests/clawhub-publishing.test.ts (2460b), tests/pushToHashBox.test.ts (5818b), tests/setupHashBox.test.ts (1456b), tsconfig.json (372b), _meta.json (133b)","readmeExcerpt":"Skill: @hashingcorp/hashbox-plugin Owner: w3h9uf Summary: Connects an AI agent to the HashBox iOS app via Firebase webhook to send push notifications with articles, metrics, or audit data. Tags: latest:0.4.10 Version history: v0.4.10 | 2026-02-21T01:09:06.891Z | auto - Added new entrypoint file: index.ts - Updated dependencies and lockfile in package.json and package-lock.json - Modified src/openclaw-entry.ts for int","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"npm install hashbox-plugin"},{"language":"text","snippet":"configure_hashbox({\n  \"token\": \"HB-your-token-here\"\n})"},{"language":"text","snippet":"configure_hashbox({\n  \"token\": \"HB-abc123\"\n})"},{"language":"text","snippet":"send_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n})"},{"language":"text","snippet":"send_hashbox_notification({\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n})"},{"language":"text","snippet":"send_hashbox_notification({\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n})"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\n## Setup\n\n### Prerequisites\n\n1. A HashBox iOS app account\n2. A valid `HB-` prefixed API token from your HashBox dashboard\n\n### Configuration\n\nBefore using the plugin, configure it with your HashBox API token using the `configure_hashbox` tool:\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-your-token-here\"\n})\n```\n\nThis stores your configuration locally in `hashbox_config.json`.\n\n## Usage\n\n### configure_hashbox\n\nSets up the HashBox connection by saving your API token.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n**Example:**\n\n```\nconfigure_hashbox({\n  \"token\": \"HB-abc123\"\n})\n```\n\n### send_hashbox_notification\n\nSends a push notification to the HashBox iOS app through the configured Firebase webhook.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Icon/emoji for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Content body (string for article) or structured data (array for metric/audit) |\n\n**Example (article):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n})\n```\n\n**Example (metric):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n})\n```\n\n**Example (audit):**\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n})\n```\n\n## Dependencies\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT"},{"path":"README.md","content":"# hashbox-plugin\n\nOpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications.\n\n## Installation\n\n```bash\nnpm install hashbox-plugin\n```\n\nOr via ClawHub:\n\n```bash\nclawhub install hashbox-plugin\n```\n\n## Quick Start\n\n### 1. Configure your token\n\n```\nconfigure_hashbox({ \"token\": \"HB-your-token-here\" })\n```\n\n### 2. Send a notification\n\n```\nsend_hashbox_notification({\n  \"payloadType\": \"article\",\n  \"channelName\": \"AI Trends\",\n  \"channelIcon\": \"🤖\",\n  \"title\": \"Daily Summary\",\n  \"contentOrData\": \"Here's what happened today...\"\n})\n```\n\n## Tools\n\n### configure_hashbox\n\nSaves your HashBox API token locally so the agent can push notifications.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `token` | string | Yes | Your HashBox API token (must start with `HB-`) |\n\n### send_hashbox_notification\n\nPushes curated news, summaries, or system metrics to your HashBox iOS app.\n\n| Parameter | Type | Required | Description |\n|---|---|---|---|\n| `payloadType` | `\"article\"` \\| `\"metric\"` \\| `\"audit\"` | Yes | Type of notification payload |\n| `channelName` | string | Yes | Name of the notification channel |\n| `channelIcon` | string | Yes | Single emoji icon for the channel |\n| `title` | string | Yes | Notification title |\n| `contentOrData` | string \\| MetricItem[] \\| AuditFinding[] | Yes | Markdown string for articles, or structured data for metrics/audits |\n\n#### Payload Examples\n\n**Article:**\n```json\n{\n  \"payloadType\": \"article\",\n  \"channelName\": \"Builds\",\n  \"channelIcon\": \"🔨\",\n  \"title\": \"Build Complete\",\n  \"contentOrData\": \"Your project compiled successfully with 0 errors.\"\n}\n```\n\n**Metric:**\n```json\n{\n  \"payloadType\": \"metric\",\n  \"channelName\": \"Performance\",\n  \"channelIcon\": \"📊\",\n  \"title\": \"Daily Metrics\",\n  \"contentOrData\": [\n    { \"label\": \"CPU Usage\", \"value\": 42, \"unit\": \"%\" },\n    { \"label\": \"Memory\", \"value\": 8.2, \"unit\": \"GB\" }\n  ]\n}\n```\n\n**Audit:**\n```json\n{\n  \"payloadType\": \"audit\",\n  \"channelName\": \"Security\",\n  \"channelIcon\": \"🔒\",\n  \"title\": \"Audit Log\",\n  \"contentOrData\": [\n    { \"severity\": \"info\", \"message\": \"User logged in from new device\" }\n  ]\n}\n```\n\n## Programmatic Usage\n\n```typescript\nimport { hashBoxPlugin, configureHashBox, sendHashBoxNotification } from \"hashbox-plugin\";\n\n// Register with OpenClaw\nregisterPlugin(hashBoxPlugin);\n\n// Or use directly\nawait configureHashBox(\"HB-your-token\");\nconst result = await sendHashBoxNotification(\n  \"article\", \"AI Trends\", \"🤖\", \"Hello\", \"Test content\"\n);\nconsole.log(result.status); // 200\n```\n\n## Requirements\n\n- Node.js >= 18.0.0\n- A valid `HB-` prefixed token from your HashBox account\n\n## License\n\nMIT"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn79m8gc9nt66cgjxewsam144581em6d\",\n  \"slug\": \"hashbox-plugin\",\n  \"version\": \"0.4.10\",\n  \"publishedAt\": 1771636146891\n}"},{"path":"CLAUDE.md","content":"# CLAUDE.md — hashbox-plugin\n\n> System-level directives. All Claude Code agents MUST obey.\n\n## [Project Identity]\n- **Name**: hashbox-plugin\n- **Description**: OpenClaw plugin that connects an AI agent to the HashBox iOS app via Firebase webhook for push notifications\n- **Language**: TypeScript\n\n## [Tech Stack]\n| Layer | Technology |\n|---|---|\n| language | TypeScript |\n| framework | Node.js |\n| styling | N/A |\n| database | Local JSON file (hashbox_config.json) |\n| orm | N/A |\n\n## [Rules]\n1. Conventional Commits only.\n2. Write tests for all new code.\n3. No `any` types. No `console.log` in production.\n4. Update PROGRESS.md before every commit.\n5. Tasks flow: pending -> in-progress -> ready-for-test -> done."},{"path":"PROGRESS.md","content":"# PROGRESS.md — hashbox-plugin\n\n**Last Updated**: 2026-02-20\n\n## [Current Epic]\n**Epic**: Core Implementation\n**Status**: DONE — gap fixes in-progress\n\n## [Todo Backlog]\n| # | Priority | Task | Notes |\n|---|---|---|---|\n\n## [In Progress]\n| Task | Agent | Started | Branch |\n|---|---|---|---|\n\n## [Completed]\n| Task | Completed | Commit |\n|---|---|---|\n| Migrate openclaw-entry.ts from Zod to TypeBox for OpenClaw SDK compatibility (v0.4.3) | 2026-02-20 | fix: migrate to typebox |\n| QA passed for 937bd6e8 | 2026-02-19 | test: QA passed for 937bd6e8 |\n| Refactor pushToHashBox.ts: add input validation for nested HashBoxRequest envelope | 2026-02-19 | task/937bd6e8 |\n| QA passed for fc1ec717 | 2026-02-19 | test: QA passed for fc1ec717 |\n| Refactor types.ts to match hash-box backend WebhookBody schema (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channel, HashBoxRequest) | 2026-02-19 | task/fc1ec717 |\n| Add ClawHub publishing support (SKILL.md + openclaw manifest) | 2026-02-18 | feat: add ClawHub publishing support |\n| Implement complete hashbox-plugin package (types, setupHashBox, pushToHashBox, plugin entry, tests) | 2026-02-18 | task/b1aa6373 |\n| QA passed for b1aa6373 | 2026-02-18 | task/b1aa6373 |\n| Fix webhook URL and token passing in pushToHashBox.ts | 2026-02-19 | fix: correct webhook URL and token passing |\n| QA passed for e8722c9b | 2026-02-19 | test: QA passed for e8722c9b |\n| Fix MetricEntry/AuditEntry types to match spec, add channelName/channelIcon to HashBoxPayload | 2026-02-19 | task/20668827 |\n| QA passed for 20668827 | 2026-02-19 | test: QA passed for 20668827 |\n| Fix SKILL.md documentation to match actual API signatures | 2026-02-19 | task/f9659042 |\n| QA passed for f9659042 | 2026-02-19 | test: QA passed for f9659042 |\n| Resolve merge conflict markers in PROGRESS.md and update task statuses | 2026-02-19 | task/b8c6d87c |\n| QA passed for b8c6d87c | 2026-02-19 | test: QA passed for b8c6d87c |\n\n## 错题本 / Error Log\n> New entries prepend here.\n\n- **2026-02-20**: Migrated openclaw-entry.ts from Zod to TypeBox (@sinclair/typebox). Replaced z.object/z.string/z.enum/z.union/z.any with Type.Object/Type.String/Type.Union+Type.Literal/Type.Unknown. Fixed execute signature from `async (args) =>` to `async execute(_toolCallId, params)`. Removed zod dependency, added @sinclair/typebox. Bumped version to 0.4.3. 58/58 tests pass (5 test files). tsc --noEmit clean. npm run build clean.\n- **2026-02-19**: QA review passed for 937bd6e8. 31/31 tests pass (3 test files). pushToHashBox.ts refactored to add input validation (validateChannel, validatePayloadData) for HashBoxRequest envelope. 5 new validation tests added. No `any` types, no `console.log` in production. TypeScript compiles cleanly.\n- **2026-02-19**: QA review passed for fc1ec717. 26/26 tests pass (3 test files). types.ts refactored to match hash-box backend WebhookBody/Codable schema: new types (ArticlePayload, MetricItem, MetricPayload, AuditFinding, AuditPayload, Channe"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1540,"uniquenessScore":38,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T11:54:28.183Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:14:45.857Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}