yee88 0.3.0__tar.gz → 0.6.0__tar.gz
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.
- {yee88-0.3.0 → yee88-0.6.0}/PKG-INFO +2 -1
- yee88-0.6.0/docs/user-guide-zh.md +481 -0
- {yee88-0.3.0 → yee88-0.6.0}/pyproject.toml +3 -1
- yee88-0.6.0/src/yee88/__init__.py +1 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/__init__.py +4 -0
- yee88-0.6.0/src/yee88/cli/cron.py +214 -0
- yee88-0.6.0/src/yee88/cli/reload.py +140 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/run.py +7 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/config.py +2 -2
- yee88-0.6.0/src/yee88/cron/__init__.py +5 -0
- yee88-0.6.0/src/yee88/cron/manager.py +140 -0
- yee88-0.6.0/src/yee88/cron/models.py +13 -0
- yee88-0.6.0/src/yee88/cron/scheduler.py +57 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/markdown.py +2 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/progress.py +3 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runner.py +1 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runner_bridge.py +18 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/mock.py +3 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runtime_loader.py +4 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/settings.py +3 -2
- yee88-0.6.0/src/yee88/skills/yee88/SKILL.md +530 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/__init__.py +2 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/executor.py +5 -1
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/model.py +131 -4
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/topics.py +10 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/context.py +6 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/loop.py +63 -2
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/onboarding.py +40 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/transport_runtime.py +21 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_exec_render.py +19 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_onboarding_interactive.py +3 -3
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_context_helpers.py +26 -0
- {yee88-0.3.0 → yee88-0.6.0}/uv.lock +92 -68
- {yee88-0.3.0 → yee88-0.6.0}/zensical.toml +1 -0
- yee88-0.3.0/.codex/skills/takopi-release/SKILL.md +0 -67
- yee88-0.3.0/src/yee88/__init__.py +0 -1
- {yee88-0.3.0 → yee88-0.6.0}/.codex/AGENTS.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/.github/workflows/ci.yml +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/.github/workflows/release.yml +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/.gitignore +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/Justfile +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/LICENSE +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/README.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/changelog.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/assets/favicon.svg +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/assets/logo.svg +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/assets/og-image.jpg +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/assets/takopi.svg +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/developing.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/explanation/architecture.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/explanation/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/explanation/module-map.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/explanation/plugin-system.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/explanation/routing-and-sessions.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/add-a-runner.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/chat-sessions.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/dev-setup.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/file-transfer.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/projects.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/route-by-chat.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/schedule-tasks.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/switch-engines.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/topics.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/troubleshooting.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/voice-notes.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/worktrees.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/how-to/write-a-plugin.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/javascripts/hero-chat.js +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/overrides/.icons/takopi/takopi.svg +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/overrides/main.html +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/plugins.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/agents/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/agents/invariants.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/agents/repo-map.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/commands-and-directives.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/config.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/context-resolution.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/env-vars.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/plugin-api.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/plugins.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/claude/runner.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/claude/stream-json-cheatsheet.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/claude/takopi-events.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/codex/exec-json-cheatsheet.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/codex/takopi-events.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/opencode/runner.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/opencode/stream-json-cheatsheet.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/opencode/takopi-events.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/pi/runner.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/pi/stream-json-cheatsheet.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/runners/pi/takopi-events.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/specification.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/reference/transports/telegram.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/stylesheets/admonitions.css +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/stylesheets/hero-chat.css +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/stylesheets/workflow-preview.css +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/conversation-modes.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/first-run.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/index.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/install.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/multi-engine.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/tutorials/projects-and-branches.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/docs/user-guide.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/readme.md +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/scripts/commit_notify.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/scripts/docs_build_cf.sh +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/scripts/docs_prebuild.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/scripts/onboarding_preview.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/scripts/release_notify.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/api.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/backends.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/backends_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/config.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/doctor.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/init.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/onboarding_cmd.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/plugins.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/cli/topic.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/commands.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/config_migrations.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/config_watch.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/context.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/directives.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/engines.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/events.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/ids.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/lockfile.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/logging.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/model.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/plugins.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/presenter.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/router.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/__init__.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/claude.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/codex.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/opencode.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/pi.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/run_options.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/runners/tool_actions.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/scheduler.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/schemas/__init__.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/schemas/claude.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/schemas/codex.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/schemas/opencode.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/schemas/pi.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/__init__.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/api_models.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/api_schemas.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/backend.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/bridge.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/chat_prefs.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/chat_sessions.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/client.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/client_api.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/agent.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/cancel.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/dispatch.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/file_transfer.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/handlers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/media.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/menu.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/overrides.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/parse.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/plan.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/reasoning.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/reply.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/commands/trigger.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/engine_defaults.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/engine_overrides.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/files.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/outbox.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/parsing.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/render.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/state_store.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/topic_state.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/topics.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/trigger_mode.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/types.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/telegram/voice.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/transport.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/transports.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/__init__.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/git.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/json_state.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/paths.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/streams.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/utils/subprocess.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/src/yee88/worktrees.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/__init__.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/conftest.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/factories.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/claude_stream_json_session.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/codex_exec_json_all_formats.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/codex_exec_json_all_formats.txt +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/opencode_run_json.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/opencode_stream_error.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/opencode_stream_success.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/opencode_stream_success_no_reason.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/pi_print_mode_events.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/pi_stream_error.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/fixtures/pi_stream_success.jsonl +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/plugin_fixtures.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/telegram_fakes.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_api_exports.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_auto_router.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_claude_runner.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_claude_schema.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_auto_router.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_chat_id.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_commands.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_config.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_doctor.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_cli_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_codex_runner_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_codex_schema.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_codex_tool_result_summary.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_command_registry.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_config_store.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_config_watch.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_engine_discovery.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_exec_bridge.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_exec_runner.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_git_utils.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_lockfile.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_onboarding.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_onboarding_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_opencode_runner.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_opencode_schema.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_paths.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_pi_runner.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_pi_schema.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_plugins.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_projects_config.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_rendering.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_runner_contract.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_runner_run_options.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_runner_utils.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_runtime_loader.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_settings.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_settings_contract.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_subprocess.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_agent_trigger_commands.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_backend.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_bridge.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_chat_prefs.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_chat_sessions.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_client.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_client_api.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_engine_defaults.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_engine_overrides.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_file_transfer_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_files.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_incoming.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_media_command.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_polling.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_queue.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_topic_state.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_topics_command.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_topics_helpers.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_trigger_mode.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_telegram_voice.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_tool_actions.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_transport.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_transport_registry.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_transport_runtime.py +0 -0
- {yee88-0.3.0 → yee88-0.6.0}/tests/test_worktrees.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: yee88
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: Telegram bridge for Codex, Claude Code, and other agent CLIs.
|
|
5
5
|
Project-URL: Homepage, https://github.com/banteg/yee88
|
|
6
6
|
Project-URL: Documentation, https://yee88.dev/
|
|
@@ -36,6 +36,7 @@ Classifier: Programming Language :: Python :: 3 :: Only
|
|
|
36
36
|
Classifier: Programming Language :: Python :: 3.14
|
|
37
37
|
Requires-Python: >=3.14
|
|
38
38
|
Requires-Dist: anyio>=4.12.0
|
|
39
|
+
Requires-Dist: croniter>=2.0.0
|
|
39
40
|
Requires-Dist: httpx>=0.28.1
|
|
40
41
|
Requires-Dist: markdown-it-py
|
|
41
42
|
Requires-Dist: msgspec>=0.20.0
|
|
@@ -0,0 +1,481 @@
|
|
|
1
|
+
# 🐙 yee88 完整使用指南
|
|
2
|
+
|
|
3
|
+
yee88 是一个 Telegram 桥接工具,让你可以通过 Telegram 聊天界面来运行 AI 编程助手(Codex、Claude Code、OpenCode、Pi)。
|
|
4
|
+
|
|
5
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
6
|
+
|
|
7
|
+
## 📦 一、安装与初始化(💻 电脑侧)
|
|
8
|
+
|
|
9
|
+
### 1. 安装依赖
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 安装 uv(Python 包管理器)
|
|
13
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
14
|
+
|
|
15
|
+
# 安装 Python 3.14
|
|
16
|
+
uv python install 3.14
|
|
17
|
+
|
|
18
|
+
# 安装 yee88
|
|
19
|
+
uv tool install -U yee88
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 2. 安装 AI 引擎(至少一个)
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Codex (OpenAI)
|
|
26
|
+
npm install -g @openai/codex
|
|
27
|
+
|
|
28
|
+
# Claude Code (Anthropic)
|
|
29
|
+
npm install -g @anthropic-ai/claude-code
|
|
30
|
+
|
|
31
|
+
# OpenCode
|
|
32
|
+
npm install -g opencode-ai@latest
|
|
33
|
+
|
|
34
|
+
# Pi
|
|
35
|
+
npm install -g @mariozechner/pi-coding-agent
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 3. 首次运行配置(📱 手机侧配合)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
yee88
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
这会启动交互式向导:
|
|
45
|
+
|
|
46
|
+
1. **创建 Telegram Bot** → 去 @BotFather 创建机器人,获取 token
|
|
47
|
+
2. **选择工作流**:
|
|
48
|
+
- `assistant` - 持续对话模式(推荐个人使用)
|
|
49
|
+
- `workspace` - 话题模式(团队多项目)
|
|
50
|
+
- `handoff` - 回复继续模式
|
|
51
|
+
3. **连接聊天** → 在 Telegram 向机器人发送 `/start`
|
|
52
|
+
4. **选择默认引擎** → codex / claude / opencode / pi
|
|
53
|
+
|
|
54
|
+
配置保存在 `~/.yee88/yee88.toml`
|
|
55
|
+
|
|
56
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
57
|
+
|
|
58
|
+
## 🚀 二、日常使用
|
|
59
|
+
|
|
60
|
+
### 启动 yee88(💻 电脑侧)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 在项目目录启动
|
|
64
|
+
cd ~/your-project
|
|
65
|
+
yee88
|
|
66
|
+
|
|
67
|
+
# 指定引擎启动
|
|
68
|
+
yee88 claude
|
|
69
|
+
yee88 codex
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 基本对话(📱 手机侧 Telegram)
|
|
73
|
+
|
|
74
|
+
直接发送消息给机器人:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
解释这个项目是做什么的
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 切换引擎(📱 手机侧)
|
|
81
|
+
|
|
82
|
+
在消息前加引擎前缀:
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
/codex 修复这个 bug
|
|
86
|
+
/claude 重构这个函数
|
|
87
|
+
/opencode 优化性能
|
|
88
|
+
/pi 添加测试
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
92
|
+
|
|
93
|
+
## 📁 三、项目管理
|
|
94
|
+
|
|
95
|
+
### 注册项目(💻 电脑侧)
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cd ~/dev/my-project
|
|
99
|
+
yee88 init myproject
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### 从任意位置定位项目(📱 手机侧)
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
/myproject 添加新功能
|
|
106
|
+
/myproject @feat/new-ui 创建登录页面
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 设置默认项目(💻 电脑侧)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
yee88 config set default_project myproject
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
116
|
+
|
|
117
|
+
## 🌳 四、工作树(Worktrees)
|
|
118
|
+
|
|
119
|
+
### 在特定分支上运行(📱 手机侧)
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
/myproject @feat/auth 实现 JWT 认证
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
yee88 会自动:
|
|
126
|
+
|
|
127
|
+
- 创建 `.worktrees/feat/auth` 工作树
|
|
128
|
+
- 在该分支上下文中运行 AI
|
|
129
|
+
|
|
130
|
+
### 配置工作树(💻 电脑侧)
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
yee88 config set projects.myproject.worktrees_dir ".worktrees"
|
|
134
|
+
yee88 config set projects.myproject.worktree_base "main"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
138
|
+
|
|
139
|
+
## 💬 五、Telegram 命令(📱 手机侧)
|
|
140
|
+
|
|
141
|
+
| 命令 | 说明 |
|
|
142
|
+
|------|------|
|
|
143
|
+
| `/cancel` | 回复进度消息以取消当前运行 |
|
|
144
|
+
| `/agent` | 查看/设置当前聊天的默认引擎 |
|
|
145
|
+
| `/agent set claude` | 设置默认引擎为 Claude |
|
|
146
|
+
| `/model` | 查看/设置模型覆盖 |
|
|
147
|
+
| `/reasoning` | 查看/设置推理模式 |
|
|
148
|
+
| `/trigger` | 设置触发模式(mentions-only / all) |
|
|
149
|
+
| `/file put <path>` | 上传文件到仓库 |
|
|
150
|
+
| `/file get <path>` | 获取文件/目录(自动压缩) |
|
|
151
|
+
| `/topic <project> @branch` | 创建/绑定话题(需开启 topics) |
|
|
152
|
+
| `/ctx` | 显示当前上下文绑定 |
|
|
153
|
+
| `/ctx set <project> @branch` | 更新上下文 |
|
|
154
|
+
| `/ctx clear` | 清除上下文绑定 |
|
|
155
|
+
| `/new` | 清除当前会话,开始新对话 |
|
|
156
|
+
|
|
157
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
158
|
+
|
|
159
|
+
## 📎 六、文件传输
|
|
160
|
+
|
|
161
|
+
### 启用文件传输(💻 电脑侧)
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
yee88 config set transports.telegram.files.enabled true
|
|
165
|
+
yee88 config set transports.telegram.files.auto_put true
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 上传文件(📱 手机侧)
|
|
169
|
+
|
|
170
|
+
发送文档并附带说明:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
/file put docs/spec.pdf
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
或直接发送文件(自动保存到 `incoming/`)
|
|
177
|
+
|
|
178
|
+
### 下载文件(📱 手机侧)
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
/file get src/main.py
|
|
182
|
+
/file get src/ # 目录会自动打包为 zip
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
186
|
+
|
|
187
|
+
## 🎙 七、语音消息
|
|
188
|
+
|
|
189
|
+
### 启用语音转录(💻 电脑侧)
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
yee88 config set transports.telegram.voice_transcription true
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
设置环境变量 `OPENAI_API_KEY`
|
|
196
|
+
|
|
197
|
+
### 使用(📱 手机侧)
|
|
198
|
+
|
|
199
|
+
直接发送语音消息,yee88 会自动转录并执行
|
|
200
|
+
|
|
201
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
202
|
+
|
|
203
|
+
## ⚙️ 八、配置管理(💻 电脑侧)
|
|
204
|
+
|
|
205
|
+
### 查看配置
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
yee88 config list
|
|
209
|
+
yee88 config get default_engine
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 修改配置
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# 设置默认值
|
|
216
|
+
yee88 config set default_engine "claude"
|
|
217
|
+
yee88 config set default_project "myproject"
|
|
218
|
+
|
|
219
|
+
# Telegram 设置
|
|
220
|
+
yee88 config set transports.telegram.session_mode "chat"
|
|
221
|
+
yee88 config set transports.telegram.show_resume_line false
|
|
222
|
+
|
|
223
|
+
# 引擎特定配置
|
|
224
|
+
yee88 config set claude.model "claude-sonnet-4-5-20250929"
|
|
225
|
+
yee88 config set codex.profile "work"
|
|
226
|
+
|
|
227
|
+
# 启用配置热重载
|
|
228
|
+
yee88 config set watch_config true
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 诊断检查
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
yee88 doctor
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
238
|
+
|
|
239
|
+
## 🗂 九、话题模式(Topics)
|
|
240
|
+
|
|
241
|
+
适合团队协作,每个话题绑定一个项目/分支:
|
|
242
|
+
|
|
243
|
+
### 启用(💻 电脑侧)
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
yee88 config set transports.telegram.topics.enabled true
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 创建话题(📱 手机侧)
|
|
250
|
+
|
|
251
|
+
在论坛群组中:
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
/topic myproject @main 设置主分支
|
|
255
|
+
/topic myproject @feat/ui 前端开发
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
每个话题会自动记住绑定的项目和分支,无需重复输入。
|
|
259
|
+
|
|
260
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
261
|
+
|
|
262
|
+
## 🔧 十、完整配置参考
|
|
263
|
+
|
|
264
|
+
### 配置文件位置
|
|
265
|
+
|
|
266
|
+
- **默认**: `~/.yee88/yee88.toml`
|
|
267
|
+
- **锁文件**: `~/.yee88/yee88.lock`
|
|
268
|
+
|
|
269
|
+
### 顶层配置
|
|
270
|
+
|
|
271
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
272
|
+
|--------|------|--------|----------|
|
|
273
|
+
| `watch_config` | bool | `false` | 热重载配置更改(传输层除外) |
|
|
274
|
+
| `default_engine` | string | `"codex"` | 新线程的默认引擎 ID |
|
|
275
|
+
| `default_project` | string\|null | `null` | 默认项目别名 |
|
|
276
|
+
| `transport` | string | `"telegram"` | 传输后端 ID |
|
|
277
|
+
| `system_prompt` | string | (内置) | 系统提示词 |
|
|
278
|
+
|
|
279
|
+
### Telegram 传输配置 (`transports.telegram`)
|
|
280
|
+
|
|
281
|
+
#### 基础配置
|
|
282
|
+
|
|
283
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
284
|
+
|--------|------|--------|----------|
|
|
285
|
+
| `bot_token` | string | (必需) | Telegram Bot Token(从 @BotFather 获取) |
|
|
286
|
+
| `chat_id` | int | (必需) | 默认聊天 ID |
|
|
287
|
+
| `allowed_user_ids` | int[] | `[]` | 允许的用户 ID 列表(空列表表示不限制) |
|
|
288
|
+
| `message_overflow` | string | `"trim"` | 长消息处理方式:`"trim"`(截断) 或 `"split"`(分割) |
|
|
289
|
+
| `session_mode` | string | `"stateless"` | 会话模式:`"stateless"`(回复继续) 或 `"chat"`(自动恢复) |
|
|
290
|
+
| `show_resume_line` | bool | `true` | 在消息页脚显示恢复行 |
|
|
291
|
+
| `forward_coalesce_s` | float | `1.0` | 转发消息合并的静默窗口(秒),设为 `0` 禁用 |
|
|
292
|
+
|
|
293
|
+
#### 语音转录配置
|
|
294
|
+
|
|
295
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
296
|
+
|--------|------|--------|----------|
|
|
297
|
+
| `voice_transcription` | bool | `false` | 启用语音笔记转录 |
|
|
298
|
+
| `voice_max_bytes` | int | `10485760` | 最大语音文件大小(字节,默认 10MB) |
|
|
299
|
+
| `voice_transcription_model` | string | `"gpt-4o-mini-transcribe"` | 转录模型名称 |
|
|
300
|
+
| `voice_transcription_base_url` | string\|null | `null` | 转录 API 基础 URL(可选) |
|
|
301
|
+
| `voice_transcription_api_key` | string\|null | `null` | 转录 API 密钥(可选) |
|
|
302
|
+
|
|
303
|
+
#### 话题配置 (`transports.telegram.topics`)
|
|
304
|
+
|
|
305
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
306
|
+
|--------|------|--------|----------|
|
|
307
|
+
| `enabled` | bool | `false` | 启用论坛话题功能 |
|
|
308
|
+
| `scope` | string | `"auto"` | 话题管理范围:`"auto"`、`"main"`、`"projects"`、`"all"` |
|
|
309
|
+
|
|
310
|
+
#### 文件传输配置 (`transports.telegram.files`)
|
|
311
|
+
|
|
312
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
313
|
+
|--------|------|--------|----------|
|
|
314
|
+
| `enabled` | bool | `false` | 启用 `/file put` 和 `/file get` 命令 |
|
|
315
|
+
| `auto_put` | bool | `true` | 自动保存上传的文件 |
|
|
316
|
+
| `auto_put_mode` | string | `"upload"` | 上传后行为:`"upload"`(仅保存) 或 `"prompt"`(保存并启动运行) |
|
|
317
|
+
| `uploads_dir` | string | `"incoming"` | 上传目录(相对于仓库/worktree) |
|
|
318
|
+
| `allowed_user_ids` | int[] | `[]` | 允许文件传输的用户 ID(空列表允许私聊,群组需要管理员) |
|
|
319
|
+
| `deny_globs` | string[] | (见下) | 拒绝的文件模式列表 |
|
|
320
|
+
|
|
321
|
+
默认 `deny_globs`:
|
|
322
|
+
```toml
|
|
323
|
+
deny_globs = [
|
|
324
|
+
".git/**",
|
|
325
|
+
".env",
|
|
326
|
+
".envrc",
|
|
327
|
+
"**/*.pem",
|
|
328
|
+
"**/.ssh/**"
|
|
329
|
+
]
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**文件大小限制**(不可配置):
|
|
333
|
+
- 上传:20 MiB
|
|
334
|
+
- 下载:50 MiB
|
|
335
|
+
|
|
336
|
+
### 项目配置 (`projects.<alias>`)
|
|
337
|
+
|
|
338
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
339
|
+
|--------|------|--------|----------|
|
|
340
|
+
| `path` | string | (必需) | 仓库根目录路径(支持 `~` 展开) |
|
|
341
|
+
| `worktrees_dir` | string | `".worktrees"` | Worktree 根目录(相对于 `path`) |
|
|
342
|
+
| `default_engine` | string\|null | `null` | 项目默认引擎 |
|
|
343
|
+
| `worktree_base` | string\|null | `null` | 新 worktree 的基础分支 |
|
|
344
|
+
| `chat_id` | int\|null | `null` | 绑定到此项目的 Telegram 聊天 ID |
|
|
345
|
+
| `system_prompt` | string\|null | `null` | 项目特定的系统提示词 |
|
|
346
|
+
|
|
347
|
+
### 插件配置 (`plugins`)
|
|
348
|
+
|
|
349
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
350
|
+
|--------|------|--------|----------|
|
|
351
|
+
| `enabled` | string[] | `[]` | 启用的插件列表(空列表表示加载所有已安装插件) |
|
|
352
|
+
|
|
353
|
+
### 引擎特定配置
|
|
354
|
+
|
|
355
|
+
#### Codex 配置 (`[codex]`)
|
|
356
|
+
|
|
357
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
358
|
+
|--------|------|--------|----------|
|
|
359
|
+
| `extra_args` | string[] | `["-c", "notify=[]"]` | 额外的 CLI 参数(不支持 exec-only 标志) |
|
|
360
|
+
| `profile` | string | (未设置) | 配置文件名称,作为 `--profile` 传递并用于会话标题 |
|
|
361
|
+
|
|
362
|
+
#### Claude 配置 (`[claude]`)
|
|
363
|
+
|
|
364
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
365
|
+
|--------|------|--------|----------|
|
|
366
|
+
| `model` | string | (未设置) | 可选的模型覆盖 |
|
|
367
|
+
| `allowed_tools` | string[] | `["Bash", "Read", "Edit", "Write"]` | 自动批准的工具列表 |
|
|
368
|
+
| `dangerously_skip_permissions` | bool | `false` | 跳过 Claude 权限提示(**高风险**) |
|
|
369
|
+
| `use_api_billing` | bool | `false` | 使用 API 计费(默认使用订阅) |
|
|
370
|
+
|
|
371
|
+
#### Pi 配置 (`[pi]`)
|
|
372
|
+
|
|
373
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
374
|
+
|--------|------|--------|----------|
|
|
375
|
+
| `model` | string | (未设置) | 传递给 `--model` |
|
|
376
|
+
| `provider` | string | (未设置) | 传递给 `--provider` |
|
|
377
|
+
| `extra_args` | string[] | `[]` | 额外的 CLI 参数 |
|
|
378
|
+
|
|
379
|
+
#### OpenCode 配置 (`[opencode]`)
|
|
380
|
+
|
|
381
|
+
| 配置项 | 类型 | 默认值 | 中文说明 |
|
|
382
|
+
|--------|------|--------|----------|
|
|
383
|
+
| `model` | string | (未设置) | 可选的模型覆盖 |
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
387
|
+
|
|
388
|
+
## 📋 十一、三种工作流的完整配置示例
|
|
389
|
+
|
|
390
|
+
### Assistant 工作流(持续聊天)
|
|
391
|
+
|
|
392
|
+
```toml
|
|
393
|
+
default_engine = "codex"
|
|
394
|
+
transport = "telegram"
|
|
395
|
+
|
|
396
|
+
[transports.telegram]
|
|
397
|
+
bot_token = "YOUR_BOT_TOKEN"
|
|
398
|
+
chat_id = 123456789
|
|
399
|
+
session_mode = "chat" # 自动恢复
|
|
400
|
+
show_resume_line = false # 隐藏恢复行
|
|
401
|
+
|
|
402
|
+
[transports.telegram.topics]
|
|
403
|
+
enabled = false
|
|
404
|
+
scope = "auto"
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Workspace 工作流(话题分支)
|
|
408
|
+
|
|
409
|
+
```toml
|
|
410
|
+
default_engine = "codex"
|
|
411
|
+
transport = "telegram"
|
|
412
|
+
|
|
413
|
+
[transports.telegram]
|
|
414
|
+
bot_token = "YOUR_BOT_TOKEN"
|
|
415
|
+
chat_id = -1001234567890 # 论坛群组
|
|
416
|
+
session_mode = "chat"
|
|
417
|
+
show_resume_line = false
|
|
418
|
+
|
|
419
|
+
[transports.telegram.topics]
|
|
420
|
+
enabled = true # 启用话题
|
|
421
|
+
scope = "auto"
|
|
422
|
+
|
|
423
|
+
[projects.my-project]
|
|
424
|
+
path = "~/dev/my-project"
|
|
425
|
+
chat_id = -1001234567890
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### Handoff 工作流(回复继续)
|
|
429
|
+
|
|
430
|
+
```toml
|
|
431
|
+
default_engine = "codex"
|
|
432
|
+
transport = "telegram"
|
|
433
|
+
|
|
434
|
+
[transports.telegram]
|
|
435
|
+
bot_token = "YOUR_BOT_TOKEN"
|
|
436
|
+
chat_id = 123456789
|
|
437
|
+
session_mode = "stateless" # 回复继续
|
|
438
|
+
show_resume_line = true # 始终显示恢复行
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
|
442
|
+
|
|
443
|
+
## 📝 十二、使用技巧
|
|
444
|
+
|
|
445
|
+
### 1. 快速切换上下文
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
/ctx set myproject @feat/new-feature
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
之后的所有消息都会在这个项目和分支上下文中执行。
|
|
452
|
+
|
|
453
|
+
### 2. 使用定时消息
|
|
454
|
+
|
|
455
|
+
在 Telegram 中安排消息,yee88 会在指定时间执行。
|
|
456
|
+
|
|
457
|
+
### 3. 查看进度
|
|
458
|
+
|
|
459
|
+
运行过程中会显示实时进度消息,包含:
|
|
460
|
+
- 正在执行的命令
|
|
461
|
+
- 工具调用
|
|
462
|
+
- 文件变更
|
|
463
|
+
- 已用时间
|
|
464
|
+
|
|
465
|
+
### 4. 恢复会话
|
|
466
|
+
|
|
467
|
+
每个完成的运行都会在消息底部显示恢复命令:
|
|
468
|
+
|
|
469
|
+
```
|
|
470
|
+
codex resume <token>
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
复制到终端即可继续会话。
|
|
474
|
+
|
|
475
|
+
### 5. 多引擎协作
|
|
476
|
+
|
|
477
|
+
```
|
|
478
|
+
/codex 实现基础功能
|
|
479
|
+
/claude 优化代码结构
|
|
480
|
+
/opencode 添加测试
|
|
481
|
+
```
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "yee88"
|
|
3
3
|
authors = [{name = "yee.wang"}]
|
|
4
|
-
version = "0.
|
|
4
|
+
version = "0.6.0"
|
|
5
5
|
description = "Telegram bridge for Codex, Claude Code, and other agent CLIs."
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = { file = "LICENSE" }
|
|
8
8
|
requires-python = ">=3.14"
|
|
9
9
|
dependencies = [
|
|
10
10
|
"anyio>=4.12.0",
|
|
11
|
+
"croniter>=2.0.0",
|
|
11
12
|
"httpx>=0.28.1",
|
|
12
13
|
"markdown-it-py",
|
|
13
14
|
"msgspec>=0.20.0",
|
|
@@ -54,6 +55,7 @@ build-backend = "hatchling.build"
|
|
|
54
55
|
|
|
55
56
|
[tool.hatch.build.targets.wheel]
|
|
56
57
|
packages = ["src/yee88"]
|
|
58
|
+
include = ["src/yee88/skills/**/*.md"]
|
|
57
59
|
|
|
58
60
|
[dependency-groups]
|
|
59
61
|
dev = [
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.0"
|
|
@@ -91,6 +91,8 @@ from .config import (
|
|
|
91
91
|
config_set,
|
|
92
92
|
config_unset,
|
|
93
93
|
)
|
|
94
|
+
from .cron import app as cron_app
|
|
95
|
+
from .reload import reload_command
|
|
94
96
|
|
|
95
97
|
|
|
96
98
|
def _load_settings_optional() -> tuple[TakopiSettings | None, Path | None]:
|
|
@@ -212,6 +214,8 @@ def create_app() -> typer.Typer:
|
|
|
212
214
|
app.command(name="onboarding-paths")(onboarding_paths)
|
|
213
215
|
app.command(name="plugins")(plugins_cmd)
|
|
214
216
|
app.add_typer(config_app, name="config")
|
|
217
|
+
app.add_typer(cron_app, name="cron")
|
|
218
|
+
app.command(name="reload")(reload_command)
|
|
215
219
|
app.callback()(app_main)
|
|
216
220
|
for engine_id in _engine_ids_for_cli():
|
|
217
221
|
help_text = f"Run with the {engine_id} engine."
|