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,183 @@
|
|
|
1
|
+
// /model [name|#N] + /models [filter|refresh] — model switching & listing
|
|
2
|
+
//
|
|
3
|
+
// Currently only the opencode adapter ships variants/models that the
|
|
4
|
+
// router can switch between, so this command is opencode-scoped. When
|
|
5
|
+
// the active agent isn't opencode we surface a friendly "not supported"
|
|
6
|
+
// message instead of querying the wrong CLI.
|
|
7
|
+
import { spawn } from 'node:child_process';
|
|
8
|
+
import { sessionManager } from '../session.js';
|
|
9
|
+
const SUPPORTED_AGENT = 'opencode';
|
|
10
|
+
const MODEL_LIST_TTL_MS = 5 * 60 * 1000; // 5 minutes — picks up newly-added models
|
|
11
|
+
function sessionKey(ctx) {
|
|
12
|
+
// Mirrors SessionManager's key shape so the cached numbered list lives
|
|
13
|
+
// alongside the actual session state (no userId mismatch in groups).
|
|
14
|
+
return `${ctx.platform}:${ctx.channelId}:${ctx.threadId}`;
|
|
15
|
+
}
|
|
16
|
+
function parseModelArgs(args) {
|
|
17
|
+
const p = args.trim().split(/\s+/);
|
|
18
|
+
return { sub: p[0] || '', rest: p.slice(1).join(' ') };
|
|
19
|
+
}
|
|
20
|
+
/** Per-session cache: last /models ordered result, indexed from 1 */
|
|
21
|
+
const sessionModelIndex = new Map();
|
|
22
|
+
export async function handleModelCommand(args, ctx) {
|
|
23
|
+
const { sub, rest } = parseModelArgs(args);
|
|
24
|
+
// /model refresh — force re-query the underlying CLI (M-5)
|
|
25
|
+
if (sub === 'refresh') {
|
|
26
|
+
invalidateModelCache();
|
|
27
|
+
return '✅ 模型缓存已清空。下次 /models 将重新查询。';
|
|
28
|
+
}
|
|
29
|
+
// Determine which agent the active session is using; fall back to default
|
|
30
|
+
const session = await sessionManager.getExistingSession(ctx.platform, ctx.channelId, ctx.threadId);
|
|
31
|
+
const activeAgent = session?.agent || ctx.defaultAgent;
|
|
32
|
+
if (activeAgent !== SUPPORTED_AGENT) {
|
|
33
|
+
return `ℹ️ \`/model\` 仅在 \`${SUPPORTED_AGENT}\` 下可用,当前 agent: \`${activeAgent}\`。\n\n切换到 opencode:/oc 或 /opencode`;
|
|
34
|
+
}
|
|
35
|
+
// /models or /models <filter> — list all models
|
|
36
|
+
if (sub === 'list') {
|
|
37
|
+
return handleModelList(rest, ctx);
|
|
38
|
+
}
|
|
39
|
+
// /model (no args) — show current model
|
|
40
|
+
if (args.trim() === '') {
|
|
41
|
+
return handleModelCurrent(ctx);
|
|
42
|
+
}
|
|
43
|
+
// /model <name|#N> — switch model (by full name, short name, or index)
|
|
44
|
+
return handleModelSwitch(args.trim(), ctx);
|
|
45
|
+
}
|
|
46
|
+
/** /models — list available models with optional filter, numbered */
|
|
47
|
+
async function handleModelList(filter, ctx) {
|
|
48
|
+
const models = await getModelList();
|
|
49
|
+
const defaultModel = await resolveDefaultModel();
|
|
50
|
+
const lowered = filter.toLowerCase();
|
|
51
|
+
const filtered = lowered ? models.filter(m => m.toLowerCase().includes(lowered)) : models;
|
|
52
|
+
if (filtered.length === 0) {
|
|
53
|
+
if (filter)
|
|
54
|
+
return `🔍 没有匹配 "${filter}" 的模型。`;
|
|
55
|
+
return `⚠️ 未能获取模型列表。请确认 opencode 已安装且配置了模型。`;
|
|
56
|
+
}
|
|
57
|
+
const session = await sessionManager.getOrCreateSession(ctx.platform, ctx.channelId, ctx.threadId, ctx.defaultAgent);
|
|
58
|
+
const current = session?.model || defaultModel;
|
|
59
|
+
// Build a flat indexed list for /model #N lookup
|
|
60
|
+
let idx = 1;
|
|
61
|
+
const flat = [];
|
|
62
|
+
const groups = new Map();
|
|
63
|
+
for (const m of filtered) {
|
|
64
|
+
const parts = m.split('/');
|
|
65
|
+
const prov = parts.length >= 2 ? parts.slice(0, -1).join('/') : m;
|
|
66
|
+
const short = m.split('/').pop();
|
|
67
|
+
if (!groups.has(prov))
|
|
68
|
+
groups.set(prov, []);
|
|
69
|
+
groups.get(prov)?.push({ num: idx, short, full: m });
|
|
70
|
+
flat.push({ num: idx, full: m });
|
|
71
|
+
idx++;
|
|
72
|
+
}
|
|
73
|
+
// Cache indexed list keyed identically to SessionManager.
|
|
74
|
+
sessionModelIndex.set(sessionKey(ctx), flat.map(f => f.full));
|
|
75
|
+
let msg = `📋 模型列表 (${filtered.length})\n\n`;
|
|
76
|
+
for (const [prov, list] of groups) {
|
|
77
|
+
msg += `**${prov}**\n`;
|
|
78
|
+
for (const { num, short, full } of list) {
|
|
79
|
+
const tag = full === current ? ' ⭐' : '';
|
|
80
|
+
msg += ` ${String(num).padStart(3, ' ')}. \`${short}\`${tag}\n`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
msg += `\n当前: \`${current}\` ⭐\n/model <全名> 或 /model #序号 切换\n/models refresh 强制刷新缓存`;
|
|
84
|
+
return msg;
|
|
85
|
+
}
|
|
86
|
+
/** /model — show currently selected model */
|
|
87
|
+
async function handleModelCurrent(ctx) {
|
|
88
|
+
const session = await sessionManager.getOrCreateSession(ctx.platform, ctx.channelId, ctx.threadId, ctx.defaultAgent);
|
|
89
|
+
const defaultModel = await resolveDefaultModel();
|
|
90
|
+
const current = session?.model || defaultModel;
|
|
91
|
+
return `🧠 当前模型: \`${current}\`\n\n使用 /model <全名> 或 /model #序号 切换\n使用 /models 查看所有模型`;
|
|
92
|
+
}
|
|
93
|
+
/** /model <name|#N> — switch to a different model */
|
|
94
|
+
async function handleModelSwitch(input, ctx) {
|
|
95
|
+
// Check if input is an index reference #N or just N
|
|
96
|
+
const indexMatch = input.match(/^#?(\d+)$/);
|
|
97
|
+
if (indexMatch) {
|
|
98
|
+
const num = parseInt(indexMatch[1], 10);
|
|
99
|
+
const cached = sessionModelIndex.get(sessionKey(ctx));
|
|
100
|
+
if (!cached || cached.length === 0) {
|
|
101
|
+
return `⚠️ 没有缓存的模型列表。请先 /models 查看,再用 /model #序号 切换。`;
|
|
102
|
+
}
|
|
103
|
+
if (num < 1 || num > cached.length) {
|
|
104
|
+
return `⚠️ 序号 ${num} 无效。可用范围: 1 - ${cached.length}\n\n先 /models 查看完整列表。`;
|
|
105
|
+
}
|
|
106
|
+
const model = cached[num - 1];
|
|
107
|
+
await sessionManager.getOrCreateSession(ctx.platform, ctx.channelId, ctx.threadId, ctx.defaultAgent);
|
|
108
|
+
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { model });
|
|
109
|
+
return `✅ 模型已切换: \`${model}\``;
|
|
110
|
+
}
|
|
111
|
+
// Check if input is a short name (no /) but looks like a model name
|
|
112
|
+
if (!input.includes('/')) {
|
|
113
|
+
return `⚠️ 模型格式: provider/model\n例: /model deepseek/deepseek-v4-pro\n或: /model #5 (序号切换)\n\n先 /models 查看`;
|
|
114
|
+
}
|
|
115
|
+
const models = await getModelList();
|
|
116
|
+
const exactMatch = models.find(m => m === input || m.endsWith(`/${input}`));
|
|
117
|
+
if (!exactMatch && models.length > 0) {
|
|
118
|
+
return `⚠️ 模型 "${input}" 不在列表中。\n\n先 /models 查看可用模型。`;
|
|
119
|
+
}
|
|
120
|
+
const resolved = exactMatch || input;
|
|
121
|
+
await sessionManager.getOrCreateSession(ctx.platform, ctx.channelId, ctx.threadId, ctx.defaultAgent);
|
|
122
|
+
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { model: resolved });
|
|
123
|
+
return `✅ 模型已切换: \`${resolved}\``;
|
|
124
|
+
}
|
|
125
|
+
let modelListCache = null;
|
|
126
|
+
let defaultModelCache = null;
|
|
127
|
+
function invalidateModelCache() {
|
|
128
|
+
modelListCache = null;
|
|
129
|
+
defaultModelCache = null;
|
|
130
|
+
}
|
|
131
|
+
function getModelList() {
|
|
132
|
+
return new Promise((resolve) => {
|
|
133
|
+
if (modelListCache && Date.now() - modelListCache.ts < MODEL_LIST_TTL_MS) {
|
|
134
|
+
return resolve(modelListCache.value);
|
|
135
|
+
}
|
|
136
|
+
const proc = spawn('opencode', ['models'], { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
137
|
+
let out = '';
|
|
138
|
+
proc.stdout?.on('data', d => out += d.toString());
|
|
139
|
+
proc.on('close', () => {
|
|
140
|
+
const lines = out.trim().split('\n').filter(Boolean);
|
|
141
|
+
modelListCache = { value: lines, ts: Date.now() };
|
|
142
|
+
resolve(lines);
|
|
143
|
+
});
|
|
144
|
+
proc.on('error', () => resolve([]));
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/** Resolve opencode's actual default model name */
|
|
148
|
+
async function resolveDefaultModel() {
|
|
149
|
+
if (defaultModelCache && Date.now() - defaultModelCache.ts < MODEL_LIST_TTL_MS) {
|
|
150
|
+
return defaultModelCache.value;
|
|
151
|
+
}
|
|
152
|
+
// Read opencode.json to find the first configured model as the default
|
|
153
|
+
try {
|
|
154
|
+
const { readFile } = await import('node:fs/promises');
|
|
155
|
+
const { homedir } = await import('node:os');
|
|
156
|
+
const { join } = await import('node:path');
|
|
157
|
+
const configPath = join(homedir(), '.config', 'opencode', 'opencode.json');
|
|
158
|
+
const raw = await readFile(configPath, 'utf-8');
|
|
159
|
+
const config = JSON.parse(raw);
|
|
160
|
+
const provider = config.provider;
|
|
161
|
+
if (provider) {
|
|
162
|
+
for (const [, p] of Object.entries(provider)) {
|
|
163
|
+
if (p.models && typeof p.models === 'object') {
|
|
164
|
+
const keys = Object.keys(p.models);
|
|
165
|
+
if (keys.length > 0) {
|
|
166
|
+
defaultModelCache = { value: keys[0], ts: Date.now() };
|
|
167
|
+
return keys[0];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch { /* fall through */ }
|
|
174
|
+
const models = await getModelList();
|
|
175
|
+
if (models.length > 0) {
|
|
176
|
+
defaultModelCache = { value: models[0], ts: Date.now() };
|
|
177
|
+
return models[0];
|
|
178
|
+
}
|
|
179
|
+
return 'unknown';
|
|
180
|
+
}
|
|
181
|
+
/** Test-only diagnostic: clear caches between cases. */
|
|
182
|
+
export const _internal = { invalidateModelCache };
|
|
183
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/core/commands/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAahD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAwDxF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// /plan [on|off] — toggle plan mode for the active agent
|
|
2
|
+
//
|
|
3
|
+
// Plan mode is a per-session flag the router forwards to the agent adapter:
|
|
4
|
+
// • claude-code → spawns with `--permission-mode plan` (read-only)
|
|
5
|
+
// • opencode → routes through the built-in `plan` agent
|
|
6
|
+
// • codex → spawns with `-s read-only` sandbox (OS-level write fence;
|
|
7
|
+
// not a true approval gate, see codex/index.ts header)
|
|
8
|
+
// • other agents → ignore the flag (no-op)
|
|
9
|
+
//
|
|
10
|
+
// Persisted on session.planMode so it survives across turns and across the
|
|
11
|
+
// /oc ↔ /cc agent switch (intent travels with the conversation, not with
|
|
12
|
+
// the chosen CLI).
|
|
13
|
+
//
|
|
14
|
+
// Emergency kill switch: `IMHUB_DISABLE_PLAN_MODE=1` makes /plan return a
|
|
15
|
+
// "disabled" message without touching session state. Useful for ops to roll
|
|
16
|
+
// back the feature without redeploying.
|
|
17
|
+
import { sessionManager } from '../session.js';
|
|
18
|
+
const ON_TOKENS = new Set(['on', 'enter', 'start', 'enable', '开', '开启']);
|
|
19
|
+
const OFF_TOKENS = new Set(['off', 'exit', 'stop', 'disable', '关', '关闭']);
|
|
20
|
+
/** Agents that genuinely honor session.planMode at adapter level.
|
|
21
|
+
* - claude-code: --permission-mode plan
|
|
22
|
+
* - opencode: --agent plan
|
|
23
|
+
* - codex: -s read-only sandbox (sandbox-level "safety floor" — see
|
|
24
|
+
* plugins/agents/codex/index.ts header for the caveat) */
|
|
25
|
+
const PLAN_CAPABLE_AGENTS = new Set(['claude-code', 'opencode', 'codex']);
|
|
26
|
+
export async function handlePlanCommand(args, ctx) {
|
|
27
|
+
if (process.env.IMHUB_DISABLE_PLAN_MODE === '1') {
|
|
28
|
+
return '🚫 Plan 模式已通过 IMHUB_DISABLE_PLAN_MODE 全局禁用,请联系运维。';
|
|
29
|
+
}
|
|
30
|
+
const token = args.trim().toLowerCase();
|
|
31
|
+
const existing = await sessionManager.getExistingSession(ctx.platform, ctx.channelId, ctx.threadId);
|
|
32
|
+
if (!token) {
|
|
33
|
+
const cur = existing?.planMode ? 'on' : 'off';
|
|
34
|
+
const agent = existing?.agent || ctx.defaultAgent;
|
|
35
|
+
const capable = PLAN_CAPABLE_AGENTS.has(agent);
|
|
36
|
+
const agentNote = capable
|
|
37
|
+
? ''
|
|
38
|
+
: `\n\n⚠️ 当前 agent **${agent}** 暂未对接 plan 模式 —— /plan 会改 session 标志位,但 ${agent} 不读它。要规划-only 行为请用 ${agent} 自身的只读模式,或 /cc / /oc 切到对接版本。`;
|
|
39
|
+
return `📐 Plan 模式: \`${cur}\`(当前 agent: ${agent})
|
|
40
|
+
|
|
41
|
+
/plan on 开启
|
|
42
|
+
- claude-code: --permission-mode plan(只读规划)
|
|
43
|
+
- opencode: 切到 plan agent
|
|
44
|
+
- codex: -s read-only 沙盒(OS 层强制只读)
|
|
45
|
+
/plan off 关闭,恢复正常执行模式
|
|
46
|
+
|
|
47
|
+
plan 模式下文件不会被修改,适合先讨论方案再动手。${agentNote}`;
|
|
48
|
+
}
|
|
49
|
+
// Ensure a session exists so the patch is durable. Defer to the active
|
|
50
|
+
// sticky agent if one exists, else the configured default.
|
|
51
|
+
await sessionManager.getOrCreateSession(ctx.platform, ctx.channelId, ctx.threadId, existing?.agent || ctx.defaultAgent);
|
|
52
|
+
// Warn (don't refuse) when the active agent doesn't honor plan mode —
|
|
53
|
+
// the user might intentionally pre-set the flag before /cc-switching to
|
|
54
|
+
// a capable agent. Surface, then proceed.
|
|
55
|
+
const activeAgent = existing?.agent || ctx.defaultAgent;
|
|
56
|
+
const capabilityNote = PLAN_CAPABLE_AGENTS.has(activeAgent)
|
|
57
|
+
? ''
|
|
58
|
+
: `\n\n⚠️ 当前 agent **${activeAgent}** 不读 planMode 标志位(claude-code / opencode 才支持)。标志会保存,但要切到上述 agent 才会生效。`;
|
|
59
|
+
if (ON_TOKENS.has(token)) {
|
|
60
|
+
if (existing?.planMode)
|
|
61
|
+
return `✅ Plan 模式已开启(无变化)。${capabilityNote}`;
|
|
62
|
+
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { planMode: true });
|
|
63
|
+
return `✅ Plan 模式已开启 — 接下来 agent 只规划不动手。/plan off 恢复。${capabilityNote}`;
|
|
64
|
+
}
|
|
65
|
+
if (OFF_TOKENS.has(token)) {
|
|
66
|
+
if (!existing?.planMode)
|
|
67
|
+
return 'ℹ️ Plan 模式本来就是关闭状态。';
|
|
68
|
+
await sessionManager.patchSession(ctx.platform, ctx.channelId, ctx.threadId, { planMode: false });
|
|
69
|
+
return '✅ Plan 模式已关闭 — 恢复正常执行模式。';
|
|
70
|
+
}
|
|
71
|
+
return `⚠️ 无效参数: \`${token}\`
|
|
72
|
+
|
|
73
|
+
/plan on | off`;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/core/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remind.d.ts","sourceRoot":"","sources":["../../../src/core/commands/remind.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAmEhD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAqM1F"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
// /remind command — lightweight one-shot reminders.
|
|
2
|
+
//
|
|
3
|
+
// /remind <when> <text> create
|
|
4
|
+
// /remind list list own pending
|
|
5
|
+
// /remind cancel <id> cancel
|
|
6
|
+
// /remind clear cancel all own pending
|
|
7
|
+
// /remind snooze <id> <when> snooze (clones row, cancels original)
|
|
8
|
+
import { createReminder, listReminders, cancelReminder, clearReminders, snoozeReminder, retryReminder, parseWhenPrefix, parseRecurrencePrefix, parseDuration, describeRecurrence, bindEmail, unbindEmail, getBoundEmail, isAiwatchEnabled, setAiwatchEnabled, ReminderError, MAX_PENDING_PER_USER, } from '../reminders.js';
|
|
9
|
+
const HELP = [
|
|
10
|
+
'🔔 **/remind** — 提醒(一次性 + 定期 + 邮件)',
|
|
11
|
+
'',
|
|
12
|
+
'一次性:',
|
|
13
|
+
' `/remind 2m 喝水` 相对时间(s/m/h/d)',
|
|
14
|
+
' `/remind 40秒喝水` 中文相对时间',
|
|
15
|
+
' `/remind 下午6点下班` 中文时点',
|
|
16
|
+
' `/remind 18:30 出门吃饭` 今天/明天最近的 18:30',
|
|
17
|
+
' `/remind 2026-05-09T20:00 ...` 绝对 ISO 时间',
|
|
18
|
+
'',
|
|
19
|
+
'定期 🔁:',
|
|
20
|
+
' `/remind 每5分钟 看看屏幕外` 每 N 分钟/小时/天',
|
|
21
|
+
' `/remind 每天早上8点 喝水` 每日固定时间',
|
|
22
|
+
' `/remind 每周一三五9点 站会` 每周指定几天',
|
|
23
|
+
' `/remind 每个工作日18:00 下班` 每周一到周五',
|
|
24
|
+
' `/remind 每周末10点 大扫除` 周六周日',
|
|
25
|
+
'',
|
|
26
|
+
'邮件 ✉️ (前缀 email):',
|
|
27
|
+
' `/remind email me@x.com 8:00 早安` 发到指定邮箱',
|
|
28
|
+
' `/remind email 每天8点 早安` 发到已绑定邮箱',
|
|
29
|
+
' `/remind bindemail me@x.com` 绑定默认邮箱',
|
|
30
|
+
' `/remind unbindemail` 解绑',
|
|
31
|
+
'',
|
|
32
|
+
'智能润色(默认开启 LLM):',
|
|
33
|
+
' `/remind 每天8点 喝水` 默认 LLM 润色后投递',
|
|
34
|
+
' `/remind literal 每天8点 喝水` 关闭润色,字面投递',
|
|
35
|
+
' (高频循环 < 1h 必须配 `literal`)',
|
|
36
|
+
'',
|
|
37
|
+
'智能识别(默认开启):',
|
|
38
|
+
' 直接说"明天8点提醒我开会",系统会自动识别并请求确认。',
|
|
39
|
+
' `/remind aiwatch off` 关闭识别',
|
|
40
|
+
' `/remind aiwatch on` 重新开启',
|
|
41
|
+
'',
|
|
42
|
+
'管理:',
|
|
43
|
+
' `/remind list` 查看待发提醒',
|
|
44
|
+
' `/remind cancel <id>` 取消(定期 = 终止整条循环)',
|
|
45
|
+
' `/remind clear` 清空所有待发',
|
|
46
|
+
' `/remind snooze <id> 5m` 延后',
|
|
47
|
+
].join('\n');
|
|
48
|
+
const EMAIL_LIKE_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
49
|
+
function fmtRel(fireAtIso, now) {
|
|
50
|
+
const fireAt = new Date(fireAtIso);
|
|
51
|
+
const diff = fireAt.getTime() - now.getTime();
|
|
52
|
+
if (diff < 0) {
|
|
53
|
+
const s = Math.round(-diff / 1000);
|
|
54
|
+
if (s < 60)
|
|
55
|
+
return `已过 ${s}s`;
|
|
56
|
+
if (s < 3600)
|
|
57
|
+
return `已过 ${Math.round(s / 60)}m`;
|
|
58
|
+
return `已过 ${Math.round(s / 3600)}h`;
|
|
59
|
+
}
|
|
60
|
+
const s = Math.round(diff / 1000);
|
|
61
|
+
if (s < 60)
|
|
62
|
+
return `${s}s 后`;
|
|
63
|
+
if (s < 3600)
|
|
64
|
+
return `${Math.round(s / 60)}m 后`;
|
|
65
|
+
if (s < 86400)
|
|
66
|
+
return `${(s / 3600).toFixed(1)}h 后`;
|
|
67
|
+
return `${(s / 86400).toFixed(1)}d 后`;
|
|
68
|
+
}
|
|
69
|
+
export async function handleRemindCommand(args, ctx) {
|
|
70
|
+
const trimmed = args.trim();
|
|
71
|
+
if (!trimmed)
|
|
72
|
+
return HELP;
|
|
73
|
+
const parts = trimmed.split(/\s+/);
|
|
74
|
+
const sub = parts[0];
|
|
75
|
+
const ownerOpts = ctx.userId ? { creatorId: ctx.userId } : {};
|
|
76
|
+
// ─── list ──────────────────────────────────────────────────────────
|
|
77
|
+
if (sub === 'list' || sub === 'ls') {
|
|
78
|
+
const all = listReminders({ ...ownerOpts, status: 'pending', limit: MAX_PENDING_PER_USER });
|
|
79
|
+
if (!all.length)
|
|
80
|
+
return '🔔 当前没有待发提醒。\n\n创建:`/remind 2m 喝水`';
|
|
81
|
+
const now = new Date();
|
|
82
|
+
const lines = all.map((r) => {
|
|
83
|
+
const text = r.text.length > 40 ? `${r.text.slice(0, 40)}…` : r.text;
|
|
84
|
+
const icon = r.recurrence ? '🔁' : '🔔';
|
|
85
|
+
const tail = r.recurrence ? ` [${describeRecurrence(r.recurrence)}]` : '';
|
|
86
|
+
return `${icon} #${r.id} ${fmtRel(r.fire_at, now)} ${text}${tail}`;
|
|
87
|
+
});
|
|
88
|
+
return `🔔 **待发提醒** (${all.length})\n\n${lines.join('\n')}\n\n` +
|
|
89
|
+
'/remind cancel <id> 取消\n/remind clear 清空';
|
|
90
|
+
}
|
|
91
|
+
// ─── cancel ────────────────────────────────────────────────────────
|
|
92
|
+
if (sub === 'cancel' || sub === 'c' || sub === 'rm' || sub === 'del') {
|
|
93
|
+
const id = Number.parseInt(parts[1] || '', 10);
|
|
94
|
+
if (!Number.isFinite(id))
|
|
95
|
+
return '用法:`/remind cancel <id>`';
|
|
96
|
+
const ok = cancelReminder(id, ownerOpts);
|
|
97
|
+
return ok ? `✅ 已取消提醒 #${id}` : `❌ 找不到 pending 提醒 #${id}(或不属于你)`;
|
|
98
|
+
}
|
|
99
|
+
// ─── clear ─────────────────────────────────────────────────────────
|
|
100
|
+
if (sub === 'clear') {
|
|
101
|
+
if (!ctx.userId)
|
|
102
|
+
return '❌ 无法识别身份,clear 已拒绝';
|
|
103
|
+
const n = clearReminders({ creatorId: ctx.userId });
|
|
104
|
+
return n > 0 ? `✅ 已取消 ${n} 条待发提醒` : '🔔 没有待取消的提醒';
|
|
105
|
+
}
|
|
106
|
+
// ─── retry ─────────────────────────────────────────────────────────
|
|
107
|
+
if (sub === 'retry') {
|
|
108
|
+
const id = Number.parseInt(parts[1] || '', 10);
|
|
109
|
+
if (!Number.isFinite(id))
|
|
110
|
+
return '用法:`/remind retry <id>`';
|
|
111
|
+
const ok = retryReminder(id, ownerOpts);
|
|
112
|
+
return ok
|
|
113
|
+
? `✅ 已将 #${id} 重新排队(10s 后触发)`
|
|
114
|
+
: `❌ #${id} 不能重试(不存在 / 不属于你 / 还在 pending)`;
|
|
115
|
+
}
|
|
116
|
+
// ─── snooze ────────────────────────────────────────────────────────
|
|
117
|
+
if (sub === 'snooze') {
|
|
118
|
+
const id = Number.parseInt(parts[1] || '', 10);
|
|
119
|
+
const dur = parts[2] || '';
|
|
120
|
+
if (!Number.isFinite(id) || !dur)
|
|
121
|
+
return '用法:`/remind snooze <id> <duration>`,例:`/remind snooze 17 5m`';
|
|
122
|
+
const deltaMs = parseDuration(dur);
|
|
123
|
+
if (deltaMs === null)
|
|
124
|
+
return `❌ 时长格式错:"${dur}"。支持 s/m/h/d,例:5m / 30s / 2h`;
|
|
125
|
+
try {
|
|
126
|
+
const newId = snoozeReminder(id, deltaMs, ownerOpts);
|
|
127
|
+
return `✅ 提醒 #${id} 已延后 ${dur}(新 #${newId})`;
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (err instanceof ReminderError)
|
|
131
|
+
return `❌ ${err.message}`;
|
|
132
|
+
throw err;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ─── bindemail / unbindemail ───────────────────────────────────────
|
|
136
|
+
if (sub === 'bindemail') {
|
|
137
|
+
if (!ctx.userId)
|
|
138
|
+
return '❌ 无法识别身份,绑定已拒绝';
|
|
139
|
+
const addr = parts[1] || '';
|
|
140
|
+
if (!addr) {
|
|
141
|
+
const cur = getBoundEmail(ctx.platform, ctx.userId);
|
|
142
|
+
return cur
|
|
143
|
+
? `📮 当前绑定邮箱:${cur}\n要换:\`/remind bindemail new@example.com\`\n要解:\`/remind unbindemail\``
|
|
144
|
+
: '用法:`/remind bindemail you@example.com`';
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const bound = bindEmail(ctx.platform, ctx.userId, addr);
|
|
148
|
+
return `✅ 已绑定邮箱:${bound}\n\n之后可以:\`/remind email 每天8点 早安\``;
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
if (err instanceof ReminderError)
|
|
152
|
+
return `❌ ${err.message}`;
|
|
153
|
+
throw err;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (sub === 'unbindemail') {
|
|
157
|
+
if (!ctx.userId)
|
|
158
|
+
return '❌ 无法识别身份';
|
|
159
|
+
return unbindEmail(ctx.platform, ctx.userId)
|
|
160
|
+
? '✅ 已解绑邮箱'
|
|
161
|
+
: '🔔 当前没有绑定邮箱';
|
|
162
|
+
}
|
|
163
|
+
// ─── aiwatch (intent detector toggle) ──────────────────────────────
|
|
164
|
+
if (sub === 'aiwatch') {
|
|
165
|
+
if (!ctx.userId)
|
|
166
|
+
return '❌ 无法识别身份';
|
|
167
|
+
const arg = (parts[1] || '').toLowerCase();
|
|
168
|
+
if (!arg) {
|
|
169
|
+
const on = isAiwatchEnabled(ctx.platform, ctx.userId);
|
|
170
|
+
return on
|
|
171
|
+
? '🔍 智能提醒检测:**开启**\n\n' +
|
|
172
|
+
'当你说"明天8点提醒我开会"这类话时,会自动识别并请求确认。\n关闭:`/remind aiwatch off`'
|
|
173
|
+
: '🔍 智能提醒检测:**关闭**\n\n开启:`/remind aiwatch on`';
|
|
174
|
+
}
|
|
175
|
+
if (arg === 'on' || arg === 'enable' || arg === '1' || arg === 'yes') {
|
|
176
|
+
setAiwatchEnabled(ctx.platform, ctx.userId, true);
|
|
177
|
+
return '✅ 智能提醒检测已开启';
|
|
178
|
+
}
|
|
179
|
+
if (arg === 'off' || arg === 'disable' || arg === '0' || arg === 'no') {
|
|
180
|
+
setAiwatchEnabled(ctx.platform, ctx.userId, false);
|
|
181
|
+
return '✅ 智能提醒检测已关闭';
|
|
182
|
+
}
|
|
183
|
+
return '用法:`/remind aiwatch on` 或 `/remind aiwatch off`';
|
|
184
|
+
}
|
|
185
|
+
// ─── help ──────────────────────────────────────────────────────────
|
|
186
|
+
if (sub === 'help' || sub === '?' || sub === '-h' || sub === '--help')
|
|
187
|
+
return HELP;
|
|
188
|
+
// ─── create ────────────────────────────────────────────────────────
|
|
189
|
+
// Peel prefixes off the head (any order):
|
|
190
|
+
// `literal` → force prompt_mode='literal' (skip LLM polish)
|
|
191
|
+
// `email [<addr>]` → re-target to email messenger
|
|
192
|
+
//
|
|
193
|
+
// `/remind literal email me@x.com 2m ...` works the same as
|
|
194
|
+
// `/remind email literal me@x.com 2m ...`.
|
|
195
|
+
let createInput = trimmed;
|
|
196
|
+
let promptMode = 'llm';
|
|
197
|
+
let emailTarget = null;
|
|
198
|
+
let routeViaEmail = false;
|
|
199
|
+
for (let pass = 0; pass < 2; pass++) {
|
|
200
|
+
const head = createInput.split(/\s+/)[0];
|
|
201
|
+
if (head === 'literal') {
|
|
202
|
+
promptMode = 'literal';
|
|
203
|
+
createInput = createInput.replace(/^literal\s*/, '');
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
if (head === 'email') {
|
|
207
|
+
routeViaEmail = true;
|
|
208
|
+
const after = createInput.replace(/^email\s*/, '');
|
|
209
|
+
const second = after.split(/\s+/)[0] || '';
|
|
210
|
+
if (EMAIL_LIKE_RE.test(second)) {
|
|
211
|
+
emailTarget = second;
|
|
212
|
+
createInput = after.replace(/^\S+\s*/, '');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
if (!ctx.userId) {
|
|
216
|
+
return '❌ 无法识别身份;用 `/remind email you@example.com 2m 内容`';
|
|
217
|
+
}
|
|
218
|
+
emailTarget = getBoundEmail(ctx.platform, ctx.userId);
|
|
219
|
+
if (!emailTarget) {
|
|
220
|
+
return '❌ 还没绑定邮箱。先 `/remind bindemail you@example.com`,或在命令里写明:\n `/remind email you@example.com 2m 内容`';
|
|
221
|
+
}
|
|
222
|
+
createInput = after;
|
|
223
|
+
}
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
if ((routeViaEmail || promptMode === 'literal') && !createInput.trim()) {
|
|
229
|
+
return '❌ 缺少时间和内容。例:`/remind email 每天8点 早安`、`/remind literal 5m 喝水`';
|
|
230
|
+
}
|
|
231
|
+
const now = new Date();
|
|
232
|
+
const recurring = parseRecurrencePrefix(createInput, now);
|
|
233
|
+
const parsed = recurring ?? parseWhenPrefix(createInput, now);
|
|
234
|
+
if (!parsed) {
|
|
235
|
+
return [
|
|
236
|
+
'❌ 没看懂时间。例:',
|
|
237
|
+
' 一次性:`/remind 40秒喝水`、`/remind 下午6点下班`、`/remind 2m drink water`',
|
|
238
|
+
' 定期:`/remind 每天8点喝水`、`/remind 每周一三五9点站会`、`/remind 每5分钟看屏幕外`',
|
|
239
|
+
' 邮件:`/remind email me@x.com 每天8点 早安`',
|
|
240
|
+
].join('\n');
|
|
241
|
+
}
|
|
242
|
+
// Strip leading "提醒/通知/告诉我/我"-style filler so "40秒提醒我喝水" → "喝水"
|
|
243
|
+
const text = parsed.rest.replace(/^(提醒(我)?|通知(我)?|告诉我|喊我|叫我)[,、::\s]*/, '').trim();
|
|
244
|
+
if (!text) {
|
|
245
|
+
return '❌ 缺少提醒内容\n\n例:`/remind 40秒喝水` 或 `/remind 每天8点喝水`';
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
const id = createReminder({
|
|
249
|
+
fireAt: parsed.fireAt,
|
|
250
|
+
text,
|
|
251
|
+
platform: routeViaEmail ? 'email' : ctx.platform,
|
|
252
|
+
channelId: routeViaEmail ? 'email' : ctx.channelId,
|
|
253
|
+
threadId: routeViaEmail ? emailTarget : ctx.threadId,
|
|
254
|
+
userId: ctx.userId || '',
|
|
255
|
+
source: 'slash',
|
|
256
|
+
recurrence: recurring?.recurrence,
|
|
257
|
+
promptMode,
|
|
258
|
+
});
|
|
259
|
+
const icon = routeViaEmail ? '✉️' : recurring ? '🔁' : '✅';
|
|
260
|
+
const recurLine = recurring ? `\n 循环:${describeRecurrence(recurring.recurrence)}` : '';
|
|
261
|
+
const targetLine = routeViaEmail ? `\n 邮件至:${emailTarget}` : '';
|
|
262
|
+
const modeLine = promptMode === 'literal' ? '\n 模式:字面文本(不走 LLM 润色)' : '';
|
|
263
|
+
return `${icon} 已创建提醒 #${id}${recurLine}${targetLine}${modeLine}\n 首次触发:${parsed.fireAt.toLocaleString()} (${fmtRel(parsed.fireAt.toISOString(), now)})\n 内容:${text}`;
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
if (err instanceof ReminderError)
|
|
267
|
+
return `❌ ${err.message}`;
|
|
268
|
+
throw err;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=remind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remind.js","sourceRoot":"","sources":["../../../src/core/commands/remind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/core/commands/router.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAMhD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,MAAM,CAAC,CAsEjB"}
|