ite-agent 0.2.2__tar.gz → 0.2.4__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.
- {ite_agent-0.2.2 → ite_agent-0.2.4}/AGENTS.md +1 -1
- {ite_agent-0.2.2 → ite_agent-0.2.4}/PKG-INFO +1 -1
- ite_agent-0.2.4/_smoke_render.py +48 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/pyproject.toml +1 -1
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/__init__.py +1 -1
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/client/llm_client.py +37 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/config/config.py +1 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/config/loader.py +5 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_cloud.py +8 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_composer.py +49 -3
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/app.py +1 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/composer_views.py +16 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/modals.py +82 -1
- ite_agent-0.2.4/src/ite/ui/reup/model_labels.py +47 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/reup.tcss +38 -2
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_dropped_attachments.py +8 -1
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_command_palette.py +40 -2
- ite_agent-0.2.2/src/ite/ui/reup/model_labels.py +0 -20
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/references/document-recipes.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/references/ooxml-notes.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/_docx_core.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/extract_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/inspect_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/pack_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/render_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/replace_text.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/unpack_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/validate_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/scripts/write_docx.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/templates/letter.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/docx/templates/memo.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/agents/openai.yaml +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/color-and-contrast.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/interaction-design.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/motion-design.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/responsive-design.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/spatial-design.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/typography.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/frontend-design/references/ux-writing.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/scripts/backfill_fulltext.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/scripts/imanneo-videos.json +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/scripts/import_sources.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/scripts/load_channel.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/notebooklm/scripts/resolve_citations.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/LICENSE.txt +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/references/layout-review.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/_pdf_core.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/extract_pdf_text.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/inspect_pdf.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/render_pdf.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/validate_pdf.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/scripts/write_pdf.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/pdf/templates/report.txt +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/agents/openai.yaml +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/references/common_bug_patterns.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/references/security_patterns.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/references/test_guidelines.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/scripts/audit_test_coverage.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/repo-audit/scripts/find_common_bugs.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/LICENSE.txt +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/SKILL.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/agents/openai.yaml +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/references/openai_yaml.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/scripts/generate_openai_yaml.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/scripts/init_skill.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.agents/skills/skill-creator/scripts/quick_validate.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.github/workflows/build-runtime.yml +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/.gitignore +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/DESIGN.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/README.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/_eval_optimizer.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/README.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/agents.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/commands.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/configuration.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/AGENTS_MD_TIER_SYSTEM.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/DRAFT-remote-mobile-docs.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/FRICTIONLESS_INSTALL_FIRST_RUN_PRD.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/SPEC-BRIEF.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/bachs-payments-agent-handoff.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/chat-feed-scroll-perf.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/flutter-dart-runtime-rewrite-plan.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/flutter-tui-ui-parity-plan.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/ite-admin-flutter-plan.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/ite-pro-pricing-launch-plan.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/ite-remote-runtime-connection.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/mobile-remote-implementation-log.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/mobile-remote-redesign.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/openrouter-bundled-phase1-hosted-e2e.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/openrouter-bundled-usage-phase1.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/design/openrouter-pkce-oauth-prd.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/index.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/initialization.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/installation.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/mcp.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/openrouter-oauth.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/openrouter.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/skills.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/subagents.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/tools.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/docs/usage.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/hooks/hook-fastmcp.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/iTE_Overview.md +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/install.ps1 +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/install.sh +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/build_runtime.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/decon/check_handlers.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/decon/gen_exports.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/decon/parse_handlers.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/github-release.sh +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/guard_mixin_imports.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/hook_logger.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/interactive_prompt_demo.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/pitfall_scan.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/publish-release.sh +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/scan_cross_mixin_attrs.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/scan_orphan_attributes.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/scripts/scan_tool_views_imports.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/agent.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/change_history.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/events.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/session.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/session_manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/session_naming.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/agent/subagent_runtime.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/attachment_refs.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/attachments.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/auth/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/auth/openrouter_pkce.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/client/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/client/response.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/cloud/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/cloud/auth.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/cloud/services.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/aside.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/attach.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/branch.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/cloud.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/csv2json.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/flow.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/general.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/history.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/hooks.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/info.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/init.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/model.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/plan.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/publish.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/remind.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/remote.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/sandbox.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/session.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/skills.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/subagent.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/commands/todos.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/config/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/config/setup.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/compact_artifacts.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/compaction.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/loop_detector.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/context/transcript.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/git/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/git/branches.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/git/remotes.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/git/working_tree.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/hooks/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/hooks/hook_system.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/main.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/memory/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/memory/intent.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/memory/manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/memory/response_intent.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/memory/session_memory.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/model_metadata.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/prompts/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/prompts/system.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/remote/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/remote/protocol.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/remote/security.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/remote/server.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/remote/uri.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/safety/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/safety/approval.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/safety/git_sandbox.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/safety/sandbox.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/skills/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/skills/installer.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/skills/manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/skills/rendering.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/skills/trust.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/telegram/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/telegram/_approval.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/telegram/_render.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/telegram/bot.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/base.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/apply_patch.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/archive_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/config_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/edit_file.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/git_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/glob.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/grep.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/http_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/json_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/list_dir.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/media_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/memory.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/plan_question.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/read_file.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/shell.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/skills.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/subagent_runtime_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/todo.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/verification_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/web_fetch.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/web_search.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/builtin/write_file.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/discovery.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/client.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/client_credentials.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/mcp_manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/mcp_tool.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/mcp/oauth.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/optimizer.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/policy.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/registry.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/subagent.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/tools/subagent_loader.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/assets/ite_image.png +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_helpers.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_panels.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_streaming.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_threads.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/_turn.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/adapters/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/adapters/registry.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/adapters/tui_adapter.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/change_tree.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/change_views.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/command_views.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/legacy/app.py.backup +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/legacy/app.py.original +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/legacy/app.py.patch +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/legacy/app_prestrip.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/legacy/app_refactored.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/markdown_widget.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/settings.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/tool_views.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/message_row.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/prompt_area.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/remote_bridge.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/side_panels.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/state.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/system_commands.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/thread_switcher.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/reup/widgets/tool_cards.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/ui/tool_narrative.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/update_check.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/utils/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/utils/errors.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/utils/paths.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/utils/text.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/__init__.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/cleanup.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/config.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/pipeline.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/recorder.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/transcription.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/src/ite/voice/types.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_agent_continuation.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_agent_tool_recovery.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_agents_workspace_recommendation.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_aside_command.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_attachment_refs.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_attachments.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_build_runtime.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_bundled_docx_skill.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_bundled_pdf_skill.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_bundled_skill_creator.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_change_history.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_cli_modes.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_clipboard.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_cloud_auth.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_cloud_services.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_compaction.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_config_setup_requirements.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_config_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_copy_detailed.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_execution_todo_progress.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_git_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_hooks.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_http_archive_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_info_commands.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_json_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_llm_client.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_loop_detector.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_mcp.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_media_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_memory_behavior.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_memory_eval_matrix.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_memory_lifecycle.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_memory_manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_openrouter_oauth_secret.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_openrouter_pkce.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_provider_error_formatting.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_publish_command.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_release_bump_skill.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_remote_protocol.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_remote_server.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_change_review.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_modals.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_prompt_text_area.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_startup.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_theme_guards.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_reup_tool_views.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_saved_custom_provider.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_session_commands.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_session_manager.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_session_naming.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_setup_modal.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_shell_heartbeat.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_shell_web_capabilities.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_skills.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_subagent_runtime.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_system_prompt.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_text_utils.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_textual_app.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_todos_scoped.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_tool_narrative.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_tool_param_normalization.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_tool_schema.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_tooling_v01.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_update_check.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_verification_tools.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/tests/test_voice.py +0 -0
- {ite_agent-0.2.2 → ite_agent-0.2.4}/uv.lock +0 -0
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**iTE** — AI coding agent for the terminal. Users connect a model service, authenticate where needed, and work through the Reup Textual runtime.
|
|
6
6
|
|
|
7
|
-
- **Package:** `ite-agent` (version 0.2.
|
|
7
|
+
- **Package:** `ite-agent` (version 0.2.4)
|
|
8
8
|
- **Install:** `pipx install ite-agent` or `uv tool install ite-agent`
|
|
9
9
|
- **Local editable install:** `uv pip install -e .` from the repo root, or `source .venv/bin/activate && python -m pip install -e .`
|
|
10
10
|
- **Python:** ≥3.11
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
from textual.app import App
|
|
4
|
+
|
|
5
|
+
from ite.ui.reup.modals import ApprovalPickerModal, ThinkingLevelModal
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TApp(App[None]):
|
|
9
|
+
CSS_PATH = "src/ite/ui/reup/reup.tcss"
|
|
10
|
+
|
|
11
|
+
def on_mount(self) -> None:
|
|
12
|
+
self.push_screen(ThinkingLevelModal("low", model_label="DeepSeek V4 Pro"))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ApprovalApp(App[None]):
|
|
16
|
+
CSS_PATH = "src/ite/ui/reup/reup.tcss"
|
|
17
|
+
|
|
18
|
+
def on_mount(self) -> None:
|
|
19
|
+
self.push_screen(ApprovalPickerModal("auto"))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
async def dump(app, name):
|
|
23
|
+
screen = app.screen
|
|
24
|
+
print(f"=== {name} ===")
|
|
25
|
+
btn = screen.query_one("#select")
|
|
26
|
+
s = btn.styles
|
|
27
|
+
print(" region:", btn.region)
|
|
28
|
+
print(" height:", s.height, "min_height:", s.min_height)
|
|
29
|
+
print(" border_top:", s.border_top, "border_bottom:", s.border_bottom)
|
|
30
|
+
actions = screen.query_one(".modal-actions")
|
|
31
|
+
print(" actions region:", actions.region, "height:", actions.styles.height)
|
|
32
|
+
modal = screen.query_one(".modal")
|
|
33
|
+
print(" modal region:", modal.region, "height:", modal.styles.height)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
async def main() -> None:
|
|
37
|
+
app = TApp()
|
|
38
|
+
async with app.run_test(size=(100, 30)) as pilot:
|
|
39
|
+
await pilot.pause()
|
|
40
|
+
await dump(app, "ThinkingLevelModal")
|
|
41
|
+
|
|
42
|
+
app2 = ApprovalApp()
|
|
43
|
+
async with app2.run_test(size=(100, 30)) as pilot:
|
|
44
|
+
await pilot.pause()
|
|
45
|
+
await dump(app2, "ApprovalPickerModal")
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
asyncio.run(main())
|
|
@@ -102,6 +102,34 @@ class LLMClient:
|
|
|
102
102
|
base_url = str(getattr(self.config, "base_url", "") or "").strip().lower()
|
|
103
103
|
return "minimax" in model_name or "minimax" in base_url
|
|
104
104
|
|
|
105
|
+
def _reasoning_effort_value(self) -> str:
|
|
106
|
+
"""Normalize the configured DeepSeek reasoning effort to a wire value.
|
|
107
|
+
|
|
108
|
+
DeepSeek accepts `none` (disables thinking), `low`, `high`, and `max`.
|
|
109
|
+
`minimal` maps to `low`; `medium`/`xhigh` map to `high`.
|
|
110
|
+
"""
|
|
111
|
+
effort = str(
|
|
112
|
+
getattr(self.config.model, "reasoning_effort", None) or ""
|
|
113
|
+
).strip().lower()
|
|
114
|
+
if effort in {"none", "low", "max"}:
|
|
115
|
+
return effort
|
|
116
|
+
if effort == "minimal":
|
|
117
|
+
return "low"
|
|
118
|
+
return "low"
|
|
119
|
+
|
|
120
|
+
def _deepseek_reasoning_extra_body(self) -> dict[str, Any] | None:
|
|
121
|
+
"""Build DeepSeek reasoning params for BYOK requests.
|
|
122
|
+
|
|
123
|
+
`reasoning_effort` controls both the thinking-mode toggle and the
|
|
124
|
+
effort level: `none` disables thinking; `low`/`high`/`max` enable it.
|
|
125
|
+
Returns None when the active model/provider doesn't support them.
|
|
126
|
+
"""
|
|
127
|
+
model_name = str(self.config.model_name or "").strip().lower()
|
|
128
|
+
base_url = str(self.config.base_url or "").strip().lower()
|
|
129
|
+
if "deepseek-v4" not in model_name and "api.deepseek.com" not in base_url:
|
|
130
|
+
return None
|
|
131
|
+
return {"reasoning_effort": self._reasoning_effort_value()}
|
|
132
|
+
|
|
105
133
|
def _current_model_has_saved_profile(self) -> bool:
|
|
106
134
|
source_kind = str(getattr(self.config.model, "source_kind", "") or "").strip().lower()
|
|
107
135
|
if source_kind == "bundled":
|
|
@@ -991,6 +1019,12 @@ class LLMClient:
|
|
|
991
1019
|
kwargs["extra_body"] = {}
|
|
992
1020
|
kwargs["extra_body"]["reasoning_split"] = True
|
|
993
1021
|
|
|
1022
|
+
deepseek_extra = self._deepseek_reasoning_extra_body()
|
|
1023
|
+
if deepseek_extra:
|
|
1024
|
+
if "extra_body" not in kwargs:
|
|
1025
|
+
kwargs["extra_body"] = {}
|
|
1026
|
+
kwargs["extra_body"].update(deepseek_extra)
|
|
1027
|
+
|
|
994
1028
|
for attempt in range(self._max_retries + 1):
|
|
995
1029
|
try:
|
|
996
1030
|
if stream:
|
|
@@ -1181,6 +1215,9 @@ class LLMClient:
|
|
|
1181
1215
|
request_payload["top_p"] = 0.95
|
|
1182
1216
|
request_payload["top_k"] = 64
|
|
1183
1217
|
|
|
1218
|
+
if "deepseek-v4" in model_name:
|
|
1219
|
+
request_payload["reasoningEffort"] = self._reasoning_effort_value()
|
|
1220
|
+
|
|
1184
1221
|
if visual_budget:
|
|
1185
1222
|
request_payload["visual_token_budget"] = visual_budget
|
|
1186
1223
|
|
|
@@ -461,6 +461,7 @@ def save_system_config(
|
|
|
461
461
|
context_window: int | None = None,
|
|
462
462
|
context_window_source: str | None = None,
|
|
463
463
|
source_kind: str | None = None,
|
|
464
|
+
reasoning_effort: str | None = None,
|
|
464
465
|
cloud_auth_enabled: bool | None = None,
|
|
465
466
|
cloud_api_url: str | None = None,
|
|
466
467
|
cloud_client_id: str | None = None,
|
|
@@ -493,6 +494,10 @@ def save_system_config(
|
|
|
493
494
|
model_config["source_kind"] = str(source_kind).strip()
|
|
494
495
|
else:
|
|
495
496
|
model_config.pop("source_kind", None)
|
|
497
|
+
if reasoning_effort:
|
|
498
|
+
model_config["reasoning_effort"] = str(reasoning_effort).strip()
|
|
499
|
+
else:
|
|
500
|
+
model_config.pop("reasoning_effort", None)
|
|
496
501
|
existing["model"] = model_config
|
|
497
502
|
|
|
498
503
|
if cloud_auth_enabled is not None:
|
|
@@ -277,6 +277,13 @@ class CloudMixin:
|
|
|
277
277
|
return False
|
|
278
278
|
return detect_vision_from_model_name(model_name)
|
|
279
279
|
|
|
280
|
+
def _is_deepseek_model(self) -> bool:
|
|
281
|
+
"""Whether the active bundled model supports DeepSeek reasoning levels."""
|
|
282
|
+
if not self._is_bundled_model():
|
|
283
|
+
return False
|
|
284
|
+
model = str(self.config.model_name or "").strip().lower()
|
|
285
|
+
return "deepseek-v4" in model
|
|
286
|
+
|
|
280
287
|
|
|
281
288
|
def _apply_cloud_auth_status(
|
|
282
289
|
self,
|
|
@@ -1646,6 +1653,7 @@ class CloudMixin:
|
|
|
1646
1653
|
)
|
|
1647
1654
|
session_config.model.source_kind = self.config.model.source_kind
|
|
1648
1655
|
session_config.model.supports_vision = self.config.model.supports_vision
|
|
1656
|
+
session_config.model.reasoning_effort = self.config.model.reasoning_effort
|
|
1649
1657
|
if not getattr(self.agent.session, "client", None):
|
|
1650
1658
|
return
|
|
1651
1659
|
try:
|
|
@@ -68,8 +68,8 @@ from .widgets.remote_bridge import RemoteBridgeCard, RemoteBridgeField, UpdateCo
|
|
|
68
68
|
from .widgets.system_commands import ReupSystemCommandsProvider
|
|
69
69
|
from .adapters.tui_adapter import ReupTUIAdapter
|
|
70
70
|
from .change_views import change_entry_label, build_change_card_body, build_change_card_payload
|
|
71
|
-
from .model_labels import bundled_model_display_label
|
|
72
|
-
from .modals import ApprovalPickerModal, AttachPickerModal, BranchPickerModal, CommitModal, ContextSummaryModal, ActivityModal, ModelPickerModal, ThemePickerModal, UsageSummaryModal, PushReviewModal, RemoteSetupModal, PlanQuestionModal, SessionResumeModal, VoiceSetupModal, ConfirmModal, SetupModal
|
|
71
|
+
from .model_labels import bundled_model_display_label, reasoning_effort_display_label
|
|
72
|
+
from .modals import ApprovalPickerModal, AttachPickerModal, BranchPickerModal, CommitModal, ContextSummaryModal, ActivityModal, ModelPickerModal, ThemePickerModal, ThinkingLevelModal, UsageSummaryModal, PushReviewModal, RemoteSetupModal, PlanQuestionModal, SessionResumeModal, VoiceSetupModal, ConfirmModal, SetupModal
|
|
73
73
|
|
|
74
74
|
_VOICE_TRANSCRIPTION_MAX_RETRIES = 2
|
|
75
75
|
|
|
@@ -205,6 +205,7 @@ class ComposerMixin:
|
|
|
205
205
|
text,
|
|
206
206
|
attach_hitbox,
|
|
207
207
|
model_hitbox,
|
|
208
|
+
reasoning_hitbox,
|
|
208
209
|
branch_hitbox,
|
|
209
210
|
plan_hitbox,
|
|
210
211
|
usage_hitbox,
|
|
@@ -222,9 +223,15 @@ class ComposerMixin:
|
|
|
222
223
|
show_usage=self._is_bundled_model(),
|
|
223
224
|
show_context=model_display_name != "select model",
|
|
224
225
|
available_width=available_width,
|
|
226
|
+
reasoning_label=(
|
|
227
|
+
reasoning_effort_display_label(self.config.model.reasoning_effort)
|
|
228
|
+
if self._is_deepseek_model()
|
|
229
|
+
else None
|
|
230
|
+
),
|
|
225
231
|
)
|
|
226
232
|
self._composer_attach_hitbox = attach_hitbox
|
|
227
233
|
self._composer_model_hitbox = model_hitbox
|
|
234
|
+
self._composer_reasoning_hitbox = reasoning_hitbox
|
|
228
235
|
self._composer_branch_hitbox = branch_hitbox
|
|
229
236
|
self._composer_plan_hitbox = plan_hitbox
|
|
230
237
|
self._composer_usage_hitbox = usage_hitbox
|
|
@@ -651,12 +658,21 @@ class ComposerMixin:
|
|
|
651
658
|
slash command. When the message is purely path-like, stage the files as
|
|
652
659
|
attachments and return "@name" refs so the drop sends exactly like an
|
|
653
660
|
@-mention attachment. Returns None to swallow the send when the payload
|
|
654
|
-
is path-like but no file resolved (errors are posted as notes)
|
|
661
|
+
is path-like but no file resolved (errors are posted as notes), except
|
|
662
|
+
for "/"-prefixed payloads — those are treated as slash commands and
|
|
663
|
+
left untouched.
|
|
655
664
|
"""
|
|
656
665
|
result = parse_dropped_file_paths(message)
|
|
657
666
|
if result.path_like_count == 0 or result.prose_count > 0:
|
|
658
667
|
return message
|
|
659
668
|
|
|
669
|
+
# A "/"-prefixed payload that resolves to no existing file is a slash
|
|
670
|
+
# command (e.g. "/plan"), not a dropped attachment. Leave it untouched
|
|
671
|
+
# so it dispatches to run_command instead of being swallowed as a
|
|
672
|
+
# broken drop.
|
|
673
|
+
if not result.paths and message.startswith("/"):
|
|
674
|
+
return message
|
|
675
|
+
|
|
660
676
|
session = getattr(getattr(self, "agent", None), "session", None)
|
|
661
677
|
if result.paths and session is not None:
|
|
662
678
|
pending = list(session.pending_attachment_paths)
|
|
@@ -732,6 +748,7 @@ class ComposerMixin:
|
|
|
732
748
|
def on_composer_meta_line_click(self, event: events.Click) -> None:
|
|
733
749
|
attach_start, attach_end = self._composer_attach_hitbox
|
|
734
750
|
model_start, model_end = self._composer_model_hitbox
|
|
751
|
+
reasoning_start, reasoning_end = self._composer_reasoning_hitbox
|
|
735
752
|
branch_start, branch_end = self._composer_branch_hitbox
|
|
736
753
|
usage_hitbox = self._composer_usage_hitbox
|
|
737
754
|
usage_start = usage_hitbox[0] if usage_hitbox else -1
|
|
@@ -746,6 +763,10 @@ class ComposerMixin:
|
|
|
746
763
|
self.run_worker(self._open_model_picker_from_meta(), exclusive=False)
|
|
747
764
|
event.stop()
|
|
748
765
|
return
|
|
766
|
+
if reasoning_start < reasoning_end and reasoning_start <= event.x < reasoning_end:
|
|
767
|
+
self.run_worker(self._open_thinking_level_modal_from_meta(), exclusive=False)
|
|
768
|
+
event.stop()
|
|
769
|
+
return
|
|
749
770
|
if branch_start <= event.x < branch_end:
|
|
750
771
|
self.run_worker(self._open_branch_picker_from_meta(), exclusive=False)
|
|
751
772
|
event.stop()
|
|
@@ -818,6 +839,31 @@ class ComposerMixin:
|
|
|
818
839
|
target = "off" if session.plan_mode_enabled else "on"
|
|
819
840
|
await self._run_plan_command_native([target])
|
|
820
841
|
|
|
842
|
+
async def _open_thinking_level_modal_from_meta(self) -> None:
|
|
843
|
+
if not self._is_deepseek_model():
|
|
844
|
+
return
|
|
845
|
+
current = str(self.config.model.reasoning_effort or "").strip()
|
|
846
|
+
model_label = self._model_display_name()
|
|
847
|
+
modal = ThinkingLevelModal(current, model_label=model_label)
|
|
848
|
+
result = await self._open_modal(modal)
|
|
849
|
+
if result is None or result == current:
|
|
850
|
+
return
|
|
851
|
+
save_system_config(
|
|
852
|
+
api_key=self.config.api_key or "",
|
|
853
|
+
base_url=self.config.base_url or "",
|
|
854
|
+
model_name=self.config.model_name,
|
|
855
|
+
context_window=self.config.model.context_window,
|
|
856
|
+
context_window_source=self.config.model.context_window_source,
|
|
857
|
+
source_kind=self.config.model.source_kind,
|
|
858
|
+
reasoning_effort=result,
|
|
859
|
+
cloud_auth_enabled=self.config.cloud_auth_enabled,
|
|
860
|
+
cloud_api_url=self.config.cloud_api_url,
|
|
861
|
+
cloud_client_id=self.config.cloud_client_id,
|
|
862
|
+
)
|
|
863
|
+
self.config.model.reasoning_effort = result
|
|
864
|
+
self._update_composer_meta_line()
|
|
865
|
+
await self._reset_active_provider_client()
|
|
866
|
+
|
|
821
867
|
|
|
822
868
|
def action_command_palette(self) -> None:
|
|
823
869
|
"""Open the command palette while preserving Reup system command order."""
|
|
@@ -509,6 +509,7 @@ class ReupApp(CloudMixin, PanelsMixin, ComposerMixin, ThreadsMixin, TurnMixin, S
|
|
|
509
509
|
self._plan_question_recommended_index: int | None = None
|
|
510
510
|
self._composer_attach_hitbox: tuple[int, int] = (0, 0)
|
|
511
511
|
self._composer_model_hitbox: tuple[int, int] = (0, 0)
|
|
512
|
+
self._composer_reasoning_hitbox: tuple[int, int] = (0, 0)
|
|
512
513
|
self._composer_plan_hitbox: tuple[int, int] = (0, 0)
|
|
513
514
|
self._composer_branch_hitbox: tuple[int, int] = (0, 0)
|
|
514
515
|
self._composer_usage_hitbox: tuple[int, int] | None = None
|
|
@@ -31,12 +31,14 @@ def composer_meta_text(
|
|
|
31
31
|
show_usage: bool = True,
|
|
32
32
|
show_context: bool = True,
|
|
33
33
|
available_width: int | None = None,
|
|
34
|
+
reasoning_label: str | None = None,
|
|
34
35
|
) -> tuple[
|
|
35
36
|
Text,
|
|
36
37
|
tuple[int, int],
|
|
37
38
|
tuple[int, int],
|
|
38
39
|
tuple[int, int],
|
|
39
40
|
tuple[int, int],
|
|
41
|
+
tuple[int, int],
|
|
40
42
|
tuple[int, int] | None,
|
|
41
43
|
tuple[int, int],
|
|
42
44
|
tuple[int, int],
|
|
@@ -118,6 +120,7 @@ def composer_meta_text(
|
|
|
118
120
|
tuple[int, int],
|
|
119
121
|
tuple[int, int],
|
|
120
122
|
tuple[int, int],
|
|
123
|
+
tuple[int, int],
|
|
121
124
|
tuple[int, int] | None,
|
|
122
125
|
tuple[int, int],
|
|
123
126
|
tuple[int, int],
|
|
@@ -137,6 +140,17 @@ def composer_meta_text(
|
|
|
137
140
|
"model",
|
|
138
141
|
)
|
|
139
142
|
)
|
|
143
|
+
if include_model and reasoning_label:
|
|
144
|
+
segments.append(
|
|
145
|
+
(
|
|
146
|
+
"reasoning",
|
|
147
|
+
[
|
|
148
|
+
(reasoning_label, f"bold {fg}"),
|
|
149
|
+
(" ▾", f"bold {muted}"),
|
|
150
|
+
],
|
|
151
|
+
"reasoning",
|
|
152
|
+
)
|
|
153
|
+
)
|
|
140
154
|
segments.append(
|
|
141
155
|
(
|
|
142
156
|
"plan",
|
|
@@ -196,6 +210,7 @@ def composer_meta_text(
|
|
|
196
210
|
hitboxes: dict[str, tuple[int, int]] = {
|
|
197
211
|
"attach": (0, 0),
|
|
198
212
|
"model": (0, 0),
|
|
213
|
+
"reasoning": (0, 0),
|
|
199
214
|
"branch": (0, 0),
|
|
200
215
|
"plan": (0, 0),
|
|
201
216
|
"context": (0, 0),
|
|
@@ -221,6 +236,7 @@ def composer_meta_text(
|
|
|
221
236
|
text,
|
|
222
237
|
hitboxes["attach"],
|
|
223
238
|
hitboxes["model"],
|
|
239
|
+
hitboxes["reasoning"],
|
|
224
240
|
hitboxes["branch"],
|
|
225
241
|
hitboxes["plan"],
|
|
226
242
|
usage_hitbox if show_usage and include_usage else None,
|
|
@@ -49,7 +49,12 @@ from ite.model_metadata import (
|
|
|
49
49
|
format_context_window_label,
|
|
50
50
|
parse_openrouter_model_metadata,
|
|
51
51
|
)
|
|
52
|
-
from ite.ui.reup.model_labels import
|
|
52
|
+
from ite.ui.reup.model_labels import (
|
|
53
|
+
DEFAULT_REASONING_EFFORT,
|
|
54
|
+
REASONING_LEVELS,
|
|
55
|
+
bundled_model_display_label,
|
|
56
|
+
reasoning_effort_display_label,
|
|
57
|
+
)
|
|
53
58
|
|
|
54
59
|
SETUP_PROVIDER_OLLAMA = "ollama"
|
|
55
60
|
SETUP_PROVIDER_OPENROUTER = "openrouter"
|
|
@@ -1483,6 +1488,82 @@ class ThemePickerModal(ModalScreen[str | None]):
|
|
|
1483
1488
|
self.dismiss(None)
|
|
1484
1489
|
|
|
1485
1490
|
|
|
1491
|
+
class ThinkingLevelModal(ModalScreen[str | None]):
|
|
1492
|
+
BINDINGS = [
|
|
1493
|
+
("escape", "dismiss", "Dismiss"),
|
|
1494
|
+
("up", "cursor_up", "Up"),
|
|
1495
|
+
("down", "cursor_down", "Down"),
|
|
1496
|
+
("enter", "select", "Select"),
|
|
1497
|
+
]
|
|
1498
|
+
|
|
1499
|
+
def __init__(self, current: str, *, model_label: str) -> None:
|
|
1500
|
+
super().__init__()
|
|
1501
|
+
self._current = str(current or "").strip().lower() or DEFAULT_REASONING_EFFORT
|
|
1502
|
+
self._model_label = str(model_label or "Model").strip()
|
|
1503
|
+
|
|
1504
|
+
def compose(self) -> ComposeResult:
|
|
1505
|
+
with Container(classes="modal resume-modal thinking-level-modal"):
|
|
1506
|
+
yield Label(
|
|
1507
|
+
f"Thinking Level for {self._model_label}",
|
|
1508
|
+
classes="modal-title resume-title",
|
|
1509
|
+
)
|
|
1510
|
+
yield Static(
|
|
1511
|
+
"Choose how much the model reasons before responding.",
|
|
1512
|
+
classes="modal-body resume-body",
|
|
1513
|
+
id="thinking-level-help",
|
|
1514
|
+
)
|
|
1515
|
+
with Container(classes="modal-list resume-list"):
|
|
1516
|
+
yield DataTable(
|
|
1517
|
+
id="thinking-levels", classes="resume-table", cursor_type="row"
|
|
1518
|
+
)
|
|
1519
|
+
with Horizontal(classes="modal-actions resume-actions"):
|
|
1520
|
+
yield Button("Select", id="select", variant="primary")
|
|
1521
|
+
yield Button("Cancel", id="cancel", variant="default")
|
|
1522
|
+
async def on_mount(self) -> None:
|
|
1523
|
+
table = self.query_one("#thinking-levels", DataTable)
|
|
1524
|
+
table.add_columns("Level", "Description", "Current")
|
|
1525
|
+
initial_row = 0
|
|
1526
|
+
for index, (wire_value, label, description) in enumerate(REASONING_LEVELS):
|
|
1527
|
+
table.add_row(
|
|
1528
|
+
label,
|
|
1529
|
+
description,
|
|
1530
|
+
"✓" if wire_value == self._current else "",
|
|
1531
|
+
)
|
|
1532
|
+
if wire_value == self._current:
|
|
1533
|
+
initial_row = index
|
|
1534
|
+
if REASONING_LEVELS:
|
|
1535
|
+
table.move_cursor(row=initial_row, column=0)
|
|
1536
|
+
|
|
1537
|
+
def action_cursor_up(self) -> None:
|
|
1538
|
+
table = self.query_one("#thinking-levels", DataTable)
|
|
1539
|
+
table.action_cursor_up()
|
|
1540
|
+
|
|
1541
|
+
def action_cursor_down(self) -> None:
|
|
1542
|
+
table = self.query_one("#thinking-levels", DataTable)
|
|
1543
|
+
table.action_cursor_down()
|
|
1544
|
+
|
|
1545
|
+
def action_select(self) -> None:
|
|
1546
|
+
table = self.query_one("#thinking-levels", DataTable)
|
|
1547
|
+
self._dismiss_row(table.cursor_row)
|
|
1548
|
+
|
|
1549
|
+
def _dismiss_row(self, row: int) -> None:
|
|
1550
|
+
if 0 <= row < len(REASONING_LEVELS):
|
|
1551
|
+
self.dismiss(REASONING_LEVELS[row][0])
|
|
1552
|
+
|
|
1553
|
+
@on(DataTable.RowSelected, "#thinking-levels")
|
|
1554
|
+
def on_row_selected(self, event: DataTable.RowSelected) -> None:
|
|
1555
|
+
self._dismiss_row(event.cursor_row)
|
|
1556
|
+
|
|
1557
|
+
@on(Button.Pressed, "#select")
|
|
1558
|
+
def on_select_pressed(self, _event: Button.Pressed) -> None:
|
|
1559
|
+
table = self.query_one("#thinking-levels", DataTable)
|
|
1560
|
+
self._dismiss_row(table.cursor_row)
|
|
1561
|
+
|
|
1562
|
+
@on(Button.Pressed, "#cancel")
|
|
1563
|
+
def on_cancel_pressed(self, _event: Button.Pressed) -> None:
|
|
1564
|
+
self.dismiss(None)
|
|
1565
|
+
|
|
1566
|
+
|
|
1486
1567
|
class UsageSummaryModal(ModalScreen[None]):
|
|
1487
1568
|
BINDINGS = [("escape", "dismiss", "Dismiss")]
|
|
1488
1569
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
BUNDLED_MODEL_DISPLAY_NAMES_BY_MODEL: dict[str, str] = {
|
|
4
|
+
"deepseek-v4": "DeepSeek V4",
|
|
5
|
+
"deepseek-v4-pro": "DeepSeek V4 Pro",
|
|
6
|
+
"deepseek/deepseek-v4-pro": "DeepSeek V4 Pro",
|
|
7
|
+
"minimax-m3": "MiniMax M3",
|
|
8
|
+
"minimax/minimax-m3": "MiniMax M3",
|
|
9
|
+
"stealth-ox-alpha": "Stealth OX Alpha",
|
|
10
|
+
"stealth/ox-alpha": "Stealth OX Alpha",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def bundled_model_display_label(model_name: str, label: str | None = None) -> str:
|
|
15
|
+
"""Return the public UI label for a bundled model without changing its id."""
|
|
16
|
+
normalized_model = str(model_name or "").strip()
|
|
17
|
+
public_name = BUNDLED_MODEL_DISPLAY_NAMES_BY_MODEL.get(normalized_model.lower())
|
|
18
|
+
if public_name:
|
|
19
|
+
return public_name
|
|
20
|
+
return str(label or normalized_model).strip()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# DeepSeek reasoning-effort levels, 1:1 with the upstream API. `none` disables
|
|
24
|
+
# thinking mode entirely; `low` / `high` / `max` enable it at increasing
|
|
25
|
+
# effort. The default effort is `high`. (For API compatibility `minimal` is
|
|
26
|
+
# accepted upstream and mapped to `low`; `medium`/`xhigh` map to `high`.)
|
|
27
|
+
REASONING_LEVELS: list[tuple[str, str, str]] = [
|
|
28
|
+
("none", "Off", "No extended thinking"),
|
|
29
|
+
("low", "Low", "Minimal reasoning"),
|
|
30
|
+
("high", "High", "Deep reasoning"),
|
|
31
|
+
("max", "Extra High", "Maximum reasoning"),
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
DEFAULT_REASONING_EFFORT = "low"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def reasoning_effort_display_label(value: str | None) -> str:
|
|
38
|
+
"""Return the human label for a reasoning-effort value (defaults to High)."""
|
|
39
|
+
normalized = str(value or "").strip().lower()
|
|
40
|
+
if normalized == "minimal":
|
|
41
|
+
normalized = "low"
|
|
42
|
+
if normalized in {"xhigh", "medium"}:
|
|
43
|
+
normalized = "high"
|
|
44
|
+
for wire_value, label, _description in REASONING_LEVELS:
|
|
45
|
+
if wire_value == normalized:
|
|
46
|
+
return label
|
|
47
|
+
return "Low"
|
|
@@ -2181,6 +2181,7 @@ BranchPickerModal,
|
|
|
2181
2181
|
ModelPickerModal,
|
|
2182
2182
|
ThemePickerModal,
|
|
2183
2183
|
ApprovalPickerModal,
|
|
2184
|
+
ThinkingLevelModal,
|
|
2184
2185
|
UsageSummaryModal,
|
|
2185
2186
|
ContextSummaryModal,
|
|
2186
2187
|
ActivityModal,
|
|
@@ -2680,6 +2681,22 @@ ApprovalPickerModal .approval-picker-modal {
|
|
|
2680
2681
|
overflow: hidden;
|
|
2681
2682
|
}
|
|
2682
2683
|
|
|
2684
|
+
ThinkingLevelModal .thinking-level-modal {
|
|
2685
|
+
width: 72;
|
|
2686
|
+
height: 22;
|
|
2687
|
+
max-height: 86%;
|
|
2688
|
+
min-height: 16;
|
|
2689
|
+
border: heavy $border;
|
|
2690
|
+
background: $surface;
|
|
2691
|
+
padding: 1 2;
|
|
2692
|
+
overflow: hidden;
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
ThinkingLevelModal .modal-footer {
|
|
2696
|
+
margin-top: 1;
|
|
2697
|
+
color: $foreground-muted;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2683
2700
|
UsageSummaryModal .modal {
|
|
2684
2701
|
width: 108;
|
|
2685
2702
|
height: 24;
|
|
@@ -2786,6 +2803,7 @@ BranchPickerModal .modal-list,
|
|
|
2786
2803
|
ModelPickerModal .modal-list,
|
|
2787
2804
|
ThemePickerModal .modal-list,
|
|
2788
2805
|
ApprovalPickerModal .modal-list,
|
|
2806
|
+
ThinkingLevelModal .modal-list,
|
|
2789
2807
|
ActivityModal .modal-list,
|
|
2790
2808
|
AttachPickerModal .modal-list {
|
|
2791
2809
|
height: 1fr;
|
|
@@ -2804,6 +2822,7 @@ BranchPickerModal .modal-title,
|
|
|
2804
2822
|
ModelPickerModal .modal-title,
|
|
2805
2823
|
ThemePickerModal .modal-title,
|
|
2806
2824
|
ApprovalPickerModal .modal-title,
|
|
2825
|
+
ThinkingLevelModal .modal-title,
|
|
2807
2826
|
UsageSummaryModal .modal-title,
|
|
2808
2827
|
ContextSummaryModal .modal-title,
|
|
2809
2828
|
ActivityModal .modal-title,
|
|
@@ -2824,6 +2843,7 @@ BranchPickerModal .modal-body,
|
|
|
2824
2843
|
ModelPickerModal .modal-body,
|
|
2825
2844
|
ThemePickerModal .modal-body,
|
|
2826
2845
|
ApprovalPickerModal .modal-body,
|
|
2846
|
+
ThinkingLevelModal .modal-body,
|
|
2827
2847
|
UsageSummaryModal .modal-body,
|
|
2828
2848
|
ContextSummaryModal .modal-body,
|
|
2829
2849
|
ActivityModal .modal-body,
|
|
@@ -2849,6 +2869,7 @@ BranchPickerModal .modal-actions,
|
|
|
2849
2869
|
ModelPickerModal .modal-actions,
|
|
2850
2870
|
ThemePickerModal .modal-actions,
|
|
2851
2871
|
ApprovalPickerModal .modal-actions,
|
|
2872
|
+
ThinkingLevelModal .modal-actions,
|
|
2852
2873
|
UsageSummaryModal .modal-actions,
|
|
2853
2874
|
ContextSummaryModal .modal-actions,
|
|
2854
2875
|
ActivityModal .modal-actions,
|
|
@@ -2866,6 +2887,10 @@ VoiceSetupModal .modal-actions {
|
|
|
2866
2887
|
margin-bottom: 0;
|
|
2867
2888
|
}
|
|
2868
2889
|
|
|
2890
|
+
ThinkingLevelModal .modal-actions {
|
|
2891
|
+
margin-top: 1;
|
|
2892
|
+
}
|
|
2893
|
+
|
|
2869
2894
|
SessionResumeModal #resume {
|
|
2870
2895
|
width: 14;
|
|
2871
2896
|
min-width: 14;
|
|
@@ -2885,6 +2910,7 @@ BranchPickerModal #cancel,
|
|
|
2885
2910
|
ModelPickerModal #cancel,
|
|
2886
2911
|
ThemePickerModal #cancel,
|
|
2887
2912
|
ApprovalPickerModal #cancel,
|
|
2913
|
+
ThinkingLevelModal #cancel,
|
|
2888
2914
|
UsageSummaryModal #cancel,
|
|
2889
2915
|
ContextSummaryModal #cancel,
|
|
2890
2916
|
ActivityModal #cancel,
|
|
@@ -2907,6 +2933,7 @@ BranchPickerModal #cancel:hover,
|
|
|
2907
2933
|
ModelPickerModal #cancel:hover,
|
|
2908
2934
|
ThemePickerModal #cancel:hover,
|
|
2909
2935
|
ApprovalPickerModal #cancel:hover,
|
|
2936
|
+
ThinkingLevelModal #cancel:hover,
|
|
2910
2937
|
UsageSummaryModal #cancel:hover,
|
|
2911
2938
|
ContextSummaryModal #cancel:hover,
|
|
2912
2939
|
ActivityModal #cancel:hover,
|
|
@@ -3561,6 +3588,7 @@ SessionResumeModal .resume-table,
|
|
|
3561
3588
|
BranchPickerModal .resume-table,
|
|
3562
3589
|
ModelPickerModal .resume-table,
|
|
3563
3590
|
ThemePickerModal .resume-table,
|
|
3591
|
+
ThinkingLevelModal .resume-table,
|
|
3564
3592
|
AttachPickerModal .resume-table {
|
|
3565
3593
|
height: 1fr;
|
|
3566
3594
|
background: $surface-darken-1;
|
|
@@ -3572,6 +3600,7 @@ SessionResumeModal .resume-table > .datatable--header,
|
|
|
3572
3600
|
BranchPickerModal .resume-table > .datatable--header,
|
|
3573
3601
|
ModelPickerModal .resume-table > .datatable--header,
|
|
3574
3602
|
ThemePickerModal .resume-table > .datatable--header,
|
|
3603
|
+
ThinkingLevelModal .resume-table > .datatable--header,
|
|
3575
3604
|
AttachPickerModal .resume-table > .datatable--header {
|
|
3576
3605
|
background: $panel;
|
|
3577
3606
|
color: $foreground;
|
|
@@ -3581,6 +3610,7 @@ SessionResumeModal .resume-table > .datatable--even-row,
|
|
|
3581
3610
|
BranchPickerModal .resume-table > .datatable--even-row,
|
|
3582
3611
|
ModelPickerModal .resume-table > .datatable--even-row,
|
|
3583
3612
|
ThemePickerModal .resume-table > .datatable--even-row,
|
|
3613
|
+
ThinkingLevelModal .resume-table > .datatable--even-row,
|
|
3584
3614
|
AttachPickerModal .resume-table > .datatable--even-row {
|
|
3585
3615
|
background: $surface;
|
|
3586
3616
|
}
|
|
@@ -3589,6 +3619,7 @@ SessionResumeModal .resume-table > .datatable--odd-row,
|
|
|
3589
3619
|
BranchPickerModal .resume-table > .datatable--odd-row,
|
|
3590
3620
|
ModelPickerModal .resume-table > .datatable--odd-row,
|
|
3591
3621
|
ThemePickerModal .resume-table > .datatable--odd-row,
|
|
3622
|
+
ThinkingLevelModal .resume-table > .datatable--odd-row,
|
|
3592
3623
|
AttachPickerModal .resume-table > .datatable--odd-row {
|
|
3593
3624
|
background: $surface-darken-1;
|
|
3594
3625
|
}
|
|
@@ -3601,6 +3632,8 @@ ModelPickerModal .resume-table > .datatable--cursor,
|
|
|
3601
3632
|
ModelPickerModal .resume-table:focus > .datatable--cursor,
|
|
3602
3633
|
ThemePickerModal .resume-table > .datatable--cursor,
|
|
3603
3634
|
ThemePickerModal .resume-table:focus > .datatable--cursor,
|
|
3635
|
+
ThinkingLevelModal .resume-table > .datatable--cursor,
|
|
3636
|
+
ThinkingLevelModal .resume-table:focus > .datatable--cursor,
|
|
3604
3637
|
AttachPickerModal .resume-table > .datatable--cursor,
|
|
3605
3638
|
AttachPickerModal .resume-table:focus > .datatable--cursor {
|
|
3606
3639
|
background: $primary-muted;
|
|
@@ -3611,6 +3644,7 @@ SessionResumeModal .resume-table > .datatable--header-cursor,
|
|
|
3611
3644
|
BranchPickerModal .resume-table > .datatable--header-cursor,
|
|
3612
3645
|
ModelPickerModal .resume-table > .datatable--header-cursor,
|
|
3613
3646
|
ThemePickerModal .resume-table > .datatable--header-cursor,
|
|
3647
|
+
ThinkingLevelModal .resume-table > .datatable--header-cursor,
|
|
3614
3648
|
AttachPickerModal .resume-table > .datatable--header-cursor {
|
|
3615
3649
|
background: $primary;
|
|
3616
3650
|
color: $button-color-foreground;
|
|
@@ -3741,7 +3775,8 @@ ModelPickerModal #delete:hover {
|
|
|
3741
3775
|
}
|
|
3742
3776
|
|
|
3743
3777
|
ThemePickerModal #select,
|
|
3744
|
-
ApprovalPickerModal #select
|
|
3778
|
+
ApprovalPickerModal #select,
|
|
3779
|
+
ThinkingLevelModal #select {
|
|
3745
3780
|
width: 14;
|
|
3746
3781
|
min-width: 14;
|
|
3747
3782
|
text-style: bold;
|
|
@@ -3751,7 +3786,8 @@ ApprovalPickerModal #select {
|
|
|
3751
3786
|
}
|
|
3752
3787
|
|
|
3753
3788
|
ThemePickerModal #select:hover,
|
|
3754
|
-
ApprovalPickerModal #select:hover
|
|
3789
|
+
ApprovalPickerModal #select:hover,
|
|
3790
|
+
ThinkingLevelModal #select:hover {
|
|
3755
3791
|
background: $primary-lighten-1;
|
|
3756
3792
|
color: $button-color-foreground;
|
|
3757
3793
|
}
|