agim-cli 1.0.1
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/CHANGELOG.md +1234 -0
- package/LICENSE +21 -0
- package/README.md +422 -0
- package/README.zh-CN.md +414 -0
- package/dist/cli-ui/cmd-handlers.d.ts +11 -0
- package/dist/cli-ui/cmd-handlers.d.ts.map +1 -0
- package/dist/cli-ui/cmd-handlers.js +240 -0
- package/dist/cli-ui/cmd-handlers.js.map +1 -0
- package/dist/cli-ui/config-wizard.d.ts +3 -0
- package/dist/cli-ui/config-wizard.d.ts.map +1 -0
- package/dist/cli-ui/config-wizard.js +851 -0
- package/dist/cli-ui/config-wizard.js.map +1 -0
- package/dist/cli-ui/entry-menu.d.ts +28 -0
- package/dist/cli-ui/entry-menu.d.ts.map +1 -0
- package/dist/cli-ui/entry-menu.js +50 -0
- package/dist/cli-ui/entry-menu.js.map +1 -0
- package/dist/cli-ui/env-file.d.ts +35 -0
- package/dist/cli-ui/env-file.d.ts.map +1 -0
- package/dist/cli-ui/env-file.js +163 -0
- package/dist/cli-ui/env-file.js.map +1 -0
- package/dist/cli-ui/i18n.d.ts +204 -0
- package/dist/cli-ui/i18n.d.ts.map +1 -0
- package/dist/cli-ui/i18n.js +455 -0
- package/dist/cli-ui/i18n.js.map +1 -0
- package/dist/cli-ui/lang-picker.d.ts +10 -0
- package/dist/cli-ui/lang-picker.d.ts.map +1 -0
- package/dist/cli-ui/lang-picker.js +33 -0
- package/dist/cli-ui/lang-picker.js.map +1 -0
- package/dist/cli-ui/paths.d.ts +4 -0
- package/dist/cli-ui/paths.d.ts.map +1 -0
- package/dist/cli-ui/paths.js +11 -0
- package/dist/cli-ui/paths.js.map +1 -0
- package/dist/cli-ui/prompts.d.ts +65 -0
- package/dist/cli-ui/prompts.d.ts.map +1 -0
- package/dist/cli-ui/prompts.js +125 -0
- package/dist/cli-ui/prompts.js.map +1 -0
- package/dist/cli-ui/service.d.ts +41 -0
- package/dist/cli-ui/service.d.ts.map +1 -0
- package/dist/cli-ui/service.js +241 -0
- package/dist/cli-ui/service.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1143 -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 +373 -0
- package/dist/core/agent-base.js.map +1 -0
- package/dist/core/agent-cwd.d.ts +48 -0
- package/dist/core/agent-cwd.d.ts.map +1 -0
- package/dist/core/agent-cwd.js +181 -0
- package/dist/core/agent-cwd.js.map +1 -0
- package/dist/core/agent-helper.d.ts +65 -0
- package/dist/core/agent-helper.d.ts.map +1 -0
- package/dist/core/agent-helper.js +150 -0
- package/dist/core/agent-helper.js.map +1 -0
- package/dist/core/agim-paths.d.ts +10 -0
- package/dist/core/agim-paths.d.ts.map +1 -0
- package/dist/core/agim-paths.js +64 -0
- package/dist/core/agim-paths.js.map +1 -0
- package/dist/core/approval-bus.d.ts +300 -0
- package/dist/core/approval-bus.d.ts.map +1 -0
- package/dist/core/approval-bus.js +990 -0
- package/dist/core/approval-bus.js.map +1 -0
- package/dist/core/approval-router.d.ts +101 -0
- package/dist/core/approval-router.d.ts.map +1 -0
- package/dist/core/approval-router.js +540 -0
- package/dist/core/approval-router.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/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 +40 -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 +85 -0
- package/dist/core/commands/approval.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 +304 -0
- package/dist/core/commands/builtin.js.map +1 -0
- package/dist/core/commands/cron.d.ts +3 -0
- package/dist/core/commands/cron.d.ts.map +1 -0
- package/dist/core/commands/cron.js +128 -0
- package/dist/core/commands/cron.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/memo.d.ts +3 -0
- package/dist/core/commands/memo.d.ts.map +1 -0
- package/dist/core/commands/memo.js +151 -0
- package/dist/core/commands/memo.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/remind.d.ts +3 -0
- package/dist/core/commands/remind.d.ts.map +1 -0
- package/dist/core/commands/remind.js +271 -0
- package/dist/core/commands/remind.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/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 +60 -0
- package/dist/core/config-schema.d.ts.map +1 -0
- package/dist/core/config-schema.js +75 -0
- package/dist/core/config-schema.js.map +1 -0
- package/dist/core/coord-systems.d.ts +65 -0
- package/dist/core/coord-systems.d.ts.map +1 -0
- package/dist/core/coord-systems.js +229 -0
- package/dist/core/coord-systems.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 +82 -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/location-context.d.ts +32 -0
- package/dist/core/location-context.d.ts.map +1 -0
- package/dist/core/location-context.js +69 -0
- package/dist/core/location-context.js.map +1 -0
- package/dist/core/location-token.d.ts +57 -0
- package/dist/core/location-token.d.ts.map +1 -0
- package/dist/core/location-token.js +128 -0
- package/dist/core/location-token.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/memo-rpc.d.ts +13 -0
- package/dist/core/memo-rpc.d.ts.map +1 -0
- package/dist/core/memo-rpc.js +288 -0
- package/dist/core/memo-rpc.js.map +1 -0
- package/dist/core/memos.d.ts +163 -0
- package/dist/core/memos.d.ts.map +1 -0
- package/dist/core/memos.js +502 -0
- package/dist/core/memos.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 +99 -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/pending-reminder.d.ts +25 -0
- package/dist/core/pending-reminder.d.ts.map +1 -0
- package/dist/core/pending-reminder.js +53 -0
- package/dist/core/pending-reminder.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 +126 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/remind-intent.d.ts +25 -0
- package/dist/core/remind-intent.d.ts.map +1 -0
- package/dist/core/remind-intent.js +196 -0
- package/dist/core/remind-intent.js.map +1 -0
- package/dist/core/reminder-rpc.d.ts +17 -0
- package/dist/core/reminder-rpc.d.ts.map +1 -0
- package/dist/core/reminder-rpc.js +169 -0
- package/dist/core/reminder-rpc.js.map +1 -0
- package/dist/core/reminders.d.ts +159 -0
- package/dist/core/reminders.d.ts.map +1 -0
- package/dist/core/reminders.js +977 -0
- package/dist/core/reminders.js.map +1 -0
- package/dist/core/router.d.ts +55 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +497 -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 +323 -0
- package/dist/core/schedule.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 +807 -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/types.d.ts +360 -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 +177 -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 +111 -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/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 +59 -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 +645 -0
- package/dist/plugins/agents/claude-code/mcp-approval-server.js.map +1 -0
- package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts +28 -0
- package/dist/plugins/agents/codex/build-mcp-cli-args.d.ts.map +1 -0
- package/dist/plugins/agents/codex/build-mcp-cli-args.js +74 -0
- package/dist/plugins/agents/codex/build-mcp-cli-args.js.map +1 -0
- package/dist/plugins/agents/codex/index.d.ts +53 -0
- package/dist/plugins/agents/codex/index.d.ts.map +1 -0
- package/dist/plugins/agents/codex/index.js +341 -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/ensure-mcp-config.d.ts +11 -0
- package/dist/plugins/agents/opencode/ensure-mcp-config.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/ensure-mcp-config.js +100 -0
- package/dist/plugins/agents/opencode/ensure-mcp-config.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 +166 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.js +682 -0
- package/dist/plugins/agents/opencode/opencode-http-adapter.js.map +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts +32 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.d.ts.map +1 -0
- package/dist/plugins/agents/opencode/opencode-stdio-adapter.js +137 -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 +194 -0
- package/dist/plugins/agents/opencode/serve-manager.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts +57 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js +409 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-adapter.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-client.d.ts +48 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-client.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-client.js +236 -0
- package/dist/plugins/messengers/dingtalk/dingtalk-client.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/index.d.ts +3 -0
- package/dist/plugins/messengers/dingtalk/index.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/index.js +3 -0
- package/dist/plugins/messengers/dingtalk/index.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/link-coords.d.ts +23 -0
- package/dist/plugins/messengers/dingtalk/link-coords.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/link-coords.js +89 -0
- package/dist/plugins/messengers/dingtalk/link-coords.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/media-store.d.ts +16 -0
- package/dist/plugins/messengers/dingtalk/media-store.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/media-store.js +77 -0
- package/dist/plugins/messengers/dingtalk/media-store.js.map +1 -0
- package/dist/plugins/messengers/dingtalk/types.d.ts +82 -0
- package/dist/plugins/messengers/dingtalk/types.d.ts.map +1 -0
- package/dist/plugins/messengers/dingtalk/types.js +14 -0
- package/dist/plugins/messengers/dingtalk/types.js.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.d.ts +21 -0
- package/dist/plugins/messengers/discord/discord-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/discord/discord-adapter.js +238 -0
- package/dist/plugins/messengers/discord/discord-adapter.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/email/email-adapter.d.ts +33 -0
- package/dist/plugins/messengers/email/email-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/email/email-adapter.js +137 -0
- package/dist/plugins/messengers/email/email-adapter.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 +23 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.js +250 -0
- package/dist/plugins/messengers/feishu/feishu-adapter.js.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-client.d.ts +43 -0
- package/dist/plugins/messengers/feishu/feishu-client.d.ts.map +1 -0
- package/dist/plugins/messengers/feishu/feishu-client.js +118 -0
- package/dist/plugins/messengers/feishu/feishu-client.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 +59 -0
- package/dist/plugins/messengers/telegram/media-download.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/media-download.js +228 -0
- package/dist/plugins/messengers/telegram/media-download.js.map +1 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts +77 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/telegram/telegram-adapter.js +880 -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/context-store.d.ts +18 -0
- package/dist/plugins/messengers/wechat/context-store.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/context-store.js +105 -0
- package/dist/plugins/messengers/wechat/context-store.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts +71 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.js +664 -0
- package/dist/plugins/messengers/wechat/ilink-adapter.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-client.d.ts +75 -0
- package/dist/plugins/messengers/wechat/ilink-client.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-client.js +331 -0
- package/dist/plugins/messengers/wechat/ilink-client.js.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-types.d.ts +181 -0
- package/dist/plugins/messengers/wechat/ilink-types.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/ilink-types.js +22 -0
- package/dist/plugins/messengers/wechat/ilink-types.js.map +1 -0
- package/dist/plugins/messengers/wechat/media-download.d.ts +32 -0
- package/dist/plugins/messengers/wechat/media-download.d.ts.map +1 -0
- package/dist/plugins/messengers/wechat/media-download.js +78 -0
- package/dist/plugins/messengers/wechat/media-download.js.map +1 -0
- package/dist/scripts/migrate-gcj02-to-wgs84.d.ts +3 -0
- package/dist/scripts/migrate-gcj02-to-wgs84.d.ts.map +1 -0
- package/dist/scripts/migrate-gcj02-to-wgs84.js +52 -0
- package/dist/scripts/migrate-gcj02-to-wgs84.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 +936 -0
- package/dist/web/public/loc.html +305 -0
- package/dist/web/public/login.html +106 -0
- package/dist/web/public/memos.html +271 -0
- package/dist/web/public/reminders.html +234 -0
- package/dist/web/public/settings.html +1355 -0
- package/dist/web/public/tasks.html +1835 -0
- package/dist/web/server.d.ts +12 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +2399 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,540 @@
|
|
|
1
|
+
// approval-router — 把 approval-bus 的两个端口接到 IM messenger 上:
|
|
2
|
+
// 1. notifier:bus 收到 sidecar 的审批请求 → 这里翻译成文本/卡片 → 推到对应 IM thread
|
|
3
|
+
// 2. 拦截层:用户在该 thread 回复 y/n/批准/拒绝时,cli 主 handler 把消息先交给我们;
|
|
4
|
+
// 命中就 resolvePending,吃掉这条消息不进 router;不命中放行,并把已挂起的
|
|
5
|
+
// pending 当作"用户改主意"自动 deny。
|
|
6
|
+
//
|
|
7
|
+
// 不知道 messenger 实现细节,只通过注入的 resolveMessenger 拿到 sendMessage/sendCard。
|
|
8
|
+
import { approvalBus, } from './approval-bus.js';
|
|
9
|
+
import { logger as rootLogger } from './logger.js';
|
|
10
|
+
const log = rootLogger.child({ component: 'approval-router' });
|
|
11
|
+
/** Truncation limit for the plain-text approval prompt. Conservative because
|
|
12
|
+
* some IMs (older WeChat clients) start chunking aggressively past ~500
|
|
13
|
+
* chars and the y/n line at the bottom must stay visible. */
|
|
14
|
+
const MAX_INPUT_PREVIEW = 400;
|
|
15
|
+
/** Truncation limit for the rich-card approval prompt. Telegram allows ~4 KB
|
|
16
|
+
* per message; with the surrounding template (~150 chars) and a <pre>
|
|
17
|
+
* block, 1500 fits in one bubble and covers the long tail of Bash / Edit
|
|
18
|
+
* payloads without losing context. */
|
|
19
|
+
const MAX_INPUT_PREVIEW_CARD = 1500;
|
|
20
|
+
const ALLOW_TOKENS = new Set([
|
|
21
|
+
'y', 'yes', 'ok', '1', '批准', '同意', '通过', '可以', '✅',
|
|
22
|
+
]);
|
|
23
|
+
const DENY_TOKENS = new Set([
|
|
24
|
+
'n', 'no', '0', '拒绝', '不同意', '不行', '不可以', '不', '❌',
|
|
25
|
+
]);
|
|
26
|
+
/** "Approve this and auto-approve future calls of the same tool with the
|
|
27
|
+
* same input prefix in this session." Bus consumes `autoAllowFurther` and
|
|
28
|
+
* registers the rule. */
|
|
29
|
+
const ALLOW_ALL_TOKENS = new Set([
|
|
30
|
+
'all', 'a', '全部', '总是', '都同意', '都批准',
|
|
31
|
+
]);
|
|
32
|
+
/**
|
|
33
|
+
* Classify an inbound IM reply as an approval decision. Returns null when the
|
|
34
|
+
* reply doesn't match any known pattern — the caller should treat that as
|
|
35
|
+
* "user changed topic" and route normally.
|
|
36
|
+
*/
|
|
37
|
+
export function parseApprovalReply(text) {
|
|
38
|
+
const trimmed = text.trim().toLowerCase();
|
|
39
|
+
if (!trimmed)
|
|
40
|
+
return null;
|
|
41
|
+
// Strip leading slashes so "/y" works too — some users do that on Telegram.
|
|
42
|
+
const stripped = trimmed.startsWith('/') ? trimmed.slice(1) : trimmed;
|
|
43
|
+
if (ALLOW_ALL_TOKENS.has(stripped)) {
|
|
44
|
+
return { behavior: 'allow', autoAllowFurther: true };
|
|
45
|
+
}
|
|
46
|
+
if (ALLOW_TOKENS.has(stripped)) {
|
|
47
|
+
return { behavior: 'allow' };
|
|
48
|
+
}
|
|
49
|
+
if (DENY_TOKENS.has(stripped)) {
|
|
50
|
+
return { behavior: 'deny', message: '用户在 IM 中拒绝了这次工具调用' };
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Compact JSON serialize with truncation. Used by the rich-card path (which
|
|
56
|
+
* has its own UI rendering) — for plain-text we use formatInputBody below.
|
|
57
|
+
*/
|
|
58
|
+
function safeStringify(v, maxLen) {
|
|
59
|
+
let s;
|
|
60
|
+
try {
|
|
61
|
+
s = JSON.stringify(v);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
s = String(v);
|
|
65
|
+
}
|
|
66
|
+
if (s.length > maxLen)
|
|
67
|
+
s = `${s.slice(0, maxLen - 1)}…`;
|
|
68
|
+
return s;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Strip MCP-style prefix from a tool name for display. `mcp__imhub__create_reminder`
|
|
72
|
+
* → `imhub: create_reminder` (the user cares about the namespace, not the
|
|
73
|
+
* triple-underscore wire format).
|
|
74
|
+
*/
|
|
75
|
+
function displayToolName(name) {
|
|
76
|
+
const m = /^mcp__([^_]+(?:_[^_]+)*)__(.+)$/.exec(name);
|
|
77
|
+
if (m)
|
|
78
|
+
return `${m[1]}: ${m[2]}`;
|
|
79
|
+
return name;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Render the input payload as a multiline body. Known tools (Bash / Read /
|
|
83
|
+
* Edit / Write / Grep / Glob / WebFetch) get a single labelled line for
|
|
84
|
+
* their primary field. Unknown tools fall back to compact JSON, truncated.
|
|
85
|
+
*
|
|
86
|
+
* The goal is "user can decide y/n in 1 second" — they shouldn't have to
|
|
87
|
+
* mentally parse JSON for the most common tools.
|
|
88
|
+
*/
|
|
89
|
+
function formatInputBody(toolName, input, maxLen) {
|
|
90
|
+
// Single-field shortcuts for built-in claude-code tools.
|
|
91
|
+
const single = (label, key) => {
|
|
92
|
+
const v = input[key];
|
|
93
|
+
if (typeof v !== 'string')
|
|
94
|
+
return null;
|
|
95
|
+
const truncated = v.length > maxLen ? `${v.slice(0, maxLen - 1)}…` : v;
|
|
96
|
+
return `${label}:${truncated}`;
|
|
97
|
+
};
|
|
98
|
+
switch (toolName) {
|
|
99
|
+
case 'Bash': {
|
|
100
|
+
const cmd = single('命令', 'command');
|
|
101
|
+
if (cmd)
|
|
102
|
+
return cmd;
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
case 'Read':
|
|
106
|
+
case 'Edit':
|
|
107
|
+
case 'Write':
|
|
108
|
+
case 'NotebookEdit': {
|
|
109
|
+
const fp = single('路径', 'file_path');
|
|
110
|
+
if (fp)
|
|
111
|
+
return fp;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case 'Glob': {
|
|
115
|
+
const p = single('Pattern', 'pattern');
|
|
116
|
+
if (p)
|
|
117
|
+
return p;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
case 'Grep': {
|
|
121
|
+
const p = single('查找', 'pattern');
|
|
122
|
+
if (p)
|
|
123
|
+
return p;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case 'WebFetch':
|
|
127
|
+
case 'WebSearch': {
|
|
128
|
+
const u = single('URL', 'url') ?? single('Query', 'query');
|
|
129
|
+
if (u)
|
|
130
|
+
return u;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Fallback: JSON dump, but pretty-printed when small enough.
|
|
135
|
+
let s;
|
|
136
|
+
try {
|
|
137
|
+
const pretty = JSON.stringify(input, null, 2);
|
|
138
|
+
s = pretty.length <= maxLen ? pretty : JSON.stringify(input);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
s = String(input);
|
|
142
|
+
}
|
|
143
|
+
if (s.length > maxLen)
|
|
144
|
+
s = `${s.slice(0, maxLen - 1)}…`;
|
|
145
|
+
// For multi-line JSON, indent so it visually groups under the "入参" label.
|
|
146
|
+
if (s.includes('\n')) {
|
|
147
|
+
return `入参:\n${s.split('\n').map((l) => ` ${l}`).join('\n')}`;
|
|
148
|
+
}
|
|
149
|
+
return `入参:${s}`;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Render an approval request as a plain text message. We keep this format
|
|
153
|
+
* stable across IM platforms; richer flows (Feishu cards with buttons) can
|
|
154
|
+
* layer on later by checking platform/sendCard.
|
|
155
|
+
*
|
|
156
|
+
* Two flavors:
|
|
157
|
+
* - Normal: y/n/all action box with timeout footer
|
|
158
|
+
* - Auto-allow grace mode (n.autoAllow set): "⏱ 自动放行中…" with deny option
|
|
159
|
+
*/
|
|
160
|
+
export function formatApprovalPrompt(n) {
|
|
161
|
+
const tool = displayToolName(n.toolName);
|
|
162
|
+
const body = formatInputBody(n.toolName, n.input, MAX_INPUT_PREVIEW);
|
|
163
|
+
if (n.autoAllow) {
|
|
164
|
+
const sec = Math.round(n.autoAllow.graceMs / 1000);
|
|
165
|
+
return [
|
|
166
|
+
`⏱ 自动放行中(${sec}s 后执行)`,
|
|
167
|
+
``,
|
|
168
|
+
`工具:${tool}`,
|
|
169
|
+
body,
|
|
170
|
+
``,
|
|
171
|
+
`回复 n 可拒绝并撤销规则`,
|
|
172
|
+
`req ${n.reqId.slice(0, 8)}`,
|
|
173
|
+
].join('\n');
|
|
174
|
+
}
|
|
175
|
+
return [
|
|
176
|
+
`🔐 需要审批`,
|
|
177
|
+
``,
|
|
178
|
+
`工具:${tool}`,
|
|
179
|
+
body,
|
|
180
|
+
``,
|
|
181
|
+
`y 批准`,
|
|
182
|
+
`n 拒绝`,
|
|
183
|
+
`all 本会话同类自动放行`,
|
|
184
|
+
``,
|
|
185
|
+
`5 分钟未回 = 拒绝 · req ${n.reqId.slice(0, 8)}`,
|
|
186
|
+
].join('\n');
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Map an IM platform name to its messenger registration. WeChat is special-
|
|
190
|
+
* cased because the messenger is registered as "wechat-ilink" but messages
|
|
191
|
+
* carry platform="wechat".
|
|
192
|
+
*/
|
|
193
|
+
export function platformToMessengerName(platform) {
|
|
194
|
+
return platform === 'wechat' ? 'wechat-ilink' : platform;
|
|
195
|
+
}
|
|
196
|
+
let installed = null;
|
|
197
|
+
const activeCards = new Map();
|
|
198
|
+
/**
|
|
199
|
+
* Wire approval-bus.notifier to the messenger layer. Idempotent: calling
|
|
200
|
+
* install() twice replaces the previous wiring.
|
|
201
|
+
*
|
|
202
|
+
* Notifier prefers the rich-card path (sendApprovalCard) when the resolved
|
|
203
|
+
* adapter implements it; otherwise it falls back to the plain-text path
|
|
204
|
+
* (sendMessage with formatApprovalPrompt). The text path is the canonical
|
|
205
|
+
* approval channel for adapters without native interactive buttons (Feishu
|
|
206
|
+
* cards aren't wired for buttons yet, WeChat iLink can't render them).
|
|
207
|
+
*
|
|
208
|
+
* Button callbacks: for each platform listed in buttonCallbackPlatforms
|
|
209
|
+
* whose adapter implements onButtonCallback, we subscribe a handler that
|
|
210
|
+
* parses callback_data of the form `apv:<reqId>:<y|n|a>` and resolves the
|
|
211
|
+
* matching pending. Subscribing happens once at install — adapters started
|
|
212
|
+
* later won't receive button wiring until install() is called again.
|
|
213
|
+
*/
|
|
214
|
+
export function install(opts) {
|
|
215
|
+
installed = opts;
|
|
216
|
+
approvalBus.setNotifier(async (n) => {
|
|
217
|
+
const m = opts.resolveMessenger(n.ctx.platform);
|
|
218
|
+
if (!m) {
|
|
219
|
+
log.warn({ event: 'approval.router.no_messenger', platform: n.ctx.platform, reqId: n.reqId }, 'No messenger registered for platform; approval cannot be surfaced');
|
|
220
|
+
// Throwing tells the bus to auto-deny this request.
|
|
221
|
+
throw new Error(`no messenger for platform ${n.ctx.platform}`);
|
|
222
|
+
}
|
|
223
|
+
// Rich-card path (Telegram inline keyboard).
|
|
224
|
+
if (m.sendApprovalCard) {
|
|
225
|
+
const prompt = {
|
|
226
|
+
reqId: n.reqId,
|
|
227
|
+
toolName: n.toolName,
|
|
228
|
+
inputJson: safeStringify(n.input, MAX_INPUT_PREVIEW_CARD),
|
|
229
|
+
mode: n.autoAllow ? 'auto-allow' : 'normal',
|
|
230
|
+
graceSeconds: n.autoAllow ? Math.round(n.autoAllow.graceMs / 1000) : undefined,
|
|
231
|
+
};
|
|
232
|
+
try {
|
|
233
|
+
const { messageId } = await m.sendApprovalCard(n.ctx.threadId, prompt);
|
|
234
|
+
activeCards.set(n.reqId, {
|
|
235
|
+
platform: n.ctx.platform,
|
|
236
|
+
threadId: n.ctx.threadId,
|
|
237
|
+
messageId,
|
|
238
|
+
});
|
|
239
|
+
log.info({
|
|
240
|
+
event: 'approval.router.card_sent',
|
|
241
|
+
platform: n.ctx.platform,
|
|
242
|
+
threadId: n.ctx.threadId,
|
|
243
|
+
reqId: n.reqId,
|
|
244
|
+
messageId,
|
|
245
|
+
});
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
log.warn({
|
|
250
|
+
event: 'approval.router.card_failed_fallback',
|
|
251
|
+
err: String(err),
|
|
252
|
+
reqId: n.reqId,
|
|
253
|
+
}, 'sendApprovalCard threw; falling back to text path');
|
|
254
|
+
// Fall through to text path
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Text path (Feishu / WeChat / any adapter without sendApprovalCard).
|
|
258
|
+
const text = formatApprovalPrompt(n);
|
|
259
|
+
await m.sendMessage(n.ctx.threadId, text);
|
|
260
|
+
log.info({ event: 'approval.router.prompt_sent', platform: n.ctx.platform, threadId: n.ctx.threadId, reqId: n.reqId });
|
|
261
|
+
});
|
|
262
|
+
const platforms = opts.buttonCallbackPlatforms ?? ['telegram', 'feishu', 'wechat', 'discord', 'web'];
|
|
263
|
+
for (const platform of platforms) {
|
|
264
|
+
bindButtonHandlerForPlatform(platform);
|
|
265
|
+
}
|
|
266
|
+
// Listen for non-user resolutions (timeout, sidecar disconnect, run
|
|
267
|
+
// terminated, shutdown, notifier error) so we can collapse the card to
|
|
268
|
+
// a terminal "已过期" state. The user-driven path (button click / y-n
|
|
269
|
+
// text reply) edits the card itself BEFORE the listener fires — by that
|
|
270
|
+
// time activeCards has already been pruned, so this listener no-ops on
|
|
271
|
+
// cause='user'. Defensive double-check via cause makes intent explicit.
|
|
272
|
+
approvalBus.setResolutionListener((e) => onBusResolution(e));
|
|
273
|
+
}
|
|
274
|
+
export function uninstall() {
|
|
275
|
+
installed = null;
|
|
276
|
+
approvalBus.setNotifier(null);
|
|
277
|
+
approvalBus.setResolutionListener(null);
|
|
278
|
+
activeCards.clear();
|
|
279
|
+
// Note: we don't unsubscribe button handlers from messengers — tests that
|
|
280
|
+
// re-install will overwrite via onButtonCallback's "replace previous"
|
|
281
|
+
// contract. Production never uninstalls.
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Bind the inline-button handler for a single platform's messenger. The
|
|
285
|
+
* install() loop calls this for every default platform at boot; callers
|
|
286
|
+
* (e.g. web/server.ts) that register their messenger AFTER install have
|
|
287
|
+
* to call this themselves to get button-click → resolvePending wiring.
|
|
288
|
+
*
|
|
289
|
+
* Idempotent at the messenger level — onButtonCallback's contract is
|
|
290
|
+
* "replace previous handler", so re-calling this on the same platform
|
|
291
|
+
* just rewires.
|
|
292
|
+
*
|
|
293
|
+
* Silent no-op when the messenger isn't registered yet, has no
|
|
294
|
+
* onButtonCallback, or the router hasn't been install()'d.
|
|
295
|
+
*/
|
|
296
|
+
export function bindButtonHandlerForPlatform(platform) {
|
|
297
|
+
if (!installed)
|
|
298
|
+
return;
|
|
299
|
+
const m = installed.resolveMessenger(platform);
|
|
300
|
+
if (!m?.onButtonCallback)
|
|
301
|
+
return;
|
|
302
|
+
m.onButtonCallback(async (cb) => handleButtonCallback(platform, cb));
|
|
303
|
+
log.info({ event: 'approval.router.button_handler_bound', platform });
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Bus-side resolution listener. Fires for every transition pending → resolved
|
|
307
|
+
* regardless of cause. We only act on non-user causes here: those are the
|
|
308
|
+
* cases where no IM-side handler updated the card, so without us the user
|
|
309
|
+
* sees a card with stale buttons.
|
|
310
|
+
*
|
|
311
|
+
* For auto-allow grace expiry that resolves to allow, we still mark the card
|
|
312
|
+
* as 'allowed' (without byUserDisplay) — the call did go through, just
|
|
313
|
+
* silently. For all other non-user causes (timeout deny, disconnect, run
|
|
314
|
+
* terminated, shutdown, notifier error), the card collapses to 'expired'.
|
|
315
|
+
*/
|
|
316
|
+
function onBusResolution(e) {
|
|
317
|
+
if (e.cause === 'user')
|
|
318
|
+
return; // button/text path already edited
|
|
319
|
+
const card = activeCards.get(e.reqId);
|
|
320
|
+
if (!card)
|
|
321
|
+
return; // text-fallback path doesn't track cards
|
|
322
|
+
activeCards.delete(e.reqId);
|
|
323
|
+
if (!installed)
|
|
324
|
+
return;
|
|
325
|
+
const m = installed.resolveMessenger(card.platform);
|
|
326
|
+
if (!m?.editApprovalCard)
|
|
327
|
+
return;
|
|
328
|
+
let decision;
|
|
329
|
+
if (e.cause === 'timeout' && e.decision.behavior === 'allow') {
|
|
330
|
+
// auto-allow grace fired silently
|
|
331
|
+
decision = 'allowed';
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
decision = 'expired';
|
|
335
|
+
}
|
|
336
|
+
m.editApprovalCard(card.threadId, card.messageId, {
|
|
337
|
+
decision,
|
|
338
|
+
atDate: new Date(),
|
|
339
|
+
}).catch((err) => {
|
|
340
|
+
log.warn({ event: 'approval.router.bus_edit_failed', reqId: e.reqId, err: String(err) });
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Called by cli's onMessage handler before it routes to the agent.
|
|
345
|
+
* Returns true when this message was an approval reply (so the caller should
|
|
346
|
+
* stop and not invoke the normal router).
|
|
347
|
+
*
|
|
348
|
+
* Behavior:
|
|
349
|
+
* - If thread has no pending approval → return false, do nothing
|
|
350
|
+
* - If thread has pending AND text parses as decision → resolve, return true
|
|
351
|
+
* - If thread has pending AND text does NOT parse → auto-deny pending
|
|
352
|
+
* (user is moving on), return false so the message routes normally
|
|
353
|
+
*
|
|
354
|
+
* Receipt: when the resolution adds or revokes an auto-allow rule, also
|
|
355
|
+
* sends a one-line confirmation back to the IM thread so the user knows
|
|
356
|
+
* the rule landed (or got cleared). Best-effort: a missing messenger or
|
|
357
|
+
* sendMessage failure is logged and ignored — the approval itself already
|
|
358
|
+
* resolved successfully.
|
|
359
|
+
*/
|
|
360
|
+
/**
|
|
361
|
+
* Called by cli's onMessage handler before it routes to the agent.
|
|
362
|
+
* `key` must be a composite key from `threadKey(platform, channelId, threadId)`
|
|
363
|
+
* — same value the bus stored under at registerRun/registerSyntheticPending
|
|
364
|
+
* time. A bare threadId will miss in multi-platform deployments.
|
|
365
|
+
*/
|
|
366
|
+
export function tryHandleApprovalReply(key, text) {
|
|
367
|
+
if (!approvalBus.hasPendingFor(key))
|
|
368
|
+
return false;
|
|
369
|
+
const decision = parseApprovalReply(text);
|
|
370
|
+
if (decision) {
|
|
371
|
+
const info = approvalBus.resolvePending(key, decision);
|
|
372
|
+
log.info({ event: 'approval.router.resolved', key, behavior: decision.behavior });
|
|
373
|
+
if (info) {
|
|
374
|
+
editCardOnThreadResolution(info, decision, undefined);
|
|
375
|
+
sendReceiptIfAny(info, decision);
|
|
376
|
+
}
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
const redirectDecision = {
|
|
380
|
+
behavior: 'deny',
|
|
381
|
+
message: '用户在 IM 中改换话题,未给出审批回复',
|
|
382
|
+
};
|
|
383
|
+
const info = approvalBus.resolvePending(key, redirectDecision);
|
|
384
|
+
if (info)
|
|
385
|
+
editCardOnThreadResolution(info, redirectDecision, undefined);
|
|
386
|
+
log.info({ event: 'approval.router.redirected', key });
|
|
387
|
+
return false;
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Inline-button handler. callback_data format: `apv:<reqId>:<y|n|a>`.
|
|
391
|
+
* Resolves the matching pending via approvalBus.resolvePending, acks the
|
|
392
|
+
* button (must happen within ~1s on Telegram), edits the card to its
|
|
393
|
+
* terminal state, and sends the same auto-allow receipt the text path
|
|
394
|
+
* would send.
|
|
395
|
+
*
|
|
396
|
+
* Late clicks (already resolved or expired): we ack with a soft hint and
|
|
397
|
+
* try to edit the card to the "expired" state so subsequent users see a
|
|
398
|
+
* clean terminal view.
|
|
399
|
+
*/
|
|
400
|
+
async function handleButtonCallback(platform, cb) {
|
|
401
|
+
const parsed = parseCallbackData(cb.data);
|
|
402
|
+
if (!parsed) {
|
|
403
|
+
await cb.ack('未识别的按钮');
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
406
|
+
const decision = decisionFromButton(parsed.choice);
|
|
407
|
+
const info = approvalBus.resolvePendingByReqId(parsed.reqId, decision);
|
|
408
|
+
if (!info) {
|
|
409
|
+
await cb.ack('请求已过期或已被处理');
|
|
410
|
+
if (installed) {
|
|
411
|
+
const m = installed.resolveMessenger(platform);
|
|
412
|
+
if (m?.editApprovalCard) {
|
|
413
|
+
await m.editApprovalCard(cb.threadId, cb.messageId, {
|
|
414
|
+
decision: 'expired',
|
|
415
|
+
atDate: new Date(),
|
|
416
|
+
}).catch((err) => {
|
|
417
|
+
log.warn({ event: 'approval.router.expire_edit_failed', err: String(err) });
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
activeCards.delete(parsed.reqId);
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const ackText = decision.behavior === 'allow'
|
|
425
|
+
? (decision.autoAllowFurther ? '🛡 已批准并自动放行' : '✅ 已批准')
|
|
426
|
+
: (info.wasAutoAllow ? '❌ 已拒绝并撤销规则' : '❌ 已拒绝');
|
|
427
|
+
await cb.ack(ackText);
|
|
428
|
+
if (installed) {
|
|
429
|
+
const m = installed.resolveMessenger(info.platform);
|
|
430
|
+
if (m?.editApprovalCard) {
|
|
431
|
+
const outcome = {
|
|
432
|
+
decision: outcomeFromDecision(decision, info.wasAutoAllow),
|
|
433
|
+
byUserDisplay: cb.userDisplay,
|
|
434
|
+
atDate: new Date(),
|
|
435
|
+
};
|
|
436
|
+
await m.editApprovalCard(cb.threadId, cb.messageId, outcome).catch((err) => {
|
|
437
|
+
log.warn({ event: 'approval.router.edit_failed', err: String(err) });
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
activeCards.delete(parsed.reqId);
|
|
442
|
+
log.info({
|
|
443
|
+
event: 'approval.router.button_resolved',
|
|
444
|
+
platform,
|
|
445
|
+
threadId: cb.threadId,
|
|
446
|
+
behavior: decision.behavior,
|
|
447
|
+
autoAllowFurther: decision.behavior === 'allow' && decision.autoAllowFurther === true,
|
|
448
|
+
});
|
|
449
|
+
sendReceiptIfAny(info, decision);
|
|
450
|
+
}
|
|
451
|
+
/** Find the active card matching the resolved reqId and edit it to its
|
|
452
|
+
* terminal state. Keyed strictly by reqId — both the text y/n path and the
|
|
453
|
+
* button-callback path now resolve via reqId, so a thread-scan fallback is
|
|
454
|
+
* unnecessary. No-op when no card was registered (other IMs / fallback). */
|
|
455
|
+
function editCardOnThreadResolution(info, decision, byUserDisplay) {
|
|
456
|
+
if (!installed)
|
|
457
|
+
return;
|
|
458
|
+
const card = activeCards.get(info.reqId);
|
|
459
|
+
if (!card)
|
|
460
|
+
return;
|
|
461
|
+
activeCards.delete(info.reqId);
|
|
462
|
+
const m = installed.resolveMessenger(info.platform);
|
|
463
|
+
if (!m?.editApprovalCard)
|
|
464
|
+
return;
|
|
465
|
+
const outcome = {
|
|
466
|
+
decision: outcomeFromDecision(decision, info.wasAutoAllow),
|
|
467
|
+
byUserDisplay,
|
|
468
|
+
atDate: new Date(),
|
|
469
|
+
};
|
|
470
|
+
m.editApprovalCard(card.threadId, card.messageId, outcome).catch((err) => {
|
|
471
|
+
log.warn({ event: 'approval.router.edit_failed', err: String(err) });
|
|
472
|
+
});
|
|
473
|
+
}
|
|
474
|
+
function outcomeFromDecision(d, wasAutoAllow) {
|
|
475
|
+
if (d.behavior === 'allow') {
|
|
476
|
+
return d.autoAllowFurther ? 'allowed-pinned' : 'allowed';
|
|
477
|
+
}
|
|
478
|
+
return wasAutoAllow ? 'denied-revoked' : 'denied';
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Parse callback_data of the form `apv:<reqId>:<y|n|a>`. reqId may itself
|
|
482
|
+
* contain characters but never `:` in practice (UUID / opaque sidecar id);
|
|
483
|
+
* we still split on the LAST colon to be safe, leaving the choice as the
|
|
484
|
+
* single trailing letter.
|
|
485
|
+
*/
|
|
486
|
+
export function parseCallbackData(data) {
|
|
487
|
+
if (!data.startsWith('apv:'))
|
|
488
|
+
return null;
|
|
489
|
+
const rest = data.slice(4);
|
|
490
|
+
const lastColon = rest.lastIndexOf(':');
|
|
491
|
+
if (lastColon <= 0)
|
|
492
|
+
return null;
|
|
493
|
+
const reqId = rest.slice(0, lastColon);
|
|
494
|
+
const choice = rest.slice(lastColon + 1);
|
|
495
|
+
if (choice !== 'y' && choice !== 'n' && choice !== 'a')
|
|
496
|
+
return null;
|
|
497
|
+
if (!reqId)
|
|
498
|
+
return null;
|
|
499
|
+
return { reqId, choice };
|
|
500
|
+
}
|
|
501
|
+
function decisionFromButton(choice) {
|
|
502
|
+
if (choice === 'y')
|
|
503
|
+
return { behavior: 'allow' };
|
|
504
|
+
if (choice === 'a')
|
|
505
|
+
return { behavior: 'allow', autoAllowFurther: true };
|
|
506
|
+
return { behavior: 'deny', message: '用户在 IM 中拒绝了这次工具调用(按钮)' };
|
|
507
|
+
}
|
|
508
|
+
/**
|
|
509
|
+
* If the user just enabled an auto-allow rule (allow + autoAllowFurther) or
|
|
510
|
+
* just revoked one (deny while in grace mode), push a short confirmation
|
|
511
|
+
* line to the originating thread.
|
|
512
|
+
*/
|
|
513
|
+
function sendReceiptIfAny(info, decision) {
|
|
514
|
+
if (!installed)
|
|
515
|
+
return;
|
|
516
|
+
let msg = null;
|
|
517
|
+
if (decision.behavior === 'allow' && decision.autoAllowFurther) {
|
|
518
|
+
msg = [
|
|
519
|
+
'✅ 已批准并启用自动放行',
|
|
520
|
+
`规则:${info.toolName} 前缀 "${info.fingerprint}" 5s 内自动放行`,
|
|
521
|
+
'撤销:本会话回 n 单条 / /approval clear 清空',
|
|
522
|
+
].join('\n');
|
|
523
|
+
}
|
|
524
|
+
else if (decision.behavior === 'deny' && info.wasAutoAllow) {
|
|
525
|
+
msg = `❌ 已拒绝并撤销自动放行规则:${info.toolName} "${info.fingerprint}"`;
|
|
526
|
+
}
|
|
527
|
+
if (!msg)
|
|
528
|
+
return;
|
|
529
|
+
const m = installed.resolveMessenger(info.platform);
|
|
530
|
+
if (!m) {
|
|
531
|
+
log.warn({ event: 'approval.router.receipt_no_messenger', platform: info.platform });
|
|
532
|
+
return;
|
|
533
|
+
}
|
|
534
|
+
m.sendMessage(info.threadId, msg).catch((err) => {
|
|
535
|
+
log.warn({ event: 'approval.router.receipt_failed', err: String(err) });
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
/** Test helper — not exported from index. */
|
|
539
|
+
export function _isInstalled() { return installed !== null; }
|
|
540
|
+
//# sourceMappingURL=approval-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-router.js","sourceRoot":"","sources":["../../src/core/approval-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface AuditRecord {
|
|
3
|
+
traceId: string;
|
|
4
|
+
userId: string;
|
|
5
|
+
platform: string;
|
|
6
|
+
agent: string;
|
|
7
|
+
intent: string;
|
|
8
|
+
promptLen: number;
|
|
9
|
+
responseLen: number;
|
|
10
|
+
durationMs: number;
|
|
11
|
+
cost: number;
|
|
12
|
+
success: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function logInvocation(rec: AuditRecord): void;
|
|
16
|
+
export interface QueryOpts {
|
|
17
|
+
limit?: number;
|
|
18
|
+
agent?: string;
|
|
19
|
+
platform?: string;
|
|
20
|
+
userId?: string;
|
|
21
|
+
intent?: string;
|
|
22
|
+
days?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface InvocationRow {
|
|
25
|
+
id: number;
|
|
26
|
+
trace_id: string;
|
|
27
|
+
ts: string;
|
|
28
|
+
user_id: string;
|
|
29
|
+
platform: string;
|
|
30
|
+
agent: string;
|
|
31
|
+
intent: string;
|
|
32
|
+
prompt_len: number;
|
|
33
|
+
response_len: number;
|
|
34
|
+
duration_ms: number;
|
|
35
|
+
cost: number;
|
|
36
|
+
success: number;
|
|
37
|
+
error: string | null;
|
|
38
|
+
}
|
|
39
|
+
export declare function queryInvocations(opts?: QueryOpts): InvocationRow[];
|
|
40
|
+
/**
|
|
41
|
+
* Delete rows older than the retention window. Returns number of deleted
|
|
42
|
+
* rows so callers / tests can assert behavior.
|
|
43
|
+
*/
|
|
44
|
+
export declare function pruneExpired(d?: Database.Database): number;
|
|
45
|
+
/** Stop the periodic retention sweep (used by tests and graceful shutdown). */
|
|
46
|
+
export declare function stopRetentionSweep(): void;
|
|
47
|
+
/** Close the underlying SQLite handle. Pairs with stopRetentionSweep on
|
|
48
|
+
* graceful shutdown so WAL is checkpointed cleanly (L2). */
|
|
49
|
+
export declare function closeAuditDb(): void;
|
|
50
|
+
export declare function getStats(): {
|
|
51
|
+
total: number;
|
|
52
|
+
byAgent: Record<string, number>;
|
|
53
|
+
totalCost: number;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../src/core/audit-log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAwE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAyCpD;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,SAAc,GAAG,aAAa,EAAE,CAyBtE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,GAAE,QAAQ,CAAC,QAAmB,GAAG,MAAM,CAmBpE;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED;6DAC6D;AAC7D,wBAAgB,YAAY,IAAI,IAAI,CAEnC;AAED,wBAAgB,QAAQ,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAgBhG"}
|