ite-agent 0.2.2__tar.gz → 0.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. {ite_agent-0.2.2 → ite_agent-0.2.3}/AGENTS.md +1 -1
  2. {ite_agent-0.2.2 → ite_agent-0.2.3}/PKG-INFO +1 -1
  3. {ite_agent-0.2.2 → ite_agent-0.2.3}/pyproject.toml +1 -1
  4. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/__init__.py +1 -1
  5. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_composer.py +10 -1
  6. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_dropped_attachments.py +8 -1
  7. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_command_palette.py +40 -2
  8. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/SKILL.md +0 -0
  9. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/references/document-recipes.md +0 -0
  10. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/references/ooxml-notes.md +0 -0
  11. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/__init__.py +0 -0
  12. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/_docx_core.py +0 -0
  13. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/extract_docx.py +0 -0
  14. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/inspect_docx.py +0 -0
  15. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/pack_docx.py +0 -0
  16. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/render_docx.py +0 -0
  17. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/replace_text.py +0 -0
  18. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/unpack_docx.py +0 -0
  19. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/validate_docx.py +0 -0
  20. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/scripts/write_docx.py +0 -0
  21. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/templates/letter.md +0 -0
  22. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/docx/templates/memo.md +0 -0
  23. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/SKILL.md +0 -0
  24. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/agents/openai.yaml +0 -0
  25. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/color-and-contrast.md +0 -0
  26. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/interaction-design.md +0 -0
  27. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/motion-design.md +0 -0
  28. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/responsive-design.md +0 -0
  29. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/spatial-design.md +0 -0
  30. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/typography.md +0 -0
  31. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/frontend-design/references/ux-writing.md +0 -0
  32. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/SKILL.md +0 -0
  33. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/scripts/backfill_fulltext.py +0 -0
  34. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/scripts/imanneo-videos.json +0 -0
  35. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/scripts/import_sources.py +0 -0
  36. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/scripts/load_channel.py +0 -0
  37. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/notebooklm/scripts/resolve_citations.py +0 -0
  38. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/LICENSE.txt +0 -0
  39. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/SKILL.md +0 -0
  40. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/references/layout-review.md +0 -0
  41. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/__init__.py +0 -0
  42. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/_pdf_core.py +0 -0
  43. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/extract_pdf_text.py +0 -0
  44. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/inspect_pdf.py +0 -0
  45. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/render_pdf.py +0 -0
  46. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/validate_pdf.py +0 -0
  47. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/scripts/write_pdf.py +0 -0
  48. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/pdf/templates/report.txt +0 -0
  49. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/SKILL.md +0 -0
  50. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/agents/openai.yaml +0 -0
  51. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/references/common_bug_patterns.md +0 -0
  52. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/references/security_patterns.md +0 -0
  53. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/references/test_guidelines.md +0 -0
  54. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/scripts/audit_test_coverage.py +0 -0
  55. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/repo-audit/scripts/find_common_bugs.py +0 -0
  56. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/LICENSE.txt +0 -0
  57. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/SKILL.md +0 -0
  58. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/agents/openai.yaml +0 -0
  59. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/references/openai_yaml.md +0 -0
  60. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/scripts/generate_openai_yaml.py +0 -0
  61. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/scripts/init_skill.py +0 -0
  62. {ite_agent-0.2.2 → ite_agent-0.2.3}/.agents/skills/skill-creator/scripts/quick_validate.py +0 -0
  63. {ite_agent-0.2.2 → ite_agent-0.2.3}/.github/workflows/build-runtime.yml +0 -0
  64. {ite_agent-0.2.2 → ite_agent-0.2.3}/.gitignore +0 -0
  65. {ite_agent-0.2.2 → ite_agent-0.2.3}/DESIGN.md +0 -0
  66. {ite_agent-0.2.2 → ite_agent-0.2.3}/README.md +0 -0
  67. {ite_agent-0.2.2 → ite_agent-0.2.3}/_eval_optimizer.py +0 -0
  68. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/README.md +0 -0
  69. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/agents.md +0 -0
  70. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/commands.md +0 -0
  71. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/configuration.md +0 -0
  72. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/AGENTS_MD_TIER_SYSTEM.md +0 -0
  73. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/DRAFT-remote-mobile-docs.md +0 -0
  74. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/FRICTIONLESS_INSTALL_FIRST_RUN_PRD.md +0 -0
  75. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/SPEC-BRIEF.md +0 -0
  76. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/bachs-payments-agent-handoff.md +0 -0
  77. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/chat-feed-scroll-perf.md +0 -0
  78. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/flutter-dart-runtime-rewrite-plan.md +0 -0
  79. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/flutter-tui-ui-parity-plan.md +0 -0
  80. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/ite-admin-flutter-plan.md +0 -0
  81. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/ite-pro-pricing-launch-plan.md +0 -0
  82. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/ite-remote-runtime-connection.md +0 -0
  83. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/mobile-remote-implementation-log.md +0 -0
  84. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/mobile-remote-redesign.md +0 -0
  85. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/openrouter-bundled-phase1-hosted-e2e.md +0 -0
  86. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/openrouter-bundled-usage-phase1.md +0 -0
  87. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/design/openrouter-pkce-oauth-prd.md +0 -0
  88. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/index.md +0 -0
  89. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/initialization.md +0 -0
  90. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/installation.md +0 -0
  91. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/mcp.md +0 -0
  92. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/openrouter-oauth.md +0 -0
  93. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/openrouter.md +0 -0
  94. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/skills.md +0 -0
  95. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/subagents.md +0 -0
  96. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/tools.md +0 -0
  97. {ite_agent-0.2.2 → ite_agent-0.2.3}/docs/usage.md +0 -0
  98. {ite_agent-0.2.2 → ite_agent-0.2.3}/hooks/hook-fastmcp.py +0 -0
  99. {ite_agent-0.2.2 → ite_agent-0.2.3}/iTE_Overview.md +0 -0
  100. {ite_agent-0.2.2 → ite_agent-0.2.3}/install.ps1 +0 -0
  101. {ite_agent-0.2.2 → ite_agent-0.2.3}/install.sh +0 -0
  102. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/build_runtime.py +0 -0
  103. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/decon/check_handlers.py +0 -0
  104. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/decon/gen_exports.py +0 -0
  105. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/decon/parse_handlers.py +0 -0
  106. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/github-release.sh +0 -0
  107. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/guard_mixin_imports.py +0 -0
  108. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/hook_logger.py +0 -0
  109. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/interactive_prompt_demo.py +0 -0
  110. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/pitfall_scan.py +0 -0
  111. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/publish-release.sh +0 -0
  112. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/scan_cross_mixin_attrs.py +0 -0
  113. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/scan_orphan_attributes.py +0 -0
  114. {ite_agent-0.2.2 → ite_agent-0.2.3}/scripts/scan_tool_views_imports.py +0 -0
  115. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/__init__.py +0 -0
  116. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/agent.py +0 -0
  117. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/change_history.py +0 -0
  118. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/events.py +0 -0
  119. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/session.py +0 -0
  120. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/session_manager.py +0 -0
  121. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/session_naming.py +0 -0
  122. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/agent/subagent_runtime.py +0 -0
  123. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/attachment_refs.py +0 -0
  124. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/attachments.py +0 -0
  125. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/auth/__init__.py +0 -0
  126. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/auth/openrouter_pkce.py +0 -0
  127. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/client/__init__.py +0 -0
  128. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/client/llm_client.py +0 -0
  129. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/client/response.py +0 -0
  130. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/cloud/__init__.py +0 -0
  131. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/cloud/auth.py +0 -0
  132. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/cloud/services.py +0 -0
  133. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/__init__.py +0 -0
  134. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/aside.py +0 -0
  135. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/attach.py +0 -0
  136. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/branch.py +0 -0
  137. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/cloud.py +0 -0
  138. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/csv2json.py +0 -0
  139. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/flow.py +0 -0
  140. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/general.py +0 -0
  141. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/history.py +0 -0
  142. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/hooks.py +0 -0
  143. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/info.py +0 -0
  144. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/init.py +0 -0
  145. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/model.py +0 -0
  146. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/plan.py +0 -0
  147. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/publish.py +0 -0
  148. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/remind.py +0 -0
  149. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/remote.py +0 -0
  150. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/sandbox.py +0 -0
  151. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/session.py +0 -0
  152. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/skills.py +0 -0
  153. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/subagent.py +0 -0
  154. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/commands/todos.py +0 -0
  155. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/config/__init__.py +0 -0
  156. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/config/config.py +0 -0
  157. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/config/loader.py +0 -0
  158. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/config/setup.py +0 -0
  159. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/__init__.py +0 -0
  160. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/compact_artifacts.py +0 -0
  161. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/compaction.py +0 -0
  162. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/loop_detector.py +0 -0
  163. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/manager.py +0 -0
  164. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/context/transcript.py +0 -0
  165. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/git/__init__.py +0 -0
  166. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/git/branches.py +0 -0
  167. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/git/remotes.py +0 -0
  168. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/git/working_tree.py +0 -0
  169. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/hooks/__init__.py +0 -0
  170. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/hooks/hook_system.py +0 -0
  171. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/main.py +0 -0
  172. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/memory/__init__.py +0 -0
  173. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/memory/intent.py +0 -0
  174. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/memory/manager.py +0 -0
  175. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/memory/response_intent.py +0 -0
  176. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/memory/session_memory.py +0 -0
  177. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/model_metadata.py +0 -0
  178. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/prompts/__init__.py +0 -0
  179. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/prompts/system.py +0 -0
  180. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/remote/__init__.py +0 -0
  181. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/remote/protocol.py +0 -0
  182. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/remote/security.py +0 -0
  183. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/remote/server.py +0 -0
  184. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/remote/uri.py +0 -0
  185. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/safety/__init__.py +0 -0
  186. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/safety/approval.py +0 -0
  187. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/safety/git_sandbox.py +0 -0
  188. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/safety/sandbox.py +0 -0
  189. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/skills/__init__.py +0 -0
  190. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/skills/installer.py +0 -0
  191. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/skills/manager.py +0 -0
  192. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/skills/rendering.py +0 -0
  193. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/skills/trust.py +0 -0
  194. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/telegram/__init__.py +0 -0
  195. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/telegram/_approval.py +0 -0
  196. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/telegram/_render.py +0 -0
  197. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/telegram/bot.py +0 -0
  198. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/__init__.py +0 -0
  199. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/base.py +0 -0
  200. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/__init__.py +0 -0
  201. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/apply_patch.py +0 -0
  202. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/archive_tools.py +0 -0
  203. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/config_tools.py +0 -0
  204. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/edit_file.py +0 -0
  205. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/git_tools.py +0 -0
  206. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/glob.py +0 -0
  207. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/grep.py +0 -0
  208. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/http_tools.py +0 -0
  209. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/json_tools.py +0 -0
  210. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/list_dir.py +0 -0
  211. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/media_tools.py +0 -0
  212. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/memory.py +0 -0
  213. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/plan_question.py +0 -0
  214. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/read_file.py +0 -0
  215. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/shell.py +0 -0
  216. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/skills.py +0 -0
  217. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/subagent_runtime_tools.py +0 -0
  218. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/todo.py +0 -0
  219. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/verification_tools.py +0 -0
  220. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/web_fetch.py +0 -0
  221. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/web_search.py +0 -0
  222. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/builtin/write_file.py +0 -0
  223. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/discovery.py +0 -0
  224. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/__init__.py +0 -0
  225. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/client.py +0 -0
  226. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/client_credentials.py +0 -0
  227. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/mcp_manager.py +0 -0
  228. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/mcp_tool.py +0 -0
  229. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/mcp/oauth.py +0 -0
  230. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/optimizer.py +0 -0
  231. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/policy.py +0 -0
  232. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/registry.py +0 -0
  233. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/subagent.py +0 -0
  234. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/tools/subagent_loader.py +0 -0
  235. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/__init__.py +0 -0
  236. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/assets/ite_image.png +0 -0
  237. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/__init__.py +0 -0
  238. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_cloud.py +0 -0
  239. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_helpers.py +0 -0
  240. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_panels.py +0 -0
  241. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_streaming.py +0 -0
  242. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_threads.py +0 -0
  243. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/_turn.py +0 -0
  244. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/adapters/__init__.py +0 -0
  245. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/adapters/registry.py +0 -0
  246. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/adapters/tui_adapter.py +0 -0
  247. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/app.py +0 -0
  248. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/change_tree.py +0 -0
  249. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/change_views.py +0 -0
  250. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/command_views.py +0 -0
  251. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/composer_views.py +0 -0
  252. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/legacy/app.py.backup +0 -0
  253. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/legacy/app.py.original +0 -0
  254. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/legacy/app.py.patch +0 -0
  255. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/legacy/app_prestrip.py +0 -0
  256. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/legacy/app_refactored.py +0 -0
  257. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/markdown_widget.py +0 -0
  258. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/modals.py +0 -0
  259. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/model_labels.py +0 -0
  260. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/reup.tcss +0 -0
  261. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/settings.py +0 -0
  262. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/tool_views.py +0 -0
  263. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/__init__.py +0 -0
  264. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/message_row.py +0 -0
  265. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/prompt_area.py +0 -0
  266. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/remote_bridge.py +0 -0
  267. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/side_panels.py +0 -0
  268. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/state.py +0 -0
  269. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/system_commands.py +0 -0
  270. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/thread_switcher.py +0 -0
  271. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/reup/widgets/tool_cards.py +0 -0
  272. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/ui/tool_narrative.py +0 -0
  273. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/update_check.py +0 -0
  274. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/utils/__init__.py +0 -0
  275. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/utils/errors.py +0 -0
  276. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/utils/paths.py +0 -0
  277. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/utils/text.py +0 -0
  278. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/__init__.py +0 -0
  279. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/cleanup.py +0 -0
  280. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/config.py +0 -0
  281. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/pipeline.py +0 -0
  282. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/recorder.py +0 -0
  283. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/transcription.py +0 -0
  284. {ite_agent-0.2.2 → ite_agent-0.2.3}/src/ite/voice/types.py +0 -0
  285. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_agent_continuation.py +0 -0
  286. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_agent_tool_recovery.py +0 -0
  287. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_agents_workspace_recommendation.py +0 -0
  288. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_aside_command.py +0 -0
  289. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_attachment_refs.py +0 -0
  290. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_attachments.py +0 -0
  291. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_build_runtime.py +0 -0
  292. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_bundled_docx_skill.py +0 -0
  293. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_bundled_pdf_skill.py +0 -0
  294. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_bundled_skill_creator.py +0 -0
  295. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_change_history.py +0 -0
  296. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_cli_modes.py +0 -0
  297. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_clipboard.py +0 -0
  298. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_cloud_auth.py +0 -0
  299. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_cloud_services.py +0 -0
  300. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_compaction.py +0 -0
  301. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_config_setup_requirements.py +0 -0
  302. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_config_tools.py +0 -0
  303. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_copy_detailed.py +0 -0
  304. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_execution_todo_progress.py +0 -0
  305. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_git_tools.py +0 -0
  306. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_hooks.py +0 -0
  307. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_http_archive_tools.py +0 -0
  308. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_info_commands.py +0 -0
  309. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_json_tools.py +0 -0
  310. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_llm_client.py +0 -0
  311. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_loop_detector.py +0 -0
  312. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_mcp.py +0 -0
  313. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_media_tools.py +0 -0
  314. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_memory_behavior.py +0 -0
  315. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_memory_eval_matrix.py +0 -0
  316. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_memory_lifecycle.py +0 -0
  317. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_memory_manager.py +0 -0
  318. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_openrouter_oauth_secret.py +0 -0
  319. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_openrouter_pkce.py +0 -0
  320. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_provider_error_formatting.py +0 -0
  321. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_publish_command.py +0 -0
  322. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_release_bump_skill.py +0 -0
  323. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_remote_protocol.py +0 -0
  324. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_remote_server.py +0 -0
  325. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_change_review.py +0 -0
  326. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_modals.py +0 -0
  327. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_prompt_text_area.py +0 -0
  328. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_startup.py +0 -0
  329. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_theme_guards.py +0 -0
  330. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_reup_tool_views.py +0 -0
  331. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_saved_custom_provider.py +0 -0
  332. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_session_commands.py +0 -0
  333. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_session_manager.py +0 -0
  334. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_session_naming.py +0 -0
  335. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_setup_modal.py +0 -0
  336. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_shell_heartbeat.py +0 -0
  337. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_shell_web_capabilities.py +0 -0
  338. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_skills.py +0 -0
  339. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_subagent_runtime.py +0 -0
  340. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_system_prompt.py +0 -0
  341. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_text_utils.py +0 -0
  342. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_textual_app.py +0 -0
  343. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_todos_scoped.py +0 -0
  344. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_tool_narrative.py +0 -0
  345. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_tool_param_normalization.py +0 -0
  346. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_tool_schema.py +0 -0
  347. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_tooling_v01.py +0 -0
  348. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_update_check.py +0 -0
  349. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_verification_tools.py +0 -0
  350. {ite_agent-0.2.2 → ite_agent-0.2.3}/tests/test_voice.py +0 -0
  351. {ite_agent-0.2.2 → ite_agent-0.2.3}/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.2)
7
+ - **Package:** `ite-agent` (version 0.2.3)
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ite-agent
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Your AI coding agent for your terminal
5
5
  Author: Kiishi David
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ite-agent"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  description = "Your AI coding agent for your terminal"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  from __future__ import annotations
2
2
 
3
- __version__ = "0.2.2"
3
+ __version__ = "0.2.3"
@@ -651,12 +651,21 @@ class ComposerMixin:
651
651
  slash command. When the message is purely path-like, stage the files as
652
652
  attachments and return "@name" refs so the drop sends exactly like an
653
653
  @-mention attachment. Returns None to swallow the send when the payload
654
- is path-like but no file resolved (errors are posted as notes).
654
+ is path-like but no file resolved (errors are posted as notes), except
655
+ for "/"-prefixed payloads — those are treated as slash commands and
656
+ left untouched.
655
657
  """
656
658
  result = parse_dropped_file_paths(message)
657
659
  if result.path_like_count == 0 or result.prose_count > 0:
658
660
  return message
659
661
 
662
+ # A "/"-prefixed payload that resolves to no existing file is a slash
663
+ # command (e.g. "/plan"), not a dropped attachment. Leave it untouched
664
+ # so it dispatches to run_command instead of being swallowed as a
665
+ # broken drop.
666
+ if not result.paths and message.startswith("/"):
667
+ return message
668
+
660
669
  session = getattr(getattr(self, "agent", None), "session", None)
661
670
  if result.paths and session is not None:
662
671
  pending = list(session.pending_attachment_paths)
@@ -221,10 +221,17 @@ class NormalizeDroppedPathMessageTests(unittest.TestCase):
221
221
 
222
222
  def test_invalid_path_consumed_with_note(self) -> None:
223
223
  app = self._make_app()
224
- normalized = app.normalize("/nonexistent/path/ghost.png")
224
+ normalized = app.normalize("~/nonexistent/path/ghost.png")
225
225
  self.assertIsNone(normalized)
226
226
  self.assertTrue(app.notes)
227
227
 
228
+ def test_slash_command_is_left_untouched(self) -> None:
229
+ app = self._make_app()
230
+ normalized = app.normalize("/plan")
231
+ self.assertEqual(normalized, "/plan")
232
+ self.assertEqual(app.agent.session.pending_attachment_paths, [])
233
+ self.assertEqual(app.notes, [])
234
+
228
235
 
229
236
  class RewriteTrailingDroppedPathTests(unittest.TestCase):
230
237
  def _make_app(self):
@@ -3174,14 +3174,30 @@ class ReupCommandPaletteTests(unittest.TestCase):
3174
3174
  app.agent = SimpleNamespace(
3175
3175
  session=SimpleNamespace(pending_attachment_paths=[])
3176
3176
  )
3177
- ghost = self.cwd / "does-not-exist.png"
3178
3177
 
3179
3178
  with patch.object(app, "post_attachment_note") as note:
3180
- normalized = app._normalize_dropped_path_message(str(ghost))
3179
+ normalized = app._normalize_dropped_path_message(
3180
+ "~/does-not-exist.png"
3181
+ )
3181
3182
 
3182
3183
  self.assertIsNone(normalized)
3183
3184
  note.assert_called_once()
3184
3185
 
3186
+ def test_normalize_dropped_path_message_leaves_slash_command_untouched(
3187
+ self,
3188
+ ) -> None:
3189
+ app = self._app()
3190
+ app.agent = SimpleNamespace(
3191
+ session=SimpleNamespace(pending_attachment_paths=[])
3192
+ )
3193
+
3194
+ with patch.object(app, "post_attachment_note") as note:
3195
+ normalized = app._normalize_dropped_path_message("/plan")
3196
+
3197
+ self.assertEqual(normalized, "/plan")
3198
+ note.assert_not_called()
3199
+ self.assertEqual(app.agent.session.pending_attachment_paths, [])
3200
+
3185
3201
 
3186
3202
  def test_attach_picker_stages_outside_workspace_paths(self) -> None:
3187
3203
  app = self._app()
@@ -4167,6 +4183,28 @@ class ReupCommandPaletteTests(unittest.TestCase):
4167
4183
  app._live_shell_call_state["call_prompt"].metadata["awaiting_input"]
4168
4184
  )
4169
4185
 
4186
+ def test_handle_send_dispatches_slash_command_instead_of_swallowing(self) -> None:
4187
+ app = self._app()
4188
+
4189
+ class DummyPrompt:
4190
+ def __init__(self, text: str) -> None:
4191
+ self.text = text
4192
+
4193
+ prompt = DummyPrompt("/plan")
4194
+
4195
+ async def scenario() -> None:
4196
+ with (
4197
+ patch.object(app, "query_one", return_value=prompt),
4198
+ patch.object(app, "_clear_composer_after_submit"),
4199
+ patch.object(app, "_dispatch_payload", new=AsyncMock()) as dispatch,
4200
+ ):
4201
+ await app.handle_send()
4202
+ return dispatch
4203
+
4204
+ dispatch = asyncio.run(scenario())
4205
+ dispatch.assert_awaited_once()
4206
+ self.assertEqual(dispatch.call_args.args[0]["message"], "/plan")
4207
+
4170
4208
  def test_remote_prompt_routes_text_to_waiting_shell(self) -> None:
4171
4209
  app = self._app()
4172
4210
  app._is_turn_running = True
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes