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.
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/PKG-INFO +1 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/__init__.py +1 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/app_factory.py +9 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/webui_api_app.py +10 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-tree-menus.js +2 -2
- tagword_codeagent-2.2.16/codeagent/web/static/04-components-p9.css +294 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05b-session-list.js +2 -2
- tagword_codeagent-2.2.16/codeagent/web/static/13d-file-browser.js +354 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/14-activity-bar.js +24 -47
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/body.html +13 -12
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/pyproject.toml +1 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/PKG-INFO +1 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/SOURCES.txt +1 -0
- tagword_codeagent-2.2.15/codeagent/web/static/04-components-p9.css +0 -1
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/LICENSE +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/README.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/__main__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/entrypoint.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/cli/main.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/attachments.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/audio_models.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/bootstrap.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/default_presets.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/env.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/folder_picker.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/image_understanding.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/models.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/paths.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/pricing.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/process_ports.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/seed_bridge.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/settings.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/speech_synth.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/team_config.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/team_manager.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/token_counter.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/tts_voices.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/usage_billing.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/core/vision_models.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/memory/diary.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/README.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/agent.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/identity.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/memory.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/skills.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/soul.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/tools.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/persona_defaults/user.md +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/agent_context.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/agent_runtime.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/compact_prompt.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/compact_state.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/llm_worker.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/orchestrator.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/prompt_enrichment.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/session_manager.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/task_split.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/turn_loop.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/runtime/worker.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/attachment_api.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/hub.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/icon.png +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/self_healing.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/team_engine.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/server/tts_api.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/skills/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/skills/select.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/tools/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/tools/agent_tools.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__init__.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/__init__.cpython-313.pyc +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/app.cpython-313.pyc +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/__pycache__/auth_impl.cpython-313.pyc +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/auth_impl.py +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-marked.min.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-mermaid.min.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-purify.min.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-storage.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/00-utils.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01-theme.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01a-scroll.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01b-think.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-identity.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-thinking.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-tree.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-utilities.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-vision-model.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01d-image-gen-model.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01e-audio-model.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01f-compose-ui.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01g-tts-settings.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01h-music-model.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01i-model-stack.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01j-video-gen-model.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01k-model-stack-bootstrap.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01k-model-stack-state.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01q-inflight.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/02-reset.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/02-session-ui.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03-layout-p1.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03-layout-p2.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03a-links-stream.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03b-stream-text.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03c-render-bubble.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03d-agent-bubble.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03e-tool-trace.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03f-timeline.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/03g-bubble-tts.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p1.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p2b.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p3.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p4.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p5.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p6.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p7.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-components-p8.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-ws-connect.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/04-ws-helpers.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p1.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p2.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05-chat-p3.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05a-session-history.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05c-dialog.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05d-project-create.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05e-project-remote.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06-chat.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06-utilities.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06b-attachments.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/06c-camera.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/07-activity-bar.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09-git-p1.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09-git-p2.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09a-init-bind.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09b-panel-toggle.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09c-api-refresh.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09d-status-log.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09e-commit.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/09f-remote.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11a-cron-parse.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11b-cron-panel.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11c-cron-card.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11d-cron-form.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11e-env-config.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-a-state.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-b-form.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11f-env-llm-c-board.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11g-env-paths-git.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-a-state.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-b-form.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/11h-env-mcp-c-board.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/12-plugins.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13a-skills.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13a-todo-utils.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13b-todo-fetch.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13b-tools.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/13c-todo-crud.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/15-plans.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/15-plans.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/16-mobile.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/16-mobile.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/17-preset-ux.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/18-agent-mgr.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/18-agent-mgr.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/24-health-dashboard.js +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/99-brand-polish.css +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_form.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_head.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_tail.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/setup/setup_test.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/web_login.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/webui.html +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/setup.cfg +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/dependency_links.txt +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/entry_points.txt +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/requires.txt +0 -0
- {tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/tagword_codeagent.egg-info/top_level.txt +0 -0
|
@@ -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()
|
{tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/01c-session-tree-menus.js
RENAMED
|
@@ -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); } }
|
{tagword_codeagent-2.2.15 → tagword_codeagent-2.2.16}/codeagent/web/static/05b-session-list.js
RENAMED
|
@@ -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);
|