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,128 @@
|
|
|
1
|
+
// /cron command — manage cron-driven scheduled prompts (P2-F).
|
|
2
|
+
//
|
|
3
|
+
// /cron list list all schedules
|
|
4
|
+
// /cron create <name> <agent> <cron> <prompt> create
|
|
5
|
+
// /cron delete <id> delete
|
|
6
|
+
// /cron enable <id> enable
|
|
7
|
+
// /cron disable <id> disable
|
|
8
|
+
// /cron check <id> show details
|
|
9
|
+
//
|
|
10
|
+
// Cron expression is the standard 5-field POSIX format ("min hour dom mon dow").
|
|
11
|
+
//
|
|
12
|
+
// Renamed from /schedule in v0.2.38 to avoid colliding with Claude Code's
|
|
13
|
+
// built-in /schedule skill (Anthropic remote routines). The /schedule alias
|
|
14
|
+
// is still wired in router.ts but emits a one-line deprecation banner; it
|
|
15
|
+
// will be removed in v0.4.0.
|
|
16
|
+
import { createSchedule, listSchedules, getSchedule, deleteSchedule, setEnabled, } from '../schedule.js';
|
|
17
|
+
import { parseCron, nextOccurrence } from '../cron.js';
|
|
18
|
+
import { registry } from '../registry.js';
|
|
19
|
+
import { workspaceRegistry } from '../workspace.js';
|
|
20
|
+
export async function handleCronCommand(args, ctx) {
|
|
21
|
+
const parts = args.trim().split(/\s+/).filter(Boolean);
|
|
22
|
+
const sub = parts[0] || 'list';
|
|
23
|
+
// Same per-user scoping rule as /job. ctx.userId set → see only own rows;
|
|
24
|
+
// ctx.userId unset → unrestricted (back-compat for non-IM callers).
|
|
25
|
+
const ownerOpts = ctx.userId ? { creatorId: ctx.userId } : {};
|
|
26
|
+
switch (sub) {
|
|
27
|
+
case 'list':
|
|
28
|
+
case 'ls': {
|
|
29
|
+
const all = listSchedules(50, ownerOpts);
|
|
30
|
+
if (!all.length)
|
|
31
|
+
return '🗓️ 暂无定时任务。\n\n用法: /cron create <name> <agent> "<cron>" <prompt>';
|
|
32
|
+
const lines = all.map((s) => {
|
|
33
|
+
const flag = s.enabled ? '✅' : '⏸️';
|
|
34
|
+
return `${flag} #${s.id} **${s.name}** (${s.agent})\n cron: \`${s.cron}\`\n 下次: ${s.next_run}`;
|
|
35
|
+
});
|
|
36
|
+
return `🗓️ **定时任务** (${all.length})\n\n${lines.join('\n\n')}\n\n/cron check <id> 详情\n/cron enable/disable <id> 启停\n/cron delete <id> 删除`;
|
|
37
|
+
}
|
|
38
|
+
case 'create':
|
|
39
|
+
case 'c': {
|
|
40
|
+
// /cron create <name> <agent> "<cron>" <prompt...>
|
|
41
|
+
if (parts.length < 5) {
|
|
42
|
+
return '用法: /cron create <name> <agent> "<cron expr>" <prompt>\n\n例如: /cron create daily-report opencode "0 9 * * 1-5" 生成今天的销售日报';
|
|
43
|
+
}
|
|
44
|
+
const name = parts[1];
|
|
45
|
+
const agentName = parts[2];
|
|
46
|
+
// The cron expression may be quoted — try to extract.
|
|
47
|
+
const restJoined = parts.slice(3).join(' ');
|
|
48
|
+
let cron;
|
|
49
|
+
let prompt;
|
|
50
|
+
const quoted = restJoined.match(/^"([^"]+)"\s+(.+)$/) || restJoined.match(/^'([^']+)'\s+(.+)$/);
|
|
51
|
+
if (quoted) {
|
|
52
|
+
cron = quoted[1];
|
|
53
|
+
prompt = quoted[2];
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Best effort: assume the next 5 tokens are the cron expression
|
|
57
|
+
const tokens = parts.slice(3);
|
|
58
|
+
if (tokens.length < 6)
|
|
59
|
+
return '用法: /cron create <name> <agent> "<cron expr>" <prompt>';
|
|
60
|
+
cron = tokens.slice(0, 5).join(' ');
|
|
61
|
+
prompt = tokens.slice(5).join(' ');
|
|
62
|
+
}
|
|
63
|
+
// M6: workspace whitelist + agent existence check before we touch SQL.
|
|
64
|
+
const agent = registry.findAgent(agentName);
|
|
65
|
+
if (!agent)
|
|
66
|
+
return `❌ Agent "${agentName}" not found.`;
|
|
67
|
+
const ws = workspaceRegistry.resolve(ctx.userId || 'unknown');
|
|
68
|
+
if (!ws.hasAgent(agent.name)) {
|
|
69
|
+
return `❌ Agent "${agent.name}" 不在 workspace "${ws.name}" 的白名单内。`;
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
// Validate before insert so we get a clean error.
|
|
73
|
+
parseCron(cron);
|
|
74
|
+
const id = createSchedule({
|
|
75
|
+
name, agent: agent.name, cron, prompt,
|
|
76
|
+
creatorId: ctx.userId || '',
|
|
77
|
+
workspaceId: ws.id,
|
|
78
|
+
});
|
|
79
|
+
const next = nextOccurrence(parseCron(cron));
|
|
80
|
+
return `✅ 定时任务 #${id} 已创建\n\nName: ${name}\nAgent: ${agent.name}\nCron: \`${cron}\`\n下次执行: ${next?.toISOString() || 'unknown'}`;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
84
|
+
return `❌ 创建失败: ${msg}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
case 'delete':
|
|
88
|
+
case 'rm': {
|
|
89
|
+
const id = parseInt(parts[1] || '', 10);
|
|
90
|
+
if (!Number.isFinite(id))
|
|
91
|
+
return '用法: /cron delete <id>';
|
|
92
|
+
return deleteSchedule(id, ownerOpts)
|
|
93
|
+
? `✅ 定时任务 #${id} 已删除。`
|
|
94
|
+
: `❌ 未找到 #${id},或不是你创建的。`;
|
|
95
|
+
}
|
|
96
|
+
case 'enable':
|
|
97
|
+
case 'on': {
|
|
98
|
+
const id = parseInt(parts[1] || '', 10);
|
|
99
|
+
if (!Number.isFinite(id))
|
|
100
|
+
return '用法: /cron enable <id>';
|
|
101
|
+
return setEnabled(id, true, ownerOpts)
|
|
102
|
+
? `✅ 定时任务 #${id} 已启用。`
|
|
103
|
+
: `❌ 未找到 #${id},或不是你创建的。`;
|
|
104
|
+
}
|
|
105
|
+
case 'disable':
|
|
106
|
+
case 'off': {
|
|
107
|
+
const id = parseInt(parts[1] || '', 10);
|
|
108
|
+
if (!Number.isFinite(id))
|
|
109
|
+
return '用法: /cron disable <id>';
|
|
110
|
+
return setEnabled(id, false, ownerOpts)
|
|
111
|
+
? `⏸️ 定时任务 #${id} 已暂停。`
|
|
112
|
+
: `❌ 未找到 #${id},或不是你创建的。`;
|
|
113
|
+
}
|
|
114
|
+
case 'check':
|
|
115
|
+
case 'show': {
|
|
116
|
+
const id = parseInt(parts[1] || '', 10);
|
|
117
|
+
if (!Number.isFinite(id))
|
|
118
|
+
return '用法: /cron check <id>';
|
|
119
|
+
const s = getSchedule(id, ownerOpts);
|
|
120
|
+
if (!s)
|
|
121
|
+
return `❌ 未找到 #${id}。`;
|
|
122
|
+
return `🗓️ **定时任务 #${s.id}** (${s.name})\n\nAgent: ${s.agent}\n状态: ${s.enabled ? '✅ 启用' : '⏸️ 已暂停'}\nCron: \`${s.cron}\`\n下次执行: ${s.next_run}\n上次执行: ${s.last_run || '从未'}\n通知 URL: ${s.notify_url || '无'}\n\nPrompt: ${s.prompt}`;
|
|
123
|
+
}
|
|
124
|
+
default:
|
|
125
|
+
return '用法: /cron [list|create|delete|enable|disable|check]';
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../../src/core/commands/cron.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../../../src/core/commands/job.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAchD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAyK1C"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// /job (also /task) commands — create and manage persisted async jobs with subtask sessions
|
|
2
|
+
import { registry } from '../registry.js';
|
|
3
|
+
import { sessionManager } from '../session.js';
|
|
4
|
+
import { AgentBase } from '../agent-base.js';
|
|
5
|
+
import { createJob, getJob, listJobs, cancelJob, runJob, getJobStats } from '../job-board.js';
|
|
6
|
+
import { workspaceRegistry } from '../workspace.js';
|
|
7
|
+
function formatJob(j) {
|
|
8
|
+
const icon = { pending: '⏳', running: '🔄', completed: '✅', failed: '❌', cancelled: '🚫' }[j.status] || '❓';
|
|
9
|
+
const ts = new Date(`${j.created_at}Z`).toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' });
|
|
10
|
+
const preview = j.prompt.substring(0, 50) + (j.prompt.length > 50 ? '...' : '');
|
|
11
|
+
return `${icon} #${j.id} ${j.agent}: ${preview} [${j.status}] · ${ts}`;
|
|
12
|
+
}
|
|
13
|
+
export async function handleJobCommand(args, ctx) {
|
|
14
|
+
const parts = args.trim().split(/\s+/).filter(Boolean);
|
|
15
|
+
const sub = parts[0] || 'list';
|
|
16
|
+
const rest = parts.slice(1).join(' ');
|
|
17
|
+
// Per-user scoping: when ctx.userId is set (the IM-driven path), every read /
|
|
18
|
+
// mutate is restricted to rows whose creator_id matches OR is '' (legacy).
|
|
19
|
+
// When userId is unset (REST/system caller via the same handler) all rows
|
|
20
|
+
// are visible — that's the historical behavior.
|
|
21
|
+
const ownerOpts = ctx.userId ? { creatorId: ctx.userId } : {};
|
|
22
|
+
switch (sub) {
|
|
23
|
+
case 'list':
|
|
24
|
+
case 'ls': {
|
|
25
|
+
const filter = parts[1];
|
|
26
|
+
const jobs = listJobs(10, filter, ownerOpts);
|
|
27
|
+
if (!jobs.length)
|
|
28
|
+
return '📋 暂无任务。\n\n使用 /job create <agent> <prompt> 创建新任务。';
|
|
29
|
+
const stats = getJobStats();
|
|
30
|
+
return `📋 **任务列表** (总 ${stats.total} · 待 ${stats.pending} · 运行 ${stats.running} · 完 ${stats.completed} · 败 ${stats.failed})
|
|
31
|
+
|
|
32
|
+
${jobs.map(formatJob).join('\n')}
|
|
33
|
+
|
|
34
|
+
/job create <agent> <prompt> 创建
|
|
35
|
+
/job check <id> 查看详情
|
|
36
|
+
/job cancel <id> 取消
|
|
37
|
+
/job run <id> 立即运行`;
|
|
38
|
+
}
|
|
39
|
+
case 'create':
|
|
40
|
+
case 'c': {
|
|
41
|
+
if (!rest)
|
|
42
|
+
return '用法: /job create <agent> <prompt>\n\n例如: /job create opencode 分析这段代码的性能问题';
|
|
43
|
+
const spaceIdx = rest.indexOf(' ');
|
|
44
|
+
if (spaceIdx < 0)
|
|
45
|
+
return '用法: /job create <agent> <prompt>\n\n请提供 agent 名称和任务内容。';
|
|
46
|
+
const agentName = rest.slice(0, spaceIdx);
|
|
47
|
+
const prompt = rest.slice(spaceIdx + 1).trim();
|
|
48
|
+
if (!prompt)
|
|
49
|
+
return '请提供任务内容。';
|
|
50
|
+
const agent = registry.findAgent(agentName);
|
|
51
|
+
if (!agent)
|
|
52
|
+
return `❌ Agent "${agentName}" not found.`;
|
|
53
|
+
// M6: workspace whitelist applies to direct command paths too. Without
|
|
54
|
+
// this, a member of a workspace whose `agents: ['opencode']` whitelist
|
|
55
|
+
// allows only opencode could still smuggle in a `/job create claude-code`.
|
|
56
|
+
const ws = workspaceRegistry.resolve(ctx.userId || 'unknown');
|
|
57
|
+
if (!ws.hasAgent(agent.name)) {
|
|
58
|
+
return `❌ Agent "${agent.name}" 不在 workspace "${ws.name}" 的白名单内。`;
|
|
59
|
+
}
|
|
60
|
+
const id = createJob(agent.name, prompt, {
|
|
61
|
+
creatorId: ctx.userId || '',
|
|
62
|
+
workspaceId: ws.id,
|
|
63
|
+
});
|
|
64
|
+
return `✅ 任务 #${id} 已创建
|
|
65
|
+
|
|
66
|
+
Agent: ${agent.name}
|
|
67
|
+
状态: 待执行
|
|
68
|
+
|
|
69
|
+
使用 /job run ${id} 开始执行,或 /job list 查看所有任务。`;
|
|
70
|
+
}
|
|
71
|
+
case 'check':
|
|
72
|
+
case 'get':
|
|
73
|
+
case 'g': {
|
|
74
|
+
const id = parseInt(parts[1] || '', 10);
|
|
75
|
+
if (Number.isNaN(id))
|
|
76
|
+
return '用法: /job check <id>';
|
|
77
|
+
const job = getJob(id, ownerOpts);
|
|
78
|
+
if (!job)
|
|
79
|
+
return `❌ 未找到任务 #${id}。`;
|
|
80
|
+
const statusLabel = { pending: '⏳ 待执行', running: '🔄 运行中', completed: '✅ 已完成', failed: '❌ 失败', cancelled: '🚫 已取消' };
|
|
81
|
+
let msg = `📋 **任务 #${job.id}**
|
|
82
|
+
|
|
83
|
+
Agent: ${job.agent}
|
|
84
|
+
状态: ${statusLabel[job.status] || job.status}
|
|
85
|
+
创建: ${job.created_at}`;
|
|
86
|
+
if (job.completed_at)
|
|
87
|
+
msg += `\n完成: ${job.completed_at}`;
|
|
88
|
+
msg += `\n\n内容: ${job.prompt}`;
|
|
89
|
+
if (job.result)
|
|
90
|
+
msg += `\n\n---\n结果:\n${job.result.length > 500 ? `${job.result.slice(0, 500)}...` : job.result}`;
|
|
91
|
+
if (job.error)
|
|
92
|
+
msg += `\n\n错误: ${job.error}`;
|
|
93
|
+
if (job.status === 'completed')
|
|
94
|
+
msg += `\n\n/job run ${job.id} 重新执行`;
|
|
95
|
+
if (job.status === 'pending')
|
|
96
|
+
msg += `\n\n/job run ${job.id} 开始执行`;
|
|
97
|
+
return msg;
|
|
98
|
+
}
|
|
99
|
+
case 'run':
|
|
100
|
+
case 'r': {
|
|
101
|
+
const id = parseInt(parts[1] || '', 10);
|
|
102
|
+
if (Number.isNaN(id))
|
|
103
|
+
return '用法: /job run <id>';
|
|
104
|
+
const job = getJob(id, ownerOpts);
|
|
105
|
+
if (!job)
|
|
106
|
+
return `❌ 未找到任务 #${id}。`;
|
|
107
|
+
if (job.status === 'running')
|
|
108
|
+
return `🔄 任务 #${id} 已在运行中。`;
|
|
109
|
+
const agent = registry.findAgent(job.agent);
|
|
110
|
+
if (!agent)
|
|
111
|
+
return `❌ Agent "${job.agent}" not found.`;
|
|
112
|
+
// Fire and forget with signal support for cancellation
|
|
113
|
+
const isAgentBaseAgent = agent instanceof AgentBase;
|
|
114
|
+
runJob(id, async function* (j, _logger, signal) {
|
|
115
|
+
if (isAgentBaseAgent) {
|
|
116
|
+
const ba = agent;
|
|
117
|
+
const result = await ba.spawnAndCollect(j.prompt, signal);
|
|
118
|
+
if (result)
|
|
119
|
+
yield result;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const generator = agent.sendPrompt(`job-${j.id}`, j.prompt, []);
|
|
123
|
+
for await (const chunk of generator) {
|
|
124
|
+
if (signal.aborted)
|
|
125
|
+
break;
|
|
126
|
+
yield chunk;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}, ctx.logger).catch(() => { });
|
|
130
|
+
return `🔄 任务 #${id} 已开始运行。
|
|
131
|
+
|
|
132
|
+
使用 /job check ${id} 查看结果。`;
|
|
133
|
+
}
|
|
134
|
+
case 'cancel':
|
|
135
|
+
case 'x': {
|
|
136
|
+
const id = parseInt(parts[1] || '', 10);
|
|
137
|
+
if (Number.isNaN(id))
|
|
138
|
+
return '用法: /job cancel <id>';
|
|
139
|
+
if (cancelJob(id, ownerOpts))
|
|
140
|
+
return `🚫 任务 #${id} 已取消。`;
|
|
141
|
+
return `❌ 无法取消任务 #${id}。可能不存在、已结束、或不是你创建的任务。`;
|
|
142
|
+
}
|
|
143
|
+
case 'switch':
|
|
144
|
+
case 'sw': {
|
|
145
|
+
const arg = parts[1];
|
|
146
|
+
if (!arg)
|
|
147
|
+
return '用法: /job switch <id> 或 /job switch main';
|
|
148
|
+
if (arg === 'main' || arg === '0') {
|
|
149
|
+
await sessionManager.setActiveSubtask(ctx.platform, ctx.channelId, ctx.threadId, null);
|
|
150
|
+
return '✅ 已返回主会话。';
|
|
151
|
+
}
|
|
152
|
+
const id = parseInt(arg, 10);
|
|
153
|
+
if (Number.isNaN(id))
|
|
154
|
+
return '用法: /job switch <id> 或 /job switch main';
|
|
155
|
+
const job = getJob(id, ownerOpts);
|
|
156
|
+
if (!job)
|
|
157
|
+
return `❌ 未找到任务 #${id}。`;
|
|
158
|
+
await sessionManager.setActiveSubtask(ctx.platform, ctx.channelId, ctx.threadId, id);
|
|
159
|
+
// Also create/update subtask metadata in session
|
|
160
|
+
await sessionManager.updateSubtask(ctx.platform, ctx.channelId, ctx.threadId, id, {
|
|
161
|
+
id, agent: job.agent, prompt: job.prompt,
|
|
162
|
+
status: 'running', createdAt: new Date(),
|
|
163
|
+
});
|
|
164
|
+
return `✅ 已进入任务 #${id} 的会话 (${job.agent})。\n\n直接发送消息继续对话。\n/job switch main 返回主会话。`;
|
|
165
|
+
}
|
|
166
|
+
case 'collect':
|
|
167
|
+
case 'cl': {
|
|
168
|
+
const id = parseInt(parts[1] || '', 10);
|
|
169
|
+
if (Number.isNaN(id))
|
|
170
|
+
return '用法: /job collect <id>';
|
|
171
|
+
const job = getJob(id, ownerOpts);
|
|
172
|
+
if (!job)
|
|
173
|
+
return `❌ 未找到任务 #${id}。`;
|
|
174
|
+
if (!job.result)
|
|
175
|
+
return `⚠️ 任务 #${id} (${job.status}) 暂无结果。`;
|
|
176
|
+
// Summarize via main agent
|
|
177
|
+
const existingSession = await sessionManager.getExistingSession(ctx.platform, ctx.channelId, ctx.threadId);
|
|
178
|
+
const mainAgent = existingSession?.agent || ctx.defaultAgent;
|
|
179
|
+
const agent = registry.findAgent(mainAgent);
|
|
180
|
+
if (!agent)
|
|
181
|
+
return `❌ Agent "${mainAgent}" not found.`;
|
|
182
|
+
const summaryPrompt = `Review and summarize this task result from ${job.agent}:\n\n---\n${job.result}\n---\n\nProvide a concise summary.`;
|
|
183
|
+
ctx.logger.info({ event: 'task.collect', taskId: id, agent: mainAgent });
|
|
184
|
+
// Return the generator — caller will stream
|
|
185
|
+
const generator = agent.sendPrompt(`collect-${id}`, summaryPrompt, []);
|
|
186
|
+
return (async function* () {
|
|
187
|
+
for await (const chunk of generator)
|
|
188
|
+
yield chunk;
|
|
189
|
+
})();
|
|
190
|
+
}
|
|
191
|
+
default:
|
|
192
|
+
return '用法: /job [list|create|check|run|cancel|switch|collect]\n\n也支持 /task 作为 /job 的别名。';
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job.js","sourceRoot":"","sources":["../../../src/core/commands/job.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../../../src/core/commands/memo.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AA2DhD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBxF"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// /memo — 5W1H persistent memos. Slash surface is intentionally minimal
|
|
2
|
+
// (list / show / delete / help). The interesting interactions go through
|
|
3
|
+
// the agent's MCP tools (save_memo / search_memos / etc.) — slash is just
|
|
4
|
+
// for management when the user wants to peek at the database directly.
|
|
5
|
+
//
|
|
6
|
+
// Aliases: /memo · /记
|
|
7
|
+
//
|
|
8
|
+
// /memo list 10 most recent
|
|
9
|
+
// /memo list [N] list N (max 50)
|
|
10
|
+
// /memo show <id> detail (with map links if where_* set)
|
|
11
|
+
// /memo delete <id> remove
|
|
12
|
+
// /memo here [what] shortcut: issue a GPS capture link with
|
|
13
|
+
// a note (skips going through the agent)
|
|
14
|
+
// /memo help this
|
|
15
|
+
import { listMemos, getMemo, deleteMemo, searchMemos, mapUrls, } from '../memos.js';
|
|
16
|
+
import { issueToken } from '../location-token.js';
|
|
17
|
+
const DEFAULT_LOC_BASE_URL = 'https://agent.iclaw.host';
|
|
18
|
+
const HELP = [
|
|
19
|
+
'📝 /memo — 5W1H 记录',
|
|
20
|
+
'─────────────────────',
|
|
21
|
+
'/memo 列出最近 10 条',
|
|
22
|
+
'/memo list [N] 列 N 条',
|
|
23
|
+
'/memo show <id> 查看一条 (含地图链接)',
|
|
24
|
+
'/memo delete <id> 删除',
|
|
25
|
+
'/memo here [what] 拿当前 GPS 链接 (例: /memo here 车)',
|
|
26
|
+
'',
|
|
27
|
+
'更聪明的用法:直接说自然语言交给 agent,例如',
|
|
28
|
+
' "帮我记下,爸爸的生日是5月8日"',
|
|
29
|
+
' "我的车在哪?"',
|
|
30
|
+
'agent 会自动调 save_memo / search_memos / request_location_capture',
|
|
31
|
+
'',
|
|
32
|
+
'别名: /memo · /记',
|
|
33
|
+
].join('\n');
|
|
34
|
+
function fmtRow(m) {
|
|
35
|
+
const head = [m.what, m.who && `· ${m.who}`].filter(Boolean).join(' ');
|
|
36
|
+
const when = m.when_text || m.when_at || '';
|
|
37
|
+
const where = m.where_label || (m.where_lat != null ? '📍坐标' : '');
|
|
38
|
+
const meta = [when, where].filter(Boolean).join(' · ');
|
|
39
|
+
const expires = m.expires_at ? ` (⏰ 过期 ${m.expires_at.slice(0, 16)})` : '';
|
|
40
|
+
return `📝 #${m.id} ${head}${meta ? `\n ${meta}` : ''}${expires}`;
|
|
41
|
+
}
|
|
42
|
+
function fmtDetail(m) {
|
|
43
|
+
const lines = [`📝 记录 #${m.id}`];
|
|
44
|
+
lines.push(` what: ${m.what}`);
|
|
45
|
+
if (m.who)
|
|
46
|
+
lines.push(` who: ${m.who}`);
|
|
47
|
+
if (m.when_at)
|
|
48
|
+
lines.push(` when: ${m.when_at}`);
|
|
49
|
+
else if (m.when_text)
|
|
50
|
+
lines.push(` when: ${m.when_text}`);
|
|
51
|
+
if (m.where_label)
|
|
52
|
+
lines.push(` where: ${m.where_label}`);
|
|
53
|
+
if (m.where_lat != null && m.where_lng != null) {
|
|
54
|
+
lines.push(` 坐标: ${m.where_lat.toFixed(6)}, ${m.where_lng.toFixed(6)}`);
|
|
55
|
+
}
|
|
56
|
+
if (m.how)
|
|
57
|
+
lines.push(` how: ${m.how}`);
|
|
58
|
+
if (m.why)
|
|
59
|
+
lines.push(` why: ${m.why}`);
|
|
60
|
+
lines.push(` 来源: ${m.source}`);
|
|
61
|
+
lines.push(` 记于: ${m.created_at}`);
|
|
62
|
+
if (m.expires_at)
|
|
63
|
+
lines.push(` ⏰ 自动过期: ${m.expires_at}`);
|
|
64
|
+
if (m.where_lat != null && m.where_lng != null) {
|
|
65
|
+
const urls = mapUrls(m.where_lat, m.where_lng, m.where_label || m.what, '');
|
|
66
|
+
lines.push('');
|
|
67
|
+
lines.push(` 🗺 [百度地图](${urls.baidu}) · [高德地图](${urls.amap}) · [Google](${urls.google})`);
|
|
68
|
+
}
|
|
69
|
+
return lines.join('\n');
|
|
70
|
+
}
|
|
71
|
+
export async function handleMemoCommand(args, ctx) {
|
|
72
|
+
const trimmed = args.trim();
|
|
73
|
+
const ownerOpts = ctx.userId ? { userId: ctx.userId } : {};
|
|
74
|
+
if (!trimmed)
|
|
75
|
+
return listAction('', ownerOpts);
|
|
76
|
+
const firstWord = trimmed.split(/\s+/)[0].toLowerCase();
|
|
77
|
+
const rest = trimmed.slice(firstWord.length).trim();
|
|
78
|
+
if (firstWord === 'help' || firstWord === '?' || firstWord === '-h' || firstWord === '--help')
|
|
79
|
+
return HELP;
|
|
80
|
+
if (firstWord === 'list' || firstWord === 'ls')
|
|
81
|
+
return listAction(rest, ownerOpts);
|
|
82
|
+
if (firstWord === 'show' || firstWord === 'get')
|
|
83
|
+
return showAction(rest, ownerOpts);
|
|
84
|
+
if (firstWord === 'delete' || firstWord === 'del' || firstWord === 'rm')
|
|
85
|
+
return deleteAction(rest, ownerOpts);
|
|
86
|
+
if (firstWord === 'search' || firstWord === 'find')
|
|
87
|
+
return searchAction(rest, ownerOpts);
|
|
88
|
+
if (firstWord === 'here' || firstWord === '当前')
|
|
89
|
+
return hereAction(rest, ctx);
|
|
90
|
+
// Free-form input that's not a known subcommand: treat as a search query.
|
|
91
|
+
// Power-user shortcut for "/memo 车" → search for "车".
|
|
92
|
+
return searchAction(trimmed, ownerOpts);
|
|
93
|
+
}
|
|
94
|
+
function listAction(rest, ownerOpts) {
|
|
95
|
+
const n = rest ? Math.max(1, Math.min(50, parseInt(rest, 10) || 10)) : 10;
|
|
96
|
+
const all = listMemos({ ...ownerOpts, limit: n });
|
|
97
|
+
if (!all.length) {
|
|
98
|
+
return [
|
|
99
|
+
'📭 还没有记录。',
|
|
100
|
+
'',
|
|
101
|
+
'让 agent 帮你: 直接说"帮我记下..."',
|
|
102
|
+
'看帮助: /memo help',
|
|
103
|
+
].join('\n');
|
|
104
|
+
}
|
|
105
|
+
return [`📝 最近 ${all.length} 条记录`, '', ...all.map(fmtRow), '', `详情: /memo show <id>`].join('\n');
|
|
106
|
+
}
|
|
107
|
+
function showAction(rest, ownerOpts) {
|
|
108
|
+
const id = parseInt(rest, 10);
|
|
109
|
+
if (!Number.isFinite(id))
|
|
110
|
+
return '用法: /memo show <id>';
|
|
111
|
+
const m = getMemo(id, ownerOpts);
|
|
112
|
+
if (!m)
|
|
113
|
+
return `❌ 找不到 #${id}(或不属于你)。`;
|
|
114
|
+
return fmtDetail(m);
|
|
115
|
+
}
|
|
116
|
+
function deleteAction(rest, ownerOpts) {
|
|
117
|
+
const id = parseInt(rest, 10);
|
|
118
|
+
if (!Number.isFinite(id))
|
|
119
|
+
return '用法: /memo delete <id>';
|
|
120
|
+
return deleteMemo(id, ownerOpts) ? `🗑 已删除 #${id}` : `❌ 找不到 #${id}(或不属于你)。`;
|
|
121
|
+
}
|
|
122
|
+
function searchAction(query, ownerOpts) {
|
|
123
|
+
const q = query.trim();
|
|
124
|
+
if (!q)
|
|
125
|
+
return listAction('', ownerOpts);
|
|
126
|
+
const rows = searchMemos({ ...ownerOpts, query: q, limit: 10 });
|
|
127
|
+
if (!rows.length) {
|
|
128
|
+
return `🔍 没有匹配 "${q}" 的记录。\n试试 /memo list 看全部,或让 agent 用更精确的查询:\n"我的${q}在哪?" 或 "${q}相关的记录"`;
|
|
129
|
+
}
|
|
130
|
+
return [`🔍 匹配 "${q}" 的 ${rows.length} 条`, '', ...rows.map(fmtRow), '', `详情: /memo show <id>`].join('\n');
|
|
131
|
+
}
|
|
132
|
+
function hereAction(rest, ctx) {
|
|
133
|
+
const what = rest.trim().slice(0, 80);
|
|
134
|
+
if (!ctx.userId)
|
|
135
|
+
return '❌ 无法识别用户身份,无法发起位置授权请求。';
|
|
136
|
+
const baseUrl = (process.env.IMHUB_LOC_BASE_URL || DEFAULT_LOC_BASE_URL).replace(/\/+$/, '');
|
|
137
|
+
const { token, ttlSeconds } = issueToken({
|
|
138
|
+
platform: ctx.platform,
|
|
139
|
+
channelId: ctx.channelId,
|
|
140
|
+
threadId: ctx.threadId,
|
|
141
|
+
userId: ctx.userId,
|
|
142
|
+
}, what ? { what } : {});
|
|
143
|
+
const url = `${baseUrl}/l/${token}`;
|
|
144
|
+
const ttlMin = Math.floor(ttlSeconds / 60);
|
|
145
|
+
return [
|
|
146
|
+
`📍 [👉 点击共享当前位置](${url})`,
|
|
147
|
+
'',
|
|
148
|
+
`链接 ${ttlMin} 分钟内有效。授权后自动回传给 bot 并记入${what ? ` "${what}"` : ''}。`,
|
|
149
|
+
].join('\n');
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../../../src/core/commands/memo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RouteContext } from '../router.js';
|
|
2
|
+
export declare function handleModelCommand(args: string, ctx: RouteContext): Promise<string>;
|
|
3
|
+
declare function invalidateModelCache(): void;
|
|
4
|
+
/** Test-only diagnostic: clear caches between cases. */
|
|
5
|
+
export declare const _internal: {
|
|
6
|
+
invalidateModelCache: typeof invalidateModelCache;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/core/commands/model.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAoBhD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BzF;AA+FD,iBAAS,oBAAoB,IAAI,IAAI,CAGpC;AAuDD,wDAAwD;AACxD,eAAO,MAAM,SAAS;;CAA2B,CAAA"}
|