tagword-codeagent 1.2.0__tar.gz → 1.2.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 (271) hide show
  1. {tagword_codeagent-1.2.0/tagword_codeagent.egg-info → tagword_codeagent-1.2.1}/PKG-INFO +1 -1
  2. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/auto_continue.py +10 -2
  3. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/pyproject.toml +1 -1
  4. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1/tagword_codeagent.egg-info}/PKG-INFO +1 -1
  5. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tagword_codeagent.egg-info/SOURCES.txt +1 -0
  6. tagword_codeagent-1.2.1/tests/test_auto_continue_wiring.py +127 -0
  7. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/LICENSE +0 -0
  8. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/README.md +0 -0
  9. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/__init__.py +0 -0
  10. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/__main__.py +0 -0
  11. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/cli/__init__.py +0 -0
  12. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/cli/entrypoint.py +0 -0
  13. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/cli/main.py +0 -0
  14. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/__init__.py +0 -0
  15. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/attachments.py +0 -0
  16. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/audio_models.py +0 -0
  17. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/bootstrap.py +0 -0
  18. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/default_presets.py +0 -0
  19. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/env.py +0 -0
  20. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/folder_picker.py +0 -0
  21. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/image_understanding.py +0 -0
  22. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/models.py +0 -0
  23. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/paths.py +0 -0
  24. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/pricing.py +0 -0
  25. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/process_ports.py +0 -0
  26. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/seed_bridge.py +0 -0
  27. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/settings.py +0 -0
  28. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/speech_synth.py +0 -0
  29. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/team_config.py +0 -0
  30. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/team_manager.py +0 -0
  31. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/token_counter.py +0 -0
  32. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/tts_voices.py +0 -0
  33. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/usage_billing.py +0 -0
  34. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/core/vision_models.py +0 -0
  35. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/memory/diary.py +0 -0
  36. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/README.md +0 -0
  37. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/agent.md +0 -0
  38. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/identity.md +0 -0
  39. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/memory.md +0 -0
  40. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/skills.md +0 -0
  41. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/soul.md +0 -0
  42. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/tools.md +0 -0
  43. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/persona_defaults/user.md +0 -0
  44. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/__init__.py +0 -0
  45. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/agent_bootstrap.py +0 -0
  46. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/agent_context.py +0 -0
  47. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/agent_handle.py +0 -0
  48. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/agent_runtime.py +0 -0
  49. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/compact_prompt.py +0 -0
  50. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/compact_state.py +0 -0
  51. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/llm_worker.py +0 -0
  52. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/orchestrator.py +0 -0
  53. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/prompt_enrichment.py +0 -0
  54. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/session_manager.py +0 -0
  55. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/task_split.py +0 -0
  56. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/turn_loop.py +0 -0
  57. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/runtime/worker.py +0 -0
  58. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/__init__.py +0 -0
  59. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/a2a/__init__.py +0 -0
  60. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/a2a/agent_card.py +0 -0
  61. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/a2a/handlers.py +0 -0
  62. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/a2a/models.py +0 -0
  63. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/a2a/streaming.py +0 -0
  64. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/app_factory.py +0 -0
  65. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/attachment_api.py +0 -0
  66. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/chat_turn.py +0 -0
  67. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/evidence.py +0 -0
  68. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/hub.py +0 -0
  69. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/icon.png +0 -0
  70. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/self_healing.py +0 -0
  71. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/team_engine.py +0 -0
  72. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/team_worker.py +0 -0
  73. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/tts_api.py +0 -0
  74. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_api_app.py +0 -0
  75. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_agentmeta.py +0 -0
  76. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_agents.py +0 -0
  77. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_auth.py +0 -0
  78. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_cronallow.py +0 -0
  79. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_envllm.py +0 -0
  80. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_files.py +0 -0
  81. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_git.py +0 -0
  82. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_health.py +0 -0
  83. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_mcp.py +0 -0
  84. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_projects.py +0 -0
  85. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_sessions.py +0 -0
  86. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_skills.py +0 -0
  87. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/server/webui_handlers_teams.py +0 -0
  88. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/skills/__init__.py +0 -0
  89. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/skills/select.py +0 -0
  90. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/tools/__init__.py +0 -0
  91. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/tools/agent_tools.py +0 -0
  92. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__init__.py +0 -0
  93. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__pycache__/__init__.cpython-311.pyc +0 -0
  94. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__pycache__/__init__.cpython-313.pyc +0 -0
  95. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__pycache__/app.cpython-313.pyc +0 -0
  96. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__pycache__/auth_impl.cpython-311.pyc +0 -0
  97. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/__pycache__/auth_impl.cpython-313.pyc +0 -0
  98. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/auth_impl.py +0 -0
  99. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/00-marked.min.js +0 -0
  100. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/00-mermaid.min.js +0 -0
  101. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/00-purify.min.js +0 -0
  102. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/00-storage.js +0 -0
  103. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/00-utils.js +0 -0
  104. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01-theme.css +0 -0
  105. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01a-scroll.js +0 -0
  106. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01b-think.js +0 -0
  107. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-session-identity.js +0 -0
  108. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-session-thinking.js +0 -0
  109. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-session-tree-menus.js +0 -0
  110. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-session-tree.js +0 -0
  111. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-session-utilities.js +0 -0
  112. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01c-vision-model.js +0 -0
  113. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01d-image-gen-model.js +0 -0
  114. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01e-audio-model.js +0 -0
  115. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01f-compose-ui.js +0 -0
  116. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01g-tts-settings.js +0 -0
  117. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01h-music-model.js +0 -0
  118. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01i-model-stack.js +0 -0
  119. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01j-video-gen-model.js +0 -0
  120. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01k-model-stack-bootstrap.js +0 -0
  121. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01k-model-stack-state.js +0 -0
  122. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/01q-inflight.js +0 -0
  123. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/02-reset.css +0 -0
  124. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/02-session-ui.js +0 -0
  125. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03-layout-p1.css +0 -0
  126. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03-layout-p2.css +0 -0
  127. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03a-links-stream.js +0 -0
  128. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03b-stream-text.js +0 -0
  129. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03c-render-bubble.js +0 -0
  130. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03d-agent-bubble.js +0 -0
  131. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03e-tool-trace.js +0 -0
  132. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03f-timeline.js +0 -0
  133. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/03g-bubble-tts.js +0 -0
  134. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p1.css +0 -0
  135. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p2b.css +0 -0
  136. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p3.css +0 -0
  137. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p4.css +0 -0
  138. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p5.css +0 -0
  139. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p6.css +0 -0
  140. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p7.css +0 -0
  141. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p8.css +0 -0
  142. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-components-p9.css +0 -0
  143. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-ws-connect.js +0 -0
  144. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/04-ws-helpers.js +0 -0
  145. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05-chat-p1.css +0 -0
  146. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05-chat-p2.css +0 -0
  147. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05-chat-p3.css +0 -0
  148. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05a-session-history.js +0 -0
  149. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05b-session-list.js +0 -0
  150. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05c-dialog.js +0 -0
  151. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05d-project-create.js +0 -0
  152. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/05e-project-remote.js +0 -0
  153. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/06-chat.js +0 -0
  154. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/06-utilities.css +0 -0
  155. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/06b-attachments.js +0 -0
  156. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/06c-camera.js +0 -0
  157. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/07-activity-bar.css +0 -0
  158. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09-git-p1.css +0 -0
  159. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09-git-p2.css +0 -0
  160. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09a-init-bind.js +0 -0
  161. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09b-panel-toggle.js +0 -0
  162. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09c-api-refresh.js +0 -0
  163. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09d-status-log.js +0 -0
  164. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09e-commit.js +0 -0
  165. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/09f-remote.js +0 -0
  166. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11a-cron-parse.js +0 -0
  167. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11b-cron-panel.js +0 -0
  168. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11c-cron-card.js +0 -0
  169. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11d-cron-form.js +0 -0
  170. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11e-env-config.js +0 -0
  171. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11f-env-llm-a-state.js +0 -0
  172. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11f-env-llm-b-form.js +0 -0
  173. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11f-env-llm-c-board.js +0 -0
  174. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11g-env-paths-git.js +0 -0
  175. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11h-env-mcp-a-state.js +0 -0
  176. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11h-env-mcp-b-form.js +0 -0
  177. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/11h-env-mcp-c-board.js +0 -0
  178. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/12-plugins.js +0 -0
  179. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13a-skills.js +0 -0
  180. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13a-todo-utils.js +0 -0
  181. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13b-todo-fetch.js +0 -0
  182. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13b-tools.js +0 -0
  183. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13c-skills-panel.js +0 -0
  184. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13c-todo-crud.js +0 -0
  185. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/13d-file-browser.js +0 -0
  186. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/14-activity-bar.js +0 -0
  187. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/15-plans.css +0 -0
  188. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/15-plans.js +0 -0
  189. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/16-mobile.css +0 -0
  190. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/16-mobile.js +0 -0
  191. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/17-agents-list.css +0 -0
  192. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/17-agents-list.js +0 -0
  193. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/17-preset-ux.css +0 -0
  194. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/18-agent-mgr.css +0 -0
  195. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/18-agent-mgr.js +0 -0
  196. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/24-health-dashboard.js +0 -0
  197. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/25-teams-panel.css +0 -0
  198. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/25-teams-panel.js +0 -0
  199. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/99-brand-polish.css +0 -0
  200. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/body.html +0 -0
  201. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/setup/setup_form.html +0 -0
  202. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/setup/setup_head.html +0 -0
  203. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/setup/setup_tail.html +0 -0
  204. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/static/setup/setup_test.html +0 -0
  205. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/web_login.html +0 -0
  206. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/codeagent/web/webui.html +0 -0
  207. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/setup.cfg +0 -0
  208. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tagword_codeagent.egg-info/dependency_links.txt +0 -0
  209. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tagword_codeagent.egg-info/entry_points.txt +0 -0
  210. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tagword_codeagent.egg-info/requires.txt +0 -0
  211. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tagword_codeagent.egg-info/top_level.txt +0 -0
  212. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_a2a.py +0 -0
  213. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_a2a_streaming.py +0 -0
  214. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_agent_discovery_hollow.py +0 -0
  215. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_agent_file_safety.py +0 -0
  216. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_agent_registry_bridge.py +0 -0
  217. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_agent_root_consistency.py +0 -0
  218. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_archive_probe.py +0 -0
  219. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_attachment_safety.py +0 -0
  220. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_attachments.py +0 -0
  221. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_auth_pure_fns.py +0 -0
  222. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_auth_routes.py +0 -0
  223. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_auto_continue.py +0 -0
  224. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_cli_chat_project_id.py +0 -0
  225. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_compact_state.py +0 -0
  226. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_default_presets.py +0 -0
  227. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_env.py +0 -0
  228. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_env_chat.py +0 -0
  229. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_evidence.py +0 -0
  230. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_git_provider.py +0 -0
  231. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_git_ssh_helpers.py +0 -0
  232. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_history_json_safe.py +0 -0
  233. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_history_rows.py +0 -0
  234. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_hub.py +0 -0
  235. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_image_understanding.py +0 -0
  236. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_list_agents_tool.py +0 -0
  237. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_listen_port.py +0 -0
  238. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_metas.py +0 -0
  239. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_nudge_edge.py +0 -0
  240. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_orchestrator.py +0 -0
  241. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_paths_files.py +0 -0
  242. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_paths_safety.py +0 -0
  243. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_persist_summarize.py +0 -0
  244. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_persona_fallback.py +0 -0
  245. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_persona_hash.py +0 -0
  246. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_persona_init.py +0 -0
  247. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_preset_support.py +0 -0
  248. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_pricing.py +0 -0
  249. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_project_dirs.py +0 -0
  250. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_prompt_enrichment.py +0 -0
  251. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_reply_summary.py +0 -0
  252. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_self_healing.py +0 -0
  253. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_selfheal_heal.py +0 -0
  254. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_selfheal_health.py +0 -0
  255. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_server_init.py +0 -0
  256. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_server_pure.py +0 -0
  257. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_session_history.py +0 -0
  258. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_settings.py +0 -0
  259. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_skills_select.py +0 -0
  260. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_speech_synth_pure.py +0 -0
  261. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_task_split.py +0 -0
  262. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_team_concurrency.py +0 -0
  263. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_team_config.py +0 -0
  264. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_team_engine.py +0 -0
  265. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_token_counter.py +0 -0
  266. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_tts_voices.py +0 -0
  267. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_usage_billing.py +0 -0
  268. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_webui_auth_cookie.py +0 -0
  269. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_webui_pure_fns.py +0 -0
  270. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_webui_pure_fns2.py +0 -0
  271. {tagword_codeagent-1.2.0 → tagword_codeagent-1.2.1}/tests/test_write_env.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tagword-codeagent
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Autonomous AI coding agent driven by Markdown config — DeepSeek-ready, CLI + Web UI, 45+ tools, self-hosted
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/tagword/codeagent
@@ -223,9 +223,17 @@ def get_pending_all(
223
223
 
224
224
  设计:todo 反映"Agent 自己记的待办",task.md 反映"项目计划"。
225
225
  两者都为空才算真正完成。
226
+
227
+ 安全约束:本函数是 chat_turn 续跑判定的入口,一旦抛异常会被
228
+ ``except Exception: logger.debug(...)`` 静默吞掉 → Agent 误判
229
+ "无未完成" 而停止(静默停止的隐形来源)。故自身兜底所有异常。
226
230
  """
227
- a = get_pending_todos(agent_id, project_id, session_id)
228
- b = get_pending_plan(agent_id, project_id)
231
+ try:
232
+ a = get_pending_todos(agent_id, project_id, session_id)
233
+ b = get_pending_plan(agent_id, project_id)
234
+ except Exception as e: # noqa: BLE001
235
+ logger.debug("get_pending_all failed (conservative empty): %s", e)
236
+ return PendingSummary(error=str(e))
229
237
  if a.error and b.error:
230
238
  return PendingSummary(error=a.error)
231
239
  if not a.has_pending and not b.has_pending:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tagword-codeagent"
7
- version = "1.2.0"
7
+ version = "1.2.1"
8
8
  description = "Autonomous AI coding agent driven by Markdown config — DeepSeek-ready, CLI + Web UI, 45+ tools, self-hosted"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tagword-codeagent
3
- Version: 1.2.0
3
+ Version: 1.2.1
4
4
  Summary: Autonomous AI coding agent driven by Markdown config — DeepSeek-ready, CLI + Web UI, 45+ tools, self-hosted
5
5
  License: MIT
6
6
  Project-URL: Homepage, https://github.com/tagword/codeagent
@@ -218,6 +218,7 @@ tests/test_attachments.py
218
218
  tests/test_auth_pure_fns.py
219
219
  tests/test_auth_routes.py
220
220
  tests/test_auto_continue.py
221
+ tests/test_auto_continue_wiring.py
221
222
  tests/test_cli_chat_project_id.py
222
223
  tests/test_compact_state.py
223
224
  tests/test_default_presets.py
@@ -0,0 +1,127 @@
1
+ """auto_continue 接线层测试(chat_turn)—— 补上纯函数测试覆盖不到的关键链路。
2
+
3
+ 为什么需要(真实静默停止风险)
4
+ --------------------------------
5
+ ``tests/test_auto_continue.py`` 只测 ``auto_continue.py`` 的纯函数(判断
6
+ "该不该续"),完全没测 ``chat_turn.py`` 里的**接线**。而"轮数用尽后
7
+ Agent 静默停止"这类 bug 恰恰只出在接线处:
8
+
9
+ 1. 开关关(``_ac_on=False``)→ 整个续跑循环被跳过,24 轮用尽即停止
10
+ 2. ``stopped_reason`` 字段名对不上 → 轮数用尽分支进不去
11
+ 3. nudge 消息没真正进入下一段 LLM 上下文 → 续跑了但模型不知道该干什么
12
+ 4. pending 查询抛异常 → 被静默吞掉,Agent 误判"无未完成"而停下
13
+
14
+ 本文件锁定与 seed-kernel 的契约(字段名 / 注入点),防上游改名导致静默失效。
15
+ """
16
+
17
+ from __future__ import annotations
18
+
19
+ import inspect
20
+ from datetime import datetime, timedelta
21
+
22
+ import codeagent.server.auto_continue as ac
23
+ from codeagent.server import chat_turn as ct
24
+
25
+
26
+ def _source() -> str:
27
+ return inspect.getsource(ct.run_chat_turn)
28
+
29
+
30
+ # ────────────────────────── 与 seed-kernel 的契约 ──────────────────────────
31
+
32
+
33
+ def test_stop_reason_field_contract_with_seed_kernel():
34
+ """stopped_reason 字段名与 seed-kernel 保持一致。
35
+
36
+ chat_turn 用 `_seg_meta.get("stopped_reason")` 判断轮数是否用尽。若上游
37
+ 改名,`get` 静默返回 None → 续跑分支永不触发,Agent 在轮数用尽时静默停止。
38
+ """
39
+ from seed.core.agent_runtime import run_llm_tool_loop
40
+
41
+ src = inspect.getsource(run_llm_tool_loop)
42
+ assert 'loop_meta["stopped_reason"] = "max_tool_rounds"' in src, (
43
+ "seed-kernel 不再写 loop_meta['stopped_reason']='max_tool_rounds';"
44
+ "chat_turn 的轮数用尽续跑分支会静默失效"
45
+ )
46
+ assert 'loop_meta["stopped_reason"] = "cancelled"' in src
47
+
48
+
49
+ def test_nudge_injected_into_api_msgs_not_only_filtered():
50
+ """nudge 必须被 append 进 api_msgs 供下一段 LLM 消费。
51
+
52
+ 持久化路径把 nudge 过滤掉是对的(不污染历史),但若没有回填 api_msgs,
53
+ 续跑就是空转 —— 模型看不到任何"继续"的指令。
54
+ """
55
+ src = _source()
56
+ assert '"_auto_continue_nudge": True' in src, "nudge 标记丢失"
57
+ assert "api_msgs.append" in src, "nudge 未注入 api_msgs"
58
+ assert "_auto_continue_nudge" in src, "持久化过滤逻辑丢失了 nudge 识别"
59
+
60
+
61
+ def test_pending_check_runs_even_when_agent_thinks_done():
62
+ """Agent 自认为完成时也要查 pending —— 否则「做完一个 Wave 就停」。"""
63
+ src = _source()
64
+ assert 'if _stop_reason != "max_tool_rounds"' in src
65
+ assert "get_pending_all" in src
66
+
67
+
68
+ def test_segment_hard_limit_enforced():
69
+ """分段上限在两处生效(进入循环前 + 递增后),防失控。"""
70
+ src = _source()
71
+ assert src.count("_max_seg") >= 4, "分段上限检查点被削减"
72
+ assert "while _segment < _max_seg" in src
73
+
74
+
75
+ # ────────────────────────── 续跑判定逻辑 ──────────────────────────
76
+
77
+
78
+ def test_should_continue_false_at_max_segments():
79
+ """segments_used 达上限 → 不再续跑(防失控,硬约束)。"""
80
+ ok, reason = ac.should_continue("agent0", "proj", "", segments_used=4, max_segments=4)
81
+ assert ok is False
82
+ assert "上限" in reason
83
+
84
+
85
+ def test_pending_query_error_is_recorded_and_conservative(monkeypatch):
86
+ """pending 查询抛异常 → 保守停止(不无限跑),但错误必须被记录可观测。
87
+
88
+ 这条防的是 chat_turn 里的静默吞异常:
89
+ except Exception: logger.debug(...) ← 异常无痕,Agent 误判"无未完成"
90
+ """
91
+
92
+ def boom(*a, **k):
93
+ raise RuntimeError("db locked")
94
+
95
+ monkeypatch.setattr(ac, "get_pending_todos", boom)
96
+ monkeypatch.setattr(ac, "get_pending_plan", boom)
97
+ summary = ac.get_pending_all("agent0", "proj")
98
+ assert summary.error, "异常被静默吞掉,无法观测"
99
+ assert not summary.has_pending
100
+
101
+ ok, reason = ac.should_continue("agent0", "proj")
102
+ assert ok is False
103
+ assert "保守" in reason
104
+
105
+
106
+ def test_stale_pending_does_not_block_stop(monkeypatch):
107
+ """陈旧 pending(>24h)不阻止停止 —— 防 Agent 忘记更新 todo 导致永不停。"""
108
+ monkeypatch.setattr(
109
+ ac, "get_pending_all", lambda *a, **k: ac.PendingSummary(count=0, items=[])
110
+ )
111
+ ok, reason = ac.should_continue("agent0", "proj")
112
+ assert ok is False
113
+ assert "无未完成" in reason
114
+
115
+ old = (datetime.now() - timedelta(hours=30)).isoformat()
116
+ assert ac._is_stale({"updated_at": old}) is True
117
+ assert ac._is_stale({"updated_at": datetime.now().isoformat()}) is False
118
+
119
+
120
+ def test_switch_default_is_off():
121
+ """记录现状:开关默认关闭 —— 未显式配置时轮数用尽即停止。"""
122
+ import os
123
+
124
+ from codeagent.core.env import CHAT_AUTO_CONTINUE_ON_LIMIT, env_truthy
125
+
126
+ os.environ.pop(CHAT_AUTO_CONTINUE_ON_LIMIT, None)
127
+ assert env_truthy(CHAT_AUTO_CONTINUE_ON_LIMIT, default="0") is False