tagword-codeagent 2.2.15__tar.gz → 2.2.16__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 (180) hide show
  1. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/PKG-INFO +1 -1
  2. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/__init__.py +1 -1
  3. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/app_factory.py +9 -0
  4. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/webui_api_app.py +10 -1
  5. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-tree-menus.js +2 -2
  6. tagword_codeagent-2.2.16/codeagent/web/static/04-components-p9.css +294 -0
  7. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05b-session-list.js +2 -2
  8. tagword_codeagent-2.2.16/codeagent/web/static/13d-file-browser.js +354 -0
  9. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/14-activity-bar.js +24 -47
  10. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/body.html +13 -12
  11. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/pyproject.toml +1 -1
  12. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/PKG-INFO +1 -1
  13. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/SOURCES.txt +1 -0
  14. tagword_codeagent-2.2.15/codeagent/web/static/04-components-p9.css +0 -1
  15. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/LICENSE +0 -0
  16. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/README.md +0 -0
  17. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/__main__.py +0 -0
  18. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/__init__.py +0 -0
  19. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/entrypoint.py +0 -0
  20. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/main.py +0 -0
  21. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/__init__.py +0 -0
  22. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/attachments.py +0 -0
  23. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/audio_models.py +0 -0
  24. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/bootstrap.py +0 -0
  25. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/default_presets.py +0 -0
  26. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/env.py +0 -0
  27. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/folder_picker.py +0 -0
  28. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/image_understanding.py +0 -0
  29. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/models.py +0 -0
  30. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/paths.py +0 -0
  31. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/pricing.py +0 -0
  32. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/process_ports.py +0 -0
  33. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/seed_bridge.py +0 -0
  34. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/settings.py +0 -0
  35. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/speech_synth.py +0 -0
  36. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/team_config.py +0 -0
  37. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/team_manager.py +0 -0
  38. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/token_counter.py +0 -0
  39. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/tts_voices.py +0 -0
  40. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/usage_billing.py +0 -0
  41. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/vision_models.py +0 -0
  42. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/memory/diary.py +0 -0
  43. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/README.md +0 -0
  44. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/agent.md +0 -0
  45. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/identity.md +0 -0
  46. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/memory.md +0 -0
  47. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/skills.md +0 -0
  48. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/soul.md +0 -0
  49. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/tools.md +0 -0
  50. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/user.md +0 -0
  51. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/__init__.py +0 -0
  52. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/agent_context.py +0 -0
  53. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/agent_runtime.py +0 -0
  54. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/compact_prompt.py +0 -0
  55. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/compact_state.py +0 -0
  56. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/llm_worker.py +0 -0
  57. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/orchestrator.py +0 -0
  58. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/prompt_enrichment.py +0 -0
  59. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/session_manager.py +0 -0
  60. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/task_split.py +0 -0
  61. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/turn_loop.py +0 -0
  62. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/worker.py +0 -0
  63. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/__init__.py +0 -0
  64. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/attachment_api.py +0 -0
  65. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/hub.py +0 -0
  66. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/icon.png +0 -0
  67. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/self_healing.py +0 -0
  68. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/team_engine.py +0 -0
  69. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/tts_api.py +0 -0
  70. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/skills/__init__.py +0 -0
  71. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/skills/select.py +0 -0
  72. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/tools/__init__.py +0 -0
  73. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/tools/agent_tools.py +0 -0
  74. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__init__.py +0 -0
  75. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/__init__.cpython-313.pyc +0 -0
  76. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/app.cpython-313.pyc +0 -0
  77. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/auth_impl.cpython-313.pyc +0 -0
  78. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/auth_impl.py +0 -0
  79. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-marked.min.js +0 -0
  80. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-mermaid.min.js +0 -0
  81. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-purify.min.js +0 -0
  82. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-storage.js +0 -0
  83. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-utils.js +0 -0
  84. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01-theme.css +0 -0
  85. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01a-scroll.js +0 -0
  86. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01b-think.js +0 -0
  87. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-identity.js +0 -0
  88. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-thinking.js +0 -0
  89. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-tree.js +0 -0
  90. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-utilities.js +0 -0
  91. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-vision-model.js +0 -0
  92. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01d-image-gen-model.js +0 -0
  93. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01e-audio-model.js +0 -0
  94. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01f-compose-ui.js +0 -0
  95. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01g-tts-settings.js +0 -0
  96. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01h-music-model.js +0 -0
  97. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01i-model-stack.js +0 -0
  98. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01j-video-gen-model.js +0 -0
  99. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01k-model-stack-bootstrap.js +0 -0
  100. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01k-model-stack-state.js +0 -0
  101. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01q-inflight.js +0 -0
  102. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/02-reset.css +0 -0
  103. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/02-session-ui.js +0 -0
  104. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03-layout-p1.css +0 -0
  105. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03-layout-p2.css +0 -0
  106. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03a-links-stream.js +0 -0
  107. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03b-stream-text.js +0 -0
  108. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03c-render-bubble.js +0 -0
  109. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03d-agent-bubble.js +0 -0
  110. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03e-tool-trace.js +0 -0
  111. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03f-timeline.js +0 -0
  112. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03g-bubble-tts.js +0 -0
  113. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p1.css +0 -0
  114. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p2b.css +0 -0
  115. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p3.css +0 -0
  116. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p4.css +0 -0
  117. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p5.css +0 -0
  118. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p6.css +0 -0
  119. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p7.css +0 -0
  120. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p8.css +0 -0
  121. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-ws-connect.js +0 -0
  122. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-ws-helpers.js +0 -0
  123. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p1.css +0 -0
  124. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p2.css +0 -0
  125. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p3.css +0 -0
  126. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05a-session-history.js +0 -0
  127. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05c-dialog.js +0 -0
  128. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05d-project-create.js +0 -0
  129. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05e-project-remote.js +0 -0
  130. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06-chat.js +0 -0
  131. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06-utilities.css +0 -0
  132. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06b-attachments.js +0 -0
  133. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06c-camera.js +0 -0
  134. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/07-activity-bar.css +0 -0
  135. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09-git-p1.css +0 -0
  136. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09-git-p2.css +0 -0
  137. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09a-init-bind.js +0 -0
  138. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09b-panel-toggle.js +0 -0
  139. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09c-api-refresh.js +0 -0
  140. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09d-status-log.js +0 -0
  141. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09e-commit.js +0 -0
  142. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09f-remote.js +0 -0
  143. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11a-cron-parse.js +0 -0
  144. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11b-cron-panel.js +0 -0
  145. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11c-cron-card.js +0 -0
  146. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11d-cron-form.js +0 -0
  147. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11e-env-config.js +0 -0
  148. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-a-state.js +0 -0
  149. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-b-form.js +0 -0
  150. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-c-board.js +0 -0
  151. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11g-env-paths-git.js +0 -0
  152. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-a-state.js +0 -0
  153. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-b-form.js +0 -0
  154. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-c-board.js +0 -0
  155. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/12-plugins.js +0 -0
  156. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13a-skills.js +0 -0
  157. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13a-todo-utils.js +0 -0
  158. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13b-todo-fetch.js +0 -0
  159. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13b-tools.js +0 -0
  160. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13c-todo-crud.js +0 -0
  161. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/15-plans.css +0 -0
  162. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/15-plans.js +0 -0
  163. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/16-mobile.css +0 -0
  164. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/16-mobile.js +0 -0
  165. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/17-preset-ux.css +0 -0
  166. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/18-agent-mgr.css +0 -0
  167. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/18-agent-mgr.js +0 -0
  168. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/24-health-dashboard.js +0 -0
  169. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/99-brand-polish.css +0 -0
  170. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_form.html +0 -0
  171. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_head.html +0 -0
  172. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_tail.html +0 -0
  173. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_test.html +0 -0
  174. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/web_login.html +0 -0
  175. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/webui.html +0 -0
  176. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/setup.cfg +0 -0
  177. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/dependency_links.txt +0 -0
  178. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/entry_points.txt +0 -0
  179. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/requires.txt +0 -0
  180. {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tagword-codeagent
3
- Version: 2.2.15
3
+ Version: 2.2.16
4
4
  Summary: LLM agent with Markdown config, tool loop, Web UI, sessions, memory, and webhooks
5
5
  License: MIT
6
6
  Requires-Python: >=3.9
@@ -6,5 +6,5 @@ Architecture:
6
6
  - codeagent/ : Personality layer (CLI, server, web UI, skills, per-agent config)
7
7
  """
8
8
 
9
- __version__ = "2.2.15"
9
+ __version__ = "2.2.16"
10
10
 
@@ -734,6 +734,15 @@ def create_app():
734
734
  }), main_loop
735
735
  )
736
736
 
737
+ # ── 移除流式占位符,防止纯文本回复路径(无 tool rounds)重复落盘 ──
738
+ if _stream_placeholder_created[0]:
739
+ for _pi in range(len(chat_sess.messages) - 1, -1, -1):
740
+ _pm = chat_sess.messages[_pi]
741
+ if isinstance(_pm, dict) and _pm.get("_streaming"):
742
+ del chat_sess.messages[_pi]
743
+ break
744
+ _stream_placeholder_created[0] = False
745
+
737
746
  tail = merge_llm_tail_into_full(chat_sess.messages, api_msgs, n_before_ref[0])
738
747
  _model_name = getattr(llm, "model", "")
739
748
  _ctx: dict[str, Any] = {}
@@ -819,8 +819,10 @@ def build_webui_api_app(project_root: Path) -> Starlette:
819
819
  delete_project,
820
820
  get_project,
821
821
  list_project_plan_files,
822
+ list_project_sessions_meta,
822
823
  list_projects,
823
824
  rename_project,
825
+ unregister_session,
824
826
  update_project_path,
825
827
  )
826
828
  from seed.core.proj_todos import delete_todo, list_todos, update_todo
@@ -1903,6 +1905,13 @@ def build_webui_api_app(project_root: Path) -> Starlette:
1903
1905
  ok = True
1904
1906
  except OSError:
1905
1907
  ok = False
1908
+ # fallback 删除了文件但可能未清理 registry,补一个全项目扫描清理
1909
+ if ok and sid:
1910
+ for proj in list_projects(aid):
1911
+ proj_pid = str(proj.get("id") or "").strip()
1912
+ if proj_pid and sid in list_project_sessions_meta(aid, proj_pid):
1913
+ unregister_session(aid, proj_pid, sid)
1914
+ break
1906
1915
  if not ok:
1907
1916
  return JSONResponse({"detail": "delete failed"}, status_code=400)
1908
1917
  SESSIONS.pop(_memkey(aid, sid), None)
@@ -2502,7 +2511,7 @@ def build_webui_api_app(project_root: Path) -> Starlette:
2502
2511
  continue
2503
2512
  except OSError:
2504
2513
  pass
2505
- return JSONResponse({"files": items})
2514
+ return JSONResponse({"files": items, "base_path": str(base)})
2506
2515
 
2507
2516
  async def api_files_read(request: Request) -> JSONResponse:
2508
2517
  pid = (request.query_params.get("project_id") or "").strip()
@@ -222,7 +222,7 @@ function showSessionContextMenu(e, sid, pid) {
222
222
  if (!confirm('确定归档此会话?文件将移到 sessions/archived/。')) return;
223
223
  fetch('/api/ui/session/archive', {
224
224
  method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin',
225
- body: JSON.stringify({ session_id: sid, agent_id: agentId })
225
+ body: JSON.stringify({ session_id: sid, agent_id: agentId, project_id: pid || '' })
226
226
  }).then(function(r) {
227
227
  if (!r.ok) alert('归档失败');
228
228
  else if (typeof refreshSessionsUnderProject === 'function') refreshSessionsUnderProject(pid);
@@ -326,7 +326,7 @@ function deleteSession(sid, pid) {
326
326
  method: 'POST',
327
327
  headers: {'Content-Type': 'application/json'},
328
328
  credentials: 'same-origin',
329
- body: JSON.stringify({ session_id: sid, agent_id: agentId })
329
+ body: JSON.stringify({ session_id: sid, agent_id: agentId, project_id: pid || '' })
330
330
  }).then(function(r) {
331
331
  if (r.ok) {
332
332
  if (sessionId === sid) {
@@ -0,0 +1,294 @@
1
+ /* ---- Group header ---- */.todo-group-header { display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-4) var(--sp-1); cursor: default;}.todo-group-badge { display: inline-flex; align-items: center; padding: 1px 7px; border-radius: var(--r-full); font-size: 10px; font-weight: 600; font-family: var(--font-mono, monospace); letter-spacing: 0.02em; background: var(--gb-bg); color: var(--gb-text); border: 1px solid var(--gb-border); flex-shrink: 0; line-height: 1.6;}.todo-group-meta { display: flex; align-items: center; gap: var(--sp-2); font-size: 10.5px; color: var(--text-muted); overflow: hidden;}.todo-group-count { flex-shrink: 0;}.todo-group-time { overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}/* ---- Todo item (v2: two-row layout) ---- */.todo-item { display: flex; flex-direction: column; padding: var(--sp-1) var(--sp-4); transition: background 0.1s ease; cursor: default; gap: 1px;}.todo-item:hover { background: var(--bg-hover);}/* Main row: checkbox + content + delete */.todo-item__main { display: flex; align-items: center; gap: var(--sp-2); min-height: 26px;}.todo-item__checkbox { flex-shrink: 0; width: 14px; height: 14px; margin: 0; accent-color: var(--accent, #2563eb); cursor: pointer;}.todo-item__content { flex: 1; min-width: 0; font-size: 12.5px; color: var(--text); line-height: 1.4; word-break: break-word; overflow-wrap: break-word; white-space: pre-wrap;}.todo-item__content--done { text-decoration: line-through; color: var(--text-muted);}/* Meta row: time + status + session badge */.todo-item__meta { display: flex; align-items: center; gap: var(--sp-2); padding-left: calc(14px + var(--sp-2)); min-height: 18px;}.todo-item__time { flex-shrink: 0; font-size: 10px; color: var(--text-subtle); white-space: nowrap;}.todo-item__status { flex-shrink: 0; display: inline-flex; align-items: center; padding: 0 6px; border-radius: var(--r-xs, 3px); font-size: 10px; font-weight: 500; line-height: 1.6;}.todo-item__status--pending { background: var(--accent-soft, #e8f0fe); color: var(--accent, #2563eb);}.todo-item__status--in_progress { background: #fff3e0; color: #e65100;}.todo-item__status--completed { background: #e8f5e9; color: #2e7d32;}.todo-item__status--cancelled { background: #f5f5f5; color: #9e9e9e;}.todo-item__session { flex-shrink: 0; display: inline-flex; align-items: center; padding: 0 5px; border-radius: var(--r-xs, 3px); font-size: 9px; font-weight: 600; font-family: var(--font-mono, monospace); line-height: 1.6; background: var(--s-bg); color: var(--s-text); border: 1px solid var(--s-border); cursor: default;}/* Delete button -- appeared on hover */.todo-item__delete { flex-shrink: 0; width: 20px; height: 20px; display: inline-flex; align-items: center; justify-content: center; border: none; background: transparent; color: var(--text-subtle); font-size: 15px; line-height: 1; cursor: pointer; border-radius: var(--r-xs, 3px); opacity: 0; transition: opacity 0.12s, background 0.12s, color 0.12s;}.todo-item:hover .todo-item__delete { opacity: 1;}.todo-item__delete:hover { background: var(--bg-hover); color: var(--text-danger, #e53935);}
2
+ /* ============ File editor (workspace page) ============ */
3
+ .file-editor-layout {
4
+ height: 100%;
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+ .file-editor {
9
+ flex: 1;
10
+ min-height: 0;
11
+ display: flex;
12
+ flex-direction: column;
13
+ background: var(--bg);
14
+ }
15
+ .file-editor__tabs {
16
+ display: flex;
17
+ align-items: stretch;
18
+ gap: 0;
19
+ min-height: 36px;
20
+ background: var(--bg-subtle);
21
+ border-bottom: 1px solid var(--border);
22
+ overflow-x: auto;
23
+ scrollbar-width: none;
24
+ flex-shrink: 0;
25
+ }
26
+ .file-editor__tabs::-webkit-scrollbar { display: none; }
27
+ .file-editor__tabs-empty {
28
+ display: flex;
29
+ align-items: center;
30
+ padding: 0 var(--sp-4);
31
+ font-size: 12px;
32
+ color: var(--text-muted);
33
+ width: 100%;
34
+ }
35
+ .file-editor__tab {
36
+ display: flex;
37
+ align-items: center;
38
+ gap: var(--sp-1);
39
+ padding: 0 var(--sp-3);
40
+ border-right: 1px solid var(--border);
41
+ background: transparent;
42
+ cursor: pointer;
43
+ font-size: 12px;
44
+ color: var(--text-muted);
45
+ transition: background 0.1s, color 0.1s;
46
+ white-space: nowrap;
47
+ user-select: none;
48
+ min-width: 0;
49
+ }
50
+ .file-editor__tab:hover {
51
+ background: var(--bg-hover);
52
+ color: var(--text);
53
+ }
54
+ .file-editor__tab.active {
55
+ background: var(--bg-panel);
56
+ color: var(--text);
57
+ box-shadow: inset 0 -1.5px 0 var(--accent);
58
+ }
59
+ .file-editor__tab-lang {
60
+ font-size: 9px;
61
+ padding: 0 5px;
62
+ border-radius: var(--r-xs);
63
+ background: var(--accent-soft);
64
+ color: var(--accent);
65
+ font-weight: 600;
66
+ flex-shrink: 0;
67
+ }
68
+ .file-editor__tab-name {
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ white-space: nowrap;
72
+ }
73
+ .file-editor__tab-close {
74
+ flex-shrink: 0;
75
+ width: 18px; height: 18px;
76
+ display: flex; align-items: center; justify-content: center;
77
+ border: none; border-radius: 3px;
78
+ background: transparent; color: var(--text-subtle);
79
+ cursor: pointer; font-size: 10px; line-height: 1;
80
+ margin-left: 2px;
81
+ transition: background 0.1s, color 0.1s;
82
+ }
83
+ .file-editor__tab-close:hover {
84
+ background: var(--bg-hover);
85
+ color: var(--text);
86
+ }
87
+ .file-editor__container {
88
+ flex: 1;
89
+ min-height: 0;
90
+ overflow: auto;
91
+ background: var(--bg-panel);
92
+ scrollbar-width: thin;
93
+ scrollbar-color: var(--border-strong) transparent;
94
+ }
95
+ .file-editor__container::-webkit-scrollbar { width: 8px; }
96
+ .file-editor__container::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 4px; }
97
+ .file-editor__welcome {
98
+ display: flex;
99
+ flex-direction: column;
100
+ align-items: center;
101
+ justify-content: center;
102
+ height: 100%;
103
+ gap: var(--sp-2);
104
+ color: var(--text-muted);
105
+ }
106
+ .file-editor__welcome h3 {
107
+ margin: 0;
108
+ font-size: 16px;
109
+ font-weight: 600;
110
+ color: var(--text-secondary);
111
+ }
112
+ .file-editor__welcome p {
113
+ margin: 0;
114
+ font-size: 13px;
115
+ color: var(--text-subtle);
116
+ }
117
+ .file-editor__loading {
118
+ display: flex;
119
+ align-items: center;
120
+ justify-content: center;
121
+ height: 100%;
122
+ font-size: 12px;
123
+ color: var(--text-muted);
124
+ }
125
+ .file-editor__error {
126
+ display: flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ height: 100%;
130
+ font-size: 12px;
131
+ color: var(--danger);
132
+ padding: var(--sp-4);
133
+ }
134
+ .file-editor__code {
135
+ margin: 0;
136
+ padding: var(--sp-4);
137
+ font-family: var(--font-mono);
138
+ font-size: 13px;
139
+ line-height: 1.6;
140
+ color: var(--text);
141
+ white-space: pre-wrap;
142
+ word-break: break-all;
143
+ }
144
+ .file-editor__status {
145
+ flex-shrink: 0;
146
+ height: 28px;
147
+ display: flex;
148
+ align-items: center;
149
+ padding: 0 var(--sp-4);
150
+ font-size: 11px;
151
+ color: var(--text-muted);
152
+ font-family: var(--font-mono);
153
+ border-top: 1px solid var(--border);
154
+ background: var(--bg-subtle);
155
+ }
156
+
157
+ /* ============ File tree (sidebar) ============ */
158
+ .file-tree {
159
+ flex: 1;
160
+ min-height: 0;
161
+ overflow-y: auto;
162
+ overflow-x: hidden;
163
+ scrollbar-width: thin;
164
+ scrollbar-color: var(--border-strong) transparent;
165
+ }
166
+ .file-tree::-webkit-scrollbar { width: 6px; }
167
+ .file-tree::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 3px; }
168
+ .file-tree__loading {
169
+ display: flex;
170
+ align-items: center;
171
+ justify-content: center;
172
+ gap: var(--sp-2);
173
+ height: 80px;
174
+ font-size: 12px;
175
+ color: var(--text-muted);
176
+ }
177
+
178
+ /* ============ File browser (tree items inside sidebar) ============ */
179
+ .file-browser { font-size: 13px; user-select: none; }
180
+ .file-browser__bread {
181
+ display: flex;
182
+ align-items: center;
183
+ flex-wrap: wrap;
184
+ gap: 2px;
185
+ padding: var(--sp-2) var(--sp-4) var(--sp-1);
186
+ font-size: 11px;
187
+ color: var(--text-muted);
188
+ border-bottom: 1px solid var(--border);
189
+ margin-bottom: var(--sp-1);
190
+ }
191
+ .file-browser__bread-sep { color: var(--text-subtle); padding: 0 2px; }
192
+ .file-browser__bread-seg {
193
+ cursor: pointer;
194
+ color: var(--accent);
195
+ transition: color 0.1s;
196
+ white-space: nowrap;
197
+ max-width: 120px;
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ }
201
+ .file-browser__bread-seg:hover { color: var(--accent-hover); }
202
+ .file-browser__bread-seg:last-child {
203
+ color: var(--text);
204
+ cursor: default;
205
+ font-weight: 500;
206
+ }
207
+ .file-browser__list { padding: 0; }
208
+ .file-browser__empty {
209
+ display: flex;
210
+ align-items: center;
211
+ justify-content: center;
212
+ height: 60px;
213
+ font-size: 12px;
214
+ color: var(--text-subtle);
215
+ }
216
+ .file-browser__entry {
217
+ display: flex;
218
+ align-items: center;
219
+ gap: var(--sp-2);
220
+ padding: var(--sp-1) var(--sp-4);
221
+ cursor: pointer;
222
+ transition: background 0.08s;
223
+ border-radius: 0;
224
+ position: relative;
225
+ }
226
+ .file-browser__entry:hover { background: var(--bg-hover); }
227
+ .file-browser__entry-icon {
228
+ flex-shrink: 0;
229
+ width: 18px;
230
+ height: 18px;
231
+ display: flex;
232
+ align-items: center;
233
+ justify-content: center;
234
+ color: var(--text-muted);
235
+ }
236
+ .file-browser__entry-icon--dir { color: var(--accent); opacity: 0.7; }
237
+ .file-browser__entry-name {
238
+ flex: 1;
239
+ min-width: 0;
240
+ overflow: hidden;
241
+ text-overflow: ellipsis;
242
+ white-space: nowrap;
243
+ font-size: 12.5px;
244
+ color: var(--text);
245
+ }
246
+ .file-browser__entry-size {
247
+ flex-shrink: 0;
248
+ font-size: 10px;
249
+ color: var(--text-subtle);
250
+ font-family: var(--font-mono, monospace);
251
+ margin-left: auto;
252
+ }
253
+ .file-browser__error {
254
+ display: flex;
255
+ flex-direction: column;
256
+ align-items: center;
257
+ justify-content: center;
258
+ gap: var(--sp-2);
259
+ height: 80px;
260
+ font-size: 12px;
261
+ color: var(--danger);
262
+ text-align: center;
263
+ padding: var(--sp-3);
264
+ }
265
+ .file-browser__reload-btn {
266
+ padding: 4px 12px;
267
+ font-size: 11px;
268
+ border: 1px solid var(--border);
269
+ border-radius: var(--r-sm);
270
+ background: var(--bg);
271
+ color: var(--text);
272
+ cursor: pointer;
273
+ }
274
+ .file-browser__reload-btn:hover { background: var(--bg-hover); }
275
+ .file-browser__no-project {
276
+ display: flex;
277
+ flex-direction: column;
278
+ align-items: center;
279
+ justify-content: center;
280
+ gap: var(--sp-1);
281
+ height: 100px;
282
+ font-size: 12px;
283
+ color: var(--text-muted);
284
+ text-align: center;
285
+ }
286
+ .file-browser__spinner {
287
+ display: inline-block;
288
+ width: 14px; height: 14px;
289
+ border: 2px solid var(--border);
290
+ border-top-color: var(--accent);
291
+ border-radius: 50%;
292
+ animation: fb-spin 0.6s linear infinite;
293
+ }
294
+ @keyframes fb-spin { to { transform: rotate(360deg); } }
@@ -47,7 +47,7 @@ function bindSessListOnce() {
47
47
  if (!confirm('确定归档「' + titleHint + '」?文件将移到 sessions/archived/。')) return;
48
48
  const r = await fetch('/api/ui/session/archive', {
49
49
  method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin',
50
- body: JSON.stringify({ session_id: sid, agent_id: agentId })
50
+ body: JSON.stringify({ session_id: sid, agent_id: agentId, project_id: projectId || '' })
51
51
  });
52
52
  const j = await r.json().catch(() => ({}));
53
53
  if (!r.ok) throw new Error(j.detail || r.statusText);
@@ -55,7 +55,7 @@ function bindSessListOnce() {
55
55
  if (!confirm('确定删除「' + titleHint + '」?此操作不可恢复。')) return;
56
56
  const r = await fetch('/api/ui/session/delete', {
57
57
  method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin',
58
- body: JSON.stringify({ session_id: sid, agent_id: agentId })
58
+ body: JSON.stringify({ session_id: sid, agent_id: agentId, project_id: projectId || '' })
59
59
  });
60
60
  const j = await r.json().catch(() => ({}));
61
61
  if (!r.ok) throw new Error(j.detail || r.statusText);