im-hub-pro 0.2.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +497 -0
- package/README.zh-CN.md +496 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +921 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/acp-server.d.ts +8 -0
- package/dist/core/acp-server.d.ts.map +1 -0
- package/dist/core/acp-server.js +266 -0
- package/dist/core/acp-server.js.map +1 -0
- package/dist/core/agent-base.d.ts +94 -0
- package/dist/core/agent-base.d.ts.map +1 -0
- package/dist/core/agent-base.js +374 -0
- package/dist/core/agent-base.js.map +1 -0
- package/dist/core/agent-cwd.d.ts +45 -0
- package/dist/core/agent-cwd.d.ts.map +1 -0
- package/dist/core/agent-cwd.js +178 -0
- package/dist/core/agent-cwd.js.map +1 -0
- package/dist/core/agent-cwd.test.d.ts +2 -0
- package/dist/core/agent-cwd.test.d.ts.map +1 -0
- package/dist/core/agent-cwd.test.js +149 -0
- package/dist/core/agent-cwd.test.js.map +1 -0
- package/dist/core/approval-bus.d.ts +232 -0
- package/dist/core/approval-bus.d.ts.map +1 -0
- package/dist/core/approval-bus.js +703 -0
- package/dist/core/approval-bus.js.map +1 -0
- package/dist/core/approval-bus.synthetic.test.d.ts +2 -0
- package/dist/core/approval-bus.synthetic.test.d.ts.map +1 -0
- package/dist/core/approval-bus.synthetic.test.js +182 -0
- package/dist/core/approval-bus.synthetic.test.js.map +1 -0
- package/dist/core/approval-bus.test.d.ts +2 -0
- package/dist/core/approval-bus.test.d.ts.map +1 -0
- package/dist/core/approval-bus.test.js +537 -0
- package/dist/core/approval-bus.test.js.map +1 -0
- package/dist/core/approval-router.d.ts +95 -0
- package/dist/core/approval-router.d.ts.map +1 -0
- package/dist/core/approval-router.js +450 -0
- package/dist/core/approval-router.js.map +1 -0
- package/dist/core/approval-router.test.d.ts +2 -0
- package/dist/core/approval-router.test.d.ts.map +1 -0
- package/dist/core/approval-router.test.js +413 -0
- package/dist/core/approval-router.test.js.map +1 -0
- package/dist/core/audit-log.d.ts +55 -0
- package/dist/core/audit-log.d.ts.map +1 -0
- package/dist/core/audit-log.js +203 -0
- package/dist/core/audit-log.js.map +1 -0
- package/dist/core/bgjob-reader.d.ts +65 -0
- package/dist/core/bgjob-reader.d.ts.map +1 -0
- package/dist/core/bgjob-reader.js +212 -0
- package/dist/core/bgjob-reader.js.map +1 -0
- package/dist/core/bgjob-reader.test.d.ts +2 -0
- package/dist/core/bgjob-reader.test.d.ts.map +1 -0
- package/dist/core/bgjob-reader.test.js +178 -0
- package/dist/core/bgjob-reader.test.js.map +1 -0
- package/dist/core/circuit-breaker.d.ts +37 -0
- package/dist/core/circuit-breaker.d.ts.map +1 -0
- package/dist/core/circuit-breaker.js +115 -0
- package/dist/core/circuit-breaker.js.map +1 -0
- package/dist/core/commands/agent.d.ts +4 -0
- package/dist/core/commands/agent.d.ts.map +1 -0
- package/dist/core/commands/agent.js +21 -0
- package/dist/core/commands/agent.js.map +1 -0
- package/dist/core/commands/approval.d.ts +3 -0
- package/dist/core/commands/approval.d.ts.map +1 -0
- package/dist/core/commands/approval.js +44 -0
- package/dist/core/commands/approval.js.map +1 -0
- package/dist/core/commands/approval.test.d.ts +2 -0
- package/dist/core/commands/approval.test.d.ts.map +1 -0
- package/dist/core/commands/approval.test.js +85 -0
- package/dist/core/commands/approval.test.js.map +1 -0
- package/dist/core/commands/audit.d.ts +3 -0
- package/dist/core/commands/audit.d.ts.map +1 -0
- package/dist/core/commands/audit.js +84 -0
- package/dist/core/commands/audit.js.map +1 -0
- package/dist/core/commands/builtin.d.ts +3 -0
- package/dist/core/commands/builtin.d.ts.map +1 -0
- package/dist/core/commands/builtin.js +26 -0
- package/dist/core/commands/builtin.js.map +1 -0
- package/dist/core/commands/job.d.ts +3 -0
- package/dist/core/commands/job.d.ts.map +1 -0
- package/dist/core/commands/job.js +195 -0
- package/dist/core/commands/job.js.map +1 -0
- package/dist/core/commands/model.d.ts +9 -0
- package/dist/core/commands/model.d.ts.map +1 -0
- package/dist/core/commands/model.js +183 -0
- package/dist/core/commands/model.js.map +1 -0
- package/dist/core/commands/plan.d.ts +3 -0
- package/dist/core/commands/plan.d.ts.map +1 -0
- package/dist/core/commands/plan.js +75 -0
- package/dist/core/commands/plan.js.map +1 -0
- package/dist/core/commands/plan.test.d.ts +2 -0
- package/dist/core/commands/plan.test.d.ts.map +1 -0
- package/dist/core/commands/plan.test.js +122 -0
- package/dist/core/commands/plan.test.js.map +1 -0
- package/dist/core/commands/router.d.ts +3 -0
- package/dist/core/commands/router.d.ts.map +1 -0
- package/dist/core/commands/router.js +71 -0
- package/dist/core/commands/router.js.map +1 -0
- package/dist/core/commands/schedule.d.ts +3 -0
- package/dist/core/commands/schedule.d.ts.map +1 -0
- package/dist/core/commands/schedule.js +123 -0
- package/dist/core/commands/schedule.js.map +1 -0
- package/dist/core/commands/sessions.d.ts +3 -0
- package/dist/core/commands/sessions.d.ts.map +1 -0
- package/dist/core/commands/sessions.js +88 -0
- package/dist/core/commands/sessions.js.map +1 -0
- package/dist/core/commands/stats.d.ts +3 -0
- package/dist/core/commands/stats.d.ts.map +1 -0
- package/dist/core/commands/stats.js +73 -0
- package/dist/core/commands/stats.js.map +1 -0
- package/dist/core/commands/think.d.ts +3 -0
- package/dist/core/commands/think.d.ts.map +1 -0
- package/dist/core/commands/think.js +28 -0
- package/dist/core/commands/think.js.map +1 -0
- package/dist/core/commands/workspaces.d.ts +3 -0
- package/dist/core/commands/workspaces.d.ts.map +1 -0
- package/dist/core/commands/workspaces.js +47 -0
- package/dist/core/commands/workspaces.js.map +1 -0
- package/dist/core/config-schema.d.ts +58 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +63 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/cron.d.ts +29 -0
- package/dist/core/cron.d.ts.map +1 -0
- package/dist/core/cron.js +184 -0
- package/dist/core/cron.js.map +1 -0
- package/dist/core/event-bus.d.ts +80 -0
- package/dist/core/event-bus.d.ts.map +1 -0
- package/dist/core/event-bus.js +62 -0
- package/dist/core/event-bus.js.map +1 -0
- package/dist/core/intent-llm.d.ts +27 -0
- package/dist/core/intent-llm.d.ts.map +1 -0
- package/dist/core/intent-llm.js +170 -0
- package/dist/core/intent-llm.js.map +1 -0
- package/dist/core/intent.d.ts +12 -0
- package/dist/core/intent.d.ts.map +1 -0
- package/dist/core/intent.js +187 -0
- package/dist/core/intent.js.map +1 -0
- package/dist/core/job-board.d.ts +84 -0
- package/dist/core/job-board.d.ts.map +1 -0
- package/dist/core/job-board.js +379 -0
- package/dist/core/job-board.js.map +1 -0
- package/dist/core/logger.d.ts +6 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/metrics.d.ts +55 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +291 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/onboarding.d.ts +94 -0
- package/dist/core/onboarding.d.ts.map +1 -0
- package/dist/core/onboarding.js +426 -0
- package/dist/core/onboarding.js.map +1 -0
- package/dist/core/onboarding.test.d.ts +2 -0
- package/dist/core/onboarding.test.d.ts.map +1 -0
- package/dist/core/onboarding.test.js +112 -0
- package/dist/core/onboarding.test.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +44 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +115 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/registry.d.ts +32 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +122 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/router.d.ts +41 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +431 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/schedule.d.ts +65 -0
- package/dist/core/schedule.d.ts.map +1 -0
- package/dist/core/schedule.js +316 -0
- package/dist/core/schedule.js.map +1 -0
- package/dist/core/session-subtasks.test.d.ts +2 -0
- package/dist/core/session-subtasks.test.d.ts.map +1 -0
- package/dist/core/session-subtasks.test.js +88 -0
- package/dist/core/session-subtasks.test.js.map +1 -0
- package/dist/core/session.d.ts +182 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +774 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/sqlite-helper.d.ts +37 -0
- package/dist/core/sqlite-helper.d.ts.map +1 -0
- package/dist/core/sqlite-helper.js +79 -0
- package/dist/core/sqlite-helper.js.map +1 -0
- package/dist/core/transcribe.d.ts +25 -0
- package/dist/core/transcribe.d.ts.map +1 -0
- package/dist/core/transcribe.js +217 -0
- package/dist/core/transcribe.js.map +1 -0
- package/dist/core/transcribe.test.d.ts +2 -0
- package/dist/core/transcribe.test.d.ts.map +1 -0
- package/dist/core/transcribe.test.js +163 -0
- package/dist/core/transcribe.test.js.map +1 -0
- package/dist/core/types.d.ts +352 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/workspace.d.ts +67 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +113 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/agents/acp/acp-adapter.d.ts +16 -0
- package/dist/plugins/agents/acp/acp-adapter.d.ts.map +1 -0
- package/dist/plugins/agents/acp/acp-adapter.js +49 -0
- package/dist/plugins/agents/acp/acp-adapter.js.map +1 -0
- package/dist/plugins/agents/acp/acp-client.d.ts +32 -0
- package/dist/plugins/agents/acp/acp-client.d.ts.map +1 -0
- package/dist/plugins/agents/acp/acp-client.js +175 -0
- package/dist/plugins/agents/acp/acp-client.js.map +1 -0
- package/dist/plugins/agents/acp/discovery.d.ts +19 -0
- package/dist/plugins/agents/acp/discovery.d.ts.map +1 -0
- package/dist/plugins/agents/acp/discovery.js +109 -0
- package/dist/plugins/agents/acp/discovery.js.map +1 -0
- package/dist/plugins/agents/acp/index.d.ts +4 -0
- package/dist/plugins/agents/acp/index.d.ts.map +1 -0
- package/dist/plugins/agents/acp/index.js +4 -0
- package/dist/plugins/agents/acp/index.js.map +1 -0
- package/dist/plugins/agents/acp/types.d.ts +62 -0
- package/dist/plugins/agents/acp/types.d.ts.map +1 -0
- package/dist/plugins/agents/acp/types.js +5 -0
- package/dist/plugins/agents/acp/types.js.map +1 -0
- package/dist/plugins/agents/claude-code/adapter.test.d.ts +2 -0
- package/dist/plugins/agents/claude-code/adapter.test.d.ts.map +1 -0
- package/dist/plugins/agents/claude-code/adapter.test.js +195 -0
- package/dist/plugins/agents/claude-code/adapter.test.js.map +1 -0
- package/dist/plugins/agents/claude-code/index.d.ts +25 -0
- package/dist/plugins/agents/claude-code/index.d.ts.map +1 -0
- package/dist/plugins/agents/claude-code/index.js +184 -0
- package/dist/plugins/agents/claude-code/index.js.map +1 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts +42 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.d.ts.map +1 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js +235 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.test.d.ts +2 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.test.d.ts.map +1 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.test.js +188 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.test.js.map +1 -0
- package/dist/plugins/agents/codex/adapter.test.d.ts +2 -0
- package/dist/plugins/agents/codex/adapter.test.d.ts.map +1 -0
- package/dist/plugins/agents/codex/adapter.test.js +192 -0
- package/dist/plugins/agents/codex/adapter.test.js.map +1 -0
- package/dist/plugins/agents/codex/index.d.ts +37 -0
- package/dist/plugins/agents/codex/index.d.ts.map +1 -0
- package/dist/plugins/agents/codex/index.js +254 -0
- package/dist/plugins/agents/codex/index.js.map +1 -0
- package/dist/plugins/agents/copilot/index.d.ts +35 -0
- package/dist/plugins/agents/copilot/index.d.ts.map +1 -0
- package/dist/plugins/agents/copilot/index.js +182 -0
- package/dist/plugins/agents/copilot/index.js.map +1 -0
- package/dist/plugins/agents/opencode/adapter.test.d.ts +2 -0
- package/dist/plugins/agents/opencode/adapter.test.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/adapter.test.js +139 -0
- package/dist/plugins/agents/opencode/adapter.test.js.map +1 -0
- package/dist/plugins/agents/opencode/http-adapter.test.d.ts +2 -0
- package/dist/plugins/agents/opencode/http-adapter.test.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/http-adapter.test.js +492 -0
- package/dist/plugins/agents/opencode/http-adapter.test.js.map +1 -0
- package/dist/plugins/agents/opencode/index.d.ts +5 -0
- package/dist/plugins/agents/opencode/index.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/index.js +30 -0
- package/dist/plugins/agents/opencode/index.js.map +1 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts +138 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.js +549 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +24 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +103 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js.map +1 -0
- package/dist/plugins/agents/opencode/serve-manager.d.ts +27 -0
- package/dist/plugins/agents/opencode/serve-manager.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/serve-manager.js +190 -0
- package/dist/plugins/agents/opencode/serve-manager.js.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.d.ts +22 -0
- package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.js +241 -0
- package/dist/plugins/messengers/discord/discord-adapter.js.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.test.d.ts +2 -0
- package/dist/plugins/messengers/discord/discord-adapter.test.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.test.js +332 -0
- package/dist/plugins/messengers/discord/discord-adapter.test.js.map +1 -0
- package/dist/plugins/messengers/discord/index.d.ts +4 -0
- package/dist/plugins/messengers/discord/index.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/index.js +4 -0
- package/dist/plugins/messengers/discord/index.js.map +1 -0
- package/dist/plugins/messengers/discord/markdown-to-discord.d.ts +11 -0
- package/dist/plugins/messengers/discord/markdown-to-discord.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/markdown-to-discord.js +59 -0
- package/dist/plugins/messengers/discord/markdown-to-discord.js.map +1 -0
- package/dist/plugins/messengers/discord/types.d.ts +9 -0
- package/dist/plugins/messengers/discord/types.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/types.js +3 -0
- package/dist/plugins/messengers/discord/types.js.map +1 -0
- package/dist/plugins/messengers/feishu/card-builder.d.ts +23 -0
- package/dist/plugins/messengers/feishu/card-builder.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/card-builder.js +89 -0
- package/dist/plugins/messengers/feishu/card-builder.js.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.d.ts +33 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.js +195 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.js.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-client.d.ts +44 -0
- package/dist/plugins/messengers/feishu/feishu-client.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-client.js +120 -0
- package/dist/plugins/messengers/feishu/feishu-client.js.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-dedup.test.d.ts +2 -0
- package/dist/plugins/messengers/feishu/feishu-dedup.test.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-dedup.test.js +70 -0
- package/dist/plugins/messengers/feishu/feishu-dedup.test.js.map +1 -0
- package/dist/plugins/messengers/feishu/index.d.ts +4 -0
- package/dist/plugins/messengers/feishu/index.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/index.js +4 -0
- package/dist/plugins/messengers/feishu/index.js.map +1 -0
- package/dist/plugins/messengers/feishu/types.d.ts +113 -0
- package/dist/plugins/messengers/feishu/types.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/types.js +4 -0
- package/dist/plugins/messengers/feishu/types.js.map +1 -0
- package/dist/plugins/messengers/telegram/index.d.ts +4 -0
- package/dist/plugins/messengers/telegram/index.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/index.js +4 -0
- package/dist/plugins/messengers/telegram/index.js.map +1 -0
- package/dist/plugins/messengers/telegram/markdown-to-html.d.ts +5 -0
- package/dist/plugins/messengers/telegram/markdown-to-html.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/markdown-to-html.js +186 -0
- package/dist/plugins/messengers/telegram/markdown-to-html.js.map +1 -0
- package/dist/plugins/messengers/telegram/media-download.d.ts +51 -0
- package/dist/plugins/messengers/telegram/media-download.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/media-download.js +224 -0
- package/dist/plugins/messengers/telegram/media-download.js.map +1 -0
- package/dist/plugins/messengers/telegram/media-download.test.d.ts +2 -0
- package/dist/plugins/messengers/telegram/media-download.test.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/media-download.test.js +125 -0
- package/dist/plugins/messengers/telegram/media-download.test.js.map +1 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +62 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.js +653 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.js.map +1 -0
- package/dist/plugins/messengers/telegram/types.d.ts +47 -0
- package/dist/plugins/messengers/telegram/types.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/types.js +3 -0
- package/dist/plugins/messengers/telegram/types.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +68 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.js +483 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-client.d.ts +66 -0
- package/dist/plugins/messengers/wechat/ilink-client.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-client.js +288 -0
- package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-types.d.ts +173 -0
- package/dist/plugins/messengers/wechat/ilink-types.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-types.js +12 -0
- package/dist/plugins/messengers/wechat/ilink-types.js.map +1 -0
- package/dist/utils/backoff.d.ts +35 -0
- package/dist/utils/backoff.d.ts.map +1 -0
- package/dist/utils/backoff.js +59 -0
- package/dist/utils/backoff.js.map +1 -0
- package/dist/utils/cross-platform.d.ts +26 -0
- package/dist/utils/cross-platform.d.ts.map +1 -0
- package/dist/utils/cross-platform.js +58 -0
- package/dist/utils/cross-platform.js.map +1 -0
- package/dist/utils/message-split.d.ts +14 -0
- package/dist/utils/message-split.d.ts.map +1 -0
- package/dist/utils/message-split.js +65 -0
- package/dist/utils/message-split.js.map +1 -0
- package/dist/utils/safe-equal.d.ts +2 -0
- package/dist/utils/safe-equal.d.ts.map +1 -0
- package/dist/utils/safe-equal.js +11 -0
- package/dist/utils/safe-equal.js.map +1 -0
- package/dist/web/public/_app.js +196 -0
- package/dist/web/public/index.html +935 -0
- package/dist/web/public/settings.html +1181 -0
- package/dist/web/public/tasks.html +1827 -0
- package/dist/web/server.d.ts +11 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +1820 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
// Metrics — in-process counters + latency / cost histograms.
|
|
2
|
+
//
|
|
3
|
+
// Lightweight & dependency-free: a sliding sample ring per (agent, intent,
|
|
4
|
+
// success) bucket lets us compute p50/p95/p99 on demand. /api/metrics
|
|
5
|
+
// emits a Prometheus-compatible text body so scraping tools can ingest
|
|
6
|
+
// without us pulling in prom-client.
|
|
7
|
+
//
|
|
8
|
+
// This module is fed by audit-log.logInvocation (so every recorded request
|
|
9
|
+
// also updates metrics) — single source of truth, no duplicate observers.
|
|
10
|
+
const MAX_SAMPLES = 1024; // rolling window per metric label set
|
|
11
|
+
/**
|
|
12
|
+
* Bounded sliding window. Append-only writes overwrite the oldest entry
|
|
13
|
+
* once full, so memory is fixed regardless of traffic.
|
|
14
|
+
*/
|
|
15
|
+
class SlidingWindow {
|
|
16
|
+
buf;
|
|
17
|
+
idx = 0;
|
|
18
|
+
full = false;
|
|
19
|
+
constructor(capacity = MAX_SAMPLES) {
|
|
20
|
+
this.buf = new Array(capacity);
|
|
21
|
+
}
|
|
22
|
+
push(v) {
|
|
23
|
+
this.buf[this.idx] = v;
|
|
24
|
+
this.idx = (this.idx + 1) % this.buf.length;
|
|
25
|
+
if (this.idx === 0)
|
|
26
|
+
this.full = true;
|
|
27
|
+
}
|
|
28
|
+
/** Copy the current sample set (unsorted). */
|
|
29
|
+
snapshot() {
|
|
30
|
+
const len = this.full ? this.buf.length : this.idx;
|
|
31
|
+
return this.buf.slice(0, len);
|
|
32
|
+
}
|
|
33
|
+
size() {
|
|
34
|
+
return this.full ? this.buf.length : this.idx;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Hoare-style partition. Returns an index `p` such that everything in
|
|
39
|
+
* [lo, p] is ≤ pivot and everything in [p+1, hi] is ≥ pivot.
|
|
40
|
+
*/
|
|
41
|
+
function partition(arr, lo, hi) {
|
|
42
|
+
const pivot = arr[(lo + hi) >>> 1];
|
|
43
|
+
let i = lo - 1, j = hi + 1;
|
|
44
|
+
while (true) {
|
|
45
|
+
do {
|
|
46
|
+
i++;
|
|
47
|
+
} while (arr[i] < pivot);
|
|
48
|
+
do {
|
|
49
|
+
j--;
|
|
50
|
+
} while (arr[j] > pivot);
|
|
51
|
+
if (i >= j)
|
|
52
|
+
return j;
|
|
53
|
+
const tmp = arr[i];
|
|
54
|
+
arr[i] = arr[j];
|
|
55
|
+
arr[j] = tmp;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* In-place quickselect: after the call, arr[k] is the value that would
|
|
60
|
+
* be at index k in a fully-sorted array. Average O(n).
|
|
61
|
+
*/
|
|
62
|
+
function quickselect(arr, k, lo, hi) {
|
|
63
|
+
while (lo < hi) {
|
|
64
|
+
const p = partition(arr, lo, hi);
|
|
65
|
+
if (k <= p)
|
|
66
|
+
hi = p;
|
|
67
|
+
else
|
|
68
|
+
lo = p + 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Compute multiple quantiles in a single shared copy. Sorts the
|
|
73
|
+
* quantiles ascending, then runs quickselect with each successive
|
|
74
|
+
* `lo` bounded by the previous index — so we only re-partition the
|
|
75
|
+
* tail relevant to the higher quantile.
|
|
76
|
+
*
|
|
77
|
+
* For 3 quantiles on n=1024 this is ~3n comparisons vs n·log(n) ≈ 10n
|
|
78
|
+
* for a full sort.
|
|
79
|
+
*/
|
|
80
|
+
function multiQuantile(buf, qs) {
|
|
81
|
+
if (buf.length === 0)
|
|
82
|
+
return qs.map(() => 0);
|
|
83
|
+
const arr = buf.slice();
|
|
84
|
+
const n = arr.length;
|
|
85
|
+
const ordered = qs.map((q, i) => ({
|
|
86
|
+
q,
|
|
87
|
+
i,
|
|
88
|
+
idx: Math.min(n - 1, Math.max(0, Math.floor(q * (n - 1)))),
|
|
89
|
+
}));
|
|
90
|
+
ordered.sort((a, b) => a.idx - b.idx);
|
|
91
|
+
const out = new Array(qs.length);
|
|
92
|
+
let lo = 0;
|
|
93
|
+
for (const { i, idx } of ordered) {
|
|
94
|
+
quickselect(arr, idx, lo, n - 1);
|
|
95
|
+
out[i] = arr[idx];
|
|
96
|
+
lo = idx; // next quantile is at or after this one
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
const agentBuckets = new Map();
|
|
101
|
+
const intentCounter = new Map();
|
|
102
|
+
const platformCounter = new Map();
|
|
103
|
+
const startedAt = Date.now();
|
|
104
|
+
/**
|
|
105
|
+
* Operational counters that aren't tied to a specific invocation. Today:
|
|
106
|
+
* - auditPruneFailures: every time pruneExpired() in audit-log catches.
|
|
107
|
+
* A non-zero value here means retention is silently failing — alert
|
|
108
|
+
* on `rate(im_hub_audit_prune_failed_total[1h]) > 0`.
|
|
109
|
+
* - agentCleanupFailures: every time AgentBase's per-spawn cleanup hook
|
|
110
|
+
* throws (mcp-config tmpdir unlink, etc.). Surfaces tmpdir leakage
|
|
111
|
+
* that would otherwise only appear in scattered warn lines.
|
|
112
|
+
*/
|
|
113
|
+
const internalCounters = {
|
|
114
|
+
auditPruneFailures: 0,
|
|
115
|
+
agentCleanupFailures: 0,
|
|
116
|
+
};
|
|
117
|
+
/** Increment when audit-log retention sweep fails. Exposed as a Prometheus
|
|
118
|
+
* counter; ops should alert on any non-zero rate. */
|
|
119
|
+
export function recordAuditPruneFailure() {
|
|
120
|
+
internalCounters.auditPruneFailures++;
|
|
121
|
+
}
|
|
122
|
+
/** Increment when an agent's per-spawn cleanup hook throws. Exposed as a
|
|
123
|
+
* Prometheus counter so leaked tmpdirs (mcp-config etc.) become visible
|
|
124
|
+
* on /api/metrics rather than only in warn-level pino output. */
|
|
125
|
+
export function recordAgentCleanupFailure() {
|
|
126
|
+
internalCounters.agentCleanupFailures++;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Optional snapshot provider for the approval-bus. Set once at startup
|
|
130
|
+
* (cli wires it after instantiating ApprovalBus). Lazy decoupling avoids
|
|
131
|
+
* the metrics module importing approval-bus directly.
|
|
132
|
+
*/
|
|
133
|
+
let approvalBusSnapshot = null;
|
|
134
|
+
export function setApprovalBusSnapshotProvider(fn) {
|
|
135
|
+
approvalBusSnapshot = fn;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Allowlist of intent names emitted as Prometheus labels. Anything outside
|
|
139
|
+
* this set buckets into 'other' so a malicious or buggy caller can't
|
|
140
|
+
* explode label cardinality (every distinct user-supplied intent string
|
|
141
|
+
* would otherwise produce a new metric series, growing memory and scrape
|
|
142
|
+
* cost without bound). Mirrors the values produced by router.ts and
|
|
143
|
+
* intent.ts; if you add a new triggeredBy reason there, add it here too.
|
|
144
|
+
*/
|
|
145
|
+
const KNOWN_INTENTS = new Set([
|
|
146
|
+
'default', 'explicit', 'fallback', 'llm',
|
|
147
|
+
'topic', 'keyword', 'sticky',
|
|
148
|
+
]);
|
|
149
|
+
/**
|
|
150
|
+
* Allowlist of platform names. Each adapter pins its own platform string
|
|
151
|
+
* (telegram / feishu / wechat / discord / web / acp / acp-server / rest /
|
|
152
|
+
* rest-msg). Anything else funnels to 'other' to bound cardinality.
|
|
153
|
+
*/
|
|
154
|
+
const KNOWN_PLATFORMS = new Set([
|
|
155
|
+
'telegram', 'feishu', 'wechat', 'discord',
|
|
156
|
+
'web', 'acp', 'acp-server', 'rest', 'rest-msg',
|
|
157
|
+
]);
|
|
158
|
+
function bucketLabel(known, value) {
|
|
159
|
+
if (!value)
|
|
160
|
+
return 'other';
|
|
161
|
+
return known.has(value) ? value : 'other';
|
|
162
|
+
}
|
|
163
|
+
function getBucket(agent) {
|
|
164
|
+
let b = agentBuckets.get(agent);
|
|
165
|
+
if (!b) {
|
|
166
|
+
b = { total: 0, success: 0, failure: 0, costSum: 0, latency: new SlidingWindow() };
|
|
167
|
+
agentBuckets.set(agent, b);
|
|
168
|
+
}
|
|
169
|
+
return b;
|
|
170
|
+
}
|
|
171
|
+
export function recordInvocation(rec) {
|
|
172
|
+
const b = getBucket(rec.agent);
|
|
173
|
+
b.total++;
|
|
174
|
+
if (rec.success)
|
|
175
|
+
b.success++;
|
|
176
|
+
else
|
|
177
|
+
b.failure++;
|
|
178
|
+
b.costSum += rec.cost || 0;
|
|
179
|
+
if (Number.isFinite(rec.durationMs) && rec.durationMs >= 0) {
|
|
180
|
+
b.latency.push(rec.durationMs);
|
|
181
|
+
}
|
|
182
|
+
const intentLabel = bucketLabel(KNOWN_INTENTS, rec.intent);
|
|
183
|
+
const platformLabel = bucketLabel(KNOWN_PLATFORMS, rec.platform);
|
|
184
|
+
intentCounter.set(intentLabel, (intentCounter.get(intentLabel) || 0) + 1);
|
|
185
|
+
platformCounter.set(platformLabel, (platformCounter.get(platformLabel) || 0) + 1);
|
|
186
|
+
}
|
|
187
|
+
export function snapshot() {
|
|
188
|
+
const now = Date.now();
|
|
189
|
+
const agents = [];
|
|
190
|
+
for (const [agent, b] of agentBuckets) {
|
|
191
|
+
const samples = b.latency.snapshot();
|
|
192
|
+
const [p50Ms, p95Ms, p99Ms] = multiQuantile(samples, [0.5, 0.95, 0.99]);
|
|
193
|
+
agents.push({
|
|
194
|
+
agent,
|
|
195
|
+
total: b.total,
|
|
196
|
+
success: b.success,
|
|
197
|
+
failure: b.failure,
|
|
198
|
+
successRate: b.total > 0 ? b.success / b.total : 0,
|
|
199
|
+
costSum: b.costSum,
|
|
200
|
+
sampleCount: samples.length,
|
|
201
|
+
p50Ms,
|
|
202
|
+
p95Ms,
|
|
203
|
+
p99Ms,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
agents.sort((a, b) => a.agent.localeCompare(b.agent));
|
|
207
|
+
return {
|
|
208
|
+
uptimeSec: Math.round((now - startedAt) / 1000),
|
|
209
|
+
agents,
|
|
210
|
+
intentTotals: Object.fromEntries(intentCounter),
|
|
211
|
+
platformTotals: Object.fromEntries(platformCounter),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Render the snapshot in Prometheus text exposition format. Keeps line
|
|
216
|
+
* count low and uses bare metric names without a HELP/TYPE preamble per
|
|
217
|
+
* line family (we emit one preamble each).
|
|
218
|
+
*/
|
|
219
|
+
export function toPrometheus() {
|
|
220
|
+
const snap = snapshot();
|
|
221
|
+
const lines = [];
|
|
222
|
+
lines.push('# HELP im_hub_uptime_seconds Process uptime in seconds');
|
|
223
|
+
lines.push('# TYPE im_hub_uptime_seconds gauge');
|
|
224
|
+
lines.push(`im_hub_uptime_seconds ${snap.uptimeSec}`);
|
|
225
|
+
lines.push('# HELP im_hub_agent_invocations_total Total agent invocations');
|
|
226
|
+
lines.push('# TYPE im_hub_agent_invocations_total counter');
|
|
227
|
+
for (const a of snap.agents) {
|
|
228
|
+
lines.push(`im_hub_agent_invocations_total{agent="${esc(a.agent)}",result="success"} ${a.success}`);
|
|
229
|
+
lines.push(`im_hub_agent_invocations_total{agent="${esc(a.agent)}",result="failure"} ${a.failure}`);
|
|
230
|
+
}
|
|
231
|
+
lines.push('# HELP im_hub_agent_cost_sum Sum of recorded cost per agent');
|
|
232
|
+
lines.push('# TYPE im_hub_agent_cost_sum counter');
|
|
233
|
+
for (const a of snap.agents) {
|
|
234
|
+
lines.push(`im_hub_agent_cost_sum{agent="${esc(a.agent)}"} ${a.costSum}`);
|
|
235
|
+
}
|
|
236
|
+
lines.push('# HELP im_hub_agent_latency_ms Latency quantiles (sliding window)');
|
|
237
|
+
lines.push('# TYPE im_hub_agent_latency_ms summary');
|
|
238
|
+
for (const a of snap.agents) {
|
|
239
|
+
lines.push(`im_hub_agent_latency_ms{agent="${esc(a.agent)}",quantile="0.5"} ${a.p50Ms}`);
|
|
240
|
+
lines.push(`im_hub_agent_latency_ms{agent="${esc(a.agent)}",quantile="0.95"} ${a.p95Ms}`);
|
|
241
|
+
lines.push(`im_hub_agent_latency_ms{agent="${esc(a.agent)}",quantile="0.99"} ${a.p99Ms}`);
|
|
242
|
+
lines.push(`im_hub_agent_latency_ms_count{agent="${esc(a.agent)}"} ${a.sampleCount}`);
|
|
243
|
+
}
|
|
244
|
+
lines.push('# HELP im_hub_intent_total Routing decisions by intent');
|
|
245
|
+
lines.push('# TYPE im_hub_intent_total counter');
|
|
246
|
+
for (const [intent, n] of Object.entries(snap.intentTotals)) {
|
|
247
|
+
lines.push(`im_hub_intent_total{intent="${esc(intent)}"} ${n}`);
|
|
248
|
+
}
|
|
249
|
+
lines.push('# HELP im_hub_platform_total Requests by platform');
|
|
250
|
+
lines.push('# TYPE im_hub_platform_total counter');
|
|
251
|
+
for (const [platform, n] of Object.entries(snap.platformTotals)) {
|
|
252
|
+
lines.push(`im_hub_platform_total{platform="${esc(platform)}"} ${n}`);
|
|
253
|
+
}
|
|
254
|
+
// Internal operational counters (M7).
|
|
255
|
+
lines.push('# HELP im_hub_audit_prune_failed_total Audit retention sweep failure count');
|
|
256
|
+
lines.push('# TYPE im_hub_audit_prune_failed_total counter');
|
|
257
|
+
lines.push(`im_hub_audit_prune_failed_total ${internalCounters.auditPruneFailures}`);
|
|
258
|
+
lines.push('# HELP im_hub_agent_cleanup_failed_total Per-spawn cleanup hook failures (e.g. mcp-config tmpdir unlink)');
|
|
259
|
+
lines.push('# TYPE im_hub_agent_cleanup_failed_total counter');
|
|
260
|
+
lines.push(`im_hub_agent_cleanup_failed_total ${internalCounters.agentCleanupFailures}`);
|
|
261
|
+
// Approval-bus snapshot (M14). Pulled lazily so metrics scrapes pick up
|
|
262
|
+
// the latest live counts. When no provider is wired (early startup,
|
|
263
|
+
// tests) we omit the family entirely instead of emitting zeros.
|
|
264
|
+
const ab = approvalBusSnapshot?.();
|
|
265
|
+
if (ab) {
|
|
266
|
+
lines.push('# HELP im_hub_approval_pending Currently pending approval requests');
|
|
267
|
+
lines.push('# TYPE im_hub_approval_pending gauge');
|
|
268
|
+
lines.push(`im_hub_approval_pending ${ab.pending}`);
|
|
269
|
+
lines.push('# HELP im_hub_approval_requests_total Lifetime approval requests received');
|
|
270
|
+
lines.push('# TYPE im_hub_approval_requests_total counter');
|
|
271
|
+
lines.push(`im_hub_approval_requests_total ${ab.totalRequests}`);
|
|
272
|
+
lines.push('# HELP im_hub_approval_resolved_total Lifetime approval resolutions');
|
|
273
|
+
lines.push('# TYPE im_hub_approval_resolved_total counter');
|
|
274
|
+
lines.push(`im_hub_approval_resolved_total{result="allow"} ${ab.totalAllowed}`);
|
|
275
|
+
lines.push(`im_hub_approval_resolved_total{result="deny"} ${ab.totalDenied}`);
|
|
276
|
+
lines.push(`im_hub_approval_resolved_total{result="timeout"} ${ab.totalTimedOut}`);
|
|
277
|
+
}
|
|
278
|
+
return lines.join('\n') + '\n';
|
|
279
|
+
}
|
|
280
|
+
/** Reset all counters. Test-only. */
|
|
281
|
+
export function reset() {
|
|
282
|
+
agentBuckets.clear();
|
|
283
|
+
intentCounter.clear();
|
|
284
|
+
platformCounter.clear();
|
|
285
|
+
internalCounters.auditPruneFailures = 0;
|
|
286
|
+
internalCounters.agentCleanupFailures = 0;
|
|
287
|
+
}
|
|
288
|
+
function esc(s) {
|
|
289
|
+
return String(s).replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
export interface OnboardingResult {
|
|
2
|
+
needsOnboarding: boolean;
|
|
3
|
+
availableMessengers: MessengerInfo[];
|
|
4
|
+
warnings?: string[];
|
|
5
|
+
}
|
|
6
|
+
export interface MessengerInfo {
|
|
7
|
+
id: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
export interface AgentCheckResult {
|
|
12
|
+
available: string[];
|
|
13
|
+
missing: string[];
|
|
14
|
+
allMissing: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentInstallHint {
|
|
17
|
+
agent: string;
|
|
18
|
+
npmPackage: string;
|
|
19
|
+
command: string;
|
|
20
|
+
}
|
|
21
|
+
export interface Config {
|
|
22
|
+
messengers: string[];
|
|
23
|
+
agents: string[];
|
|
24
|
+
defaultAgent: string;
|
|
25
|
+
telegram?: {
|
|
26
|
+
botToken: string;
|
|
27
|
+
channelId?: string;
|
|
28
|
+
};
|
|
29
|
+
feishu?: {
|
|
30
|
+
appId: string;
|
|
31
|
+
appSecret: string;
|
|
32
|
+
channelId?: string;
|
|
33
|
+
};
|
|
34
|
+
discord?: {
|
|
35
|
+
botToken: string;
|
|
36
|
+
channelId?: string;
|
|
37
|
+
allowedGuilds?: string[];
|
|
38
|
+
allowedChannels?: string[];
|
|
39
|
+
};
|
|
40
|
+
acpAgents?: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
aliases?: string[];
|
|
43
|
+
endpoint: string;
|
|
44
|
+
auth?: {
|
|
45
|
+
type: 'none' | 'apikey' | 'bearer';
|
|
46
|
+
token?: string;
|
|
47
|
+
};
|
|
48
|
+
enabled?: boolean;
|
|
49
|
+
}>;
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}
|
|
52
|
+
export declare function loadConfig(): Promise<Config>;
|
|
53
|
+
export declare function saveConfig(config: Config): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if messengers are configured.
|
|
56
|
+
* IMPORTANT: This checks the config.messengers array BEFORE any default fill.
|
|
57
|
+
*/
|
|
58
|
+
export declare function checkMessengerConfig(config: Config): OnboardingResult;
|
|
59
|
+
/**
|
|
60
|
+
* Check which agents are available.
|
|
61
|
+
* Result is cached with a 2-minute TTL.
|
|
62
|
+
*/
|
|
63
|
+
export declare function checkAgentAvailability(): Promise<AgentCheckResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if a specific agent is available.
|
|
66
|
+
*
|
|
67
|
+
* Uses the bulk cache when present, but falls through to a one-off probe
|
|
68
|
+
* if the agent name isn't represented (e.g. agent registered after the
|
|
69
|
+
* last bulk refresh). The probe result is itself cached for the TTL.
|
|
70
|
+
*/
|
|
71
|
+
export declare function isAgentAvailableCached(agentName: string): Promise<boolean>;
|
|
72
|
+
/**
|
|
73
|
+
* Clear the agent availability caches. Useful for tests that change the
|
|
74
|
+
* registry state, and for the future `/router refresh` ops command.
|
|
75
|
+
*/
|
|
76
|
+
export declare function clearAgentCache(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Generate friendly install message for missing agents
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatAgentInstallHint(missing: string[]): string;
|
|
81
|
+
/**
|
|
82
|
+
* Format error message when agent is not available
|
|
83
|
+
*/
|
|
84
|
+
export declare function formatAgentNotAvailableError(agentName: string): string;
|
|
85
|
+
/**
|
|
86
|
+
* Interactive onboarding flow.
|
|
87
|
+
* Returns updated config on success, null on failure/cancel.
|
|
88
|
+
*/
|
|
89
|
+
export declare function runMessengerOnboarding(config: Config): Promise<Config | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Format a user-friendly error message for messenger startup failures
|
|
92
|
+
*/
|
|
93
|
+
export declare function formatMessengerStartError(messengerName: string, error: unknown): string;
|
|
94
|
+
//# sourceMappingURL=onboarding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/core/onboarding.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,OAAO,CAAA;IACxB,mBAAmB,EAAE,aAAa,EAAE,CAAA;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE,OAAO,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACxG,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;QAClB,QAAQ,EAAE,MAAM,CAAA;QAChB,IAAI,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC7D,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB,CAAC,CAAA;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AA6BD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAWlD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAyBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAarE;AAiBD;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA+BxE;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBhF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAMD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAehE;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgBtE;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAgEnF;AA0KD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAWvF"}
|