openagentd 1.76.0__tar.gz → 1.76.2__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.
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/skills/oad/release/SKILL.md +15 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/PKG-INFO +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/googlegenai/googlegenai.py +19 -2
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/responses.py +14 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/files.py +11 -1
- openagentd-1.76.2/app/version.txt +1 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/Cargo.lock +3 -3
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/Cargo.toml +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/build.rs +1 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/capabilities/default.json +1 -0
- openagentd-1.76.2/desktop/src-tauri/permissions/autogenerated/reapply_window_chrome.toml +11 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/src/main.rs +117 -39
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/tauri.conf.json +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/features.md +3 -2
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/mobile.md +1 -0
- openagentd-1.76.2/documents/docs/web/performance.md +73 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/todos.md +6 -3
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/workspace-files.md +3 -2
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/Cargo.lock +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/Cargo.toml +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/tauri.conf.json +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/pyproject.toml +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/googlegenai/test_googlegenai.py +49 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_responses_streaming.py +64 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_agent_run.py +5 -81
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_routes_extra.py +51 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/uv.lock +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/package.json +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/CodingWorkspacePanel.filepreview.test.tsx +25 -30
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/DiffView.test.tsx +14 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ReadView.test.tsx +6 -4
- openagentd-1.76.2/web/src/__tests__/components/TeamChatHeader.test.tsx +67 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TeamChatView.session-draft.test.tsx +2 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ToolCall.test.tsx +4 -5
- openagentd-1.76.2/web/src/__tests__/components/performance.memo.test.tsx +202 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/window-title.test.ts +5 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AgentPane.tsx +7 -7
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AgentView.tsx +3 -3
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AssistantTurnFooter.tsx +5 -5
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingFileViewerPanel.tsx +11 -4
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/Sidebar.tsx +13 -9
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/TeamChatHeader.tsx +2 -10
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/index.tsx +10 -6
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToastStack.tsx +5 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TodosPopover.tsx +4 -2
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/DiffView.tsx +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/ReadView.tsx +1 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/WorkspaceFilesPanel.tsx +3 -3
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/index.css +4 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/window-title.ts +23 -2
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/cockpit.tsx +4 -1
- openagentd-1.76.0/app/version.txt +0 -1
- {openagentd-1.76.0 → openagentd-1.76.2}/.env.example +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.gitattributes +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/ISSUE_TEMPLATE/known_issue.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/ISSUE_TEMPLATE/roadmap_item.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/dependabot.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/pull_request_template.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/core.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/publish-homebrew-cask.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/publish-homebrew.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/release-desktop.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/release.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/tauri.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/version-check.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.github/workflows/web.yml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.gitignore +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/commands/oad/debug.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/commands/oad/release.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/skills/oad/commit/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/skills/oad/debug/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/skills/oad/docs/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/skills/oad/frontend-debug/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/snippets/oad/debug.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/snippets/oad/release.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.openagentd/snippets/oad.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.opencode/commands/pr.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.opencode/commands/release.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/.pre-commit-config.yaml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/CODE_OF_CONDUCT.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/CONTRIBUTING.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/LICENSE +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/MIGRATION.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/Makefile +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/NOTICE +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/SECURITY.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/core.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/retry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/streaming.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/tool_dispatch.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/agent_loop/tool_executor.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/artifacts.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_prompts.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/browser-use/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/mcp-installer/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/mcp-installer/mcp_apply.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/plugin-installer/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/self-healing/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/builtin_skills/skill-installer/SKILL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/checkpointer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/drift.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/errors.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/base.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/continuation.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/dynamic_prompt.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/otel.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/session_log.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/stream_publisher.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/streaming.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/summarization.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/telemetry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/title_generation.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/tool_result_offload.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/hooks/workspace_instructions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/loader.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mcp/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mcp/config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mcp/manager.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mcp/oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mcp/tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/hooks/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/hooks/queued_injection.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/hooks/team_inbox.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/hooks/team_prompt.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/mailbox.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/manage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/member.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/team.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/mode/team/tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/multimodal.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/permission.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/plugins/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/plugins/events.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/plugins/loader.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/plugins/role.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/anthropic/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/anthropic/anthropic.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/base.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/bedrock/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/bedrock/bedrock.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/capabilities.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/catalog.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/codex/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/codex/codex.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/codex/oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/codex/usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/USAGE.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/copilot.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/copilot/usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/deepseek/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/deepseek/deepseek.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/deepseek/schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/factory.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/googlegenai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/googlegenai/schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/model_discovery.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/model_metadata.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/model_registry.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/model_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/ollama/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/ollama/ollama.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/compatible.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/compatible_provider.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/completions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/openai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/sanitization.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/openai/schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/plugin_api.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/plugin_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/router9/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/router9/router9.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/streaming.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/unconfigured.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/vertexai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/vertexai/vertexai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/xai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/xai/xai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/zai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/providers/zai/zai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/sandbox.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/sandbox_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/schemas/agent.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/schemas/chat.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/schemas/events.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/state.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tool_id_resolver.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/date.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/_config_watch.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/_ignore.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/edit.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/glob.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/grep.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/handlers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/ls.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/patch.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/read.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/rm.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/filesystem/write.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/schedule.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/shell.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/shell_runtime.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/skill.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/todo.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/builtin/web.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/_metrics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/backends/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/backends/codex.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/backends/googlegenai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/backends/googlegenai_video.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/backends/openai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/image.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/multimodalities/video.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/tools/registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/agent/usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/alembic.ini +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/app.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/deps.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/agents.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/auth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/diagnostics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/health.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/mcp.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/observability.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/quote.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/scheduler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/settings.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/skills.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/snippets.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/_helpers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/chat.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/permissions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/todos.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/routes/team/worktrees.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/agents.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/base.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/chat.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/mcp.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/sessions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/settings.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/skills.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/snippets.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/api/schemas/team.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/__main__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/address.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/auth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/cleanup.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/doctor.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/health.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/init.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/logs.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/migrate.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/restart.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/serve.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/start.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/status.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/stop.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/upgrade.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/commands/version.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/firstrun.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/main.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/net.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/paths.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/pids.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/seed.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/server.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/cli/ui.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/db.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/desktop_auth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/exception_handlers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/jsonl_writer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/logging_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/metrics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/middlewares.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/otel.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/otel_retention.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/paths.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/runtime_settings.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/version.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/core/workspace_init.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/README +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/env.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/script.py.mako +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000001_create_chat_sessions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000002_create_session_messages.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000003_create_scheduled_task.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000004_create_dream_log.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000005_add_session_mode_workspace.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000006_scheduled_task_mode_workspace.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000007_add_chat_session_revert.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000008_add_session_model_settings.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000009_create_memory_processed_sources.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000010_create_coding_workspaces.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000011_add_scheduled_task_max_runs.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000012_drop_dream_and_memory_tables.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/migrations/versions/00000013_add_scheduled_task_slug.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/models/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/models/chat.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/cron.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/models.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/scheduler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/scheduler/utils.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/server.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/_tool_state.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/agent_fs.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/agent_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/artifact_cleanup.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/chat_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/chat_service_messages.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/chat_service_queue.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/chat_service_revert.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/coding_workspace_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/memory_stream_store.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/observability_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/provider_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/quote_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/shell_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/snapshot_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/snippets.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/stream_envelope.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/team_manager.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/app/services/title_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/Makefile +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/scripts/INSTALL.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/scripts/install.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/Info.plist +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/entitlements.plist +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/128x128.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/128x128@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/32x32.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/64x64.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square107x107Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square142x142Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square150x150Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square284x284Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square30x30Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square310x310Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square44x44Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square71x71Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/Square89x89Logo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/StoreLogo.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/android/values/ic_launcher_background.xml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/icon.icns +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/icon.ico +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/icon.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-20x20@1x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-20x20@2x-1.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-20x20@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-20x20@3x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-29x29@1x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-29x29@2x-1.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-29x29@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-29x29@3x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-40x40@1x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-40x40@2x-1.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-40x40@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-40x40@3x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-512@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-60x60@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-60x60@3x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-76x76@1x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-76x76@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_backend_status.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_new_window.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_remove_backend_server.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_save_backend_server.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_stop_bundled_backend.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_use_bundled_backend.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/app_use_external_backend.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/backend_health.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/backend_logs_path.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/request_voice_permissions.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/save_workspace_file.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/set_tray_session.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/updater_check.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/updater_download.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/updater_install.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/permissions/autogenerated/updater_release_notes.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/src/sidecar.rs +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/tauri.dev-bundled.conf.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/desktop/src-tauri/tauri.dev.conf.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/.gitkeep +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/octobot-agentd-source.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/openagentd-app-icon.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/openagentd-hero-annotated.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/openagentd-primary-lockup.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/openagentd-social-header.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/brand/openagentd-stacked-badge.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/openagentd-agent-architecture.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/openagentd-install.gif +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/coding-screen-with-2sidebars.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/homepage.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/settings-agents.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/settings-sandbox.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/settings-voice.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/screenshots/telemetry.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/team-unified.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/assets/tool-call-inspector.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/context.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/hooks.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/index.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/loop.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/plugins.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/summarization.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/team-lazy-spawn.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/teams.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/agent/tools.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/api/index.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/architecture.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/cli.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/commands.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/comparison.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/agents.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/env.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/paths.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/providers.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/sandbox.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/skills.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration/tools.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/configuration.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/desktop.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/guidelines.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/index.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/install.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/logging.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/mobile.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/observability.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/roadmap.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/shell-commands.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/testing/team.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/title-generation.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/troubleshooting.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/chat-input.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/chrome.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/coding-sessions.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/tool-results.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/docs/web/voice-input.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/applications.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/colors.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/imagery.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/index.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/interaction.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/layout.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/logo.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/motion.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/styling-specs/typography.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/techdebts/app-wide-optimization-backlog.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/techdebts/distribution-coverage.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/documents/techdebts/model-capabilities-registry.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/install.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/_common.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/backend_log.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/bang_shell.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/cancel_queued_message.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/compaction_cache.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/continue_smoketest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/fast_mode.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/health.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/image_edit_smoketest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/image_tool_smoketest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/inspect_prompt.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/mention_attachments.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/otel_inspect.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/patch_tool.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/provider_models.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/queued_injection.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/scheduler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/session_resolve.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/shell_output_delta.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/skill_dedupe.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/skill_tool_analytics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/stop_additive.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/stop_mid_stream.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/summarization_improvements_test.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/summarization_max_tokens_test.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/summarization_sse.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/summarization_test.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/support_interrupt.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_chat.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_history.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_history_n1_verify.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_message_idempotency.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_open_task_nudge.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_roster_lifecycle.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_sessions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_spawn.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_sse.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_timeline.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_todos.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/team_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/tool_result_offload_test.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/_common.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/_tools_common.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_bedrock.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_codex.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_continue_probe.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_copilot.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_deepseek.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_googlegenai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_ollama.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_openai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_openai_chat_completions_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_openai_responses_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_openrouter.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_vertexai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/try_providers/try_zai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/undo_mid_second_turn.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/manual/video_smoketest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/Makefile +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/Info.ios.plist +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/build.rs +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/capabilities/default.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/icons/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/icons/icon.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/permissions/autogenerated/app_backend_status.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/permissions/autogenerated/app_remove_backend_server.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/permissions/autogenerated/app_save_backend_server.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/permissions/autogenerated/app_use_external_backend.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/src/lib.rs +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/mobile/src-tauri/src/main.rs +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/pytest.ini +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/build_sidecar.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/bump_version.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/check_version_consistency.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/__main__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/model.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/py_analyzer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/scoring.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/codehealth/ts_analyzer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/generate_icons.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/generate_updater_keys.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/make_updater_manifest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/render_release_install_block.sh +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/scripts/update_model_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/coding/coder.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/coding/explorer.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/coding/openagentd.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/executor.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/explorer.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/agents/openagentd.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/seed/mcp.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/agent_loop/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/agent_loop/test_streaming_tool_args.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/agent_loop/test_tool_executor.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_base_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_build_summarization_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_database_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_database_hook_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_dynamic_prompt_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_otel_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_queued_injection_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_session_log_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_stream_publisher_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_stream_publisher_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_streaming_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_summarization_extra.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_summarization_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_summarization_sse.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_team_inbox_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_team_prompt_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_telemetry_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_title_generation_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_tool_result_offload.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/hooks/test_workspace_instructions_hook.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/test_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/test_manager.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/test_mcp_apply.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/test_oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mcp/test_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/conftest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_activation.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_done_detection.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_mailbox.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_member_drift.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_member_extra.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_member_worker.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_team.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_team_continue.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_team_extra.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_team_message_tool.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_team_spawn.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/mode/team/test_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/plugins/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/plugins/test_loader.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/anthropic/test_anthropic.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/anthropic/test_anthropic_streaming.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/bedrock/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/bedrock/test_bedrock.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/codex/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/codex/test_codex.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/codex/test_oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/copilot/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/copilot/test_copilot.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/copilot/test_oauth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/copilot/test_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/deepseek/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/deepseek/test_deepseek.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/googlegenai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/ollama/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/ollama/test_ollama.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_compatible_provider.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_completions_handler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_provider.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_responses_handler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_routing.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/openai/test_schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_anthropic_cache_payload.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_anthropic_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_capabilities.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_model_discovery.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_model_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_multimodal_tool_message.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_plugin_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_router9.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_streaming.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/test_unconfigured.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/vertexai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/vertexai/test_vertexai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/xai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/xai/test_xai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/zai/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/zai/test_schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/providers/zai/test_zai.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/schemas/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/schemas/test_chat_schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_agent_identity.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_agent_loop.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_agent_run_extra.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_jsonl_writer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_loader.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_loader_drift.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_multimodal.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_permission.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_sandbox.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_sandbox_commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_sandbox_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_sandbox_patterns.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_support_interrupt.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/test_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/test_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/test_googlegenai_backend.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/test_googlegenai_video_backend.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/test_openai_backend.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/multimodalities/test_telemetry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_date_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_edit_file.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_filesystem.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_multimodal_read.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_multimodal_read_gaps.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_patch_tool.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_registry.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_schedule_tool.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_shell.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_shell_runtime.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_skill_loader.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_todo_manage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/agent/tools/test_web_tools.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_agents.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_observability_route.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_scheduler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_skills.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_snippets.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_db.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_files.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_media.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_mention_attachments.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_permissions.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_todos.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/routes/test_team_worktrees.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_app_lifespan.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_app_startup_imports.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_auth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_auth_routes.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_diagnostics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_health_endpoints.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_mcp_routes.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/api/test_settings_routes.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/cli/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/cli/test_cli.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/cli/test_firstrun.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/cli/test_migrate.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/cli/test_serve.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/conftest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_config_plugin_dirs.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_db.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_db_extra.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_desktop_auth.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_errors.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_exception_handlers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_logging_config.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_metrics.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_middlewares.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_otel_retention.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_otel_tiering.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_paths.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/core/test_workspace_init.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/desktop/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/desktop/test_install_sh.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/desktop/test_mcp_app_csp.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/models/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/models/test_chat_model.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scheduler/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scheduler/test_cron.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scheduler/test_scheduler.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scheduler/test_schemas.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scripts/test_make_updater_manifest.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/scripts/test_manual_compaction_cache.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/__init__.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_agent_fs.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_agent_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_artifact_cleanup.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_chat_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_chat_service_messages_helpers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_chat_service_queue_helpers.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_checkpointer.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_commands.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_deserialize_partial_tool_calls.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_memory_stream_store.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_observability_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_provider_usage.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_quote.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_snapshot_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_snippets.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_team_manager.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/services/test_title_service.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/test_model_metadata.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/test_security_dependency_floors.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/tests/test_server.py +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/.gitignore +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/Makefile +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/bun.lock +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/bunfig.toml +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/components.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/eslint.config.js +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/index.html +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/public/brand-assets/openagentd-app-icon.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/public/notification.wav +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/public/theme-init.js +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/AGENTS.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/App.css +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/App.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/api/auth.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/api/base-url.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/api/client.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/api/sse.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/bun-test.d.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentCapabilities.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentPane.footer.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentPane.pending.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentView.error.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentView.footer.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AgentView.scroll.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/App.bootstrap.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AppBackendDialog.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/AssistantTurnFooter.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/CodingSidebar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/CommandPalette.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/DateTimePicker.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/FileCard.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/FloatingInputBar.filesBelow.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/FloatingInputBar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ImageAttachment.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ImageLightbox.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/InboxBubble.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/InputBar.fileRefs.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/InputBar.filesBelow.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/InputBar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/LongPressButton.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/MCPAppResult.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/MacTitleBar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/PendingMessageQueue.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SchedulerPanel.edit.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SchedulerPanel.modeWorkspace.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SchedulerPanel.scope.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SchedulerPanel.slugAndSession.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SessionModelSettings.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/Sidebar.edit-title.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/Sidebar.title.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/SplitGrid.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/StatusBar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TeamChatView.todos.README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TeamChatView.todos.render.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TeamChatView.todos.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TeamStatusBar.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TextPreview.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ThemeToggle.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/Thinking.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/TodosPopover.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ToolCall.generate_image.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ToolCall.team_message.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/ToolResult.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/UpdateCard.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/UserBubbleCollapse.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/VoiceMicButton.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/WorkspaceFilesPanel.copy.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/WorkspaceFilesPanel.download.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/agent-view-scroll.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/frontmatter.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/mobileOverlays.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/schema.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/scroll-chaining.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/settings/AgentForm.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/settings/McpServerDraft.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/settings/McpServerForm.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/settings/SettingsListView.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/sidebar-item.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/tool-call-generate-video.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/components/useTeamCommands.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/use-mobile-viewport.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/use-platform.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/useEdgeSwipe.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/useKeyboardShortcuts.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/useProximity.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/useTeamSessionTitleMutation.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/hooks/useTeamSessionsQuery.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/desktop-commands.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/desktop-notifications.isolated.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/desktop-notifications.worker.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/haptics.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/open-external.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/theme.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/lib/workspace-download.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/queries/useAgentFilesQuery.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/queries/useMcpQuery.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/queries/useSchedulerQuery.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/queries/useUpdateScheduledTaskMutation.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/quote.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/root-route.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.index.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.mcp.detail.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.multimodal.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.notifications.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.providers.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.sandbox.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/settings.title-generation.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/telemetry.chrome.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/telemetry.span-detail.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/telemetry.summary.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/routes/telemetry.waterfall.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/sandbox.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/setup.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/cache-invalidation-bridge.coding.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/cache-invalidation-bridge.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useGitPanelStore.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.async.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.codingWorkspace.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.error.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.revertBoundary.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.scheduler.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useTeamStore.todos.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/stores/useUIStore.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/blocks.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/format.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/markdown-image.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/markdown-link.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/markdown-video.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/markdown.test.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/messages.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/telemetryFormat.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/traceTree.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/turns.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/__tests__/utils/workspace.test.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/auth.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/base-url.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/_shared.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/agents.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/index.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/mcp.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/misc.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/observability.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/scheduler.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/settings.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/client/team.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/sse.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/api/types.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/assets/brand/README.md +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/assets/brand/octobot-agentd-source.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/assets/brand/openagentd-app-icon.png +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AgentTopbar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AgentView/UserBubble.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AppBackendDialog.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/AppHeader.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar/WorkspaceSessionList.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar/utils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.browser.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.helpers.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.sessions.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.trust.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.window.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.workspace.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.worktree-dialog.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingSidebar.worktrees.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CodingWorkspacePanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CommandPalette.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/CompactionDivider.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/FileCard.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/FilePreviewStrip.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/FileTypeIcon.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/FloatingInputBar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/HealthDot.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ImageAttachment.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ImageLightbox.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InboxBubble.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.files.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.helpers.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.mentions.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.menus.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.overlay.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.suggestions.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/InputBar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/MCPAppResult.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/MacTitleBar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/PendingMessageQueue.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/RevertNotice.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/CreateTaskForm.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/EditTaskForm.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/ModeBadge.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/ModeWorkspaceFields.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/ScheduleTypeSegmented.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/TaskDetailView.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/TaskListItem.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel/utils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SchedulerPanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SessionModelSettings.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SessionSettingsPanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SessionSettingsPanelTools.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/SettingsModal.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/StatusBar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/AgentTabs.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/MobileChatActions.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/MobileHeaderAction.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/SplitGrid.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/TeamChatPanels.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/agentDots.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/mobileOverlays.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/types.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamChatView/useTeamCommands.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/TeamStatusBar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ThemeToggle.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/Thinking.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/StatusDot.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/diffUtils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/display.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/displayText.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/index.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolCall/types.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ToolResult.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/UpdateCard.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/VoiceMicButton.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/Welcome.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/WorkspaceInfoCard.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/motion/SkipLink.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/motion/ThinkingDots.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/motion/index.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/previews/AgentTopbarPreview.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/previews/FormPrimitivesPreview.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/previews/ToolCallPreview.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/AgentForm/FormFields.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/AgentForm/ModelCombobox.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/AgentForm/utils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/AgentForm.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/DetailEmptyState.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/EditorSubHeader.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/McpServerDraft.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/McpServerForm.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/MultiSelect.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/SettingsField.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/SettingsListView.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/SettingsSection.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/frontmatter.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/settings/schema.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/agent-chip.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/brand-header.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/button.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/calendar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/checkbox.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/date-time-picker.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/dialog.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/dropdown-menu.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/dropdown.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/input.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/long-press-button.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/number-input.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/popover.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/queue-banner.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/radio-group.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/search-bar.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/section-card.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/select.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/sheet.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/sidebar-item.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/skeleton.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/switch.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/tabs.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/textarea.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/token-meter.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/tooltip.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/topbar-action.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/components/ui/view-toggle.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-app-backend-bootstrap.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-edge-swipe.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-mobile-viewport.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-mobile.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-platform.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-resizable-width.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/use-tauri-drag.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useAgentCapabilities.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useKeyboardShortcuts.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useModalFocus.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useProximity.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useReducedMotion.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/hooks/useThemePreference.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/agent-roles.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/app-backend.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/coding-workspace-download.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/desktop-commands.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/desktop-notifications.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/haptics.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/motion.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/open-external.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/query-client.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/route-restore.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/speech-recognition.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/theme.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/tray.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/updater.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/utils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/lib/workspace-download.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/main.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/index.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/keys.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/session-cache.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useAgentFilesQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useAgentsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useCommandsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useFileRefsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useHealthQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useMcpQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useMultimodalSettingsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useObservabilitySummaryQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useProvidersQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useQuoteQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useSandboxSettingsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useSchedulerQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useSessionsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useSkillFilesQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useSnippetsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useTeamStatusQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useTitleGenerationSettingsQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useTodosQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useTracesQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/queries/useWorkspaceFilesQuery.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/router.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/__root.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/index.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/scheduler.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.agents.$name.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.agents.new.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.agents.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.index.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.mcp.$name.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.mcp.new.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.mcp.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.multimodal.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.notifications.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers/ModelsPanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers/OAuthLoginDialog.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers/ProviderCard.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers/UsagePanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers/providerUtils.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.providers.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.sandbox.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.skills.$name.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.skills.new.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.skills.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/settings.title-generation.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/chrome.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/index.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/primitives.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/summary/DailyBars.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/summary/SummaryView.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/traces/TracesSection.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/traces/TracesTable.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/waterfall/SpanDetailPanel.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/waterfall/Waterfall.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/routes/telemetry/waterfall/categories.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/cache-invalidation-bridge.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useGitPanelStore.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useSettingsStore.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useTeamStore/defaults.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useTeamStore/helpers.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useTeamStore/index.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useTeamStore/sse-reducer.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useTeamStore/types.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useToastStore.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/stores/useUIStore.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/LazyMarkdownBlock.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/blocks.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/errors.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/format.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/markdown.tsx +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/mcp-app-artifacts.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/messages.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/telemetryFormat.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/thinking.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/traceTree.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/turns.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/utils/workspace.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/src/vite-env.d.ts +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/tsconfig.app.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/tsconfig.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/tsconfig.node.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/tsconfig.test.json +0 -0
- {openagentd-1.76.0 → openagentd-1.76.2}/web/vite.config.ts +0 -0
|
@@ -72,6 +72,21 @@ git diff --stat main..HEAD -- documents/docs/features.md documents/docs/roadmap.
|
|
|
72
72
|
|
|
73
73
|
6. Version PR:
|
|
74
74
|
|
|
75
|
+
- **Before bumping, verify CI is green on `main`.** Check both the `Core` (pytest) and `Web` (lint + typecheck + tests) workflows on the latest commit:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Get the SHA of the commit you are about to release from
|
|
79
|
+
git rev-parse HEAD
|
|
80
|
+
|
|
81
|
+
# List the most recent runs of each CI workflow and confirm conclusion=success
|
|
82
|
+
gh run list --workflow=core.yml --branch=main --limit=3
|
|
83
|
+
gh run list --workflow=web.yml --branch=main --limit=3
|
|
84
|
+
|
|
85
|
+
# If either shows failure, inspect and fix before continuing:
|
|
86
|
+
gh run view <run-id> --log-failed
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- Do **not** proceed with the version bump if any required CI workflow is failing on `main`. Fix the failures first, push the fix to `main`, confirm CI goes green, then resume the release.
|
|
75
90
|
- Reuse the existing feature branch when present; do not spin a fresh `release/` branch on top of it.
|
|
76
91
|
- `app/version.txt` is the **single human-edited source of truth** for release versioning.
|
|
77
92
|
- Use the release helper to propagate that version to every release-facing file, refresh lockfiles, and update release docs metadata:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openagentd
|
|
3
|
-
Version: 1.76.
|
|
3
|
+
Version: 1.76.2
|
|
4
4
|
Summary: Self-hosted AI agents — streaming chat, tool use, persistent memory, multi-agent teams
|
|
5
5
|
Project-URL: Repository, https://github.com/lthoangg/openagentd
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/lthoangg/openagentd/issues
|
|
@@ -413,7 +413,17 @@ class GeminiProviderBase(LLMProviderBase):
|
|
|
413
413
|
# and emit a second, never-completed tool_call SSE event.
|
|
414
414
|
# Track id → idx once and reuse so the buffer sees stable
|
|
415
415
|
# slots regardless of intra-chunk part ordering.
|
|
416
|
+
#
|
|
417
|
+
# Me each Gemini SSE chunk is a full snapshot, not a delta —
|
|
418
|
+
# the same function_call (same id, same args) is re-emitted
|
|
419
|
+
# verbatim in every subsequent chunk until the stream ends.
|
|
420
|
+
# The generic accumulator in streaming.py appends each chunk's
|
|
421
|
+
# args to the buffer, so a re-emitted chunk doubles the JSON
|
|
422
|
+
# and breaks validation. Suppress args (and name) on every
|
|
423
|
+
# chunk after the first for a given tool call id so the
|
|
424
|
+
# accumulator receives exactly one copy.
|
|
416
425
|
tool_idx_by_id: dict[str, int] = {}
|
|
426
|
+
tool_args_emitted: set[str] = set()
|
|
417
427
|
|
|
418
428
|
async for data in iter_sse_data(response, sentinel=None):
|
|
419
429
|
gemini_resp = GeminiChatResponse.model_validate(data)
|
|
@@ -444,13 +454,20 @@ class GeminiProviderBase(LLMProviderBase):
|
|
|
444
454
|
stable_idx = tool_idx_by_id.setdefault(
|
|
445
455
|
fc_id, len(tool_idx_by_id)
|
|
446
456
|
)
|
|
457
|
+
first_emission = fc_id not in tool_args_emitted
|
|
458
|
+
if first_emission:
|
|
459
|
+
tool_args_emitted.add(fc_id)
|
|
447
460
|
delta_tool_calls.append(
|
|
448
461
|
ToolCallDelta(
|
|
449
462
|
index=stable_idx,
|
|
450
463
|
id=fc_id,
|
|
451
464
|
function=FunctionCallDelta(
|
|
452
|
-
name=part.function_call.name
|
|
453
|
-
|
|
465
|
+
name=part.function_call.name
|
|
466
|
+
if first_emission
|
|
467
|
+
else None,
|
|
468
|
+
arguments=json.dumps(part.function_call.args)
|
|
469
|
+
if first_emission
|
|
470
|
+
else None,
|
|
454
471
|
thought_signature=part.thought_signature,
|
|
455
472
|
),
|
|
456
473
|
)
|
|
@@ -340,6 +340,13 @@ class ResponsesHandler:
|
|
|
340
340
|
current_tool_call_index = -1
|
|
341
341
|
tool_call_map: dict[str, int] = {} # item_id -> index
|
|
342
342
|
tool_names: dict[str, str] = {} # item_id -> function_name
|
|
343
|
+
# Me: OpenAI /responses streams both delta events (partial args) AND
|
|
344
|
+
# a final .done event (complete args). The assembler in streaming.py
|
|
345
|
+
# appends every arguments fragment it receives, so emitting the full
|
|
346
|
+
# args string on .done after all deltas doubles the JSON and breaks
|
|
347
|
+
# json.loads with "Extra data". Track which call_ids have received
|
|
348
|
+
# at least one .delta so .done can skip re-emitting arguments.
|
|
349
|
+
tool_had_deltas: set[str] = set() # call_ids that received delta chunks
|
|
343
350
|
# Me: OpenAI's /responses API emits reasoning as multiple
|
|
344
351
|
# ``summary_part`` items per response. Each part starts with its
|
|
345
352
|
# own bold header (``**Title**``) and its deltas carry NO separator
|
|
@@ -449,6 +456,7 @@ class ResponsesHandler:
|
|
|
449
456
|
tool_call_map[call_id] = current_tool_call_index
|
|
450
457
|
if inline_name and call_id and call_id not in tool_names:
|
|
451
458
|
tool_names[call_id] = inline_name
|
|
459
|
+
tool_had_deltas.add(call_id)
|
|
452
460
|
|
|
453
461
|
idx = tool_call_map[call_id]
|
|
454
462
|
emit_name = inline_name if first_delta and inline_name else None
|
|
@@ -490,6 +498,11 @@ class ResponsesHandler:
|
|
|
490
498
|
|
|
491
499
|
idx = tool_call_map[call_id]
|
|
492
500
|
|
|
501
|
+
# Suppress arguments when deltas were already streamed — the
|
|
502
|
+
# assembler has the full string from concatenated delta chunks.
|
|
503
|
+
# Only fall back to fn_args when no deltas arrived (edge case).
|
|
504
|
+
emit_args = fn_args if call_id not in tool_had_deltas else None
|
|
505
|
+
|
|
493
506
|
yield ChatCompletionChunk(
|
|
494
507
|
id=response_id,
|
|
495
508
|
created=int(time.time()),
|
|
@@ -504,7 +517,7 @@ class ResponsesHandler:
|
|
|
504
517
|
id=call_id,
|
|
505
518
|
function=FunctionCallDelta(
|
|
506
519
|
name=fn_name,
|
|
507
|
-
arguments=
|
|
520
|
+
arguments=emit_args,
|
|
508
521
|
),
|
|
509
522
|
)
|
|
510
523
|
]
|
|
@@ -384,10 +384,20 @@ async def get_coding_workspace_git_diff(
|
|
|
384
384
|
# restricts to those pathspecs (which can be files or directories).
|
|
385
385
|
diff_paths = scoped if scoped else ["."]
|
|
386
386
|
|
|
387
|
+
# We want changes to show whether or not they've been staged. Plain
|
|
388
|
+
# ``git diff`` only reports working-tree-vs-index (unstaged) changes, so a
|
|
389
|
+
# file disappears from the panel the moment it's ``git add``-ed.
|
|
390
|
+
# ``git diff HEAD`` instead reports working-tree-vs-HEAD, i.e. the combined
|
|
391
|
+
# staged + unstaged changes for every tracked file in a single diff with no
|
|
392
|
+
# duplicate per-file sections. When there is no HEAD yet (a repo with zero
|
|
393
|
+
# commits) ``git diff HEAD`` fails, so we fall back to a plain ``git diff``.
|
|
394
|
+
has_head = await _run_git(resolved, "rev-parse", "--verify", "HEAD") is not None
|
|
395
|
+
diff_args = ["diff", "HEAD"] if has_head else ["diff"]
|
|
396
|
+
|
|
387
397
|
try:
|
|
388
398
|
result = await asyncio.to_thread(
|
|
389
399
|
subprocess.run,
|
|
390
|
-
["git", "-C", resolved,
|
|
400
|
+
["git", "-C", resolved, *diff_args, "--", *diff_paths],
|
|
391
401
|
capture_output=True,
|
|
392
402
|
text=True,
|
|
393
403
|
timeout=10,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.76.2
|
|
@@ -403,9 +403,9 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
|
403
403
|
|
|
404
404
|
[[package]]
|
|
405
405
|
name = "byte-unit"
|
|
406
|
-
version = "5.2.
|
|
406
|
+
version = "5.2.4"
|
|
407
407
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
408
|
-
checksum = "
|
|
408
|
+
checksum = "ea91eef119026f16da52985896b3572d9abbb14f1ea5c9417fdf05da8309b66e"
|
|
409
409
|
dependencies = [
|
|
410
410
|
"rust_decimal",
|
|
411
411
|
"schemars 1.2.1",
|
|
@@ -2603,7 +2603,7 @@ dependencies = [
|
|
|
2603
2603
|
|
|
2604
2604
|
[[package]]
|
|
2605
2605
|
name = "openagentd-desktop"
|
|
2606
|
-
version = "1.76.
|
|
2606
|
+
version = "1.76.2"
|
|
2607
2607
|
dependencies = [
|
|
2608
2608
|
"anyhow",
|
|
2609
2609
|
"block2",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Automatically generated - DO NOT EDIT!
|
|
2
|
+
|
|
3
|
+
[[permission]]
|
|
4
|
+
identifier = "allow-reapply-window-chrome"
|
|
5
|
+
description = "Enables the reapply_window_chrome command without any pre-configured scope."
|
|
6
|
+
commands.allow = ["reapply_window_chrome"]
|
|
7
|
+
|
|
8
|
+
[[permission]]
|
|
9
|
+
identifier = "deny-reapply-window-chrome"
|
|
10
|
+
description = "Denies the reapply_window_chrome command without any pre-configured scope."
|
|
11
|
+
commands.deny = ["reapply_window_chrome"]
|
|
@@ -19,6 +19,7 @@ use tauri::{
|
|
|
19
19
|
WindowEvent, Wry,
|
|
20
20
|
};
|
|
21
21
|
use tauri_plugin_dialog::DialogExt;
|
|
22
|
+
use tauri_plugin_log::{Target, TargetKind};
|
|
22
23
|
|
|
23
24
|
#[cfg(test)]
|
|
24
25
|
use std::collections::HashMap as StdHashMap;
|
|
@@ -129,6 +130,7 @@ const MENU_ZOOM_OUT: &str = "zoom_out";
|
|
|
129
130
|
const MENU_ZOOM_RESET: &str = "zoom_reset";
|
|
130
131
|
const MENU_CHECK_UPDATES: &str = "check_updates";
|
|
131
132
|
const MENU_OPEN_CONFIG_DIR: &str = "open_config_dir";
|
|
133
|
+
const MENU_REVEAL_DESKTOP_LOG: &str = "reveal_desktop_log";
|
|
132
134
|
const MENU_REVEAL_BACKEND_LOG: &str = "reveal_backend_log";
|
|
133
135
|
const MENU_QUIT: &str = "quit";
|
|
134
136
|
|
|
@@ -175,6 +177,29 @@ fn configure_window_chrome(
|
|
|
175
177
|
}
|
|
176
178
|
}
|
|
177
179
|
|
|
180
|
+
/// Re-assert the macOS overlay title-bar chrome on `window`.
|
|
181
|
+
///
|
|
182
|
+
/// New windows occasionally lose their traffic-light vertical centring after
|
|
183
|
+
/// the webview triggers an AppKit relayout (e.g. navigating into
|
|
184
|
+
/// cockpit/coding mode). Re-applying ``TitleBarStyle::Overlay`` toggles the
|
|
185
|
+
/// window style mask (tao `set_style_mask_sync`), which forces AppKit to
|
|
186
|
+
/// recompute the standard window buttons and marks the content view for
|
|
187
|
+
/// redraw. tao's `draw_rect` then re-runs its stored `inset_traffic_lights`,
|
|
188
|
+
/// restoring the configured 12/22 pt position. No-op off macOS.
|
|
189
|
+
#[tauri::command]
|
|
190
|
+
fn reapply_window_chrome(window: tauri::WebviewWindow) -> Result<(), String> {
|
|
191
|
+
#[cfg(target_os = "macos")]
|
|
192
|
+
{
|
|
193
|
+
use tauri::TitleBarStyle;
|
|
194
|
+
window
|
|
195
|
+
.set_title_bar_style(TitleBarStyle::Overlay)
|
|
196
|
+
.map_err(|e| format!("{e:#}"))?;
|
|
197
|
+
}
|
|
198
|
+
#[cfg(not(target_os = "macos"))]
|
|
199
|
+
let _ = window;
|
|
200
|
+
Ok(())
|
|
201
|
+
}
|
|
202
|
+
|
|
178
203
|
#[derive(Clone, Serialize)]
|
|
179
204
|
struct BackendReady {
|
|
180
205
|
port: u16,
|
|
@@ -372,6 +397,13 @@ async fn backend_logs_path(state: tauri::State<'_, AppState>) -> Result<String,
|
|
|
372
397
|
}
|
|
373
398
|
}
|
|
374
399
|
|
|
400
|
+
#[tauri::command]
|
|
401
|
+
fn desktop_logs_path(app: AppHandle) -> Result<String, String> {
|
|
402
|
+
desktop_log_path(&app)
|
|
403
|
+
.map(|p| p.to_string_lossy().into_owned())
|
|
404
|
+
.map_err(|e| format!("desktop log path unavailable: {e}"))
|
|
405
|
+
}
|
|
406
|
+
|
|
375
407
|
#[tauri::command]
|
|
376
408
|
async fn app_backend_status(
|
|
377
409
|
app: AppHandle,
|
|
@@ -677,6 +709,21 @@ fn open_config_dir(app: &AppHandle) {
|
|
|
677
709
|
}
|
|
678
710
|
}
|
|
679
711
|
|
|
712
|
+
fn desktop_log_path(app: &AppHandle) -> Result<PathBuf> {
|
|
713
|
+
Ok(app.path().app_log_dir()?.join("desktop.log"))
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
fn reveal_desktop_log(app: &AppHandle) {
|
|
717
|
+
match desktop_log_path(app) {
|
|
718
|
+
Ok(path) => {
|
|
719
|
+
if let Err(e) = app.opener().reveal_item_in_dir(&path) {
|
|
720
|
+
log::warn!("failed to reveal desktop log {}: {e}", path.display());
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
Err(e) => log::warn!("desktop log path unavailable: {e:#}"),
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
|
|
680
727
|
fn reveal_backend_log(app: &AppHandle) {
|
|
681
728
|
let state: tauri::State<'_, AppState> = app.state();
|
|
682
729
|
let sidecar = state.sidecar.clone();
|
|
@@ -889,6 +936,7 @@ fn handle_desktop_menu(app: &AppHandle, id: &str) {
|
|
|
889
936
|
MENU_ZOOM_RESET => set_zoom(app, ZOOM_DEFAULT),
|
|
890
937
|
MENU_CHECK_UPDATES => request_update_check(app),
|
|
891
938
|
MENU_OPEN_CONFIG_DIR => open_config_dir(app),
|
|
939
|
+
MENU_REVEAL_DESKTOP_LOG => reveal_desktop_log(app),
|
|
892
940
|
MENU_REVEAL_BACKEND_LOG => reveal_backend_log(app),
|
|
893
941
|
MENU_QUIT => quit_app(app),
|
|
894
942
|
_ => {}
|
|
@@ -972,11 +1020,13 @@ async fn updater_release_notes(version: String) -> Result<ReleaseNotesResponse,
|
|
|
972
1020
|
}
|
|
973
1021
|
|
|
974
1022
|
async fn run_update_check(app: AppHandle, silent: bool) -> Result<UpdateStatus, String> {
|
|
1023
|
+
log::info!("updater check started silent={silent}");
|
|
975
1024
|
let updater = app
|
|
976
1025
|
.updater()
|
|
977
1026
|
.map_err(|e| format!("Updater unavailable: {e}"))?;
|
|
978
1027
|
match updater.check().await {
|
|
979
1028
|
Ok(Some(update)) => {
|
|
1029
|
+
log::info!("updater check found version={}", update.version);
|
|
980
1030
|
let state: tauri::State<'_, AppState> = app.state();
|
|
981
1031
|
let cached = state.update_state.lock().await.clone();
|
|
982
1032
|
let status = if cached
|
|
@@ -1007,6 +1057,7 @@ async fn run_update_check(app: AppHandle, silent: bool) -> Result<UpdateStatus,
|
|
|
1007
1057
|
Ok(status)
|
|
1008
1058
|
}
|
|
1009
1059
|
Ok(None) => {
|
|
1060
|
+
log::info!("updater check found no update silent={silent}");
|
|
1010
1061
|
let status = UpdateStatus {
|
|
1011
1062
|
status: "up_to_date".into(),
|
|
1012
1063
|
version: None,
|
|
@@ -1025,11 +1076,15 @@ async fn run_update_check(app: AppHandle, silent: bool) -> Result<UpdateStatus,
|
|
|
1025
1076
|
}
|
|
1026
1077
|
Ok(status)
|
|
1027
1078
|
}
|
|
1028
|
-
Err(e) =>
|
|
1079
|
+
Err(e) => {
|
|
1080
|
+
log::warn!("updater check failed: {e}");
|
|
1081
|
+
Err(format!("Couldn't check for updates: {e}"))
|
|
1082
|
+
}
|
|
1029
1083
|
}
|
|
1030
1084
|
}
|
|
1031
1085
|
|
|
1032
1086
|
async fn run_update_download(app: AppHandle) -> Result<UpdateStatus, String> {
|
|
1087
|
+
log::info!("updater download started");
|
|
1033
1088
|
let updater = app
|
|
1034
1089
|
.updater()
|
|
1035
1090
|
.map_err(|e| format!("Updater unavailable: {e}"))?;
|
|
@@ -1041,6 +1096,7 @@ async fn run_update_download(app: AppHandle) -> Result<UpdateStatus, String> {
|
|
|
1041
1096
|
|
|
1042
1097
|
update_tray_status(&app, "Status: Downloading update…");
|
|
1043
1098
|
let version = update.version.clone();
|
|
1099
|
+
log::info!("updater download available version={version}");
|
|
1044
1100
|
let mut downloaded: u64 = 0;
|
|
1045
1101
|
let app_for_progress = app.clone();
|
|
1046
1102
|
let bytes = update
|
|
@@ -1076,6 +1132,7 @@ async fn run_update_download(app: AppHandle) -> Result<UpdateStatus, String> {
|
|
|
1076
1132
|
let path =
|
|
1077
1133
|
cached_update_path(&app, &update.version).map_err(|e| format!("Cache update: {e}"))?;
|
|
1078
1134
|
std::fs::write(&path, bytes).map_err(|e| format!("Write cached update: {e}"))?;
|
|
1135
|
+
log::info!("updater download cached version={} path={}", update.version, path.display());
|
|
1079
1136
|
let state: tauri::State<'_, AppState> = app.state();
|
|
1080
1137
|
*state.update_state.lock().await = Some(CachedUpdateState {
|
|
1081
1138
|
version: update.version.clone(),
|
|
@@ -1096,6 +1153,7 @@ async fn run_update_download(app: AppHandle) -> Result<UpdateStatus, String> {
|
|
|
1096
1153
|
}
|
|
1097
1154
|
|
|
1098
1155
|
async fn run_update_install(app: AppHandle) -> Result<(), String> {
|
|
1156
|
+
log::info!("updater install started");
|
|
1099
1157
|
let state: tauri::State<'_, AppState> = app.state();
|
|
1100
1158
|
let cached_guard = state.update_state.lock().await;
|
|
1101
1159
|
let cached = cached_guard.clone();
|
|
@@ -1124,6 +1182,11 @@ async fn run_update_install(app: AppHandle) -> Result<(), String> {
|
|
|
1124
1182
|
// SAFETY: validate_install_preconditions returned Ok, so `cached` is Some
|
|
1125
1183
|
// and `cached.bytes_path.is_file()`.
|
|
1126
1184
|
let cached = cached.expect("cached is Some after validate_install_preconditions");
|
|
1185
|
+
log::info!(
|
|
1186
|
+
"updater install preconditions ok version={} path={}",
|
|
1187
|
+
cached.version,
|
|
1188
|
+
cached.bytes_path.display()
|
|
1189
|
+
);
|
|
1127
1190
|
|
|
1128
1191
|
let bytes =
|
|
1129
1192
|
std::fs::read(&cached.bytes_path).map_err(|e| format!("Read cached update: {e}"))?;
|
|
@@ -1141,50 +1204,31 @@ async fn run_update_install(app: AppHandle) -> Result<(), String> {
|
|
|
1141
1204
|
shutdown_sidecar_now(&app).await;
|
|
1142
1205
|
|
|
1143
1206
|
update_tray_status(&app, "Status: Installing update…");
|
|
1207
|
+
log::info!("updater install applying version={}", update.version);
|
|
1144
1208
|
update.install(bytes).map_err(|e| {
|
|
1145
1209
|
update_tray_status(&app, "Status: Running");
|
|
1146
1210
|
format!("Failed to install update: {e}")
|
|
1147
1211
|
})?;
|
|
1148
1212
|
|
|
1149
|
-
// Relaunch.
|
|
1150
|
-
//
|
|
1151
|
-
//
|
|
1152
|
-
//
|
|
1153
|
-
//
|
|
1154
|
-
//
|
|
1155
|
-
// bundle is mid-swap — the exec target is momentarily invalid, the
|
|
1156
|
-
// spawn fails silently, and the process just exits. The correct move
|
|
1157
|
-
// is to exit cleanly and let the updater helper bring the new bundle
|
|
1158
|
-
// back up. (Docs: "restarting immediately after install is not
|
|
1159
|
-
// required.")
|
|
1160
|
-
//
|
|
1161
|
-
// • Windows: the NSIS/MSI installer already terminates the app itself,
|
|
1162
|
-
// so reaching a manual restart is unusual; `restart()` is still the
|
|
1163
|
-
// supported call when we get here.
|
|
1164
|
-
//
|
|
1165
|
-
// • Linux (AppImage): the binary is replaced in place, so `restart()`
|
|
1166
|
-
// re-execs the new image correctly.
|
|
1213
|
+
// Relaunch. Tauri's updater installs the new bundle but does not reliably
|
|
1214
|
+
// bring the app back on macOS/Linux unless the host process explicitly
|
|
1215
|
+
// relaunches. Call `restart()` on the main thread so Tauri can run its
|
|
1216
|
+
// cleanup immediately before re-execing the updated app; calling it from
|
|
1217
|
+
// this worker task requests an event-loop exit and can hang behind window
|
|
1218
|
+
// close guards during the update flow.
|
|
1167
1219
|
update_tray_status(&app, "Status: Restarting…");
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
});
|
|
1181
|
-
// The line above never returns once the closure runs; this keeps the
|
|
1182
|
-
// function type-correct on the off chance the dispatch is dropped.
|
|
1183
|
-
return Ok(());
|
|
1184
|
-
}
|
|
1185
|
-
#[cfg(not(target_os = "macos"))]
|
|
1186
|
-
{
|
|
1187
|
-
app.restart();
|
|
1220
|
+
log::info!("updater install complete; dispatching app restart");
|
|
1221
|
+
let handle = app.clone();
|
|
1222
|
+
let _ = app.run_on_main_thread(move || {
|
|
1223
|
+
log::info!("updater restart executing on main thread");
|
|
1224
|
+
handle.restart();
|
|
1225
|
+
});
|
|
1226
|
+
|
|
1227
|
+
// `restart()` never returns once the closure runs. Keep the command pending
|
|
1228
|
+
// so the frontend remains on the installing/restarting state if dispatch is
|
|
1229
|
+
// delayed, instead of resolving successfully without a relaunch.
|
|
1230
|
+
loop {
|
|
1231
|
+
tokio::time::sleep(Duration::from_secs(60)).await;
|
|
1188
1232
|
}
|
|
1189
1233
|
}
|
|
1190
1234
|
|
|
@@ -1344,6 +1388,13 @@ fn install_desktop_menus(app: &tauri::App) -> Result<()> {
|
|
|
1344
1388
|
true,
|
|
1345
1389
|
None::<&str>,
|
|
1346
1390
|
)?;
|
|
1391
|
+
let app_reveal_desktop_log = MenuItem::with_id(
|
|
1392
|
+
app,
|
|
1393
|
+
MENU_REVEAL_DESKTOP_LOG,
|
|
1394
|
+
"View Desktop Log",
|
|
1395
|
+
true,
|
|
1396
|
+
None::<&str>,
|
|
1397
|
+
)?;
|
|
1347
1398
|
let app_reveal_backend_log = MenuItem::with_id(
|
|
1348
1399
|
app,
|
|
1349
1400
|
MENU_REVEAL_BACKEND_LOG,
|
|
@@ -1428,6 +1479,7 @@ fn install_desktop_menus(app: &tauri::App) -> Result<()> {
|
|
|
1428
1479
|
.item(&app_telemetry)
|
|
1429
1480
|
.separator()
|
|
1430
1481
|
.item(&app_open_config_dir)
|
|
1482
|
+
.item(&app_reveal_desktop_log)
|
|
1431
1483
|
.item(&app_reveal_backend_log)
|
|
1432
1484
|
.separator()
|
|
1433
1485
|
.item(&app_quit)
|
|
@@ -1499,6 +1551,13 @@ fn install_desktop_menus(app: &tauri::App) -> Result<()> {
|
|
|
1499
1551
|
true,
|
|
1500
1552
|
None::<&str>,
|
|
1501
1553
|
)?;
|
|
1554
|
+
let tray_reveal_desktop_log = MenuItem::with_id(
|
|
1555
|
+
app,
|
|
1556
|
+
MENU_REVEAL_DESKTOP_LOG,
|
|
1557
|
+
"View Desktop Log",
|
|
1558
|
+
true,
|
|
1559
|
+
None::<&str>,
|
|
1560
|
+
)?;
|
|
1502
1561
|
let tray_reveal_backend_log = MenuItem::with_id(
|
|
1503
1562
|
app,
|
|
1504
1563
|
MENU_REVEAL_BACKEND_LOG,
|
|
@@ -1522,6 +1581,7 @@ fn install_desktop_menus(app: &tauri::App) -> Result<()> {
|
|
|
1522
1581
|
&PredefinedMenuItem::separator(app)?,
|
|
1523
1582
|
&tray_settings,
|
|
1524
1583
|
&tray_open_config_dir,
|
|
1584
|
+
&tray_reveal_desktop_log,
|
|
1525
1585
|
&tray_reveal_backend_log,
|
|
1526
1586
|
&tray_reload,
|
|
1527
1587
|
&PredefinedMenuItem::separator(app)?,
|
|
@@ -2093,6 +2153,12 @@ fn main() {
|
|
|
2093
2153
|
|
|
2094
2154
|
let log_plugin = tauri_plugin_log::Builder::new()
|
|
2095
2155
|
.level(log::LevelFilter::Info)
|
|
2156
|
+
.targets([
|
|
2157
|
+
Target::new(TargetKind::Stdout),
|
|
2158
|
+
Target::new(TargetKind::LogDir {
|
|
2159
|
+
file_name: Some("desktop".into()),
|
|
2160
|
+
}),
|
|
2161
|
+
])
|
|
2096
2162
|
.build();
|
|
2097
2163
|
|
|
2098
2164
|
tauri::Builder::default()
|
|
@@ -2116,6 +2182,7 @@ fn main() {
|
|
|
2116
2182
|
save_workspace_file,
|
|
2117
2183
|
backend_health,
|
|
2118
2184
|
backend_logs_path,
|
|
2185
|
+
desktop_logs_path,
|
|
2119
2186
|
app_backend_status,
|
|
2120
2187
|
app_remove_backend_server,
|
|
2121
2188
|
app_save_backend_server,
|
|
@@ -2123,6 +2190,7 @@ fn main() {
|
|
|
2123
2190
|
app_use_bundled_backend,
|
|
2124
2191
|
app_stop_bundled_backend,
|
|
2125
2192
|
app_new_window,
|
|
2193
|
+
reapply_window_chrome,
|
|
2126
2194
|
set_tray_session,
|
|
2127
2195
|
updater_check,
|
|
2128
2196
|
updater_download,
|
|
@@ -2131,6 +2199,16 @@ fn main() {
|
|
|
2131
2199
|
])
|
|
2132
2200
|
.setup(|app| {
|
|
2133
2201
|
install_desktop_menus(app)?;
|
|
2202
|
+
match desktop_log_path(app.handle()) {
|
|
2203
|
+
Ok(path) => log::info!("desktop log path={}", path.display()),
|
|
2204
|
+
Err(e) => log::warn!("desktop log path unavailable: {e:#}"),
|
|
2205
|
+
}
|
|
2206
|
+
log::info!(
|
|
2207
|
+
"desktop app starting version={} pid={} target_os={}",
|
|
2208
|
+
env!("CARGO_PKG_VERSION"),
|
|
2209
|
+
std::process::id(),
|
|
2210
|
+
std::env::consts::OS
|
|
2211
|
+
);
|
|
2134
2212
|
let handle = app.handle().clone();
|
|
2135
2213
|
tauri::async_runtime::spawn(async move {
|
|
2136
2214
|
let updater_handle = handle.clone();
|
|
@@ -16,7 +16,7 @@ exists. When you ship something new, **add it here first** — slides, README,
|
|
|
16
16
|
> double-clickable app that runs a team of AI agents on your machine, with a
|
|
17
17
|
> real UI to watch every step. Open source (Apache 2.0). 15 providers. Your keys.
|
|
18
18
|
|
|
19
|
-
**Latest release:** v1.76.
|
|
19
|
+
**Latest release:** v1.76.2 · June 27, 2026 · [release notes](https://github.com/lthoangg/openagentd/releases/tag/v1.76.2)
|
|
20
20
|
|
|
21
21
|
---
|
|
22
22
|
|
|
@@ -243,7 +243,8 @@ Coding mode (`/coding`) opens a local project folder and runs a workspace-aware
|
|
|
243
243
|
team against it. Deeper doc: [`web/coding-sessions.md`](./web/coding-sessions.md).
|
|
244
244
|
|
|
245
245
|
- **Open any local project folder** `[since v1.0]` — server-local paths only.
|
|
246
|
-
Coding mode shows file tree + live git diff (
|
|
246
|
+
Coding mode shows file tree + live git diff (staged, unstaged, and untracked
|
|
247
|
+
files) in
|
|
247
248
|
the side drawer. Desktop uses the native folder picker only for the bundled
|
|
248
249
|
sidecar or loopback backends; LAN/external backends use the web folder browser
|
|
249
250
|
so the selected path exists on the backend host.
|
|
@@ -72,6 +72,7 @@ Right-side workspace explorer for `/coding` mode.
|
|
|
72
72
|
- `CommandPalette` is never rendered on mobile (`!isMobile && showPalette`).
|
|
73
73
|
- User and queued-message bubbles can use the full chat width on mobile; `md:` and wider viewports keep the narrower desktop caps.
|
|
74
74
|
- Long single-agent transcripts render the newest 80 turns first and expose **Show earlier messages** to reveal older turns in chunks, reducing initial mobile layout cost.
|
|
75
|
+
- The **Tasks** header button toggles the todos overlay (tap again to close). All header overlays (todos, files, capabilities, scheduler, palette) are mutually exclusive on both mobile and desktop via `closeOtherMobileOverlays`; sidebar/actions/coding-panel guards remain mobile-only.
|
|
75
76
|
|
|
76
77
|
### FloatingInputBar (`FloatingInputBar.tsx`) / InputBar (`InputBar.tsx`)
|
|
77
78
|
- Mobile: static docked `<div>` at the bottom with `border-t`, `backdrop-blur`, `.pb-safe`. No drag, no localStorage position.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Frontend Performance
|
|
3
|
+
description: Render optimization patterns used across the web UI — memo, useMemo, useCallback.
|
|
4
|
+
status: stable
|
|
5
|
+
updated: 2026-06-13
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Frontend performance
|
|
9
|
+
|
|
10
|
+
Patterns applied across the component tree to prevent unnecessary re-renders,
|
|
11
|
+
especially during high-frequency SSE streaming.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Patterns in use
|
|
16
|
+
|
|
17
|
+
### `memo` on list-item and block components
|
|
18
|
+
|
|
19
|
+
Components that appear in loops and receive stable props are wrapped with
|
|
20
|
+
`React.memo` so a parent re-render (e.g. a new streaming delta) doesn't
|
|
21
|
+
re-render every sibling:
|
|
22
|
+
|
|
23
|
+
| Component | Why |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `BlockRenderer` (AgentView, AgentPane) | Re-renders only when its own block content changes, not on every SSE tick |
|
|
26
|
+
| `UserBubble` (AgentPane) | Stable between stream updates |
|
|
27
|
+
| `SessionRow` (Sidebar) | Stable when session list is unchanged |
|
|
28
|
+
| `FileRow` (WorkspaceFilesPanel) | Stable when file selection changes elsewhere |
|
|
29
|
+
| `HighlightedCode` (CodingFileViewerPanel) | Syntax highlighting only re-runs when the line string changes, not on selection state |
|
|
30
|
+
|
|
31
|
+
### `useMemo` on derived arrays
|
|
32
|
+
|
|
33
|
+
| Location | Value memoized |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `Sidebar` | `normalSessions` (flatMap over pages), `dateGroups` (groupByDate result) |
|
|
36
|
+
| `TodosPopover` | `sortedTodos` ([...todos].sort) |
|
|
37
|
+
| `CodingFileViewerPanel / TextPreview` | `lines` (content.split('\n')) |
|
|
38
|
+
|
|
39
|
+
### `useCallback` on stable handlers
|
|
40
|
+
|
|
41
|
+
| Location | Handler |
|
|
42
|
+
|---|---|
|
|
43
|
+
| `AssistantTurnFooter` | `handleCopy` — deps: `[textContent]` |
|
|
44
|
+
| `AgentPane / UserBubble` | `handleCopy` — deps: `[content]` |
|
|
45
|
+
| `Sidebar` | `handleDelete`, `handleEdit` — deps: `[]` (only call setters) |
|
|
46
|
+
|
|
47
|
+
### Stable Zustand selectors
|
|
48
|
+
|
|
49
|
+
Inline selector lambdas `(s) => s.someFn` create a new function reference
|
|
50
|
+
every render, which can cause spurious re-subscriptions. For selectors that
|
|
51
|
+
return store *functions* (already stable), a module-level constant is used:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
// ToastStack.tsx
|
|
55
|
+
const dismissSelector = (s: ReturnType<typeof useToastStore.getState>) => s.dismiss
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Rules of Hooks note
|
|
61
|
+
|
|
62
|
+
Hooks must not appear after early returns. In `TextPreview` the `useMemo`
|
|
63
|
+
for `lines` is declared **before** the `deleted` / `tooLarge` / `loading`
|
|
64
|
+
early returns — even though `content` may be `null` at that point — using a
|
|
65
|
+
`?? []` fallback to keep the call unconditional.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Tests
|
|
70
|
+
|
|
71
|
+
`web/src/__tests__/components/performance.memo.test.tsx` — behavioral
|
|
72
|
+
coverage for the memoized sort order in `TodosPopover`, copy-button stability
|
|
73
|
+
in `AssistantTurnFooter`, and progress-bar accuracy.
|