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,426 @@
|
|
|
1
|
+
// Onboarding module - friendly first-run experience
|
|
2
|
+
// Handles messenger config checks, agent availability, and interactive setup
|
|
3
|
+
import { createInterface } from 'node:readline';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { chmod, readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
6
|
+
import { registry } from './registry.js';
|
|
7
|
+
import { AGIM_HOME } from './agim-paths.js';
|
|
8
|
+
const CONFIG_DIR = AGIM_HOME;
|
|
9
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
10
|
+
// ============================================
|
|
11
|
+
// Constants
|
|
12
|
+
// ============================================
|
|
13
|
+
const AVAILABLE_MESSENGERS = [
|
|
14
|
+
{ id: 'wechat-ilink', displayName: 'WeChat', description: 'Scan QR to login' },
|
|
15
|
+
{ id: 'telegram', displayName: 'Telegram', description: 'Bot token from @BotFather' },
|
|
16
|
+
{ id: 'feishu', displayName: 'Feishu/Lark', description: 'App ID and Secret' },
|
|
17
|
+
{ id: 'discord', displayName: 'Discord', description: 'Bot token from Developer Portal' },
|
|
18
|
+
];
|
|
19
|
+
const AGENT_PACKAGES = {
|
|
20
|
+
'claude-code': { agent: 'claude-code', npmPackage: '@anthropic-ai/claude-code', command: 'claude' },
|
|
21
|
+
'codex': { agent: 'codex', npmPackage: '@openai/codex', command: 'codex' },
|
|
22
|
+
'copilot': { agent: 'copilot', npmPackage: '@github/copilot', command: 'copilot' },
|
|
23
|
+
'opencode': { agent: 'opencode', npmPackage: 'opencode-ai', command: 'opencode' },
|
|
24
|
+
};
|
|
25
|
+
// ============================================
|
|
26
|
+
// ============================================
|
|
27
|
+
// Agent availability cache (TTL-based)
|
|
28
|
+
// ============================================
|
|
29
|
+
// ============================================
|
|
30
|
+
// Config helpers (extracted for reuse)
|
|
31
|
+
// ============================================
|
|
32
|
+
export async function loadConfig() {
|
|
33
|
+
try {
|
|
34
|
+
const data = await readFile(CONFIG_FILE, 'utf-8');
|
|
35
|
+
return JSON.parse(data);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return {
|
|
39
|
+
messengers: [],
|
|
40
|
+
agents: [],
|
|
41
|
+
defaultAgent: 'claude-code',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function saveConfig(config) {
|
|
46
|
+
await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
47
|
+
await writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
48
|
+
await chmod(CONFIG_FILE, 0o600);
|
|
49
|
+
}
|
|
50
|
+
// ============================================
|
|
51
|
+
// Readline helper
|
|
52
|
+
// ============================================
|
|
53
|
+
function createPromptInterface() {
|
|
54
|
+
return createInterface({
|
|
55
|
+
input: process.stdin,
|
|
56
|
+
output: process.stdout,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function prompt(rl, question) {
|
|
60
|
+
return new Promise((resolve) => {
|
|
61
|
+
rl.question(question, (answer) => {
|
|
62
|
+
resolve(answer.trim());
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// ============================================
|
|
67
|
+
// 1. checkMessengerConfig (SYNC)
|
|
68
|
+
// ============================================
|
|
69
|
+
/**
|
|
70
|
+
* Check if messengers are configured.
|
|
71
|
+
* IMPORTANT: This checks the config.messengers array BEFORE any default fill.
|
|
72
|
+
*/
|
|
73
|
+
export function checkMessengerConfig(config) {
|
|
74
|
+
if (config.messengers.length === 0) {
|
|
75
|
+
return {
|
|
76
|
+
needsOnboarding: true,
|
|
77
|
+
availableMessengers: AVAILABLE_MESSENGERS,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
needsOnboarding: false,
|
|
82
|
+
availableMessengers: [],
|
|
83
|
+
warnings: [],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// ============================================
|
|
87
|
+
// 2. checkAgentAvailability (ASYNC, TTL-cached)
|
|
88
|
+
// ============================================
|
|
89
|
+
// Cache with TTL so agent install/uninstall is reflected within 2 minutes
|
|
90
|
+
let agentCheckCache = null;
|
|
91
|
+
const AGENT_CHECK_CACHE_TTL = 2 * 60 * 1000; // 2 minutes
|
|
92
|
+
/** Per-agent cached `isAvailable()` results — fall-through cache for
|
|
93
|
+
* `isAgentAvailableCached` when an agent isn't represented in the bulk
|
|
94
|
+
* snapshot (e.g. registered after the last refresh, or the bulk hasn't
|
|
95
|
+
* run yet). The bulk cache is consulted first; this Map only matters for
|
|
96
|
+
* the fallback probe path. */
|
|
97
|
+
const perAgentCache = new Map();
|
|
98
|
+
/**
|
|
99
|
+
* Check which agents are available.
|
|
100
|
+
* Result is cached with a 2-minute TTL.
|
|
101
|
+
*/
|
|
102
|
+
export async function checkAgentAvailability() {
|
|
103
|
+
if (agentCheckCache && Date.now() - agentCheckCache.timestamp < AGENT_CHECK_CACHE_TTL) {
|
|
104
|
+
return agentCheckCache.result;
|
|
105
|
+
}
|
|
106
|
+
const agentNames = registry.listAgents();
|
|
107
|
+
const available = [];
|
|
108
|
+
const missing = [];
|
|
109
|
+
for (const name of agentNames) {
|
|
110
|
+
const agent = registry.findAgent(name);
|
|
111
|
+
if (agent) {
|
|
112
|
+
try {
|
|
113
|
+
const isAvail = await agent.isAvailable();
|
|
114
|
+
if (isAvail) {
|
|
115
|
+
available.push(name);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
missing.push(name);
|
|
119
|
+
}
|
|
120
|
+
perAgentCache.set(name, { ok: isAvail, timestamp: Date.now() });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
missing.push(name);
|
|
124
|
+
perAgentCache.set(name, { ok: false, timestamp: Date.now() });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const result = {
|
|
129
|
+
available,
|
|
130
|
+
missing,
|
|
131
|
+
allMissing: available.length === 0,
|
|
132
|
+
};
|
|
133
|
+
agentCheckCache = { result, timestamp: Date.now() };
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if a specific agent is available.
|
|
138
|
+
*
|
|
139
|
+
* Uses the bulk cache when present, but falls through to a one-off probe
|
|
140
|
+
* if the agent name isn't represented (e.g. agent registered after the
|
|
141
|
+
* last bulk refresh). The probe result is itself cached for the TTL.
|
|
142
|
+
*/
|
|
143
|
+
export async function isAgentAvailableCached(agentName) {
|
|
144
|
+
const bulk = await checkAgentAvailability();
|
|
145
|
+
if (bulk.available.includes(agentName))
|
|
146
|
+
return true;
|
|
147
|
+
if (bulk.missing.includes(agentName))
|
|
148
|
+
return false;
|
|
149
|
+
// Not represented in bulk — probe directly with a per-agent cache.
|
|
150
|
+
const cached = perAgentCache.get(agentName);
|
|
151
|
+
if (cached && Date.now() - cached.timestamp < AGENT_CHECK_CACHE_TTL) {
|
|
152
|
+
return cached.ok;
|
|
153
|
+
}
|
|
154
|
+
const agent = registry.findAgent(agentName);
|
|
155
|
+
if (!agent)
|
|
156
|
+
return false;
|
|
157
|
+
try {
|
|
158
|
+
const ok = await agent.isAvailable();
|
|
159
|
+
perAgentCache.set(agentName, { ok, timestamp: Date.now() });
|
|
160
|
+
return ok;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
perAgentCache.set(agentName, { ok: false, timestamp: Date.now() });
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Clear the agent availability caches. Useful for tests that change the
|
|
169
|
+
* registry state, and for the future `/router refresh` ops command.
|
|
170
|
+
*/
|
|
171
|
+
export function clearAgentCache() {
|
|
172
|
+
agentCheckCache = null;
|
|
173
|
+
perAgentCache.clear();
|
|
174
|
+
}
|
|
175
|
+
// ============================================
|
|
176
|
+
// 3. formatAgentInstallHint
|
|
177
|
+
// ============================================
|
|
178
|
+
/**
|
|
179
|
+
* Generate friendly install message for missing agents
|
|
180
|
+
*/
|
|
181
|
+
export function formatAgentInstallHint(missing) {
|
|
182
|
+
if (missing.length === 0)
|
|
183
|
+
return '';
|
|
184
|
+
const getInstallHint = (name) => {
|
|
185
|
+
const hint = AGENT_PACKAGES[name];
|
|
186
|
+
if (!hint)
|
|
187
|
+
return `npm i -g ${name}`;
|
|
188
|
+
return `npm i -g ${hint.npmPackage}`;
|
|
189
|
+
};
|
|
190
|
+
if (missing.length === 1) {
|
|
191
|
+
return `Install ${missing[0]}: ${getInstallHint(missing[0])}`;
|
|
192
|
+
}
|
|
193
|
+
const hints = missing.map((name) => ` - ${name}: ${getInstallHint(name)}`);
|
|
194
|
+
return `Install agents:\n${hints.join('\n')}`;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Format error message when agent is not available
|
|
198
|
+
*/
|
|
199
|
+
export function formatAgentNotAvailableError(agentName) {
|
|
200
|
+
let installHint;
|
|
201
|
+
if (agentName === 'copilot') {
|
|
202
|
+
installHint = `安装方式 (选择其一):
|
|
203
|
+
npm i -g @github/copilot
|
|
204
|
+
gh extension install github/gh-copilot
|
|
205
|
+
brew install copilot-cli (macOS)
|
|
206
|
+
winget install GitHub.Copilot (Windows)
|
|
207
|
+
或安装 VS Code Copilot Chat 扩展`;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
const hint = AGENT_PACKAGES[agentName];
|
|
211
|
+
installHint = hint ? `npm i -g ${hint.npmPackage}` : `npm i -g ${agentName}`;
|
|
212
|
+
}
|
|
213
|
+
return `❌ ${agentName} is not installed or not available.\n\n${installHint}\n\nOr try another agent:\n /cc - Claude Code\n /cx - Codex\n /co - Copilot\n /oc - OpenCode`;
|
|
214
|
+
}
|
|
215
|
+
// ============================================
|
|
216
|
+
// 4. runMessengerOnboarding
|
|
217
|
+
// ============================================
|
|
218
|
+
/**
|
|
219
|
+
* Interactive onboarding flow.
|
|
220
|
+
* Returns updated config on success, null on failure/cancel.
|
|
221
|
+
*/
|
|
222
|
+
export async function runMessengerOnboarding(config) {
|
|
223
|
+
// Non-interactive fallback
|
|
224
|
+
if (!process.stdin.isTTY) {
|
|
225
|
+
console.log('❌ No messengers configured. Run interactively:');
|
|
226
|
+
console.log(' im-hub config wechat');
|
|
227
|
+
console.log(' im-hub config telegram');
|
|
228
|
+
console.log(' im-hub config feishu');
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
const rl = createPromptInterface();
|
|
232
|
+
try {
|
|
233
|
+
while (true) {
|
|
234
|
+
// Show menu
|
|
235
|
+
console.log('\n📱 Let\'s set up a messenger:\n');
|
|
236
|
+
AVAILABLE_MESSENGERS.forEach((m, i) => {
|
|
237
|
+
console.log(` ${i + 1}. ${m.displayName} - ${m.description}`);
|
|
238
|
+
});
|
|
239
|
+
console.log(` Q. Quit and configure manually\n`);
|
|
240
|
+
const choice = await prompt(rl, `Select a messenger (1-${AVAILABLE_MESSENGERS.length} or Q): `);
|
|
241
|
+
// Handle quit
|
|
242
|
+
if (choice.toLowerCase() === 'q' || choice === '') {
|
|
243
|
+
console.log('\n❌ Onboarding cancelled.');
|
|
244
|
+
console.log('Run "im-hub config <messenger>" to configure manually.');
|
|
245
|
+
return null;
|
|
246
|
+
}
|
|
247
|
+
const index = parseInt(choice, 10) - 1;
|
|
248
|
+
if (index < 0 || index >= AVAILABLE_MESSENGERS.length) {
|
|
249
|
+
console.log(`Invalid choice. Please enter 1-${AVAILABLE_MESSENGERS.length} or Q.`);
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
const selected = AVAILABLE_MESSENGERS[index];
|
|
253
|
+
// Run the config flow
|
|
254
|
+
const result = await configureMessenger(selected.id, config, rl);
|
|
255
|
+
if (result) {
|
|
256
|
+
rl.close();
|
|
257
|
+
return result;
|
|
258
|
+
}
|
|
259
|
+
// Config failed - show retry menu
|
|
260
|
+
console.log(`\n❌ Failed to configure ${selected.displayName}.`);
|
|
261
|
+
const retry = await prompt(rl, '[R] Retry, [S] Select different, [Q] Quit: ');
|
|
262
|
+
if (retry.toLowerCase() === 'q') {
|
|
263
|
+
rl.close();
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
else if (retry.toLowerCase() === 's') {
|
|
267
|
+
}
|
|
268
|
+
// 'r' or anything else = retry same messenger (loop continues)
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
273
|
+
console.error(`\n❌ Onboarding error: ${errMsg}`);
|
|
274
|
+
rl.close();
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// ============================================
|
|
279
|
+
// Messenger config flows
|
|
280
|
+
// ============================================
|
|
281
|
+
async function configureMessenger(messengerId, config, rl) {
|
|
282
|
+
switch (messengerId) {
|
|
283
|
+
case 'wechat-ilink':
|
|
284
|
+
return configureWeChat(config, rl);
|
|
285
|
+
case 'telegram':
|
|
286
|
+
return configureTelegram(config, rl);
|
|
287
|
+
case 'feishu':
|
|
288
|
+
return configureFeishu(config, rl);
|
|
289
|
+
case 'discord':
|
|
290
|
+
return configureDiscord(config, rl);
|
|
291
|
+
default:
|
|
292
|
+
console.log(`Unknown messenger: ${messengerId}`);
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
async function configureWeChat(config, _rl) {
|
|
297
|
+
console.log('\n📱 Configuring WeChat...');
|
|
298
|
+
console.log('Fetching QR code...\n');
|
|
299
|
+
try {
|
|
300
|
+
const { ILinkWeChatAdapter } = await import('../plugins/messengers/wechat/ilink-adapter.js');
|
|
301
|
+
const adapter = new ILinkWeChatAdapter();
|
|
302
|
+
const { qrUrl, qrToken } = await adapter.startQRLogin();
|
|
303
|
+
console.log('📱 Scan this QR code with WeChat:\n');
|
|
304
|
+
console.log(qrUrl);
|
|
305
|
+
console.log('\n');
|
|
306
|
+
const credentials = await adapter.waitForQRLogin(qrToken, (status) => {
|
|
307
|
+
console.log(`[${new Date().toLocaleTimeString()}] ${status}`);
|
|
308
|
+
});
|
|
309
|
+
if (credentials) {
|
|
310
|
+
console.log(`\n✅ Logged in as ${credentials.userId}`);
|
|
311
|
+
console.log(` Bot ID: ${credentials.accountId}`);
|
|
312
|
+
if (!config.messengers.includes('wechat-ilink')) {
|
|
313
|
+
config.messengers.push('wechat-ilink');
|
|
314
|
+
}
|
|
315
|
+
return config;
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
console.log('\n❌ Login failed or timed out');
|
|
319
|
+
return null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
324
|
+
console.error(`\n❌ Failed to configure WeChat: ${errMsg}`);
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
async function configureTelegram(config, rl) {
|
|
329
|
+
console.log('\n📱 Configuring Telegram...');
|
|
330
|
+
console.log('To get a bot token:');
|
|
331
|
+
console.log('1. Open Telegram and search for @BotFather');
|
|
332
|
+
console.log('2. Send /newbot and follow instructions');
|
|
333
|
+
console.log('3. Copy the bot token\n');
|
|
334
|
+
const token = await prompt(rl, 'Enter your bot token: ');
|
|
335
|
+
if (!token) {
|
|
336
|
+
console.log('❌ Bot token is required');
|
|
337
|
+
return null;
|
|
338
|
+
}
|
|
339
|
+
const channelId = await prompt(rl, 'Enter channel ID (optional, press Enter for default): ');
|
|
340
|
+
config.telegram = { botToken: token, channelId: channelId || 'default' };
|
|
341
|
+
if (!config.messengers.includes('telegram')) {
|
|
342
|
+
config.messengers.push('telegram');
|
|
343
|
+
}
|
|
344
|
+
console.log('✅ Telegram bot token saved');
|
|
345
|
+
console.log(` Channel ID: ${config.telegram.channelId}`);
|
|
346
|
+
return config;
|
|
347
|
+
}
|
|
348
|
+
async function configureFeishu(config, rl) {
|
|
349
|
+
console.log('\n📱 Configuring Feishu (WebSocket long polling mode)...');
|
|
350
|
+
console.log('To create a Feishu bot:');
|
|
351
|
+
console.log('1. Go to https://open.feishu.cn/app');
|
|
352
|
+
console.log('2. Create a custom bot app');
|
|
353
|
+
console.log('3. Enable Bot capability');
|
|
354
|
+
console.log('4. Configure event subscriptions (Subscribe to "Receive Message" event)');
|
|
355
|
+
console.log('5. Copy App ID and App Secret\n');
|
|
356
|
+
const appId = await prompt(rl, 'Enter App ID: ');
|
|
357
|
+
const appSecret = await prompt(rl, 'Enter App Secret: ');
|
|
358
|
+
if (!appId || !appSecret) {
|
|
359
|
+
console.log('❌ App ID and App Secret are required');
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
config.feishu = { appId, appSecret };
|
|
363
|
+
if (!config.messengers.includes('feishu')) {
|
|
364
|
+
config.messengers.push('feishu');
|
|
365
|
+
}
|
|
366
|
+
console.log('✅ Feishu bot credentials saved');
|
|
367
|
+
console.log('\n✅ Using WebSocket long polling mode - no webhook configuration needed!');
|
|
368
|
+
console.log(' The bot will automatically connect to Feishu servers.');
|
|
369
|
+
return config;
|
|
370
|
+
}
|
|
371
|
+
async function configureDiscord(config, rl) {
|
|
372
|
+
console.log('\n📱 Configuring Discord...');
|
|
373
|
+
console.log('To create a Discord bot:');
|
|
374
|
+
console.log('1. Go to https://discord.com/developers/applications');
|
|
375
|
+
console.log('2. Click "New Application" and give it a name');
|
|
376
|
+
console.log('3. Go to "Bot" tab and click "Add Bot"');
|
|
377
|
+
console.log('4. IMPORTANT: Enable "MESSAGE CONTENT INTENT" under Privileged Gateway Intents');
|
|
378
|
+
console.log('5. Click "Reset Token" to get your bot token');
|
|
379
|
+
console.log('6. Go to OAuth2 > URL Generator:');
|
|
380
|
+
console.log(' - Scopes: bot');
|
|
381
|
+
console.log(' - Bot Permissions: Send Messages, Read Message History, View Channels');
|
|
382
|
+
console.log('7. Use the generated URL to invite the bot to your server\n');
|
|
383
|
+
const token = await prompt(rl, 'Enter your bot token: ');
|
|
384
|
+
if (!token) {
|
|
385
|
+
console.log('❌ Bot token is required');
|
|
386
|
+
return null;
|
|
387
|
+
}
|
|
388
|
+
const channelId = await prompt(rl, 'Enter channel ID (optional, press Enter for default): ');
|
|
389
|
+
const allowedGuilds = await prompt(rl, 'Allowed guild IDs (comma-separated, optional): ');
|
|
390
|
+
const allowedChannels = await prompt(rl, 'Allowed channel IDs (comma-separated, optional): ');
|
|
391
|
+
config.discord = {
|
|
392
|
+
botToken: token,
|
|
393
|
+
channelId: channelId || 'default',
|
|
394
|
+
allowedGuilds: allowedGuilds ? allowedGuilds.split(',').map(s => s.trim()).filter(Boolean) : undefined,
|
|
395
|
+
allowedChannels: allowedChannels ? allowedChannels.split(',').map(s => s.trim()).filter(Boolean) : undefined,
|
|
396
|
+
};
|
|
397
|
+
if (!config.messengers.includes('discord')) {
|
|
398
|
+
config.messengers.push('discord');
|
|
399
|
+
}
|
|
400
|
+
console.log('✅ Discord bot token saved');
|
|
401
|
+
console.log(` Channel ID: ${config.discord.channelId}`);
|
|
402
|
+
if (config.discord.allowedGuilds?.length) {
|
|
403
|
+
console.log(` Allowed guilds: ${config.discord.allowedGuilds.join(', ')}`);
|
|
404
|
+
}
|
|
405
|
+
if (config.discord.allowedChannels?.length) {
|
|
406
|
+
console.log(` Allowed channels: ${config.discord.allowedChannels.join(', ')}`);
|
|
407
|
+
}
|
|
408
|
+
return config;
|
|
409
|
+
}
|
|
410
|
+
// ============================================
|
|
411
|
+
// Error message formatter for messenger.start()
|
|
412
|
+
// ============================================
|
|
413
|
+
/**
|
|
414
|
+
* Format a user-friendly error message for messenger startup failures
|
|
415
|
+
*/
|
|
416
|
+
export function formatMessengerStartError(messengerName, error) {
|
|
417
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
418
|
+
// Check for credential/auth errors
|
|
419
|
+
if (errMsg.toLowerCase().includes('credentials') || errMsg.toLowerCase().includes('auth')) {
|
|
420
|
+
const configName = messengerName.replace('-ilink', '');
|
|
421
|
+
return `Run "im-hub config ${configName}" to reconfigure.`;
|
|
422
|
+
}
|
|
423
|
+
// Generic error
|
|
424
|
+
return errMsg;
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/core/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface PendingReminder {
|
|
2
|
+
fireAt: Date;
|
|
3
|
+
text: string;
|
|
4
|
+
recurrence?: string;
|
|
5
|
+
routeViaEmail?: boolean;
|
|
6
|
+
emailTarget?: string;
|
|
7
|
+
/** Wall-clock ms when this entry was put — used for TTL eviction. */
|
|
8
|
+
createdAt: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function setPending(threadKey: string, p: Omit<PendingReminder, 'createdAt'>): void;
|
|
11
|
+
export declare function getPending(threadKey: string): PendingReminder | null;
|
|
12
|
+
export declare function clearPending(threadKey: string): void;
|
|
13
|
+
export declare function _sizeForTest(): number;
|
|
14
|
+
export declare function _clearForTest(): void;
|
|
15
|
+
/** Inspect an inbound message; if there's a pending detection for this
|
|
16
|
+
* thread AND the message looks like y/n, return the decision. Otherwise
|
|
17
|
+
* return null and the caller continues normal processing. */
|
|
18
|
+
export declare function tryConsumeReply(threadKey: string, text: string): {
|
|
19
|
+
decision: 'confirm';
|
|
20
|
+
pending: PendingReminder;
|
|
21
|
+
} | {
|
|
22
|
+
decision: 'cancel';
|
|
23
|
+
pending: PendingReminder;
|
|
24
|
+
} | null;
|
|
25
|
+
//# sourceMappingURL=pending-reminder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-reminder.d.ts","sourceRoot":"","sources":["../../src/core/pending-reminder.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,IAAI,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAA;CAClB;AAUD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,IAAI,CAGzF;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAGpE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,IAAI,MAAM,CAAsB;AAC5D,wBAAgB,aAAa,IAAI,IAAI,CAAkB;AAKvD;;8DAE8D;AAC9D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAC3D;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GACjD;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GAChD,IAAI,CAgBP"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// pending-reminder.ts — short-lived "did you mean to set a reminder?"
|
|
2
|
+
// state, used by the LLM intent detector.
|
|
3
|
+
//
|
|
4
|
+
// When the detector decides a non-slash message is probably a reminder
|
|
5
|
+
// request, it stashes the parsed payload here keyed by thread, sends a
|
|
6
|
+
// confirmation card, and waits for a y/n reply. This module deliberately
|
|
7
|
+
// stays in-memory — pending detections are bounded by a 5-min TTL and
|
|
8
|
+
// don't need to survive restart (a stale "y" arriving after restart
|
|
9
|
+
// would be confusing UX anyway).
|
|
10
|
+
const PENDING_TTL_MS = 5 * 60 * 1000;
|
|
11
|
+
const store = new Map();
|
|
12
|
+
function evictExpired(now) {
|
|
13
|
+
for (const [k, v] of store) {
|
|
14
|
+
if (now - v.createdAt > PENDING_TTL_MS)
|
|
15
|
+
store.delete(k);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function setPending(threadKey, p) {
|
|
19
|
+
evictExpired(Date.now());
|
|
20
|
+
store.set(threadKey, { ...p, createdAt: Date.now() });
|
|
21
|
+
}
|
|
22
|
+
export function getPending(threadKey) {
|
|
23
|
+
evictExpired(Date.now());
|
|
24
|
+
return store.get(threadKey) ?? null;
|
|
25
|
+
}
|
|
26
|
+
export function clearPending(threadKey) {
|
|
27
|
+
store.delete(threadKey);
|
|
28
|
+
}
|
|
29
|
+
export function _sizeForTest() { return store.size; }
|
|
30
|
+
export function _clearForTest() { store.clear(); }
|
|
31
|
+
const CONFIRM_PAT = /^(y|yes|是|确认|对|好|ok|可以|创建)\s*$/i;
|
|
32
|
+
const CANCEL_PAT = /^(n|no|否|取消|不|算了|不用|skip)\s*$/i;
|
|
33
|
+
/** Inspect an inbound message; if there's a pending detection for this
|
|
34
|
+
* thread AND the message looks like y/n, return the decision. Otherwise
|
|
35
|
+
* return null and the caller continues normal processing. */
|
|
36
|
+
export function tryConsumeReply(threadKey, text) {
|
|
37
|
+
const pending = getPending(threadKey);
|
|
38
|
+
if (!pending)
|
|
39
|
+
return null;
|
|
40
|
+
const t = text.trim();
|
|
41
|
+
if (CONFIRM_PAT.test(t)) {
|
|
42
|
+
clearPending(threadKey);
|
|
43
|
+
return { decision: 'confirm', pending };
|
|
44
|
+
}
|
|
45
|
+
if (CANCEL_PAT.test(t)) {
|
|
46
|
+
clearPending(threadKey);
|
|
47
|
+
return { decision: 'cancel', pending };
|
|
48
|
+
}
|
|
49
|
+
// Anything else: leave pending in place (user might be ignoring the card,
|
|
50
|
+
// or replying with extra context). It'll TTL out on its own.
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=pending-reminder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-reminder.js","sourceRoot":"","sources":["../../src/core/pending-reminder.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,0CAA0C;AAC1C,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,yEAAyE;AACzE,sEAAsE;AACtE,oEAAoE;AACpE,iCAAiC;AAEjC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;AAYpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B,CAAA;AAEhD,SAAS,YAAY,CAAC,GAAW;IAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,cAAc;YAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB,EAAE,CAAqC;IACjF,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACxB,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IACxB,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,YAAY,KAAa,OAAO,KAAK,CAAC,IAAI,CAAA,CAAC,CAAC;AAC5D,MAAM,UAAU,aAAa,KAAW,KAAK,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC;AAEvD,MAAM,WAAW,GAAG,iCAAiC,CAAA;AACrD,MAAM,UAAU,GAAG,gCAAgC,CAAA;AAEnD;;8DAE8D;AAC9D,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,IAAY;IAK7D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IACrC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IACrB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC,SAAS,CAAC,CAAA;QACvB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IACzC,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACvB,YAAY,CAAC,SAAS,CAAC,CAAA;QACvB,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;IACxC,CAAC;IACD,0EAA0E;IAC1E,6DAA6D;IAC7D,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export declare class RateLimiter {
|
|
2
|
+
private buckets;
|
|
3
|
+
private rate;
|
|
4
|
+
private intervalMs;
|
|
5
|
+
private burst;
|
|
6
|
+
private lastSweepAt;
|
|
7
|
+
constructor(rate?: number, intervalMs?: number, burst?: number);
|
|
8
|
+
/** Check if a request is allowed. Returns true if within limit. */
|
|
9
|
+
allow(key: string): boolean;
|
|
10
|
+
/** Get remaining tokens for a key. */
|
|
11
|
+
remaining(key: string): number;
|
|
12
|
+
/** Get status for display. */
|
|
13
|
+
status(key: string): {
|
|
14
|
+
remaining: number;
|
|
15
|
+
rate: number;
|
|
16
|
+
intervalSec: number;
|
|
17
|
+
};
|
|
18
|
+
/** Read the bucket's static configuration (no key required). */
|
|
19
|
+
config(): {
|
|
20
|
+
rate: number;
|
|
21
|
+
intervalSec: number;
|
|
22
|
+
burst: number;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Best-effort estimate (epoch ms) of when the next token will be available
|
|
26
|
+
* for `key`. If the bucket already has tokens, returns now.
|
|
27
|
+
*/
|
|
28
|
+
nextAllowAt(key: string): number;
|
|
29
|
+
/**
|
|
30
|
+
* Drop buckets that have been idle for at least `idleMs` milliseconds.
|
|
31
|
+
* Run periodically to bound memory under bursty workloads.
|
|
32
|
+
*
|
|
33
|
+
* Called automatically by {@link allow} every {@link AUTO_CLEANUP_EVERY_MS},
|
|
34
|
+
* but exposed publicly so ops / tests can force a sweep.
|
|
35
|
+
*/
|
|
36
|
+
cleanup(idleMs?: number): number;
|
|
37
|
+
/** Test/diagnostic accessor: how many distinct keys are tracked. */
|
|
38
|
+
size(): number;
|
|
39
|
+
private maybeSweep;
|
|
40
|
+
private getBucket;
|
|
41
|
+
}
|
|
42
|
+
export declare const userLimiter: RateLimiter;
|
|
43
|
+
export declare const agentLimiter: RateLimiter;
|
|
44
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/core/rate-limiter.ts"],"names":[],"mappings":"AAoBA,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAqB;gBAE5B,IAAI,SAAe,EAAE,UAAU,SAAsB,EAAE,KAAK,SAAgB;IAMxF,mEAAmE;IACnE,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU3B,sCAAsC;IACtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI9B,8BAA8B;IAC9B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IAQ7E,gEAAgE;IAChE,MAAM,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAQ9D;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAQhC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,SAAkB,GAAG,MAAM;IAYzC,oEAAoE;IACpE,IAAI,IAAI,MAAM;IAEd,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;CAiBlB;AAGD,eAAO,MAAM,WAAW,aAAiC,CAAA;AACzD,eAAO,MAAM,YAAY,aAAiC,CAAA"}
|