bog-agents-cli 0.9.2__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.
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/CHANGELOG.md +12 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/PKG-INFO +1 -1
- bog_agents_cli-0.9.4/bog_agents_cli/_version.py +3 -0
- bog_agents_cli-0.9.4/bog_agents_cli/headless_commands.py +254 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/main.py +26 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/non_interactive.py +99 -6
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/ui.py +1 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/pyproject.toml +1 -1
- bog_agents_cli-0.9.4/tests/unit_tests/test_headless_commands.py +88 -0
- bog_agents_cli-0.9.4/tests/unit_tests/test_non_interactive_tool_calls.py +126 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/uv.lock +7 -3
- bog_agents_cli-0.9.2/bog_agents_cli/_version.py +0 -3
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/.gitignore +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/Makefile +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/README.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/__main__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_bedrock.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_constants.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_debug.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_observability.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_panic.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_proc.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_server_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_server_constants.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_settings_cascade.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_spec.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_subprocess_stderr.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/_testing_models.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/agent.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/api_keys.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/app.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/app.tcss +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/ask_user.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/auto_commit.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/auto_mode.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/background_agents.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bedrock_refresh.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/browser_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/built_in_skills/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/built_in_skills/expert_starter_rules/starter.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/go/code-reviewer/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/node/code-reviewer/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/node/react-ink-artist/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/node/test-author/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/python/code-reviewer/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/python/refactorer/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/python/test-author/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/rust/code-reviewer/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/bundled_agents/rust/test-author/AGENTS.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/causal/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/causal/controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/causal/ledger.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/causal/middleware.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/causal/render.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/claude_code_compat.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cli_sounds.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/clipboard.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_benchmark.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_build.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_call.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_checkpoint.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_daemon.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_explain.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_index.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_memory_sync.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_pr_review.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_test.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_undo.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cmd_verify.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/code_intelligence_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/command_registry.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/_base.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/_registry.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/agent.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/analysis.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/enterprise.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/general.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/git.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/info.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/multimodal.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/quality.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/session.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/ui.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/commands/web.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compact_selective.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/audit_pack.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/cron.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/evidence.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/examples/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/examples/audit-nightly.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/examples/soc2-baseline.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/report.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/compliance/runner.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/computer_use.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/configurable_model.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/conversation_buffer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/cross-platform-notes.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/daemon_client.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dashboard.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/default_agent_prompt.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/blog-post.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/bug-investigation.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/code-review.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/dependency-audit.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/github-issue-autofix.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/jira-ticket-autofix.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/morning-standup.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/new-feature.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/onboarding-guide.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/readme-auto-updater.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/security-scan.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/sprint-planning.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/pipelines/weekly-report.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults/prompt_library.toml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/defaults_seeder.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/devil.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/doctor.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/doctor_deep.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dream.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/dashboard.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/domain.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/dream_engine.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/imagination.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/laws.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/lifecycle.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/rule_proposer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/runner.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/scheduler.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/seeds.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/shared_memory.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/telemetry.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/dreamscape/violations.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/actions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/entrypoint.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/replay_model.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/runner.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/drive/snapshot.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/enterprise_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/_helpers.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/propose.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/status.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/watch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/wizard.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert/write.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert_controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/expert_watch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/extensibility.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/extensions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/feature_helpers.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/feedback_loop.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/file_ops.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/file_watcher.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/handoff.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/hooks.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/image_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/imagine.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/input.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/input_shortcuts.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/daytona.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/docker.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/langsmith.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/modal.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/runloop.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/sandbox_factory.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/integrations/sandbox_provider.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/io_utils.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/jobs_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/json_output.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/jury.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/keybindings.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/langsmith_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/local_context.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/mcp_config_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/mcp_registry.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/mcp_tools.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/mcp_trust.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/media_utils.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/mentions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/model_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/multi_agent.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/multi_model_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/oauth_mcp.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/orchestrator.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/orchestrator_controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/output.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/jobs.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/persona.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/research.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/runner.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/peat/scheduler.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/personas.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/pipeline.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/plugin_marketplace.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/policy_prove/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/policy_prove/controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/policy_prove/invariant.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/policy_prove/prover.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/postmortem.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/pr_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/pr_output.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/preflight.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/profiles.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/project_hooks.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/project_memory.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/project_utils.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/prompt_library.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/prompts.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/provider_catalog.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/proxy_tools.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/py.typed +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/qa/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/qa/ac.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/qa/artifact.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/qa/executor.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/qa/plan.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/race.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/recipes.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/recommend.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train_sources/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train_sources/base.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train_sources/halo.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/release_train_sources/jira.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_assets/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_assets/ssh_cancel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_assets/ssh_status.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_assets/ssh_submit.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_assets/ssh_worker.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_client.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/remote_sandbox.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/replay.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/repo_map_display.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/review_command.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/scratch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/server.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/server_graph.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/server_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/session_fork.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/session_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/sessions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/sidecar.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/sidecar_controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/skill_flywheel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/skills/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/skills/commands.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/skills/load.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/smart_context_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/smoketest.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/squad.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/standing_orders.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/streaming_diff.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/subagents.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/system_prompt.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/teach.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/team_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/team_orchestration.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/telephone.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/test_tools_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/textual_adapter.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/time_travel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/timeouts.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tool_display.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tools.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/exporters/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/exporters/claude_code.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/signing.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/tracefile/spec.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/unicode_security.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/update_check.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/vars.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/vars_store.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/vault.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/web_fetch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/web_search.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/whisper.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/_links.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/agents_panel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/approval.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/ask_user.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/autocomplete.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/chat_input.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/diff.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/history.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/loading.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/mcp_viewer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/message_store.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/messages.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/model_selector.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/pipeline_screen.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/prompt_library_screen.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/settings_screen.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/status.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/telephone.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/thread_selector.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/tool_renderers.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/tool_widgets.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/bog_agents_cli/widgets/welcome.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/arxiv-search/SKILL.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/skill-creator/SKILL.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/examples/skills/web-research/SKILL.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/images/cli.png +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/scripts/check_imports.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/scripts/install.sh +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/README.md +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/conftest.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/conftest.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/test_acp_mode.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/test_compact_resume.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/test_dreamscape_e2e.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/test_sandbox_factory.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/integration_tests/test_sandbox_operations.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/conftest.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/scripts/help_modal.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/scripts/snapshot.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/scripts/type_and_submit.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/scripts/vars.yaml +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/test_actions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/test_replay_model.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/drive/test_runner.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/skills/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/skills/test_commands.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/skills/test_load.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_agent.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_always_ask.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_anthropic_httpx_per_loop.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_api_keys.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_app.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_apply_plan_models.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_approval.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_args.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_ask_user.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_async_command.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_auto_commit.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_auto_mode_rules.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_autocomplete.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_bedrock.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_bedrock_async.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_bedrock_auth.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_bedrock_refresh.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_causal.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_charset.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_charset_detect.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_chat_input.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_clipboard.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_benchmark.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_build.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_checkpoint.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_explain.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_index.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_memory_sync.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_pr_review.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_test.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_undo.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_cmd_verify_no_output.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_command_registry_handlers.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_commands_registry.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_compact.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_compact_tool.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_compliance.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_computer_use.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_configurable_model.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_conversation_buffer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_debug.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_docker_sandbox_arg.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_doctor.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_doctor_deep.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_dreamscape.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_dreamscape_rule_proposer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_end_to_end.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_exception_handling.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_expert_controller.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_expert_watch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_expert_wizard_cli.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_extensibility.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_extensions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_feedback_loop.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_file_ops.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_first_run_no_api_key.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_hierarchical_agent_md.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_hierarchical_skills.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_history.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_hooks.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_imports.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_input_parsing.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_jury.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_killer_features.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_killer_slash_features.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_local_context.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_main.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_main_args.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_mcp_catalog.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_mcp_config_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_mcp_tools.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_mcp_trust.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_media_utils.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_message_store.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_message_store_persistence.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_messages.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_model_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_model_selector.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_model_switch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_new_features.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_non_interactive.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_observability.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_orchestrator.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_output.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_panic.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_pasted_text_tracker.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_peat.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_personas.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_policy_prove.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_postmortem.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_preflight.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_project_hooks.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_project_memory.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_prompts.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_provider_catalog_display.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_qa.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_race.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_recipes.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_release_train_sources.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_reload.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_remote.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_remote_client.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_replay.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_server.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_server_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_server_graph.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_server_helpers.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_server_manager.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_sessions.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_shell_injection.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_sidecar.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_skill_flywheel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_smoketest.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_standing_orders.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_status.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_subagents.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_subprocess_stderr.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_team_orchestration.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_telephone.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_textual_adapter.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_thinking_config.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_thread_selector.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_time_travel.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_timeouts.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_token_tracker.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_token_warnings.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_tracefile.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_ui.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_unicode_security.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_update_check.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_vars.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_vault.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_version.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_web_fetch.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/test_welcome.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/tools/__init__.py +0 -0
- {bog_agents_cli-0.9.2 → bog_agents_cli-0.9.4}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.9.4](https://github.com/bogware/bog-agents/compare/bog-agents-cli==0.9.3...bog-agents-cli==0.9.4) (2026-06-08)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **sdk,cli:** deepagents parity, headless driving, provider resilience ([#91](https://github.com/bogware/bog-agents/issues/91)) ([165c5cb](https://github.com/bogware/bog-agents/commit/165c5cbc17a28fac8e15026914dfd7b0da3b02f2))
|
|
9
|
+
|
|
10
|
+
## [0.9.3](https://github.com/bogware/bog-agents/compare/bog-agents-cli==0.9.2...bog-agents-cli==0.9.3) (2026-05-23)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
* **bog-agents-cli:** Synchronize bog-agents-monorepo versions
|
|
14
|
+
|
|
3
15
|
## [0.9.2](https://github.com/bogware/bog-agents/compare/bog-agents-cli==0.9.1...bog-agents-cli==0.9.2) (2026-05-22)
|
|
4
16
|
|
|
5
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: bog-agents-cli
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.4
|
|
4
4
|
Summary: Bog Agents CLI — your coding agent in the terminal, patient as still water. 80+ slash commands, any LLM provider (Anthropic, OpenAI, Bedrock, Google, Ollama and more), persistent memory, plan mode, /qa acceptance-criteria harness, /peat personal scheduler, /record + /replay, in-memory secrets vault, MCP marketplace with 35+ servers, deep doctor, panic dumps, and a matte swamp/neon-green TUI. One install, no code required. Pass through in harmony.
|
|
5
5
|
Project-URL: Homepage, https://github.com/bogware/bog-agents
|
|
6
6
|
Project-URL: Repository, https://github.com/bogware/bog-agents
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"""Headless (non-interactive) execution of slash commands.
|
|
2
|
+
|
|
3
|
+
Most slash commands live as `_handle_*_command` methods on the Textual
|
|
4
|
+
`BogAgentsApp` and assume a live TUI. This module provides a curated,
|
|
5
|
+
TUI-free surface so AI agents and API users can drive informational and
|
|
6
|
+
configuration commands from the command line:
|
|
7
|
+
|
|
8
|
+
bog-agents command "/help"
|
|
9
|
+
bog-agents command "/commands" --json
|
|
10
|
+
bog-agents command "/model"
|
|
11
|
+
|
|
12
|
+
Commands that are inherently interactive (or that drive the live agent
|
|
13
|
+
session) are not exposed here; for those, `run_headless_command` returns a
|
|
14
|
+
clear "not available headless" result that lists the commands that are.
|
|
15
|
+
|
|
16
|
+
Each headless command is a plain function `(args: str) -> HeadlessResult`,
|
|
17
|
+
registered in `HEADLESS_COMMANDS`. Keeping handlers as standalone functions
|
|
18
|
+
(rather than methods on the TUI app) makes them unit-testable without
|
|
19
|
+
spinning up Textual — the pattern CLAUDE.md recommends for new command
|
|
20
|
+
logic.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
from __future__ import annotations
|
|
24
|
+
|
|
25
|
+
import sys
|
|
26
|
+
from collections.abc import Callable
|
|
27
|
+
from dataclasses import dataclass
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
from typing import Any
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@dataclass(frozen=True)
|
|
33
|
+
class HeadlessResult:
|
|
34
|
+
"""Outcome of a headless slash-command invocation.
|
|
35
|
+
|
|
36
|
+
Attributes:
|
|
37
|
+
ok: Whether the command succeeded.
|
|
38
|
+
text: Human-readable output (printed in `text` mode).
|
|
39
|
+
data: Optional structured payload (emitted in `json`/`jsonl` mode).
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
ok: bool
|
|
43
|
+
text: str
|
|
44
|
+
data: dict[str, Any] | None = None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _ok(text: str, data: dict[str, Any] | None = None) -> HeadlessResult:
|
|
48
|
+
return HeadlessResult(ok=True, text=text, data=data)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _err(text: str, data: dict[str, Any] | None = None) -> HeadlessResult:
|
|
52
|
+
return HeadlessResult(ok=False, text=text, data=data)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _cmd_version(_args: str) -> HeadlessResult:
|
|
56
|
+
"""Show the CLI and SDK versions."""
|
|
57
|
+
from bog_agents_cli._version import __version__ as cli_version
|
|
58
|
+
|
|
59
|
+
try:
|
|
60
|
+
import bog_agents
|
|
61
|
+
|
|
62
|
+
sdk_version = bog_agents.__version__
|
|
63
|
+
except Exception:
|
|
64
|
+
sdk_version = "unknown"
|
|
65
|
+
return _ok(
|
|
66
|
+
f"bog-agents-cli {cli_version}\nbog-agents (SDK) {sdk_version}",
|
|
67
|
+
{"cli": cli_version, "sdk": sdk_version},
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _cmd_model(_args: str) -> HeadlessResult:
|
|
72
|
+
"""Show the currently configured model."""
|
|
73
|
+
from bog_agents_cli.config import settings
|
|
74
|
+
|
|
75
|
+
current = getattr(settings, "model_name", None)
|
|
76
|
+
text = (
|
|
77
|
+
f"Current model: {current}"
|
|
78
|
+
if current
|
|
79
|
+
else "No model configured (a default is used at runtime)."
|
|
80
|
+
)
|
|
81
|
+
return _ok(text, {"model": current})
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _cmd_config(_args: str) -> HeadlessResult:
|
|
85
|
+
"""Show key resolved configuration values and the config file path."""
|
|
86
|
+
from bog_agents_cli.config import settings
|
|
87
|
+
|
|
88
|
+
cfg_path = Path.home() / ".bog-agents" / "config.toml"
|
|
89
|
+
data: dict[str, Any] = {
|
|
90
|
+
"config_path": str(cfg_path),
|
|
91
|
+
"config_exists": cfg_path.exists(),
|
|
92
|
+
"model": getattr(settings, "model_name", None),
|
|
93
|
+
}
|
|
94
|
+
lines = [
|
|
95
|
+
f"Config file: {cfg_path}",
|
|
96
|
+
f"Exists: {cfg_path.exists()}",
|
|
97
|
+
f"Model: {data['model']}",
|
|
98
|
+
]
|
|
99
|
+
return _ok("\n".join(lines), data)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def _cmd_changelog(_args: str) -> HeadlessResult:
|
|
103
|
+
"""Print the CLI changelog."""
|
|
104
|
+
path = Path(__file__).resolve().parent.parent / "CHANGELOG.md"
|
|
105
|
+
if not path.exists():
|
|
106
|
+
return _err("CHANGELOG.md not found.", {"found": False})
|
|
107
|
+
text = path.read_text(encoding="utf-8")
|
|
108
|
+
return _ok(text, {"found": True, "path": str(path)})
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _command_rows() -> list[dict[str, Any]]:
|
|
112
|
+
"""Build the list of all slash commands with a headless-capable flag."""
|
|
113
|
+
from bog_agents_cli.command_registry import SLASH_COMMAND_SPECS
|
|
114
|
+
|
|
115
|
+
rows: list[dict[str, Any]] = []
|
|
116
|
+
for spec in sorted(SLASH_COMMAND_SPECS, key=lambda s: s.name):
|
|
117
|
+
rows.append(
|
|
118
|
+
{
|
|
119
|
+
"name": spec.name,
|
|
120
|
+
"description": spec.description,
|
|
121
|
+
"category": spec.category,
|
|
122
|
+
"headless": spec.name.lstrip("/") in HEADLESS_COMMANDS,
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
return rows
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _cmd_commands(_args: str) -> HeadlessResult:
|
|
129
|
+
"""List every slash command and mark which run headlessly."""
|
|
130
|
+
rows = _command_rows()
|
|
131
|
+
lines = ["Slash commands (* runs headlessly via `bog-agents command`):"]
|
|
132
|
+
for row in rows:
|
|
133
|
+
mark = "*" if row["headless"] else " "
|
|
134
|
+
lines.append(f" {mark} {row['name']:<22} {row['description']}")
|
|
135
|
+
return _ok("\n".join(lines), {"commands": rows})
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _cmd_help(args: str) -> HeadlessResult:
|
|
139
|
+
"""Show help for all commands, or details for one named command."""
|
|
140
|
+
target = args.strip().lstrip("/")
|
|
141
|
+
if not target:
|
|
142
|
+
return _cmd_commands("")
|
|
143
|
+
from bog_agents_cli.command_registry import SLASH_COMMAND_SPECS
|
|
144
|
+
|
|
145
|
+
for spec in SLASH_COMMAND_SPECS:
|
|
146
|
+
if spec.name.lstrip("/") == target:
|
|
147
|
+
headless = target in HEADLESS_COMMANDS
|
|
148
|
+
data: dict[str, Any] = {
|
|
149
|
+
"name": spec.name,
|
|
150
|
+
"description": spec.description,
|
|
151
|
+
"category": spec.category,
|
|
152
|
+
"aliases": list(spec.aliases),
|
|
153
|
+
"headless": headless,
|
|
154
|
+
"subcommands": [list(sub) for sub in spec.subcommands],
|
|
155
|
+
}
|
|
156
|
+
lines = [
|
|
157
|
+
f"{spec.name} — {spec.description}",
|
|
158
|
+
f"Category: {spec.category}",
|
|
159
|
+
f"Headless: {headless}",
|
|
160
|
+
]
|
|
161
|
+
if spec.aliases:
|
|
162
|
+
lines.append(f"Aliases: {', '.join(spec.aliases)}")
|
|
163
|
+
if spec.subcommands:
|
|
164
|
+
lines.append(
|
|
165
|
+
"Subcommands: " + ", ".join(name for name, _ in spec.subcommands)
|
|
166
|
+
)
|
|
167
|
+
return _ok("\n".join(lines), data)
|
|
168
|
+
return _err(f"Unknown command: /{target}", {"name": target, "found": False})
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
# Registry of headless-capable commands: name -> (description, handler).
|
|
172
|
+
HEADLESS_COMMANDS: dict[str, tuple[str, Callable[[str], HeadlessResult]]] = {
|
|
173
|
+
"commands": ("List all slash commands and which run headlessly", _cmd_commands),
|
|
174
|
+
"help": ("Show help for all or a specific slash command", _cmd_help),
|
|
175
|
+
"version": ("Show CLI and SDK versions", _cmd_version),
|
|
176
|
+
"model": ("Show the configured model", _cmd_model),
|
|
177
|
+
"config": ("Show resolved configuration", _cmd_config),
|
|
178
|
+
"changelog": ("Show the CLI changelog", _cmd_changelog),
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def run_headless_command(command_line: str, *, output_format: str = "text") -> int:
|
|
183
|
+
"""Execute a single slash command without the interactive TUI.
|
|
184
|
+
|
|
185
|
+
Args:
|
|
186
|
+
command_line: The command to run, with or without a leading slash and
|
|
187
|
+
with optional arguments (e.g. `"/help model"`, `"commands"`).
|
|
188
|
+
output_format: `"text"` (human-readable, default), or `"json"`/`"jsonl"`
|
|
189
|
+
for a single machine-readable envelope on stdout.
|
|
190
|
+
|
|
191
|
+
Returns:
|
|
192
|
+
Exit code: `0` on success, `1` when the command ran but reported a
|
|
193
|
+
failure, `2` when the command is unknown or not available headless.
|
|
194
|
+
"""
|
|
195
|
+
raw = command_line.strip()
|
|
196
|
+
if not raw:
|
|
197
|
+
return _emit(
|
|
198
|
+
_err('No command provided. Try `bog-agents command "/help"`.'),
|
|
199
|
+
"empty",
|
|
200
|
+
output_format,
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
name, _, args = raw.lstrip("/").partition(" ")
|
|
204
|
+
name = name.strip().lower()
|
|
205
|
+
entry = HEADLESS_COMMANDS.get(name)
|
|
206
|
+
if entry is None:
|
|
207
|
+
available = ", ".join(f"/{key}" for key in sorted(HEADLESS_COMMANDS))
|
|
208
|
+
message = (
|
|
209
|
+
f"/{name} is not available in non-interactive mode. "
|
|
210
|
+
f"Headless commands: {available}. "
|
|
211
|
+
"Run other commands inside the interactive TUI, or use a dedicated "
|
|
212
|
+
"subcommand where one exists (e.g. `bog-agents threads list`)."
|
|
213
|
+
)
|
|
214
|
+
return _emit(
|
|
215
|
+
_err(
|
|
216
|
+
message,
|
|
217
|
+
{
|
|
218
|
+
"command": name,
|
|
219
|
+
"error": "not_headless",
|
|
220
|
+
"headless_commands": sorted(HEADLESS_COMMANDS),
|
|
221
|
+
},
|
|
222
|
+
),
|
|
223
|
+
name,
|
|
224
|
+
output_format,
|
|
225
|
+
)
|
|
226
|
+
|
|
227
|
+
_description, handler = entry
|
|
228
|
+
try:
|
|
229
|
+
result = handler(args)
|
|
230
|
+
except Exception as exc:
|
|
231
|
+
result = _err(
|
|
232
|
+
f"Command /{name} failed: {exc}", {"command": name, "error": "exception"}
|
|
233
|
+
)
|
|
234
|
+
return _emit(result, name, output_format)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _emit(result: HeadlessResult, command_name: str, output_format: str) -> int:
|
|
238
|
+
"""Write a `HeadlessResult` to stdout/stderr and return its exit code."""
|
|
239
|
+
if output_format in ("json", "jsonl"):
|
|
240
|
+
from bog_agents_cli.output import write_json
|
|
241
|
+
|
|
242
|
+
payload: dict[str, Any] = {"ok": result.ok}
|
|
243
|
+
payload.update(result.data or {"text": result.text})
|
|
244
|
+
write_json(f"command:{command_name}", payload)
|
|
245
|
+
else:
|
|
246
|
+
stream = sys.stdout if result.ok else sys.stderr
|
|
247
|
+
print(result.text, file=stream)
|
|
248
|
+
if not result.ok:
|
|
249
|
+
return (
|
|
250
|
+
1
|
|
251
|
+
if result.data and result.data.get("error") not in ("not_headless", "empty")
|
|
252
|
+
else 2
|
|
253
|
+
)
|
|
254
|
+
return 0
|
|
@@ -350,6 +350,16 @@ def parse_args() -> argparse.Namespace:
|
|
|
350
350
|
help="AWS region override (defaults to AWS_REGION env / profile config)",
|
|
351
351
|
)
|
|
352
352
|
|
|
353
|
+
command_parser = subparsers.add_parser(
|
|
354
|
+
"command",
|
|
355
|
+
help="Run a slash command non-interactively (e.g. 'command \"/help\"')",
|
|
356
|
+
)
|
|
357
|
+
command_parser.add_argument(
|
|
358
|
+
"slash",
|
|
359
|
+
help="The slash command to run, e.g. '/help', '/commands', '/model'",
|
|
360
|
+
)
|
|
361
|
+
add_json_output_arg(command_parser)
|
|
362
|
+
|
|
353
363
|
threads_parser = subparsers.add_parser(
|
|
354
364
|
"threads",
|
|
355
365
|
help="Manage conversation threads",
|
|
@@ -543,6 +553,18 @@ def parse_args() -> argparse.Namespace:
|
|
|
543
553
|
)
|
|
544
554
|
|
|
545
555
|
add_json_output_arg(parser, default="text")
|
|
556
|
+
parser.add_argument(
|
|
557
|
+
"--jsonl",
|
|
558
|
+
dest="output_format",
|
|
559
|
+
action="store_const",
|
|
560
|
+
const="jsonl",
|
|
561
|
+
help=(
|
|
562
|
+
"Stream newline-delimited JSON events (stream-json) for "
|
|
563
|
+
"non-interactive runs: one object per line for start, text "
|
|
564
|
+
"deltas, tool_call, tool_result, and a terminal final event "
|
|
565
|
+
"with thread_id, response, tool_calls, and usage stats."
|
|
566
|
+
),
|
|
567
|
+
)
|
|
546
568
|
|
|
547
569
|
parser.add_argument(
|
|
548
570
|
"--auto-approve",
|
|
@@ -1825,6 +1847,10 @@ def cli_main() -> None:
|
|
|
1825
1847
|
from bog_agents_cli.cmd_call import cmd_call
|
|
1826
1848
|
|
|
1827
1849
|
sys.exit(cmd_call(args))
|
|
1850
|
+
elif args.command == "command":
|
|
1851
|
+
from bog_agents_cli.headless_commands import run_headless_command
|
|
1852
|
+
|
|
1853
|
+
sys.exit(run_headless_command(args.slash, output_format=output_format))
|
|
1828
1854
|
elif args.command == "test-bedrock":
|
|
1829
1855
|
from bog_agents_cli._bedrock import probe_bedrock, render_probe_report
|
|
1830
1856
|
|
|
@@ -152,6 +152,21 @@ def _write_newline() -> None:
|
|
|
152
152
|
sys.stdout.flush()
|
|
153
153
|
|
|
154
154
|
|
|
155
|
+
def _emit_jsonl(event: dict[str, Any]) -> None:
|
|
156
|
+
"""Write a single JSON object to stdout as one line (newline-terminated).
|
|
157
|
+
|
|
158
|
+
Used by the `jsonl` (stream-json) output format so a programmatic driver
|
|
159
|
+
can consume one event per line as the agent runs.
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
event: The event payload to serialize. Must be JSON-serializable.
|
|
163
|
+
"""
|
|
164
|
+
import json
|
|
165
|
+
|
|
166
|
+
sys.stdout.write(json.dumps(event, default=str) + "\n")
|
|
167
|
+
sys.stdout.flush()
|
|
168
|
+
|
|
169
|
+
|
|
155
170
|
@dataclass
|
|
156
171
|
class StreamState:
|
|
157
172
|
"""Mutable state accumulated while iterating over the agent stream."""
|
|
@@ -168,6 +183,10 @@ class StreamState:
|
|
|
168
183
|
agent finishes.
|
|
169
184
|
"""
|
|
170
185
|
|
|
186
|
+
output_format: str = "text"
|
|
187
|
+
"""Output format: `"text"` (human stream), `"json"` (single buffered
|
|
188
|
+
envelope), or `"jsonl"` (one JSON event per line as the run progresses)."""
|
|
189
|
+
|
|
171
190
|
full_response: list[str] = field(default_factory=list)
|
|
172
191
|
"""Accumulated text fragments from the AI message stream."""
|
|
173
192
|
|
|
@@ -203,6 +222,17 @@ class StreamState:
|
|
|
203
222
|
stats: SessionStats = field(default_factory=SessionStats)
|
|
204
223
|
"""Accumulated model usage stats for this stream."""
|
|
205
224
|
|
|
225
|
+
tool_calls: list[dict[str, Any]] = field(default_factory=list)
|
|
226
|
+
"""Ordered, de-duplicated record of tool calls the agent made this run.
|
|
227
|
+
|
|
228
|
+
Each entry is `{"name": str, "args": dict}`. Populated from completed
|
|
229
|
+
`tool_calls` on each `AIMessage` and surfaced in the `--json` / `--jsonl`
|
|
230
|
+
output so programmatic drivers can see what the agent did, not just its
|
|
231
|
+
final text. De-duplicated by tool-call id."""
|
|
232
|
+
|
|
233
|
+
_seen_tool_call_ids: set[str] = field(default_factory=set)
|
|
234
|
+
"""Internal: tool-call ids already recorded in `tool_calls` (dedupe)."""
|
|
235
|
+
|
|
206
236
|
|
|
207
237
|
@dataclass
|
|
208
238
|
class ThreadUrlLookupState:
|
|
@@ -317,6 +347,27 @@ def _process_ai_message(
|
|
|
317
347
|
# which is the only reliable place to read complete args (the per-chunk
|
|
318
348
|
# tool_call_chunk blocks only carry partial JSON fragments).
|
|
319
349
|
completed_tool_calls = getattr(message_obj, "tool_calls", None) or []
|
|
350
|
+
# Record every completed tool call (name + args) once, keyed by id, so the
|
|
351
|
+
# structured (`--json` / `--jsonl`) output can report the agent's actions.
|
|
352
|
+
for tc in completed_tool_calls:
|
|
353
|
+
if not isinstance(tc, dict):
|
|
354
|
+
continue
|
|
355
|
+
tc_name = tc.get("name")
|
|
356
|
+
if not tc_name:
|
|
357
|
+
continue
|
|
358
|
+
tc_id = tc.get("id")
|
|
359
|
+
dedupe_key = (
|
|
360
|
+
tc_id
|
|
361
|
+
if isinstance(tc_id, str) and tc_id
|
|
362
|
+
else f"{tc_name}-{len(state.tool_calls)}"
|
|
363
|
+
)
|
|
364
|
+
if dedupe_key in state._seen_tool_call_ids:
|
|
365
|
+
continue
|
|
366
|
+
state._seen_tool_call_ids.add(dedupe_key)
|
|
367
|
+
tc_args = tc.get("args") if isinstance(tc.get("args"), dict) else {}
|
|
368
|
+
state.tool_calls.append({"name": tc_name, "args": tc_args})
|
|
369
|
+
if state.output_format == "jsonl":
|
|
370
|
+
_emit_jsonl({"type": "tool_call", "name": tc_name, "args": tc_args})
|
|
320
371
|
for tc in completed_tool_calls:
|
|
321
372
|
if not isinstance(tc, dict):
|
|
322
373
|
continue
|
|
@@ -343,7 +394,9 @@ def _process_ai_message(
|
|
|
343
394
|
if block_type == "text":
|
|
344
395
|
text = block.get("text", "")
|
|
345
396
|
if text:
|
|
346
|
-
if state.
|
|
397
|
+
if state.output_format == "jsonl":
|
|
398
|
+
_emit_jsonl({"type": "text", "text": text})
|
|
399
|
+
elif state.stream:
|
|
347
400
|
_write_text(text)
|
|
348
401
|
state.full_response.append(text)
|
|
349
402
|
elif block_type in {"tool_call_chunk", "tool_call"}:
|
|
@@ -421,6 +474,18 @@ def _process_message_chunk(
|
|
|
421
474
|
if isinstance(message_obj, AIMessage):
|
|
422
475
|
_process_ai_message(message_obj, state, console)
|
|
423
476
|
elif isinstance(message_obj, ToolMessage):
|
|
477
|
+
if state.output_format == "jsonl":
|
|
478
|
+
content = message_obj.content
|
|
479
|
+
if isinstance(content, list):
|
|
480
|
+
content = " ".join(str(c) for c in content)
|
|
481
|
+
_emit_jsonl(
|
|
482
|
+
{
|
|
483
|
+
"type": "tool_result",
|
|
484
|
+
"name": message_obj.name,
|
|
485
|
+
"status": getattr(message_obj, "status", "success"),
|
|
486
|
+
"content": str(content)[:4000],
|
|
487
|
+
}
|
|
488
|
+
)
|
|
424
489
|
record = file_op_tracker.complete_with_message(message_obj)
|
|
425
490
|
if record and record.diff:
|
|
426
491
|
console.print(f"[dim]📝 {record.display_path}[/dim]")
|
|
@@ -850,12 +915,14 @@ async def _run_agent_loop(
|
|
|
850
915
|
Raises:
|
|
851
916
|
HITLIterationLimitError: If the HITL iteration limit is exceeded.
|
|
852
917
|
"""
|
|
853
|
-
state = StreamState(quiet=quiet, stream=stream)
|
|
918
|
+
state = StreamState(quiet=quiet, stream=stream, output_format=output_format)
|
|
854
919
|
stream_input: dict[str, Any] | Command = {
|
|
855
920
|
"messages": [{"role": "user", "content": message}]
|
|
856
921
|
}
|
|
857
922
|
|
|
858
923
|
thread_id = config.get("configurable", {}).get("thread_id", "")
|
|
924
|
+
if output_format == "jsonl":
|
|
925
|
+
_emit_jsonl({"type": "start", "thread_id": thread_id})
|
|
859
926
|
await dispatch_hook("session.start", {"thread_id": thread_id})
|
|
860
927
|
|
|
861
928
|
start_time = time.monotonic()
|
|
@@ -896,6 +963,7 @@ async def _run_agent_loop(
|
|
|
896
963
|
"data": {
|
|
897
964
|
"thread_id": thread_id,
|
|
898
965
|
"response": "".join(state.full_response).strip(),
|
|
966
|
+
"tool_calls": state.tool_calls,
|
|
899
967
|
"stats": {
|
|
900
968
|
"wall_time_seconds": round(wall_time, 3),
|
|
901
969
|
"model": next(iter(state.stats.per_model), None),
|
|
@@ -906,12 +974,31 @@ async def _run_agent_loop(
|
|
|
906
974
|
},
|
|
907
975
|
}
|
|
908
976
|
_write_text(_json.dumps(envelope) + "\n")
|
|
977
|
+
elif output_format == "jsonl":
|
|
978
|
+
# Per-event lines already streamed; emit a terminal `final` event with
|
|
979
|
+
# the assembled response, tool calls, and stats for consumers that want
|
|
980
|
+
# a single summary record at the end of the stream.
|
|
981
|
+
_emit_jsonl(
|
|
982
|
+
{
|
|
983
|
+
"type": "final",
|
|
984
|
+
"thread_id": thread_id,
|
|
985
|
+
"response": "".join(state.full_response).strip(),
|
|
986
|
+
"tool_calls": state.tool_calls,
|
|
987
|
+
"stats": {
|
|
988
|
+
"wall_time_seconds": round(wall_time, 3),
|
|
989
|
+
"model": next(iter(state.stats.per_model), None),
|
|
990
|
+
"request_count": getattr(state.stats, "request_count", 0),
|
|
991
|
+
"input_tokens": getattr(state.stats, "input_tokens", 0),
|
|
992
|
+
"output_tokens": getattr(state.stats, "output_tokens", 0),
|
|
993
|
+
},
|
|
994
|
+
}
|
|
995
|
+
)
|
|
909
996
|
elif state.full_response:
|
|
910
997
|
if not state.stream:
|
|
911
998
|
_write_text("".join(state.full_response))
|
|
912
999
|
_write_newline()
|
|
913
1000
|
|
|
914
|
-
if not quiet and output_format
|
|
1001
|
+
if not quiet and output_format not in ("json", "jsonl"):
|
|
915
1002
|
console.print()
|
|
916
1003
|
if (
|
|
917
1004
|
thread_url_lookup is not None
|
|
@@ -1072,7 +1159,11 @@ async def run_non_interactive(
|
|
|
1072
1159
|
# uses _write_text() -> sys.stdout directly. Both --quiet and --json
|
|
1073
1160
|
# need stdout reserved for the actual payload — chrome (server-ready,
|
|
1074
1161
|
# thread headers, status line) must land on stderr.
|
|
1075
|
-
console =
|
|
1162
|
+
console = (
|
|
1163
|
+
Console(stderr=True)
|
|
1164
|
+
if (quiet or output_format in ("json", "jsonl"))
|
|
1165
|
+
else Console()
|
|
1166
|
+
)
|
|
1076
1167
|
|
|
1077
1168
|
# J2 fix: bail on always_ask BEFORE we instantiate any models.
|
|
1078
1169
|
# The combination is logically incompatible (non-interactive has no
|
|
@@ -1240,7 +1331,9 @@ async def run_non_interactive(
|
|
|
1240
1331
|
# JSON output: suppress mid-stream stdout writes so only the
|
|
1241
1332
|
# envelope reaches stdout. Diagnostic chrome is already routed
|
|
1242
1333
|
# via stderr console.
|
|
1243
|
-
effective_stream =
|
|
1334
|
+
effective_stream = (
|
|
1335
|
+
stream and output_format != "json"
|
|
1336
|
+
) # jsonl streams per-event lines
|
|
1244
1337
|
# Snapshot the working tree just before the agent runs so we
|
|
1245
1338
|
# can diff against it after to compute the exact set of
|
|
1246
1339
|
# files the run created or modified. This is the bulletproof
|
|
@@ -1254,7 +1347,7 @@ async def run_non_interactive(
|
|
|
1254
1347
|
config,
|
|
1255
1348
|
console,
|
|
1256
1349
|
file_op_tracker,
|
|
1257
|
-
quiet=quiet or output_format
|
|
1350
|
+
quiet=quiet or output_format in ("json", "jsonl"),
|
|
1258
1351
|
stream=effective_stream,
|
|
1259
1352
|
thread_url_lookup=thread_url_lookup,
|
|
1260
1353
|
output_format=output_format,
|
|
@@ -148,6 +148,7 @@ def show_help() -> None:
|
|
|
148
148
|
console.print(" -q, --quiet Suppress chrome, pipe-friendly output")
|
|
149
149
|
console.print(" --no-stream Buffer full response (don't stream)")
|
|
150
150
|
console.print(" --json Machine-readable JSON output")
|
|
151
|
+
console.print(" --jsonl Stream newline-delimited JSON events")
|
|
151
152
|
console.print(
|
|
152
153
|
" --prompt NAME Run a saved prompt from prompt_library.toml"
|
|
153
154
|
)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "bog-agents-cli"
|
|
7
|
-
version = "0.9.
|
|
7
|
+
version = "0.9.4"
|
|
8
8
|
description = "Bog Agents CLI — your coding agent in the terminal, patient as still water. 80+ slash commands, any LLM provider (Anthropic, OpenAI, Bedrock, Google, Ollama and more), persistent memory, plan mode, /qa acceptance-criteria harness, /peat personal scheduler, /record + /replay, in-memory secrets vault, MCP marketplace with 35+ servers, deep doctor, panic dumps, and a matte swamp/neon-green TUI. One install, no code required. Pass through in harmony."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Tests for headless (non-interactive) slash-command execution."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from bog_agents_cli.headless_commands import HEADLESS_COMMANDS, run_headless_command
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
import pytest
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_version_command_text(capsys: pytest.CaptureFixture[str]) -> None:
|
|
15
|
+
"""`/version` prints CLI + SDK versions and exits 0."""
|
|
16
|
+
rc = run_headless_command("/version")
|
|
17
|
+
assert rc == 0
|
|
18
|
+
out = capsys.readouterr().out
|
|
19
|
+
assert "bog-agents-cli" in out
|
|
20
|
+
assert "SDK" in out
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_commands_lists_registry(capsys: pytest.CaptureFixture[str]) -> None:
|
|
24
|
+
"""`/commands` lists slash commands and marks headless ones."""
|
|
25
|
+
rc = run_headless_command("commands") # leading slash optional
|
|
26
|
+
assert rc == 0
|
|
27
|
+
out = capsys.readouterr().out
|
|
28
|
+
assert "/model" in out
|
|
29
|
+
assert "Slash commands" in out
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_help_for_specific_command(capsys: pytest.CaptureFixture[str]) -> None:
|
|
33
|
+
"""`/help model` shows details for the model command."""
|
|
34
|
+
rc = run_headless_command("/help model")
|
|
35
|
+
assert rc == 0
|
|
36
|
+
assert "model" in capsys.readouterr().out.lower()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_help_unknown_command_returns_1(capsys: pytest.CaptureFixture[str]) -> None:
|
|
40
|
+
"""`/help nonexistent` reports the command ran but failed (exit 1)."""
|
|
41
|
+
rc = run_headless_command("/help totally-not-a-command")
|
|
42
|
+
assert rc == 1
|
|
43
|
+
assert "Unknown command" in capsys.readouterr().err
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_non_headless_command_returns_2(capsys: pytest.CaptureFixture[str]) -> None:
|
|
47
|
+
"""A TUI-only command is rejected (exit 2) with guidance listing headless commands."""
|
|
48
|
+
rc = run_headless_command("/plan")
|
|
49
|
+
assert rc == 2
|
|
50
|
+
err = capsys.readouterr().err
|
|
51
|
+
assert "not available in non-interactive mode" in err
|
|
52
|
+
assert "/help" in err
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_empty_command_returns_2(capsys: pytest.CaptureFixture[str]) -> None:
|
|
56
|
+
"""An empty command line is rejected."""
|
|
57
|
+
rc = run_headless_command(" ")
|
|
58
|
+
assert rc == 2
|
|
59
|
+
assert "No command" in capsys.readouterr().err
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def test_json_output_envelope(capsys: pytest.CaptureFixture[str]) -> None:
|
|
63
|
+
"""`--json` mode emits a single machine-readable envelope on stdout."""
|
|
64
|
+
rc = run_headless_command("/version", output_format="json")
|
|
65
|
+
assert rc == 0
|
|
66
|
+
envelope = json.loads(capsys.readouterr().out.strip())
|
|
67
|
+
assert envelope["schema_version"] == 1
|
|
68
|
+
assert envelope["command"] == "command:version"
|
|
69
|
+
assert envelope["data"]["ok"] is True
|
|
70
|
+
assert "cli" in envelope["data"]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def test_json_non_headless_envelope(capsys: pytest.CaptureFixture[str]) -> None:
|
|
74
|
+
"""Non-headless commands emit a structured error envelope in json mode."""
|
|
75
|
+
rc = run_headless_command("/dashboard", output_format="json")
|
|
76
|
+
assert rc == 2
|
|
77
|
+
envelope = json.loads(capsys.readouterr().out.strip())
|
|
78
|
+
assert envelope["data"]["ok"] is False
|
|
79
|
+
assert envelope["data"]["error"] == "not_headless"
|
|
80
|
+
assert "commands" in envelope["data"]["headless_commands"]
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def test_registry_handlers_are_callable() -> None:
|
|
84
|
+
"""Every registered headless command exposes a (description, handler) pair."""
|
|
85
|
+
for name, (description, handler) in HEADLESS_COMMANDS.items():
|
|
86
|
+
assert isinstance(name, str)
|
|
87
|
+
assert isinstance(description, str)
|
|
88
|
+
assert callable(handler)
|