sylliptor-agent-cli 0.9.3__tar.gz → 0.9.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.
Files changed (633) hide show
  1. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/CHANGELOG.md +13 -0
  2. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/PKG-INFO +1 -1
  3. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/pyproject.toml +1 -1
  4. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/__init__.py +1 -1
  5. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/session.py +2 -0
  6. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/core.py +13 -0
  7. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat/commands.py +20 -2
  8. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/cli_common.py +76 -0
  9. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/forge_helpers.py +72 -0
  10. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/welcome.py +37 -27
  11. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/forge.py +12 -0
  12. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/rich_surface.py +81 -0
  13. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/swarm_trace.py +7 -0
  14. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_ux.py +28 -0
  15. sylliptor_agent_cli-0.9.4/tests/test_forge_ui_elements.py +240 -0
  16. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.dockerignore +0 -0
  17. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.editorconfig +0 -0
  18. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.gitattributes +0 -0
  19. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/FUNDING.yml +0 -0
  20. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  21. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  23. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  24. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/workflows/ci.yml +0 -0
  25. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/workflows/release.yml +0 -0
  26. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.github/workflows/sandbox-image.yml +0 -0
  27. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.gitignore +0 -0
  28. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/.trivyignore +0 -0
  29. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/CODE_OF_CONDUCT.md +0 -0
  30. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/CONTRIBUTING.md +0 -0
  31. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/LICENSE +0 -0
  32. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/NOTICE +0 -0
  33. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/README.md +0 -0
  34. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/RELEASING.md +0 -0
  35. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/SECURITY.md +0 -0
  36. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/README.md +0 -0
  37. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/architecture.md +0 -0
  38. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/assets/sylliptor-demo.gif +0 -0
  39. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/assets/xiaomi-mimo-logo.svg +0 -0
  40. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/credentials.md +0 -0
  41. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/custom_tools.md +0 -0
  42. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/README.md +0 -0
  43. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/custom_tools/README.md +0 -0
  44. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/custom_tools/workspace_manifest.py +0 -0
  45. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/README.md +0 -0
  46. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/block_dangerous.py +0 -0
  47. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/block_destructive_git.py +0 -0
  48. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/block_env_files.py +0 -0
  49. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/format_on_write.py +0 -0
  50. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/notify_done.py +0 -0
  51. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/notify_done_macos.py +0 -0
  52. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/sample_hooks.json +0 -0
  53. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/examples/hooks/secret_scanner.py +0 -0
  54. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/forge.md +0 -0
  55. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/hooks.md +0 -0
  56. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/mcp.md +0 -0
  57. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/plugins.md +0 -0
  58. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/quickstart.md +0 -0
  59. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/reference.md +0 -0
  60. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/sandbox.md +0 -0
  61. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/security_model.md +0 -0
  62. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/server.md +0 -0
  63. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/shell_sandbox.md +0 -0
  64. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/skills.md +0 -0
  65. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/skills_lifecycle.md +0 -0
  66. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/subagents.md +0 -0
  67. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/docs/terminals.md +0 -0
  68. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/sandbox/Dockerfile +0 -0
  69. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/sandbox/README.md +0 -0
  70. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/README.md +0 -0
  71. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/qa/__init__.py +0 -0
  72. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/qa/check_deps.py +0 -0
  73. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/refresh_litellm_model_catalog.py +0 -0
  74. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/test_live_provider_smoke.sh +0 -0
  75. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/test_provider_native.sh +0 -0
  76. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/scripts/test_web_search.sh +0 -0
  77. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/__main__.py +0 -0
  78. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/account_login.py +0 -0
  79. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/README.md +0 -0
  80. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/__init__.py +0 -0
  81. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/errors.py +0 -0
  82. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/prompt_context.py +0 -0
  83. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/routing.py +0 -0
  84. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/tools_assembly.py +0 -0
  85. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/__init__.py +0 -0
  86. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/events.py +0 -0
  87. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/exploration.py +0 -0
  88. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/read_cache.py +0 -0
  89. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/turn/snapshot.py +0 -0
  90. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/verification.py +0 -0
  91. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent/verification_commands.py +0 -0
  92. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/agent_loop.py +0 -0
  93. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/approval_scope.py +0 -0
  94. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/README.md +0 -0
  95. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/__init__.py +0 -0
  96. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/asset_read_core.py +0 -0
  97. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/budget_allocator.py +0 -0
  98. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/comprehender.py +0 -0
  99. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/index.py +0 -0
  100. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/ingestion.py +0 -0
  101. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/legacy_migration.py +0 -0
  102. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/models.py +0 -0
  103. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/ocr.py +0 -0
  104. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-000.txt +0 -0
  105. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-001.txt +0 -0
  106. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-002.txt +0 -0
  107. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-003.txt +0 -0
  108. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-004.txt +0 -0
  109. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-005.txt +0 -0
  110. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-006.txt +0 -0
  111. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-007.txt +0 -0
  112. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-008.txt +0 -0
  113. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-009.txt +0 -0
  114. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-010.txt +0 -0
  115. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-011.txt +0 -0
  116. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-012.txt +0 -0
  117. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-013.txt +0 -0
  118. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-014.txt +0 -0
  119. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-015.txt +0 -0
  120. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-016.txt +0 -0
  121. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-017.txt +0 -0
  122. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-018.txt +0 -0
  123. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-019.txt +0 -0
  124. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/ascii/f-020.txt +0 -0
  125. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/index.html +0 -0
  126. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/owl/show-owl.sh +0 -0
  127. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/paths.py +0 -0
  128. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/plan_binding.py +0 -0
  129. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/planner_context.py +0 -0
  130. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/planner_tools.py +0 -0
  131. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/prompts.py +0 -0
  132. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/replanner_context.py +0 -0
  133. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/surface.py +0 -0
  134. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/untrusted_content.py +0 -0
  135. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/usage_logger.py +0 -0
  136. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/worker_mirror.py +0 -0
  137. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/worker_section.py +0 -0
  138. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/assets/worker_tools.py +0 -0
  139. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/atomic_io.py +0 -0
  140. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/background_runner.py +0 -0
  141. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/branding.py +0 -0
  142. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/builtin_hooks/__init__.py +0 -0
  143. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/builtin_hooks/notify_done_windows.py +0 -0
  144. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/bwrap_etc.py +0 -0
  145. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli.py +0 -0
  146. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/__init__.py +0 -0
  147. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/assets_cli.py +0 -0
  148. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/assets_modal.py +0 -0
  149. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat/__init__.py +0 -0
  150. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat/loop.py +0 -0
  151. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat/rendering.py +0 -0
  152. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat/state.py +0 -0
  153. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat_resume.py +0 -0
  154. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/chat_slash_completer.py +0 -0
  155. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/__init__.py +0 -0
  156. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/_shared.py +0 -0
  157. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/chat_resume_helpers.py +0 -0
  158. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/chat_state.py +0 -0
  159. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/chat_status.py +0 -0
  160. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/chat_terminal.py +0 -0
  161. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/cli_surface.py +0 -0
  162. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/config.py +0 -0
  163. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/conventions.py +0 -0
  164. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/execution_helpers.py +0 -0
  165. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/extensions.py +0 -0
  166. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/forge.py +0 -0
  167. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/forge_asset_view.py +0 -0
  168. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/hooks.py +0 -0
  169. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/mcp.py +0 -0
  170. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/profile.py +0 -0
  171. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/prompt_helpers.py +0 -0
  172. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/report.py +0 -0
  173. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/root.py +0 -0
  174. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/sandbox.py +0 -0
  175. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/server.py +0 -0
  176. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/sessions.py +0 -0
  177. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/skills.py +0 -0
  178. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/startup.py +0 -0
  179. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/tools.py +0 -0
  180. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/commands/update.py +0 -0
  181. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/config_menu.py +0 -0
  182. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/cli_impl/setup_wizard.py +0 -0
  183. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/clipboard.py +0 -0
  184. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/compaction/__init__.py +0 -0
  185. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/compaction/conversation_compactor.py +0 -0
  186. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/compaction/importance.py +0 -0
  187. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/compaction/settings.py +0 -0
  188. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/compaction/tool_output_offload.py +0 -0
  189. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/config.py +0 -0
  190. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/conflict_auto_resolver.py +0 -0
  191. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/README.md +0 -0
  192. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/__init__.py +0 -0
  193. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/discovery.py +0 -0
  194. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/runtime.py +0 -0
  195. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/session.py +0 -0
  196. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/custom_tools/trust.py +0 -0
  197. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/diff_paths.py +0 -0
  198. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/direction_change.py +0 -0
  199. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/error_text.py +0 -0
  200. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/execution_budget.py +0 -0
  201. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/execution_context.py +0 -0
  202. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/execution_shared.py +0 -0
  203. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/README.md +0 -0
  204. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/__init__.py +0 -0
  205. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/activation.py +0 -0
  206. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/install.py +0 -0
  207. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/manifest.py +0 -0
  208. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/models.py +0 -0
  209. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/paths.py +0 -0
  210. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/registry.json +0 -0
  211. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/registry.py +0 -0
  212. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/state.py +0 -0
  213. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/extensions/workspace_trust.py +0 -0
  214. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/failure_category.py +0 -0
  215. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/feedback_report.py +0 -0
  216. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/file_classification.py +0 -0
  217. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/forge.py +0 -0
  218. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/frontmatter_utils.py +0 -0
  219. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/git_ops.py +0 -0
  220. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/git_safe.py +0 -0
  221. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/git_worktrees.py +0 -0
  222. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/README.md +0 -0
  223. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/__init__.py +0 -0
  224. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/audit.py +0 -0
  225. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/config.py +0 -0
  226. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/dispatcher.py +0 -0
  227. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/models.py +0 -0
  228. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/hooks/trust.py +0 -0
  229. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/integration_gate.py +0 -0
  230. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/interactive_input_guard.py +0 -0
  231. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/interactive_plan_mode.py +0 -0
  232. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/knowledge_base.py +0 -0
  233. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/knowledge_capture.py +0 -0
  234. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/knowledge_librarian.py +0 -0
  235. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/language_policy.py +0 -0
  236. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/litellm_static_provider.py +0 -0
  237. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/__init__.py +0 -0
  238. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/anthropic_messages.py +0 -0
  239. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/base.py +0 -0
  240. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/factory.py +0 -0
  241. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/gemini_generate_content.py +0 -0
  242. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/gemini_interactions.py +0 -0
  243. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/metadata.py +0 -0
  244. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/openai_compat.py +0 -0
  245. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/openai_responses.py +0 -0
  246. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/protocols.py +0 -0
  247. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/provider_limits.py +0 -0
  248. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/streaming.py +0 -0
  249. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm/types.py +0 -0
  250. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/llm_error_display.py +0 -0
  251. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/README.md +0 -0
  252. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/__init__.py +0 -0
  253. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/client.py +0 -0
  254. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/config.py +0 -0
  255. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/errors.py +0 -0
  256. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/forge_scope.py +0 -0
  257. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/jsonrpc.py +0 -0
  258. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/manager.py +0 -0
  259. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/models.py +0 -0
  260. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/oauth.py +0 -0
  261. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/oauth_runtime.py +0 -0
  262. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/oauth_store.py +0 -0
  263. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/prompts.py +0 -0
  264. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/resources.py +0 -0
  265. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/roots.py +0 -0
  266. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/server_requests.py +0 -0
  267. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/token_store.py +0 -0
  268. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/transport_http.py +0 -0
  269. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/transport_stdio.py +0 -0
  270. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/mcp/untrusted_content.py +0 -0
  271. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/merge_conflict_reviewer.py +0 -0
  272. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_catalog/__init__.py +0 -0
  273. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_catalog/litellm_model_prices_snapshot.json +0 -0
  274. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_catalog/litellm_model_prices_snapshot.meta.json +0 -0
  275. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_metadata_policy.py +0 -0
  276. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_metadata_utils.py +0 -0
  277. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_registry.py +0 -0
  278. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/model_router.py +0 -0
  279. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/plan_assistant.py +0 -0
  280. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/plan_mode.py +0 -0
  281. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/plan_reconciliation.py +0 -0
  282. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/plan_validation.py +0 -0
  283. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/planning_constraints.py +0 -0
  284. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/policy.py +0 -0
  285. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/profile_presets.py +0 -0
  286. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/profiles.py +0 -0
  287. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/provider_diagnostics.py +0 -0
  288. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/provider_telemetry.py +0 -0
  289. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/remote_sync.py +0 -0
  290. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/replanning.py +0 -0
  291. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/repo_scan.py +0 -0
  292. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/request_estimation.py +0 -0
  293. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/review_gate.py +0 -0
  294. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/run_lock.py +0 -0
  295. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/runtime_artifacts.py +0 -0
  296. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/runtime_context_features.py +0 -0
  297. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/runtime_kind.py +0 -0
  298. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/safety/__init__.py +0 -0
  299. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/safety/mcp_sanitize.py +0 -0
  300. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/safety/safe_http.py +0 -0
  301. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/sandbox_doctor.py +0 -0
  302. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/sandbox_runner.py +0 -0
  303. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/sandbox_settings.py +0 -0
  304. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/serialized_paths.py +0 -0
  305. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/__init__.py +0 -0
  306. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/app.py +0 -0
  307. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/auth.py +0 -0
  308. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/job_config.py +0 -0
  309. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/settings.py +0 -0
  310. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/store.py +0 -0
  311. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/server/worker_runner.py +0 -0
  312. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/session_artifacts.py +0 -0
  313. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/session_metrics.py +0 -0
  314. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/session_store.py +0 -0
  315. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/README.md +0 -0
  316. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/__init__.py +0 -0
  317. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/conventions.py +0 -0
  318. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/discovery.py +0 -0
  319. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/eval_models.py +0 -0
  320. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/eval_runner.py +0 -0
  321. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/evals.py +0 -0
  322. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/install.py +0 -0
  323. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/loader.py +0 -0
  324. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/matching.py +0 -0
  325. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/models.py +0 -0
  326. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/paths.py +0 -0
  327. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/prompting.py +0 -0
  328. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/scaffold.py +0 -0
  329. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/state.py +0 -0
  330. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/transactions.py +0 -0
  331. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/skills/validation.py +0 -0
  332. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/step_budget.py +0 -0
  333. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/subagents.py +0 -0
  334. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/__init__.py +0 -0
  335. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/base.py +0 -0
  336. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/console.py +0 -0
  337. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/events.py +0 -0
  338. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/hidden_surface.py +0 -0
  339. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/noop_surface.py +0 -0
  340. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/styles.py +0 -0
  341. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/theme.py +0 -0
  342. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/surface/types.py +0 -0
  343. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/swarm_backend.py +0 -0
  344. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/swarm_orchestrator.py +0 -0
  345. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/swarm_scheduler.py +0 -0
  346. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/swarm_worker.py +0 -0
  347. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/sylliptor_cloud.py +0 -0
  348. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/task_dependencies.py +0 -0
  349. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/task_readiness.py +0 -0
  350. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/task_scope.py +0 -0
  351. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/terminal_manager.py +0 -0
  352. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/token_budget.py +0 -0
  353. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/README.md +0 -0
  354. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/__init__.py +0 -0
  355. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/availability.py +0 -0
  356. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/fs.py +0 -0
  357. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/git.py +0 -0
  358. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/history.py +0 -0
  359. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/http_timeout.py +0 -0
  360. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/registry.py +0 -0
  361. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/search.py +0 -0
  362. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/shell.py +0 -0
  363. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/symbols.py +0 -0
  364. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/web.py +0 -0
  365. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/web_search.py +0 -0
  366. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/web_search_dashscope.py +0 -0
  367. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/web_search_provider_adapters.py +0 -0
  368. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/tools/web_search_tavily.py +0 -0
  369. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/turn_intent.py +0 -0
  370. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/updates.py +0 -0
  371. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/usage_tracker.py +0 -0
  372. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/verify_gate.py +0 -0
  373. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/web_research.py +0 -0
  374. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/web_search_adapters.py +0 -0
  375. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/workspace_binding.py +0 -0
  376. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/workspace_binding_ui.py +0 -0
  377. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/src/sylliptor_agent_cli/workspace_context.py +0 -0
  378. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/_assets_test_helpers.py +0 -0
  379. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/_terminal_matrix_harness.py +0 -0
  380. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/conftest.py +0 -0
  381. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/mcp_servers/minimal_stdio_server.py +0 -0
  382. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/sample_cases.json +0 -0
  383. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/combined_repo/.sylliptor_skills/pytest/SKILL.md +0 -0
  384. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/combined_repo/AGENTS.md +0 -0
  385. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/combined_repo/README.md +0 -0
  386. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/combined_repo/src/parser.py +0 -0
  387. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/combined_repo/tests/parser_checks.py +0 -0
  388. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/empty_authoring/README.md +0 -0
  389. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/skills_eval/workspaces/negative_control/README.md +0 -0
  390. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_1.json +0 -0
  391. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_10.json +0 -0
  392. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_11.json +0 -0
  393. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_12.json +0 -0
  394. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_2.json +0 -0
  395. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_3.json +0 -0
  396. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_4.json +0 -0
  397. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_5.json +0 -0
  398. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_6.json +0 -0
  399. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_7.json +0 -0
  400. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_8.json +0 -0
  401. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/terminal_matrix/scenario_9.json +0 -0
  402. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/tesseract_osd/english.txt +0 -0
  403. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/tesseract_osd/greek.txt +0 -0
  404. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/fixtures/tesseract_osd/japanese.txt +0 -0
  405. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_account_login.py +0 -0
  406. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_event_emission.py +0 -0
  407. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_final_step_nudge.py +0 -0
  408. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_forced_summary.py +0 -0
  409. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_hooks.py +0 -0
  410. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_host_managed_context.py +0 -0
  411. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_images.py +0 -0
  412. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_interactive_execution_posture.py +0 -0
  413. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_non_interactive.py +0 -0
  414. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_one_shot_follow_through.py +0 -0
  415. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_plugin_filter.py +0 -0
  416. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_retry_guard.py +0 -0
  417. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_review_approval.py +0 -0
  418. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_same_batch_read_dedup.py +0 -0
  419. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_small_talk.py +0 -0
  420. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_step_budget_runtime.py +0 -0
  421. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_agent_loop_tool_transcript_shaping.py +0 -0
  422. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_anthropic_messages.py +0 -0
  423. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_budget_allocator.py +0 -0
  424. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_comprehender.py +0 -0
  425. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_index.py +0 -0
  426. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_ingestion.py +0 -0
  427. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_legacy_migration.py +0 -0
  428. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_models.py +0 -0
  429. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_ocr.py +0 -0
  430. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_plan_binding.py +0 -0
  431. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_planner_context.py +0 -0
  432. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_planner_tools.py +0 -0
  433. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_replanner_context.py +0 -0
  434. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_surface.py +0 -0
  435. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_worker_mirror.py +0 -0
  436. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_worker_section.py +0 -0
  437. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_assets_worker_tools.py +0 -0
  438. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_background_runner.py +0 -0
  439. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_background_runner_sandbox.py +0 -0
  440. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_assets_slash.py +0 -0
  441. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_image_hotkeys.py +0 -0
  442. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_mode_rebuild.py +0 -0
  443. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_plan_mode.py +0 -0
  444. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_resume.py +0 -0
  445. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_session_workdir.py +0 -0
  446. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_slash_completer.py +0 -0
  447. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_chat_terminals_slash.py +0 -0
  448. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_check_deps.py +0 -0
  449. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_api_key.py +0 -0
  450. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_assets.py +0 -0
  451. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_assets_prune_legacy.py +0 -0
  452. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_config_menu_command.py +0 -0
  453. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_entrypoint.py +0 -0
  454. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_facade.py +0 -0
  455. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_impl_forge.py +0 -0
  456. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_skill_lifecycle.py +0 -0
  457. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_skills.py +0 -0
  458. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_subagents.py +0 -0
  459. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_cli_tools.py +0 -0
  460. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_clipboard.py +0 -0
  461. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_color_adaptation.py +0 -0
  462. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_compaction_settings.py +0 -0
  463. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_config.py +0 -0
  464. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_config_menu.py +0 -0
  465. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_config_menu_flow.py +0 -0
  466. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_config_menu_raw_mode.py +0 -0
  467. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_conflict_auto_resolver.py +0 -0
  468. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_conventions_cli.py +0 -0
  469. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_conversation_compaction.py +0 -0
  470. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_custom_tools_cli.py +0 -0
  471. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_custom_tools_discovery.py +0 -0
  472. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_custom_tools_runtime.py +0 -0
  473. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_custom_tools_trust.py +0 -0
  474. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_docs_alignment.py +0 -0
  475. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_execution_budget.py +0 -0
  476. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_execution_context.py +0 -0
  477. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_execution_shared_mirror.py +0 -0
  478. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_execution_shared_reporting.py +0 -0
  479. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_execution_shared_snapshot.py +0 -0
  480. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_extensions_cli.py +0 -0
  481. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_extensions_registry.py +0 -0
  482. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_extensions_state.py +0 -0
  483. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_feedback_report.py +0 -0
  484. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_file_classification.py +0 -0
  485. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge.py +0 -0
  486. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_asset_view.py +0 -0
  487. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_assets_legacy_deprecation.py +0 -0
  488. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_assets_legacy_migration_loadplan.py +0 -0
  489. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_assets_regressions.py +0 -0
  490. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_exec.py +0 -0
  491. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_review.py +0 -0
  492. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_swarm.py +0 -0
  493. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_forge_watchdog_diagnostics.py +0 -0
  494. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_fs_edit_tool.py +0 -0
  495. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_fs_file_ops_tool.py +0 -0
  496. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_fs_tools.py +0 -0
  497. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_fullaccess_audit.py +0 -0
  498. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_gemini_generate_content.py +0 -0
  499. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_gemini_interactions.py +0 -0
  500. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_apply_patch_tool.py +0 -0
  501. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_history_tool.py +0 -0
  502. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_hygiene.py +0 -0
  503. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_ops.py +0 -0
  504. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_safe.py +0 -0
  505. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_git_worktrees.py +0 -0
  506. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_history_search_tool.py +0 -0
  507. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_hooks_cli.py +0 -0
  508. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_hooks_config.py +0 -0
  509. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_importance_scoring.py +0 -0
  510. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_integration_compaction_pipeline.py +0 -0
  511. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_integration_gate.py +0 -0
  512. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_knowledge_base.py +0 -0
  513. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_knowledge_capture.py +0 -0
  514. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_knowledge_librarian.py +0 -0
  515. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_language_policy.py +0 -0
  516. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_language_policy_prompts.py +0 -0
  517. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_legacy_profile_migration.py +0 -0
  518. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_litellm_model_registry.py +0 -0
  519. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_live_provider_smoke.py +0 -0
  520. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_llm_factory_profiles.py +0 -0
  521. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_llm_metadata.py +0 -0
  522. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_llm_protocols.py +0 -0
  523. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_llm_streaming.py +0 -0
  524. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_auth_cli.py +0 -0
  525. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_config.py +0 -0
  526. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_errors.py +0 -0
  527. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_http.py +0 -0
  528. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_manager.py +0 -0
  529. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_oauth.py +0 -0
  530. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_prompts.py +0 -0
  531. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_resources.py +0 -0
  532. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_roots.py +0 -0
  533. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_sanitize.py +0 -0
  534. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_scope.py +0 -0
  535. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_mcp_stdio.py +0 -0
  536. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_merge_conflict_reviewer.py +0 -0
  537. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_model_catalog_packaging.py +0 -0
  538. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_model_metadata_policy.py +0 -0
  539. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_model_router.py +0 -0
  540. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_model_router_forge_context.py +0 -0
  541. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_native_provider_conformance.py +0 -0
  542. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_openai_compat.py +0 -0
  543. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_openai_responses.py +0 -0
  544. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_assistant.py +0 -0
  545. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_assistant_assets.py +0 -0
  546. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_assistant_forge_context.py +0 -0
  547. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_mode.py +0 -0
  548. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_reconciliation.py +0 -0
  549. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plan_validation.py +0 -0
  550. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_planning_constraints.py +0 -0
  551. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_activation.py +0 -0
  552. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_enable_disable.py +0 -0
  553. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_enable_disable_cli.py +0 -0
  554. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_install.py +0 -0
  555. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_install_cli.py +0 -0
  556. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_plugin_manifest.py +0 -0
  557. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_policy.py +0 -0
  558. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_profile_cli_commands.py +0 -0
  559. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_profile_presets.py +0 -0
  560. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_profiles.py +0 -0
  561. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_prompt_helpers.py +0 -0
  562. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_prompt_payload.py +0 -0
  563. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_prompts_invariants.py +0 -0
  564. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_protected_paths.py +0 -0
  565. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_provider_diagnostics.py +0 -0
  566. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_provider_limits.py +0 -0
  567. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_provider_telemetry.py +0 -0
  568. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_refresh_litellm_model_catalog.py +0 -0
  569. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_release_smoke.py +0 -0
  570. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_remote_sync.py +0 -0
  571. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_replanning.py +0 -0
  572. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_replanning_assets.py +0 -0
  573. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_repo_scan.py +0 -0
  574. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_request_size_telemetry.py +0 -0
  575. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_review_gate.py +0 -0
  576. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_run_mutation.py +0 -0
  577. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_runtime_context_features.py +0 -0
  578. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_safe_http.py +0 -0
  579. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_sandbox_cli.py +0 -0
  580. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_sandbox_doctor.py +0 -0
  581. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_sandbox_settings_background.py +0 -0
  582. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_search_rg_security.py +0 -0
  583. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_security_docs.py +0 -0
  584. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_serialized_paths.py +0 -0
  585. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_app.py +0 -0
  586. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_job_config.py +0 -0
  587. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_settings.py +0 -0
  588. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_upload_flow.py +0 -0
  589. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_worker_runner.py +0 -0
  590. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_server_worker_runner_args.py +0 -0
  591. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_session_metrics.py +0 -0
  592. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_session_store.py +0 -0
  593. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_setup_wizard.py +0 -0
  594. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_shell_background_integration.py +0 -0
  595. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_shell_sandbox.py +0 -0
  596. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_show_owl_matrix.py +0 -0
  597. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_skill_lifecycle.py +0 -0
  598. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_skill_lifecycle_prompting.py +0 -0
  599. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_skills.py +0 -0
  600. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_skills_evals.py +0 -0
  601. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_step_budget.py +0 -0
  602. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_subagent_turn_policy.py +0 -0
  603. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_subagents.py +0 -0
  604. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_surface.py +0 -0
  605. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_surface_console_encoding.py +0 -0
  606. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_surface_event_migration.py +0 -0
  607. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_surface_events.py +0 -0
  608. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_swarm_backend.py +0 -0
  609. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_swarm_scheduler.py +0 -0
  610. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_swarm_worker.py +0 -0
  611. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_swarm_worker_assets.py +0 -0
  612. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_symbol_search_tool.py +0 -0
  613. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_task_dependencies.py +0 -0
  614. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_task_readiness.py +0 -0
  615. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_task_scope.py +0 -0
  616. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_terminal_manager.py +0 -0
  617. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_terminal_matrix_consistency.py +0 -0
  618. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_terminal_matrix_visible_anchors.py +0 -0
  619. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_token_budget.py +0 -0
  620. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_tool_exposure_by_mode.py +0 -0
  621. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_tool_output_offload.py +0 -0
  622. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_tool_registry.py +0 -0
  623. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_updates.py +0 -0
  624. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_usage_tracker.py +0 -0
  625. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_verify_gate.py +0 -0
  626. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_verify_tool.py +0 -0
  627. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_web_fetch_tool.py +0 -0
  628. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_web_search_dashscope.py +0 -0
  629. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_web_search_tavily.py +0 -0
  630. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_web_search_tool.py +0 -0
  631. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_workspace_binding.py +0 -0
  632. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_workspace_context.py +0 -0
  633. {sylliptor_agent_cli-0.9.3 → sylliptor_agent_cli-0.9.4}/tests/test_workspace_trust.py +0 -0
@@ -6,6 +6,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.9.4] - 2026-06-16
10
+
11
+ ### Added
12
+
13
+ - Polished Forge CLI planning and execution feedback with clearer readiness, next-step,
14
+ completion, and swarm trace status lines.
15
+
16
+ ### Fixed
17
+
18
+ - Kept the welcome banner side-by-side at 80 columns when dark terminal themes add the
19
+ light owl panel.
20
+ - Restored the Forge asset count line for empty plans that already have indexed assets.
21
+
9
22
  ## [0.9.3] - 2026-06-12
10
23
 
11
24
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sylliptor-agent-cli
3
- Version: 0.9.3
3
+ Version: 0.9.4
4
4
  Summary: Local CLI coding agent powered by any API.
5
5
  Project-URL: Changelog, https://github.com/AlysisAi/Sylliptor/blob/main/CHANGELOG.md
6
6
  Project-URL: Documentation, https://github.com/AlysisAi/Sylliptor/tree/main/docs
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sylliptor-agent-cli"
7
- version = "0.9.3"
7
+ version = "0.9.4"
8
8
  description = "Local CLI coding agent powered by any API."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1,3 +1,3 @@
1
1
  __all__ = ["__version__"]
2
2
 
3
- __version__ = "0.9.3"
3
+ __version__ = "0.9.4"
@@ -922,6 +922,7 @@ class AgentSession:
922
922
  routing_mode_override: str | None = None,
923
923
  ephemeral_system_messages: list[str] | tuple[str, ...] | None = None,
924
924
  ephemeral_user_messages: list[str] | tuple[str, ...] | None = None,
925
+ cancellation_token: Any | None = None,
925
926
  ) -> int:
926
927
  return _run_turn(
927
928
  self,
@@ -930,6 +931,7 @@ class AgentSession:
930
931
  routing_mode_override=routing_mode_override,
931
932
  ephemeral_system_messages=ephemeral_system_messages,
932
933
  ephemeral_user_messages=ephemeral_user_messages,
934
+ cancellation_token=cancellation_token,
933
935
  )
934
936
 
935
937
 
@@ -436,7 +436,18 @@ def run_turn(
436
436
  routing_mode_override: str | None = None,
437
437
  ephemeral_system_messages: list[str] | tuple[str, ...] | None = None,
438
438
  ephemeral_user_messages: list[str] | tuple[str, ...] | None = None,
439
+ cancellation_token: Any | None = None,
439
440
  ) -> int:
441
+ def _throw_if_cancelled() -> None:
442
+ if cancellation_token is None:
443
+ return
444
+ throw_if_cancelled = getattr(cancellation_token, "throw_if_cancelled", None)
445
+ if callable(throw_if_cancelled):
446
+ throw_if_cancelled("cancelled_by_user")
447
+ return
448
+ if bool(getattr(cancellation_token, "is_cancelled", False)):
449
+ raise RuntimeError("cancelled_by_user")
450
+
440
451
  def _phase_update(message: str) -> None:
441
452
  clean = message.strip()
442
453
  if not clean:
@@ -450,6 +461,7 @@ def run_turn(
450
461
  image_paths = list(image_paths or [])
451
462
  assistant_message_emitted = False
452
463
  steps_attempted = 0
464
+ _throw_if_cancelled()
453
465
 
454
466
  def _finish_turn(code: int, *, reason: str, final_text: str = "") -> int:
455
467
  if self.hook_dispatcher is not None:
@@ -1069,6 +1081,7 @@ def run_turn(
1069
1081
  last_edit_stagnation_payload: dict[str, Any] | None = None
1070
1082
 
1071
1083
  for step in range(1, turn_max_steps + 1):
1084
+ _throw_if_cancelled()
1072
1085
  steps_attempted = step
1073
1086
  stream_used = self.stream
1074
1087
  step_ephemeral_suffix_system_messages: list[str] = []
@@ -11,7 +11,12 @@ import typer
11
11
  from rich.text import Text
12
12
 
13
13
  from ...plan_validation import PlannerFailedError, raise_for_execution_ready_plan
14
- from ...surface.styles import STYLE_EMPHASIS
14
+ from ...surface.styles import (
15
+ STYLE_CHROME,
16
+ STYLE_EMPHASIS,
17
+ STYLE_SUCCESS,
18
+ STYLE_WARN,
19
+ )
15
20
  from ...swarm_orchestrator import acquire_swarm_mutation_guard
16
21
  from .state import _ChatExecutionRequest, _ChatPlanModeState, _ForgeChatState
17
22
 
@@ -1953,7 +1958,20 @@ def _handle_forge_chat_command(
1953
1958
  f"Execution finished with issues · {failed_tasks} failed · "
1954
1959
  f"{remaining_tasks} remaining."
1955
1960
  )
1956
- _print_forge_meta(console=console, message=headline, style=STYLE_EMPHASIS)
1961
+ done_ok = total_tasks > 0 and failed_tasks == 0 and remaining_tasks == 0 and code == 0
1962
+ console.print(
1963
+ _forge_phase_rule(console=console, label="DONE"),
1964
+ highlight=False,
1965
+ )
1966
+ dot = "●" if _forge_supports_unicode_glyphs(console) else "*"
1967
+ console.print(
1968
+ Text.assemble(
1969
+ ("│ ", STYLE_CHROME),
1970
+ (f"{dot} ", STYLE_SUCCESS if done_ok else STYLE_WARN),
1971
+ (headline, STYLE_EMPHASIS),
1972
+ ),
1973
+ highlight=False,
1974
+ )
1957
1975
  _print_forge_meta(
1958
1976
  console=console,
1959
1977
  message=(
@@ -160,6 +160,7 @@ from ...extensions.state import (
160
160
  )
161
161
  from ...extensions.workspace_trust import is_workspace_trusted
162
162
  from ...surface.styles import (
163
+ STYLE_ACCENT,
163
164
  STYLE_CHROME,
164
165
  STYLE_CONTENT,
165
166
  STYLE_DESELECTED_DESC,
@@ -627,6 +628,81 @@ def _print_forge_error(*, console: Console, message: str) -> None:
627
628
  )
628
629
 
629
630
 
631
+ def _forge_supports_unicode_glyphs(console: Console) -> bool:
632
+ """Whether the console encoding can render the status/box glyphs we add."""
633
+ encoding = str(getattr(console, "encoding", "") or "")
634
+ if not encoding:
635
+ return True
636
+ try:
637
+ "●○─→✓✗".encode(encoding)
638
+ except (LookupError, UnicodeError):
639
+ return False
640
+ return True
641
+
642
+
643
+ def _forge_phase_rule(*, console: Console, label: str, style: str = STYLE_EMPHASIS) -> Any:
644
+ """A quiet ``│ -- LABEL --...`` separator sized to the terminal width."""
645
+ from rich.text import Text
646
+
647
+ clean_label = str(label or "").strip()
648
+ dash = "─" if _forge_supports_unicode_glyphs(console) else "-"
649
+ try:
650
+ width = int(getattr(console, "width", 0) or 0)
651
+ except (TypeError, ValueError):
652
+ width = 0
653
+ width = max(width, _MIN_TERMINAL_COLUMNS)
654
+ lead = dash * 2
655
+ if not clean_label:
656
+ body = max(3, width - 2)
657
+ return Text.assemble(("│ ", STYLE_CHROME), (dash * body, STYLE_CHROME))
658
+ used = 2 + len(lead) + 1 + len(clean_label) + 1
659
+ tail = max(3, width - used)
660
+ return Text.assemble(
661
+ ("│ ", STYLE_CHROME),
662
+ (f"{lead} ", STYLE_CHROME),
663
+ (clean_label, style),
664
+ (" ", STYLE_CHROME),
665
+ (dash * tail, STYLE_CHROME),
666
+ )
667
+
668
+
669
+ def _print_forge_suggestion(*, console: Console, message: str) -> None:
670
+ """Print a dim ``│ -> ...`` next-step nudge under a Forge command result."""
671
+ from rich.text import Text
672
+
673
+ arrow = "→" if _forge_supports_unicode_glyphs(console) else "->"
674
+ console.print(
675
+ Text.assemble(
676
+ ("│ ", STYLE_CHROME),
677
+ (f"{arrow} ", STYLE_ACCENT),
678
+ (str(message or ""), STYLE_DIM),
679
+ ),
680
+ highlight=False,
681
+ )
682
+
683
+
684
+ def _forge_plan_has_requirement(plan: dict[str, Any]) -> bool:
685
+ requirements = plan.get("requirements") if isinstance(plan, dict) else None
686
+ if not isinstance(requirements, list):
687
+ return False
688
+ return any(bool(str(requirement_text(req)).strip()) for req in requirements)
689
+
690
+
691
+ def _forge_plan_state(plan: dict[str, Any]) -> str:
692
+ """Classify a Forge plan into empty/planning/ready/done for UI guidance."""
693
+ if not isinstance(plan, dict):
694
+ return "empty"
695
+ tasks = plan.get("tasks") or []
696
+ has_tasks = isinstance(tasks, list) and len(tasks) > 0
697
+ if not has_tasks:
698
+ return "planning" if _forge_plan_has_requirement(plan) else "empty"
699
+ done, failed, remaining = _forge_task_status_counts(plan)
700
+ total = done + failed + remaining
701
+ if total > 0 and failed == 0 and remaining == 0:
702
+ return "done"
703
+ return "ready"
704
+
705
+
630
706
  def _forge_task_status_counts(plan: dict[str, Any]) -> tuple[int, int, int]:
631
707
  from ...swarm_scheduler import canonical_task_status
632
708
 
@@ -64,8 +64,63 @@ def _forge_help_panel() -> Panel:
64
64
  return _chat_commands_panel(ui_mode="forge")
65
65
 
66
66
 
67
+ def _forge_plan_readiness_line(*, console: Console, plan: dict[str, Any]) -> Any:
68
+ """A one-line go/no-go readiness chip derived from the current plan state."""
69
+ from rich.text import Text
70
+
71
+ use_unicode = _forge_supports_unicode_glyphs(console)
72
+ filled = "●" if use_unicode else "*"
73
+ hollow = "○" if use_unicode else "o"
74
+ tasks = plan.get("tasks") or []
75
+ has_tasks = isinstance(tasks, list) and len(tasks) > 0
76
+ if not has_tasks:
77
+ if _forge_plan_has_requirement(plan):
78
+ req_count = sum(
79
+ 1 for req in (plan.get("requirements") or []) if str(requirement_text(req)).strip()
80
+ )
81
+ req_word = "requirement" if req_count == 1 else "requirements"
82
+ text = f"{req_count} {req_word}, 0 tasks — describe the work or /task to add tasks"
83
+ else:
84
+ text = "no tasks yet · add /goal then /task to start planning"
85
+ return Text.assemble(("│ ", STYLE_CHROME), (f"{hollow} ", STYLE_DIM), (text, STYLE_DIM))
86
+ done, failed, remaining = _forge_task_status_counts(plan)
87
+ total = done + failed + remaining
88
+ if failed > 0:
89
+ task_word = "task" if failed == 1 else "tasks"
90
+ text = f"needs attention · {failed} {task_word} blocked — see status column"
91
+ glyph_style = STYLE_WARN
92
+ elif remaining == 0 and total > 0:
93
+ task_word = "task" if total == 1 else "tasks"
94
+ text = f"all tasks done · {done} of {total} {task_word} finished"
95
+ glyph_style = STYLE_SUCCESS
96
+ else:
97
+ task_word = "task" if total == 1 else "tasks"
98
+ text = f"ready to execute · {total} {task_word} · 0 blocked"
99
+ glyph_style = STYLE_SUCCESS
100
+ return Text.assemble(("│ ", STYLE_CHROME), (f"{filled} ", glyph_style), (text, STYLE_DIM))
101
+
102
+
103
+ def _forge_next_step_line(*, console: Console, plan: dict[str, Any]) -> Any:
104
+ """A state-aware ``Next`` hint naming the single best next command."""
105
+ from rich.text import Text
106
+
107
+ _ = console
108
+ hint = {
109
+ "empty": "paste your goal, or /goal then /task to start planning",
110
+ "planning": "/show to review, then /execute plan when ready",
111
+ "ready": "/execute plan to start the run",
112
+ "done": "run complete · /done to save, or /back to chat",
113
+ }.get(_forge_plan_state(plan), "/help for commands")
114
+ return Text.assemble(
115
+ ("│ ", STYLE_CHROME),
116
+ ("Next · ", STYLE_ACCENT),
117
+ (hint, STYLE_DIM),
118
+ )
119
+
120
+
67
121
  def _forge_enter_panel(
68
122
  *,
123
+ console: Console,
69
124
  paths: RunPaths,
70
125
  plan: dict[str, Any],
71
126
  entry_kind: str,
@@ -91,6 +146,8 @@ def _forge_enter_panel(
91
146
  text="/show for summary · /execute plan when ready · /help for commands",
92
147
  style="dim",
93
148
  ),
149
+ _forge_plan_readiness_line(console=console, plan=plan),
150
+ _forge_next_step_line(console=console, plan=plan),
94
151
  )
95
152
 
96
153
 
@@ -270,6 +327,7 @@ def _show_forge_plan_summary(*, console: Console, paths: RunPaths, plan: dict[st
270
327
  message=f"Run {paths.run_id} · {task_count} tasks · {asset_count} assets",
271
328
  style=STYLE_EMPHASIS,
272
329
  )
330
+ console.print(_forge_plan_readiness_line(console=console, plan=plan), highlight=False)
273
331
  _print_forge_meta(console=console, message=f"Goal · {goal}", style=STYLE_CONTENT)
274
332
  _print_forge_meta(console=console, message=f"Summary · {summary}", style=STYLE_CONTENT)
275
333
  requirements = plan.get("requirements") or []
@@ -290,6 +348,18 @@ def _show_forge_plan_summary(*, console: Console, paths: RunPaths, plan: dict[st
290
348
  style="dim",
291
349
  )
292
350
 
351
+ if not _forge_has_usable_plan_input(plan):
352
+ if asset_count:
353
+ _print_forge_meta(console=console, message=f"Assets · {asset_count}", style="dim")
354
+ _print_forge_meta(console=console, message="This plan is empty.", style=STYLE_EMPHASIS)
355
+ _print_forge_meta(
356
+ console=console,
357
+ message="Add work two ways: paste a goal/spec, or use /goal then /task.",
358
+ style=STYLE_CONTENT,
359
+ )
360
+ console.print(_forge_next_step_line(console=console, plan=plan), highlight=False)
361
+ return
362
+
293
363
  table = _forge_task_table()
294
364
  table.add_column("id", style="dim", no_wrap=True, ratio=1)
295
365
  table.add_column("status", style="dim", no_wrap=True, ratio=1)
@@ -311,6 +381,7 @@ def _show_forge_plan_summary(*, console: Console, paths: RunPaths, plan: dict[st
311
381
  table.add_row("-", "-", "(no tasks yet)", "-", "off")
312
382
  console.print(table)
313
383
  _print_forge_meta(console=console, message=f"Assets · {asset_count}", style="dim")
384
+ console.print(_forge_next_step_line(console=console, plan=plan), highlight=False)
314
385
 
315
386
 
316
387
  def _show_forge_plan_markdown(
@@ -1012,6 +1083,7 @@ def _enter_forge_mode(
1012
1083
  )
1013
1084
  console.print(
1014
1085
  _forge_enter_panel(
1086
+ console=console,
1015
1087
  paths=paths,
1016
1088
  plan=plan,
1017
1089
  entry_kind=entry_selection.entry_kind,
@@ -451,42 +451,52 @@ def printWelcome(
451
451
  ]
452
452
 
453
453
  if owl_frames:
454
- right_width = max(
455
- safe_line_width - visibleLength(indent) - logo_width - visibleLength(gap),
456
- 1,
457
- )
458
- detail_lines = welcome_detail_lines(right_width)
459
- required_side_by_side_width = visibleLength(indent) + logo_width + visibleLength(gap)
460
- required_side_by_side_width += max(
461
- (visibleLength(line) for line in detail_lines),
462
- default=0,
463
- )
464
- if safe_line_width >= required_side_by_side_width:
454
+ side_by_side_layouts = [(indent, gap)]
455
+ if indent or visibleLength(gap) > 1:
456
+ side_by_side_layouts.append(("", " "))
457
+ for left_indent, middle_gap in side_by_side_layouts:
458
+ right_width = max(
459
+ safe_line_width
460
+ - visibleLength(left_indent)
461
+ - logo_width
462
+ - visibleLength(middle_gap),
463
+ 1,
464
+ )
465
+ detail_lines = welcome_detail_lines(right_width)
466
+ required_side_by_side_width = (
467
+ visibleLength(left_indent) + logo_width + visibleLength(middle_gap)
468
+ )
469
+ required_side_by_side_width += max(
470
+ (visibleLength(line) for line in detail_lines),
471
+ default=0,
472
+ )
473
+ if safe_line_width < required_side_by_side_width:
474
+ continue
465
475
  right_start = max((len(logo_frame) - len(detail_lines)) // 2, 0)
466
476
  rendered_lines = []
467
477
  total_rows = max(len(logo_frame), right_start + len(detail_lines))
468
478
  for row_index in range(total_rows):
469
479
  row = logo_frame[row_index] if row_index < len(logo_frame) else ""
470
- line = f"{indent}{padLine(row, logo_width)}"
480
+ line = f"{left_indent}{padLine(row, logo_width)}"
471
481
  right_index = row_index - right_start
472
482
  if 0 <= right_index < len(detail_lines):
473
- line = f"{line}{gap}{detail_lines[right_index]}"
483
+ line = f"{line}{middle_gap}{detail_lines[right_index]}"
474
484
  rendered_lines.append(_clip_visible_line(line.rstrip(), safe_line_width))
475
485
  return rendered_lines
476
- else:
477
- rendered_lines = []
478
- rendered_lines.extend(
479
- _clip_visible_line(f"{indent}{row.rstrip()}".rstrip(), safe_line_width)
480
- for row in logo_frame
481
- )
482
- rendered_lines.append("")
483
- full_detail_width = max(safe_line_width - visibleLength(indent), 1)
484
- full_detail_lines = welcome_detail_lines(full_detail_width)
485
- rendered_lines.extend(
486
- _clip_visible_line(f"{indent}{line}".rstrip(), safe_line_width)
487
- for line in full_detail_lines
488
- )
489
- return rendered_lines
486
+
487
+ rendered_lines = []
488
+ rendered_lines.extend(
489
+ _clip_visible_line(f"{indent}{row.rstrip()}".rstrip(), safe_line_width)
490
+ for row in logo_frame
491
+ )
492
+ rendered_lines.append("")
493
+ full_detail_width = max(safe_line_width - visibleLength(indent), 1)
494
+ full_detail_lines = welcome_detail_lines(full_detail_width)
495
+ rendered_lines.extend(
496
+ _clip_visible_line(f"{indent}{line}".rstrip(), safe_line_width)
497
+ for line in full_detail_lines
498
+ )
499
+ return rendered_lines
490
500
 
491
501
  context_line = _welcome_context_line(
492
502
  workspace=workspace,
@@ -337,6 +337,7 @@ def forge_plan(
337
337
  console.print(line)
338
338
  console.print("Planning loop started. Type /help for commands. Type /done to finish.")
339
339
  assistant_enabled = False
340
+ planning_suggested: set[str] = set()
340
341
  planner_state = _ForgePlannerSessionState(
341
342
  workspace_context=(
342
343
  _workspace_context_payload_for_paths(paths=paths) or workspace_scan.to_dict()
@@ -460,6 +461,12 @@ def forge_plan(
460
461
  plan["summary"] = goal
461
462
  save_plan(paths, plan)
462
463
  console.print("Project goal updated.")
464
+ if "goal" not in planning_suggested:
465
+ planning_suggested.add("goal")
466
+ console.print(
467
+ "[dim]Next: add tasks with /task <title>, or describe the work and "
468
+ "let the planner draft them.[/dim]"
469
+ )
463
470
  append_transcript_note(paths, role="system", message="Updated project goal.")
464
471
  continue
465
472
  if cmd == "/task":
@@ -484,6 +491,11 @@ def forge_plan(
484
491
  continue
485
492
  save_plan(paths, plan)
486
493
  console.print(f"Added task: {task['id']} - {task['title']}")
494
+ if "task" not in planning_suggested:
495
+ planning_suggested.add("task")
496
+ console.print(
497
+ "[dim]Next: add more tasks, or /done to save and validate the plan.[/dim]"
498
+ )
487
499
  append_transcript_note(paths, role="system", message=f"Added task {task['id']}.")
488
500
  continue
489
501
 
@@ -285,6 +285,32 @@ def _progress_message_completes_activity(message: str) -> bool:
285
285
  return any(clean.startswith(prefix) for prefix in _TERMINAL_PROGRESS_PREFIXES)
286
286
 
287
287
 
288
+ _SWARM_TRACE_SUCCESS_KEYWORDS = (
289
+ "merged successfully",
290
+ "applied successfully",
291
+ "accepted verified",
292
+ "review approved",
293
+ "verification passed",
294
+ "verified no-op",
295
+ "completed successfully",
296
+ )
297
+
298
+
299
+ def _swarm_trace_severity(phase: str, message: str) -> str:
300
+ """Classify a swarm trace line into error/warning/success/neutral."""
301
+ normalized_phase = str(phase or "").strip().lower()
302
+ normalized_message = str(message or "").strip().lower()
303
+ if normalized_phase.endswith(".error"):
304
+ return "error"
305
+ if normalized_phase.endswith(".warning") or normalized_message.startswith("warning"):
306
+ return "warning"
307
+ if "warning:" in normalized_message:
308
+ return "warning"
309
+ if any(keyword in normalized_message for keyword in _SWARM_TRACE_SUCCESS_KEYWORDS):
310
+ return "success"
311
+ return "neutral"
312
+
313
+
288
314
  class _ThinkingSpinnerRenderable:
289
315
  def __init__(self, surface: RichSurface) -> None:
290
316
  self._surface = surface
@@ -631,6 +657,61 @@ class RichSurface:
631
657
  if not self._assistant_stream_open and not self._tool_start_info:
632
658
  self._start_thinking_spinner(label="Thinking...")
633
659
 
660
+ def _supports_unicode_glyphs(self) -> bool:
661
+ encoding = str(getattr(self.console, "encoding", "") or "")
662
+ if not encoding:
663
+ return True
664
+ try:
665
+ "✓✗".encode(encoding)
666
+ except (LookupError, UnicodeError):
667
+ return False
668
+ return True
669
+
670
+ def _swarm_severity_glyph(self, severity: str) -> tuple[str, str]:
671
+ use_unicode = self._supports_unicode_glyphs()
672
+ if severity == "error":
673
+ return (("✗" if use_unicode else "x"), _STYLE_FAILURE)
674
+ if severity == "success":
675
+ return (("✓" if use_unicode else "v"), _STYLE_SUCCESS)
676
+ if severity == "warning":
677
+ return ("!", _STYLE_WARNING)
678
+ return ("•", _STYLE_CHROME)
679
+
680
+ def on_swarm_trace(
681
+ self,
682
+ message: str,
683
+ *,
684
+ phase: str = "",
685
+ task_id: str | None = None,
686
+ ) -> None:
687
+ """Render a live swarm trace line, colorizing verify/review/merge outcomes."""
688
+ _ = task_id
689
+ if self._trace_level == "off":
690
+ return
691
+ severity = _swarm_trace_severity(phase, message)
692
+ if severity == "neutral":
693
+ self.on_progress_update(message)
694
+ return
695
+ self._stop_thinking_spinner()
696
+ clean = _redact(str(message or "").strip())
697
+ if not clean:
698
+ return
699
+ glyph, glyph_style = self._swarm_severity_glyph(severity)
700
+ line_key = f"swarm-trace:{severity}\0{clean}"
701
+ if line_key == self._last_trace_line_key:
702
+ return
703
+ self._last_trace_line_key = line_key
704
+ self._thinking_open = True
705
+ self.console.print(
706
+ Text.assemble((f"{glyph} ", glyph_style), (clean, _STYLE_META)),
707
+ highlight=False,
708
+ )
709
+ if _progress_message_completes_activity(message):
710
+ self._stop_thinking_spinner()
711
+ return
712
+ if not self._assistant_stream_open and not self._tool_start_info:
713
+ self._start_thinking_spinner(label="Reasoning...")
714
+
634
715
  def on_subagent_start(self, event: SubagentStartEvent) -> None:
635
716
  if self._trace_level == "off":
636
717
  return
@@ -217,6 +217,13 @@ class SerializedSwarmTraceSink:
217
217
  )
218
218
  except Exception:
219
219
  pass
220
+ trace_handler = getattr(self.surface, "on_swarm_trace", None)
221
+ if callable(trace_handler):
222
+ try:
223
+ trace_handler(message, phase=event.phase, task_id=event.task_id)
224
+ return
225
+ except Exception:
226
+ pass
220
227
  handler = getattr(self.surface, "on_progress_update", None)
221
228
  if callable(handler):
222
229
  try:
@@ -942,6 +942,34 @@ def test_print_welcome_banner_keeps_compact_owl_left_at_80_columns(monkeypatch)
942
942
  assert any("▝▜██▅▅▅▅▅▅▅██▛▘" in line for line in plain_lines)
943
943
 
944
944
 
945
+ def test_print_welcome_banner_keeps_dark_panel_owl_left_at_80_columns(
946
+ monkeypatch,
947
+ ) -> None:
948
+ monkeypatch.setattr(
949
+ cli_mod.shutil,
950
+ "get_terminal_size",
951
+ lambda fallback=(80, 20): os.terminal_size((80, 20)),
952
+ )
953
+ monkeypatch.delenv("NO_COLOR", raising=False)
954
+ monkeypatch.delenv("OWL_THEME", raising=False)
955
+ monkeypatch.setenv("COLORFGBG", "15;0")
956
+
957
+ banner = cli_mod.printWelcome(
958
+ workspace=Path.home() / "myproject",
959
+ model="anthropic/opus-4.7",
960
+ version="0.8.2",
961
+ )
962
+ plain_lines = [cli_mod.stripAnsi(line) for line in banner.splitlines()]
963
+ plain = "\n".join(plain_lines)
964
+
965
+ assert "\x1b[48;5;231m" in banner
966
+ assert all(len(line) < 80 for line in plain_lines)
967
+ assert "..." not in plain
968
+ assert "model opus-4.7 version 0.8.2" in plain
969
+ assert any("\u2588" in line and "Sylliptor" in line for line in plain_lines)
970
+ assert any("\u2588" in line and "workspace ~/myproject" in line for line in plain_lines)
971
+
972
+
945
973
  def test_print_welcome_banner_keeps_long_context_off_terminal_edge_at_80_columns(
946
974
  monkeypatch,
947
975
  ) -> None: