yee88 0.6.0__tar.gz → 0.6.1__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.
Files changed (270) hide show
  1. yee88-0.6.1/.sisyphus/plans/yee88-architecture-review.md +581 -0
  2. {yee88-0.6.0 → yee88-0.6.1}/PKG-INFO +1 -1
  3. {yee88-0.6.0 → yee88-0.6.1}/changelog.md +14 -0
  4. {yee88-0.6.0 → yee88-0.6.1}/pyproject.toml +1 -1
  5. yee88-0.6.1/src/yee88/__init__.py +1 -0
  6. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/settings.py +1 -2
  7. yee88-0.6.0/src/yee88/__init__.py +0 -1
  8. {yee88-0.6.0 → yee88-0.6.1}/.codex/AGENTS.md +0 -0
  9. {yee88-0.6.0 → yee88-0.6.1}/.github/workflows/ci.yml +0 -0
  10. {yee88-0.6.0 → yee88-0.6.1}/.github/workflows/release.yml +0 -0
  11. {yee88-0.6.0 → yee88-0.6.1}/.gitignore +0 -0
  12. {yee88-0.6.0 → yee88-0.6.1}/Justfile +0 -0
  13. {yee88-0.6.0 → yee88-0.6.1}/LICENSE +0 -0
  14. {yee88-0.6.0 → yee88-0.6.1}/README.md +0 -0
  15. {yee88-0.6.0 → yee88-0.6.1}/docs/assets/favicon.svg +0 -0
  16. {yee88-0.6.0 → yee88-0.6.1}/docs/assets/logo.svg +0 -0
  17. {yee88-0.6.0 → yee88-0.6.1}/docs/assets/og-image.jpg +0 -0
  18. {yee88-0.6.0 → yee88-0.6.1}/docs/assets/takopi.svg +0 -0
  19. {yee88-0.6.0 → yee88-0.6.1}/docs/developing.md +0 -0
  20. {yee88-0.6.0 → yee88-0.6.1}/docs/explanation/architecture.md +0 -0
  21. {yee88-0.6.0 → yee88-0.6.1}/docs/explanation/index.md +0 -0
  22. {yee88-0.6.0 → yee88-0.6.1}/docs/explanation/module-map.md +0 -0
  23. {yee88-0.6.0 → yee88-0.6.1}/docs/explanation/plugin-system.md +0 -0
  24. {yee88-0.6.0 → yee88-0.6.1}/docs/explanation/routing-and-sessions.md +0 -0
  25. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/add-a-runner.md +0 -0
  26. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/chat-sessions.md +0 -0
  27. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/dev-setup.md +0 -0
  28. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/file-transfer.md +0 -0
  29. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/index.md +0 -0
  30. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/projects.md +0 -0
  31. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/route-by-chat.md +0 -0
  32. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/schedule-tasks.md +0 -0
  33. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/switch-engines.md +0 -0
  34. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/topics.md +0 -0
  35. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/troubleshooting.md +0 -0
  36. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/voice-notes.md +0 -0
  37. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/worktrees.md +0 -0
  38. {yee88-0.6.0 → yee88-0.6.1}/docs/how-to/write-a-plugin.md +0 -0
  39. {yee88-0.6.0 → yee88-0.6.1}/docs/index.md +0 -0
  40. {yee88-0.6.0 → yee88-0.6.1}/docs/javascripts/hero-chat.js +0 -0
  41. {yee88-0.6.0 → yee88-0.6.1}/docs/overrides/.icons/takopi/takopi.svg +0 -0
  42. {yee88-0.6.0 → yee88-0.6.1}/docs/overrides/main.html +0 -0
  43. {yee88-0.6.0 → yee88-0.6.1}/docs/plugins.md +0 -0
  44. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/agents/index.md +0 -0
  45. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/agents/invariants.md +0 -0
  46. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/agents/repo-map.md +0 -0
  47. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/commands-and-directives.md +0 -0
  48. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/config.md +0 -0
  49. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/context-resolution.md +0 -0
  50. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/env-vars.md +0 -0
  51. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/index.md +0 -0
  52. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/plugin-api.md +0 -0
  53. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/plugins.md +0 -0
  54. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/claude/runner.md +0 -0
  55. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/claude/stream-json-cheatsheet.md +0 -0
  56. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/claude/takopi-events.md +0 -0
  57. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/codex/exec-json-cheatsheet.md +0 -0
  58. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/codex/takopi-events.md +0 -0
  59. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/index.md +0 -0
  60. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/opencode/runner.md +0 -0
  61. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/opencode/stream-json-cheatsheet.md +0 -0
  62. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/opencode/takopi-events.md +0 -0
  63. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/pi/runner.md +0 -0
  64. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/pi/stream-json-cheatsheet.md +0 -0
  65. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/runners/pi/takopi-events.md +0 -0
  66. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/specification.md +0 -0
  67. {yee88-0.6.0 → yee88-0.6.1}/docs/reference/transports/telegram.md +0 -0
  68. {yee88-0.6.0 → yee88-0.6.1}/docs/stylesheets/admonitions.css +0 -0
  69. {yee88-0.6.0 → yee88-0.6.1}/docs/stylesheets/hero-chat.css +0 -0
  70. {yee88-0.6.0 → yee88-0.6.1}/docs/stylesheets/workflow-preview.css +0 -0
  71. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/conversation-modes.md +0 -0
  72. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/first-run.md +0 -0
  73. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/index.md +0 -0
  74. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/install.md +0 -0
  75. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/multi-engine.md +0 -0
  76. {yee88-0.6.0 → yee88-0.6.1}/docs/tutorials/projects-and-branches.md +0 -0
  77. {yee88-0.6.0 → yee88-0.6.1}/docs/user-guide-zh.md +0 -0
  78. {yee88-0.6.0 → yee88-0.6.1}/docs/user-guide.md +0 -0
  79. {yee88-0.6.0 → yee88-0.6.1}/readme.md +0 -0
  80. {yee88-0.6.0 → yee88-0.6.1}/scripts/commit_notify.py +0 -0
  81. {yee88-0.6.0 → yee88-0.6.1}/scripts/docs_build_cf.sh +0 -0
  82. {yee88-0.6.0 → yee88-0.6.1}/scripts/docs_prebuild.py +0 -0
  83. {yee88-0.6.0 → yee88-0.6.1}/scripts/onboarding_preview.py +0 -0
  84. {yee88-0.6.0 → yee88-0.6.1}/scripts/release_notify.py +0 -0
  85. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/api.py +0 -0
  86. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/backends.py +0 -0
  87. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/backends_helpers.py +0 -0
  88. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/__init__.py +0 -0
  89. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/config.py +0 -0
  90. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/cron.py +0 -0
  91. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/doctor.py +0 -0
  92. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/init.py +0 -0
  93. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/onboarding_cmd.py +0 -0
  94. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/plugins.py +0 -0
  95. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/reload.py +0 -0
  96. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/run.py +0 -0
  97. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cli/topic.py +0 -0
  98. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/commands.py +0 -0
  99. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/config.py +0 -0
  100. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/config_migrations.py +0 -0
  101. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/config_watch.py +0 -0
  102. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/context.py +0 -0
  103. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cron/__init__.py +0 -0
  104. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cron/manager.py +0 -0
  105. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cron/models.py +0 -0
  106. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/cron/scheduler.py +0 -0
  107. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/directives.py +0 -0
  108. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/engines.py +0 -0
  109. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/events.py +0 -0
  110. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/ids.py +0 -0
  111. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/lockfile.py +0 -0
  112. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/logging.py +0 -0
  113. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/markdown.py +0 -0
  114. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/model.py +0 -0
  115. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/plugins.py +0 -0
  116. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/presenter.py +0 -0
  117. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/progress.py +0 -0
  118. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/router.py +0 -0
  119. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runner.py +0 -0
  120. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runner_bridge.py +0 -0
  121. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/__init__.py +0 -0
  122. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/claude.py +0 -0
  123. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/codex.py +0 -0
  124. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/mock.py +0 -0
  125. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/opencode.py +0 -0
  126. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/pi.py +0 -0
  127. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/run_options.py +0 -0
  128. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runners/tool_actions.py +0 -0
  129. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/runtime_loader.py +0 -0
  130. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/scheduler.py +0 -0
  131. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/schemas/__init__.py +0 -0
  132. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/schemas/claude.py +0 -0
  133. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/schemas/codex.py +0 -0
  134. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/schemas/opencode.py +0 -0
  135. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/schemas/pi.py +0 -0
  136. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/skills/yee88/SKILL.md +0 -0
  137. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/__init__.py +0 -0
  138. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/api_models.py +0 -0
  139. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/api_schemas.py +0 -0
  140. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/backend.py +0 -0
  141. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/bridge.py +0 -0
  142. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/chat_prefs.py +0 -0
  143. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/chat_sessions.py +0 -0
  144. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/client.py +0 -0
  145. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/client_api.py +0 -0
  146. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/__init__.py +0 -0
  147. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/agent.py +0 -0
  148. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/cancel.py +0 -0
  149. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/dispatch.py +0 -0
  150. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/executor.py +0 -0
  151. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/file_transfer.py +0 -0
  152. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/handlers.py +0 -0
  153. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/media.py +0 -0
  154. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/menu.py +0 -0
  155. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/model.py +0 -0
  156. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/overrides.py +0 -0
  157. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/parse.py +0 -0
  158. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/plan.py +0 -0
  159. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/reasoning.py +0 -0
  160. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/reply.py +0 -0
  161. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/topics.py +0 -0
  162. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/commands/trigger.py +0 -0
  163. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/context.py +0 -0
  164. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/engine_defaults.py +0 -0
  165. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/engine_overrides.py +0 -0
  166. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/files.py +0 -0
  167. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/loop.py +0 -0
  168. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/onboarding.py +0 -0
  169. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/outbox.py +0 -0
  170. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/parsing.py +0 -0
  171. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/render.py +0 -0
  172. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/state_store.py +0 -0
  173. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/topic_state.py +0 -0
  174. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/topics.py +0 -0
  175. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/trigger_mode.py +0 -0
  176. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/types.py +0 -0
  177. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/telegram/voice.py +0 -0
  178. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/transport.py +0 -0
  179. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/transport_runtime.py +0 -0
  180. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/transports.py +0 -0
  181. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/__init__.py +0 -0
  182. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/git.py +0 -0
  183. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/json_state.py +0 -0
  184. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/paths.py +0 -0
  185. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/streams.py +0 -0
  186. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/utils/subprocess.py +0 -0
  187. {yee88-0.6.0 → yee88-0.6.1}/src/yee88/worktrees.py +0 -0
  188. {yee88-0.6.0 → yee88-0.6.1}/tests/__init__.py +0 -0
  189. {yee88-0.6.0 → yee88-0.6.1}/tests/conftest.py +0 -0
  190. {yee88-0.6.0 → yee88-0.6.1}/tests/factories.py +0 -0
  191. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/claude_stream_json_session.jsonl +0 -0
  192. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/codex_exec_json_all_formats.jsonl +0 -0
  193. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/codex_exec_json_all_formats.txt +0 -0
  194. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/opencode_run_json.jsonl +0 -0
  195. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/opencode_stream_error.jsonl +0 -0
  196. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/opencode_stream_success.jsonl +0 -0
  197. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/opencode_stream_success_no_reason.jsonl +0 -0
  198. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/pi_print_mode_events.jsonl +0 -0
  199. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/pi_stream_error.jsonl +0 -0
  200. {yee88-0.6.0 → yee88-0.6.1}/tests/fixtures/pi_stream_success.jsonl +0 -0
  201. {yee88-0.6.0 → yee88-0.6.1}/tests/plugin_fixtures.py +0 -0
  202. {yee88-0.6.0 → yee88-0.6.1}/tests/telegram_fakes.py +0 -0
  203. {yee88-0.6.0 → yee88-0.6.1}/tests/test_api_exports.py +0 -0
  204. {yee88-0.6.0 → yee88-0.6.1}/tests/test_auto_router.py +0 -0
  205. {yee88-0.6.0 → yee88-0.6.1}/tests/test_claude_runner.py +0 -0
  206. {yee88-0.6.0 → yee88-0.6.1}/tests/test_claude_schema.py +0 -0
  207. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_auto_router.py +0 -0
  208. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_chat_id.py +0 -0
  209. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_commands.py +0 -0
  210. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_config.py +0 -0
  211. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_doctor.py +0 -0
  212. {yee88-0.6.0 → yee88-0.6.1}/tests/test_cli_helpers.py +0 -0
  213. {yee88-0.6.0 → yee88-0.6.1}/tests/test_codex_runner_helpers.py +0 -0
  214. {yee88-0.6.0 → yee88-0.6.1}/tests/test_codex_schema.py +0 -0
  215. {yee88-0.6.0 → yee88-0.6.1}/tests/test_codex_tool_result_summary.py +0 -0
  216. {yee88-0.6.0 → yee88-0.6.1}/tests/test_command_registry.py +0 -0
  217. {yee88-0.6.0 → yee88-0.6.1}/tests/test_config_store.py +0 -0
  218. {yee88-0.6.0 → yee88-0.6.1}/tests/test_config_watch.py +0 -0
  219. {yee88-0.6.0 → yee88-0.6.1}/tests/test_engine_discovery.py +0 -0
  220. {yee88-0.6.0 → yee88-0.6.1}/tests/test_exec_bridge.py +0 -0
  221. {yee88-0.6.0 → yee88-0.6.1}/tests/test_exec_render.py +0 -0
  222. {yee88-0.6.0 → yee88-0.6.1}/tests/test_exec_runner.py +0 -0
  223. {yee88-0.6.0 → yee88-0.6.1}/tests/test_git_utils.py +0 -0
  224. {yee88-0.6.0 → yee88-0.6.1}/tests/test_lockfile.py +0 -0
  225. {yee88-0.6.0 → yee88-0.6.1}/tests/test_onboarding.py +0 -0
  226. {yee88-0.6.0 → yee88-0.6.1}/tests/test_onboarding_helpers.py +0 -0
  227. {yee88-0.6.0 → yee88-0.6.1}/tests/test_onboarding_interactive.py +0 -0
  228. {yee88-0.6.0 → yee88-0.6.1}/tests/test_opencode_runner.py +0 -0
  229. {yee88-0.6.0 → yee88-0.6.1}/tests/test_opencode_schema.py +0 -0
  230. {yee88-0.6.0 → yee88-0.6.1}/tests/test_paths.py +0 -0
  231. {yee88-0.6.0 → yee88-0.6.1}/tests/test_pi_runner.py +0 -0
  232. {yee88-0.6.0 → yee88-0.6.1}/tests/test_pi_schema.py +0 -0
  233. {yee88-0.6.0 → yee88-0.6.1}/tests/test_plugins.py +0 -0
  234. {yee88-0.6.0 → yee88-0.6.1}/tests/test_projects_config.py +0 -0
  235. {yee88-0.6.0 → yee88-0.6.1}/tests/test_rendering.py +0 -0
  236. {yee88-0.6.0 → yee88-0.6.1}/tests/test_runner_contract.py +0 -0
  237. {yee88-0.6.0 → yee88-0.6.1}/tests/test_runner_run_options.py +0 -0
  238. {yee88-0.6.0 → yee88-0.6.1}/tests/test_runner_utils.py +0 -0
  239. {yee88-0.6.0 → yee88-0.6.1}/tests/test_runtime_loader.py +0 -0
  240. {yee88-0.6.0 → yee88-0.6.1}/tests/test_settings.py +0 -0
  241. {yee88-0.6.0 → yee88-0.6.1}/tests/test_settings_contract.py +0 -0
  242. {yee88-0.6.0 → yee88-0.6.1}/tests/test_subprocess.py +0 -0
  243. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_agent_trigger_commands.py +0 -0
  244. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_backend.py +0 -0
  245. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_bridge.py +0 -0
  246. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_chat_prefs.py +0 -0
  247. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_chat_sessions.py +0 -0
  248. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_client.py +0 -0
  249. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_client_api.py +0 -0
  250. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_context_helpers.py +0 -0
  251. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_engine_defaults.py +0 -0
  252. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_engine_overrides.py +0 -0
  253. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_file_transfer_helpers.py +0 -0
  254. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_files.py +0 -0
  255. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_incoming.py +0 -0
  256. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_media_command.py +0 -0
  257. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_polling.py +0 -0
  258. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_queue.py +0 -0
  259. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_topic_state.py +0 -0
  260. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_topics_command.py +0 -0
  261. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_topics_helpers.py +0 -0
  262. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_trigger_mode.py +0 -0
  263. {yee88-0.6.0 → yee88-0.6.1}/tests/test_telegram_voice.py +0 -0
  264. {yee88-0.6.0 → yee88-0.6.1}/tests/test_tool_actions.py +0 -0
  265. {yee88-0.6.0 → yee88-0.6.1}/tests/test_transport.py +0 -0
  266. {yee88-0.6.0 → yee88-0.6.1}/tests/test_transport_registry.py +0 -0
  267. {yee88-0.6.0 → yee88-0.6.1}/tests/test_transport_runtime.py +0 -0
  268. {yee88-0.6.0 → yee88-0.6.1}/tests/test_worktrees.py +0 -0
  269. {yee88-0.6.0 → yee88-0.6.1}/uv.lock +0 -0
  270. {yee88-0.6.0 → yee88-0.6.1}/zensical.toml +0 -0
@@ -0,0 +1,581 @@
1
+ # yee88 架构审查计划
2
+
3
+ ## TL;DR
4
+
5
+ **审查目标**:系统性评估 yee88 架构在扩展性、设计质量、技术债务三个维度的健康度
6
+
7
+ **核心交付物**:
8
+ - 扩展性瓶颈识别报告(含改进方案)
9
+ - 架构设计问题清单(含风险评级)
10
+ - 技术债务评估(一次性任务功能架构影响分析)
11
+ - 重构建议优先级矩阵
12
+
13
+ **审查范围**:
14
+ - IN: plugins.py, cron/, runners/, router.py, scheduler.py, config.py, settings.py, transport_runtime.py
15
+ - OUT: telegram/ 详细实现(仅审查接口层)、utils/ 工具函数、tests/ 测试代码
16
+
17
+ **预计工作量**:8-12 小时审查 + 4 小时报告撰写
18
+
19
+ ---
20
+
21
+ ## 审查维度与发现摘要
22
+
23
+ 基于初步代码分析,已识别以下关键问题:
24
+
25
+ ### 1. 扩展性问题
26
+ | 组件 | 现状 | 潜在瓶颈 |
27
+ |------|------|----------|
28
+ | 插件系统 | entrypoints 设计良好 | 缺少插件生命周期管理(加载/卸载/热更新) |
29
+ | Runner 抽象 | JsonlSubprocessRunner 基类完善 | 新引擎添加仍需修改多处代码(backend, runner, entrypoint) |
30
+ | 配置系统 | Pydantic + TOML 双层设计 | 配置热重载边界情况未明确 |
31
+ | 命令系统 | 基于 entrypoints 简单直接 | 缺少命令发现机制 |
32
+
33
+ ### 2. 架构设计问题
34
+ | 问题 | 位置 | 风险级别 |
35
+ |------|------|----------|
36
+ | 上帝对象 | transport_runtime.py (345行, 18方法) | 中 - 职责过重,难以测试 |
37
+ | 循环依赖风险 | config.py 被几乎所有模块导入 | 低-中 - 需验证是否存在实际循环 |
38
+ | 状态管理分散 | settings → config → runtime 三级 | 中 - 数据流复杂,可能不一致 |
39
+ | 错误处理不一致 | 部分 bare except | 低 - 影响可观测性 |
40
+
41
+ ### 3. 一次性任务功能架构影响
42
+ | 方面 | 评估 | 备注 |
43
+ |------|------|------|
44
+ | 设计合理性 | 良好 | ISO 8601 存储 + 自动清理,设计简洁 |
45
+ | 集成度 | 高 | 与现有调度系统无缝整合 |
46
+ | 潜在债务 | 低-中 | 时间解析逻辑分散在 CLI 和 Manager 两层 |
47
+ | 边界情况 | 待审查 | 时区处理、任务过期、并发执行 |
48
+
49
+ ---
50
+
51
+ ## 并行任务图
52
+
53
+ ```
54
+ ┌─────────────────────────────────────────────────────────────────────────┐
55
+ │ 架构审查任务依赖图 │
56
+ └─────────────────────────────────────────────────────────────────────────┘
57
+
58
+ Wave 1: 基础分析(无依赖,可并行)
59
+ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
60
+ │ Task 1.1 │ │ Task 1.2 │ │ Task 1.3 │ │ Task 1.4 │
61
+ │ 插件系统扩展 │ │ Runner 抽象 │ │ 配置系统扩展 │ │ 命令系统扩展 │
62
+ │ 性深度审查 │ │ 层审查 │ │ 性审查 │ │ 性审查 │
63
+ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
64
+ │ │ │ │
65
+ └─────────────────┴─────────────────┴─────────────────┘
66
+
67
+
68
+ Wave 2: 架构设计审查(依赖 Wave 1 完成)
69
+ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
70
+ │ Task 2.1 │ │ Task 2.2 │ │ Task 2.3 │ │ Task 2.4 │
71
+ │ 分层架构审查 │ │ 依赖关系审查 │ │ 抽象层合规性 │ │ 状态管理审查 │
72
+ │ │ │ │ │ 审查 │ │ │
73
+ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘
74
+ │ │ │ │
75
+ └─────────────────┴─────────────────┴─────────────────┘
76
+
77
+
78
+ Wave 3: 专项深度审查(依赖 Wave 1-2)
79
+ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
80
+ │ Task 3.1 │ │ Task 3.2 │ │ Task 3.3 │
81
+ │ Cron 模块架构 │ │ 错误处理审查 │ │ 整合分析 │
82
+ │ 影响评估 │ │ │ │ 与报告 │
83
+ └──────────────┘ └──────────────┘ └──────────────┘
84
+ ```
85
+
86
+ **关键路径**:Task 1.x → Task 2.x → Task 3.3
87
+ **并行度**:Wave 1 (4 任务并行) → Wave 2 (4 任务并行) → Wave 3 (3 任务并行)
88
+ **理论加速比**:约 3.5x(对比串行执行)
89
+
90
+ ---
91
+
92
+ ## 详细 TODO 列表
93
+
94
+ ### Wave 1: 扩展性审查(高优先级)
95
+
96
+ #### Task 1.1: 插件系统扩展性深度审查
97
+ **目标**:评估当前 entrypoints-based 插件系统的扩展瓶颈
98
+
99
+ **检查点**:
100
+ - [ ] **1.1.1** 审查 `plugins.py` 第 1-313 行
101
+ - 插件发现机制(_discover_entrypoints)
102
+ - 重复插件处理逻辑
103
+ - 加载错误追踪机制
104
+ - 验证器支持
105
+
106
+ - [ ] **1.1.2** 审查插件生命周期管理
107
+ - 是否有明确的加载阶段?
108
+ - 是否有卸载/禁用机制?
109
+ - 是否支持热更新?
110
+ - 插件间依赖如何处理?
111
+
112
+ - [ ] **1.1.3** 审查 `engines.py` 第 1-120 行
113
+ - 引擎后端加载流程
114
+ - 配置验证器实现
115
+ - 引擎可用性检查
116
+
117
+ - [ ] **1.1.4** 审查 `transports.py` 实现
118
+ - 传输层后端加载流程
119
+ - 与引擎加载的差异
120
+
121
+ - [ ] **1.1.5** 添加新引擎的成本评估
122
+ - 需要修改的文件数
123
+ - 需要理解的接口数
124
+ - 测试覆盖率要求
125
+
126
+ **输出**:插件系统扩展性评估报告(含改进建议)
127
+
128
+ ---
129
+
130
+ #### Task 1.2: Runner 抽象层审查
131
+ **目标**:评估 Runner 抽象的质量和扩展性
132
+
133
+ **检查点**:
134
+ - [ ] **1.2.1** 审查 `runner.py` 第 1-350 行
135
+ - Runner Protocol 定义
136
+ - BaseRunner 抽象类
137
+ - SessionLockMixin 实现
138
+ - ResumeTokenMixin 实现
139
+ - JsonlSubprocessRunner 具体实现
140
+
141
+ - [ ] **1.2.2** 审查具体 Runner 实现
142
+ - `runners/codex.py` (行 1-400) - 评估实现复杂度
143
+ - `runners/claude.py` (行 1-300) - 对比 codex 差异
144
+ - `runners/opencode.py` (行 1-350) - 评估通用性
145
+ - `runners/pi.py` (行 1-400) - 识别特殊处理
146
+
147
+ - [ ] **1.2.3** 评估 Runner 接口稳定性
148
+ - 接口变更历史(git log --oneline runners/)
149
+ - 哪些方法被所有 runner 实现
150
+ - 哪些方法是可选的
151
+
152
+ - [ ] **1.2.4** 识别 Runner 扩展障碍
153
+ - 是否有引擎特定的硬编码?
154
+ - 配置参数是否统一?
155
+ - 错误处理是否一致?
156
+
157
+ **输出**:Runner 抽象层评估报告
158
+
159
+ ---
160
+
161
+ #### Task 1.3: 配置系统扩展性审查
162
+ **目标**:评估 Settings → Config → Runtime 三层架构的扩展性
163
+
164
+ **检查点**:
165
+ - [ ] **1.3.1** 审查 `settings.py` 第 1-500 行
166
+ - TakopiSettings 结构
167
+ - Pydantic 验证规则
168
+ - 嵌套配置类设计
169
+ - 环境变量映射
170
+
171
+ - [ ] **1.3.2** 审查 `config.py` 第 1-200 行
172
+ - ProjectsConfig 结构
173
+ - 配置加载/保存逻辑
174
+ - 迁移机制(config_migrations.py)
175
+ - 配置热重载(config_watch.py)
176
+
177
+ - [ ] **1.3.3** 评估配置扩展成本
178
+ - 添加新设置字段需要修改的文件
179
+ - 向后兼容性保证机制
180
+ - 配置验证的覆盖范围
181
+
182
+ - [ ] **1.3.4** 识别配置管理问题
183
+ - 配置分散在多少文件中?
184
+ - 是否有重复配置?
185
+ - 配置优先级是否清晰?
186
+
187
+ **输出**:配置系统扩展性评估报告
188
+
189
+ ---
190
+
191
+ #### Task 1.4: 命令系统扩展性审查
192
+ **目标**:评估基于 entrypoints 的命令系统扩展性
193
+
194
+ **检查点**:
195
+ - [ ] **1.4.1** 审查 `commands.py` 第 1-100 行
196
+ - CommandBackend 定义
197
+ - 命令发现机制
198
+ - 命令注册流程
199
+
200
+ - [ ] **1.4.2** 审查 CLI 命令实现(`cli/` 目录)
201
+ - 命令结构模式
202
+ - 参数解析方式
203
+ - 与 core 层交互方式
204
+
205
+ - [ ] **1.4.3** 评估命令扩展成本
206
+ - 添加新命令需要修改的文件
207
+ - 命令间的依赖关系
208
+ - 命令测试策略
209
+
210
+ **输出**:命令系统扩展性评估报告
211
+
212
+ ---
213
+
214
+ ### Wave 2: 架构设计审查(中优先级)
215
+
216
+ #### Task 2.1: 分层架构与职责单一性审查
217
+ **目标**:验证各层职责是否清晰,是否存在越界
218
+
219
+ **检查点**:
220
+ - [ ] **2.1.1** 绘制分层架构图
221
+ - CLI Layer → Plugin Layer → Orchestration Layer → Bridge Layer → Runner Layer → Transport Layer
222
+ - 标注每层核心职责
223
+
224
+ - [ ] **2.1.2** 审查越界调用
225
+ - Transport Layer 是否直接访问 Runner Layer?
226
+ - CLI Layer 是否绕过 Orchestration Layer?
227
+ - Bridge Layer 是否包含业务逻辑?
228
+
229
+ - [ ] **2.1.3** 审查 `transport_runtime.py` 第 1-345 行
230
+ - 统计方法数量(当前 18 个)
231
+ - 识别不属于该层的逻辑
232
+ - 建议拆分策略
233
+
234
+ - [ ] **2.1.4** 审查 `runner_bridge.py` 第 1-500 行
235
+ - 桥接层是否只负责转发?
236
+ - 是否包含状态转换逻辑?
237
+
238
+ **输出**:分层架构合规性报告
239
+
240
+ ---
241
+
242
+ #### Task 2.2: 依赖关系审查
243
+ **目标**:识别循环依赖和不当依赖
244
+
245
+ **检查点**:
246
+ - [ ] **2.2.1** 生成模块依赖图
247
+ ```bash
248
+ # 使用 pydeps 或手动分析
249
+ find src/yee88 -name "*.py" -exec grep -l "from \.config import\|import.*config" {} \;
250
+ ```
251
+
252
+ - [ ] **2.2.2** 审查 `config.py` 导入范围
253
+ - 哪些模块导入了 config?
254
+ - config 是否导入了这些模块?(循环依赖)
255
+ - 是否存在延迟导入(TYPE_CHECKING)?
256
+
257
+ - [ ] **2.2.3** 审查 `settings.py` 与 `config.py` 关系
258
+ - 双向依赖?
259
+ - 依赖方向是否合理?
260
+
261
+ - [ ] **2.2.4** 识别并记录所有可疑依赖
262
+ - utils/ 被上层模块导入情况
263
+ - model.py 的依赖范围
264
+
265
+ **输出**:依赖关系分析报告
266
+
267
+ ---
268
+
269
+ #### Task 2.3: 抽象层与依赖倒置审查
270
+ **目标**:验证抽象是否充分,是否遵循依赖倒置原则
271
+
272
+ **检查点**:
273
+ - [ ] **2.3.1** 审查接口定义
274
+ - Runner (Protocol) 定义完整性
275
+ - Transport (Protocol) 定义完整性
276
+ - Backend 抽象一致性
277
+
278
+ - [ ] **2.3.2** 审查具体实现依赖
279
+ - 上层是否依赖具体实现?
280
+ - 依赖注入是否使用?
281
+
282
+ - [ ] **2.3.3** 识别抽象泄漏
283
+ - CodexRunner 特定逻辑是否泄漏到通用层?
284
+ - Telegram 特定逻辑是否泄漏到 Transport 抽象?
285
+
286
+ **输出**:抽象层合规性报告
287
+
288
+ ---
289
+
290
+ #### Task 2.4: 状态管理审查
291
+ **目标**:评估多级状态管理的合理性和一致性风险
292
+
293
+ **检查点**:
294
+ - [ ] **2.4.1** 绘制状态流转图
295
+ - Settings (静态配置)
296
+ - ProjectsConfig (运行时配置)
297
+ - TransportRuntime (运行时状态)
298
+ - ThreadScheduler (调度状态)
299
+
300
+ - [ ] **2.4.2** 审查状态同步机制
301
+ - settings → config 转换逻辑
302
+ - config 热重载触发条件
303
+ - runtime 状态更新时机
304
+
305
+ - [ ] **2.4.3** 识别状态不一致风险点
306
+ - 并发修改场景
307
+ - 配置热重载边界
308
+ - 持久化与内存状态差异
309
+
310
+ **输出**:状态管理评估报告
311
+
312
+ ---
313
+
314
+ ### Wave 3: 专项深度审查(高优先级)
315
+
316
+ #### Task 3.1: Cron 模块架构影响评估
317
+ **目标**:深度评估一次性任务功能的架构影响
318
+
319
+ **检查点**:
320
+ - [ ] **3.1.1** 审查 `cron/models.py` 第 1-14 行
321
+ - CronJob 数据结构
322
+ - one_time 字段语义
323
+ - 字段命名一致性
324
+
325
+ - [ ] **3.1.2** 审查 `cron/manager.py` 第 1-141 行
326
+ - 任务持久化格式(TOML)
327
+ - 时间解析逻辑(_parse_one_time 在 cli/cron.py)
328
+ - get_due_jobs 执行逻辑
329
+ - 一次性任务自动清理机制
330
+
331
+ - [ ] **3.1.3** 审查 `cron/scheduler.py` 第 1-58 行
332
+ - 调度循环设计
333
+ - 任务执行并发控制
334
+ - 错误处理策略
335
+
336
+ - [ ] **3.1.4** 边界情况分析
337
+ - 时区处理(是否使用 UTC?)
338
+ - 任务过期处理(过期的 +30m 任务)
339
+ - 并发执行风险(同一任务的多次触发)
340
+ - 任务持久化原子性
341
+
342
+ - [ ] **3.1.5** 与现有系统集成评估
343
+ - 与 ThreadScheduler 的协作
344
+ - 与 TransportRuntime 的交互
345
+ - 配置共享机制
346
+
347
+ **输出**:Cron 模块架构影响评估报告
348
+
349
+ ---
350
+
351
+ #### Task 3.2: 错误处理一致性审查
352
+ **目标**:评估错误处理策略的统一性
353
+
354
+ **检查点**:
355
+ - [ ] **3.2.1** 审查异常层次结构
356
+ - ConfigError 使用范围
357
+ - PluginLoadFailed / PluginNotFound 使用
358
+ - RunnerUnavailableError 使用
359
+
360
+ - [ ] **3.2.2** 审查错误处理模式
361
+ - scheduler.py 第 147-156 行的 bare except
362
+ - cron/scheduler.py 第 47-53 行的错误处理
363
+ - runner.py 第 259-273 行的错误转换
364
+
365
+ - [ ] **3.2.3** 评估日志记录一致性
366
+ - 结构化日志使用情况
367
+ - 错误上下文完整性
368
+ - 日志级别合理性
369
+
370
+ - [ ] **3.2.4** 识别错误处理改进点
371
+ - 需要添加特定异常的场景
372
+ - 需要收紧异常捕获的范围
373
+
374
+ **输出**:错误处理一致性报告
375
+
376
+ ---
377
+
378
+ #### Task 3.3: 整合分析与最终报告
379
+ **目标**:汇总所有审查结果,生成优先级矩阵和重构建议
380
+
381
+ **检查点**:
382
+ - [ ] **3.3.1** 汇总所有子任务发现
383
+ - 整理各任务的 Critical/Warning/Info 级别问题
384
+ - 去重和归类
385
+
386
+ - [ ] **3.3.2** 风险优先级矩阵
387
+ | 问题 | 影响 | 修复成本 | 优先级 | 建议行动 |
388
+ |------|------|----------|--------|----------|
389
+
390
+ - [ ] **3.3.3** 重构路线图
391
+ - 短期(1-2 周):低风险高价值改进
392
+ - 中期(1-2 月):架构债务清理
393
+ - 长期(3-6 月):重大重构
394
+
395
+ - [ ] **3.3.4** 编写最终架构审查报告
396
+ - 执行摘要(面向决策者)
397
+ - 详细发现(面向开发者)
398
+ - 改进建议(含代码示例)
399
+ - 实施路线图
400
+
401
+ **输出**:完整架构审查报告
402
+
403
+ ---
404
+
405
+ ## 任务类别与技能建议
406
+
407
+ ### 任务分类表
408
+
409
+ | Task | 类别 | 建议技能 | 预估时间 | 难度 |
410
+ |------|------|----------|----------|------|
411
+ | 1.1 插件系统 | 代码审查 | python, architecture-analysis | 2h | 中 |
412
+ | 1.2 Runner 抽象 | 代码审查 | python, design-patterns | 2h | 中 |
413
+ | 1.3 配置系统 | 代码审查 | python, pydantic | 1.5h | 低-中 |
414
+ | 1.4 命令系统 | 代码审查 | python, cli-design | 1h | 低 |
415
+ | 2.1 分层架构 | 架构分析 | architecture-analysis, layering | 2h | 中 |
416
+ | 2.2 依赖关系 | 架构分析 | python, dependency-analysis | 1.5h | 中 |
417
+ | 2.3 抽象层 | 架构分析 | design-patterns, solid-principles | 1.5h | 中 |
418
+ | 2.4 状态管理 | 架构分析 | state-management, concurrency | 1.5h | 中 |
419
+ | 3.1 Cron 模块 | 专项审查 | python, cron, datetime | 1.5h | 中 |
420
+ | 3.2 错误处理 | 代码质量 | python, exception-handling | 1h | 低 |
421
+ | 3.3 整合报告 | 文档撰写 | technical-writing, analysis | 4h | 中 |
422
+
423
+ ### 推荐 Agent 配置
424
+
425
+ **Wave 1 任务(代码审查类)**:
426
+ ```yaml
427
+ recommended_agent:
428
+ category: quick
429
+ skills: ["python", "ast-grep", "lsp-diagnostics"]
430
+ run_in_background: true
431
+ ```
432
+
433
+ **Wave 2 任务(架构分析类)**:
434
+ ```yaml
435
+ recommended_agent:
436
+ category: ultrabrain
437
+ skills: ["architecture-analysis", "oracle"]
438
+ run_in_background: true
439
+ ```
440
+
441
+ **Wave 3 任务(专项 + 报告)**:
442
+ ```yaml
443
+ recommended_agent:
444
+ category: writing
445
+ skills: ["tech-docs-creator", "humanizer-zh"]
446
+ run_in_background: false # 需要人工确认最终报告
447
+ ```
448
+
449
+ ---
450
+
451
+ ## 执行策略
452
+
453
+ ### 并行执行建议
454
+
455
+ **方案 A:全力并行(推荐)**
456
+ - 同时启动 Wave 1 全部 4 个任务
457
+ - Wave 1 完成后同时启动 Wave 2 全部 4 个任务
458
+ - Wave 3 按顺序执行(3.1 → 3.2 → 3.3)
459
+ - **总时间**:约 6-8 小时(含报告)
460
+
461
+ **方案 B:保守串行**
462
+ - 按优先级逐个执行任务
463
+ - **总时间**:约 12-15 小时
464
+
465
+ ### 依赖管理
466
+
467
+ ```
468
+ # 依赖图说明
469
+ Wave 1 (4 任务): 相互独立,可完全并行
470
+ Wave 2 (4 任务): 依赖 Wave 1 完成,内部相互独立
471
+ Wave 3 (3 任务):
472
+ - 3.1 (Cron) 依赖 Wave 1 完成
473
+ - 3.2 (错误处理) 依赖 Wave 1-2 完成
474
+ - 3.3 (报告) 依赖所有前置任务
475
+ ```
476
+
477
+ ### 风险控制
478
+
479
+ | 风险 | 概率 | 缓解措施 |
480
+ |------|------|----------|
481
+ | 任务发现重叠问题 | 中 | 每日站会同步发现 |
482
+ | 单个任务超时 | 低 | 设置 3 小时超时,超时则拆分 |
483
+ | 报告整合困难 | 中 | 统一模板,提前评审模板 |
484
+
485
+ ---
486
+
487
+ ## 审查入口点
488
+
489
+ ### 快速开始命令
490
+
491
+ ```bash
492
+ # 查看项目结构
493
+ tree -L 2 src/yee88/
494
+
495
+ # 统计代码行数
496
+ find src/yee88 -name "*.py" -not -path "*/__pycache__/*" | xargs wc -l | sort -n
497
+
498
+ # 查看最近修改
499
+ git log --oneline --since="2 weeks ago" --name-only | head -50
500
+
501
+ # 查看依赖关系
502
+ grep -r "^from yee88\." src/yee88/ | grep -v __pycache__ | cut -d: -f2 | sort | uniq -c | sort -rn | head -20
503
+ ```
504
+
505
+ ### 关键文件清单
506
+
507
+ **必须审查**:
508
+ 1. `src/yee88/plugins.py` - 插件系统核心
509
+ 2. `src/yee88/cron/manager.py` - 定时任务管理
510
+ 3. `src/yee88/cron/scheduler.py` - 定时任务调度
511
+ 4. `src/yee88/runner.py` - Runner 抽象基类
512
+ 5. `src/yee88/router.py` - 自动路由
513
+ 6. `src/yee88/scheduler.py` - 线程调度
514
+ 7. `src/yee88/transport_runtime.py` - 运行时门面
515
+ 8. `src/yee88/settings.py` - 配置定义
516
+ 9. `src/yee88/config.py` - 配置管理
517
+
518
+ **参考审查**:
519
+ 1. `src/yee88/runners/codex.py` - Runner 实现示例
520
+ 2. `src/yee88/telegram/bridge.py` - Transport 实现
521
+ 3. `src/yee88/commands.py` - 命令系统
522
+ 4. `pyproject.toml` - 项目配置和 entrypoints
523
+
524
+ ---
525
+
526
+ ## 验收标准
527
+
528
+ ### 每个子任务的验收标准
529
+
530
+ **代码审查类任务(1.x, 2.x, 3.1-3.2)**:
531
+ - [ ] 完成所有检查点的代码审查
532
+ - [ ] 记录至少 3 个具体问题(Critical/Warning/Info)
533
+ - [ ] 提供改进建议(含代码示例)
534
+ - [ ] 输出 Markdown 格式的子报告
535
+
536
+ **整合报告任务(3.3)**:
537
+ - [ ] 汇总所有子任务发现
538
+ - [ ] 风险优先级矩阵完整
539
+ - [ ] 重构路线图清晰(含时间估算)
540
+ - [ ] 最终报告通过 Momus 审查(如启用高精度模式)
541
+
542
+ ### 整体项目验收
543
+
544
+ - [ ] 所有 11 个任务完成
545
+ - [ ] 发现的问题分类清晰(Critical ≤ 5, Warning ≤ 10, Info ≤ 20)
546
+ - [ ] 提供可执行的重构建议
547
+ - [ ] 报告通过技术评审
548
+
549
+ ---
550
+
551
+ ## 附录
552
+
553
+ ### A. 术语表
554
+
555
+ | 术语 | 定义 |
556
+ |------|------|
557
+ | Entrypoint | Python 包元数据中的插件注册点 |
558
+ | Runner | AI 引擎适配器抽象 |
559
+ | Transport | 消息传输层抽象(如 Telegram) |
560
+ | Bridge | 连接 Transport 和 Runner 的中间层 |
561
+ | 上帝对象 | 职责过多、方法过多的类 |
562
+ | 循环依赖 | 模块 A 导入 B,B 又导入 A |
563
+
564
+ ### B. 参考资料
565
+
566
+ - [pyproject.toml entrypoints](https://packaging.python.org/en/latest/specifications/entry-points/)
567
+ - [Pydantic Settings](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)
568
+ - [Python Protocol](https://docs.python.org/3/library/typing.html#typing.Protocol)
569
+ - [SOLID Principles](https://en.wikipedia.org/wiki/SOLID)
570
+
571
+ ### C. 变更记录
572
+
573
+ | 版本 | 日期 | 变更 |
574
+ |------|------|------|
575
+ | 1.0 | 2026-01-31 | 初始版本 |
576
+
577
+ ---
578
+
579
+ **计划完成时间**:2026-01-31
580
+ **计划编制者**:Prometheus(架构规划 Agent)
581
+ **审核状态**:待审核
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yee88
3
- Version: 0.6.0
3
+ Version: 0.6.1
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/
@@ -1,5 +1,19 @@
1
1
  # changelog
2
2
 
3
+ ## v0.6.0 (2026-01-31)
4
+
5
+ ### features
6
+
7
+ - add one-time task execution support in cron
8
+
9
+ ### docs
10
+
11
+ - update yee88 skill documentation
12
+
13
+ ### changes
14
+
15
+ - update system prompt wording
16
+
3
17
  ## v0.2.0 (2026-01-30)
4
18
 
5
19
  ### changes
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "yee88"
3
3
  authors = [{name = "yee.wang"}]
4
- version = "0.6.0"
4
+ version = "0.6.1"
5
5
  description = "Telegram bridge for Codex, Claude Code, and other agent CLIs."
6
6
  readme = "README.md"
7
7
  license = { file = "LICENSE" }
@@ -0,0 +1 @@
1
+ __version__ = "0.6.1"
@@ -145,8 +145,7 @@ class TakopiSettings(BaseSettings):
145
145
  default_project: NonEmptyStr | None = None
146
146
  system_prompt: str | None = (
147
147
  "你是我的专业秘书,请用中文回复。"
148
- "每次会话结束以后,都要叫我老板,用简短、调皮但不轻浮的回复,告诉我你的任务结果!",
149
- "返回格式给 Markdown Table"
148
+ "每次会话结束以后,都要叫我老板,用简短、调皮但不轻浮的回复,告诉我你的任务结果!"
150
149
  )
151
150
  projects: dict[str, ProjectSettings] = Field(default_factory=dict)
152
151
 
@@ -1 +0,0 @@
1
- __version__ = "0.4.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes