teddy-cli 0.1.17.dev1329__tar.gz → 0.1.17.dev1330__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.
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/PKG-INFO +1 -1
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/pyproject.toml +1 -1
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/local_file_system_adapter.py +10 -2
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/markdown_plan_parser.py +49 -28
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/.gitignore +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/LICENSE +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/README.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/__main__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/cli_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/cli_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/session_cli_handlers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_app.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_editor.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_execution.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_logic.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_previews.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/inbound/textual_plan_reviewer_widgets.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/console_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/console_interactor_ask_loop.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/console_interactor_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/console_tooling.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/filesystem_helpers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/litellm_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/local_repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/openrouter_hydrator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/shell_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/shell_command_builder.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/suppressed_logging.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/system_environment_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/system_environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/system_time_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/terminal_quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/web_scraper_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/web_searcher_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/outbound/yaml_config_adapter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/container.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/action_ports.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/change_set.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/drift_report.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/exceptions.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/execution_report.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/orchestrator_ports.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/plan.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/planning_ports.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/project_context.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/report_assembly_data.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/session.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/shell_output.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/web_search_results.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/get_context_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/init.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/plan_parser.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/plan_reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/planning_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/run_plan_use_case.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/config_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/environment_inspector.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/file_system_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/llm_client.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/quit_key_listener.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/repo_tree_generator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/session_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/shell_executor.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/system_environment.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/time_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/user_interactor.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/web_scraper.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/outbound/web_searcher.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_changeset_builder.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_diff_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_dispatcher.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_executor.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_factory.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_parser_complex.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/action_parser_strategies.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/context_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/edit_simulator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/execution_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/execution_report_assembler.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/init_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/markdown_report_formatter.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/parser_infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/parser_metadata.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/parser_reporting.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/plan_validator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/planning_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/prompt_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_lifecycle_manager.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_loop_guard.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_orchestrator.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_planner.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_pruning_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_replanner.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_repository.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/session_service.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/templates/execution_report.md.j2 +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/update_checker.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/edit.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/edit_matcher.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/edit_matcher_heuristics.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/execute.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/filesystem.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/helpers.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/validation_rules/message.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/diff.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/interrupt_guard.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/io.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/markdown.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/paths.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/serialization.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/session_notices.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/stdin_ownership.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/string.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/terminal.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/prompts.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/infrastructure.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/reviewer.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/validators.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/MRP.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/__init__.py +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/config.yaml +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/init.context +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/architect.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/assistant.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/debugger.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/developer.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/pathfinder.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/config/prompts/prototyper.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/ARCHITECTURE.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/PROJECT.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/case-file.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/ci.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/component-design.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/makefile.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/milestone.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/pre-commit.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/specification-document.md +0 -0
- {teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/vertical-slice.md +0 -0
|
@@ -260,13 +260,16 @@ class LocalFileSystemAdapter(IFileSystemManager):
|
|
|
260
260
|
def create_file(self, path: str, content: str, overwrite: bool = False) -> None:
|
|
261
261
|
"""
|
|
262
262
|
Creates a new file with the given content.
|
|
263
|
+
|
|
264
|
+
Newline-deterministic: ``newline=""`` keeps LF line endings verbatim
|
|
265
|
+
on every OS, matching the write_file and edit_file contracts.
|
|
263
266
|
"""
|
|
264
267
|
try:
|
|
265
268
|
file_path = self._resolve_path(path)
|
|
266
269
|
file_path.parent.mkdir(parents=True, exist_ok=True)
|
|
267
270
|
|
|
268
271
|
mode = "w" if overwrite else "x"
|
|
269
|
-
with open(file_path, mode, encoding="utf-8") as f:
|
|
272
|
+
with open(file_path, mode, encoding="utf-8", newline="") as f:
|
|
270
273
|
f.write(content)
|
|
271
274
|
except FileExistsError as e:
|
|
272
275
|
# Raise a domain-specific exception to conform to the port's contract.
|
|
@@ -327,6 +330,11 @@ class LocalFileSystemAdapter(IFileSystemManager):
|
|
|
327
330
|
) -> list[float]:
|
|
328
331
|
"""
|
|
329
332
|
Modifies an existing file by applying a list of find-and-replace blocks.
|
|
333
|
+
|
|
334
|
+
Newline-deterministic: ``newline=""`` on the write disables platform
|
|
335
|
+
newline translation, so the simulated content is emitted verbatim on
|
|
336
|
+
every OS. This prevents Windows from doubling CRLF sequences that a
|
|
337
|
+
clipboard plan carries into the REPLACE block.
|
|
330
338
|
"""
|
|
331
339
|
file_path = self._resolve_path(path)
|
|
332
340
|
content = file_path.read_text(encoding="utf-8")
|
|
@@ -344,5 +352,5 @@ class LocalFileSystemAdapter(IFileSystemManager):
|
|
|
344
352
|
match_all=match_all,
|
|
345
353
|
)
|
|
346
354
|
|
|
347
|
-
file_path.write_text(new_content, encoding="utf-8")
|
|
355
|
+
file_path.write_text(new_content, encoding="utf-8", newline="")
|
|
348
356
|
return scores
|
|
@@ -60,32 +60,65 @@ class MarkdownPlanParser(IPlanParser):
|
|
|
60
60
|
),
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
def
|
|
64
|
-
"""
|
|
65
|
-
|
|
63
|
+
def _normalize_plan_content(self, plan_content: str) -> str:
|
|
64
|
+
"""Normalize raw plan text into canonical Markdown before parsing.
|
|
65
|
+
|
|
66
|
+
Converts Windows clipboard CRLF endings to LF, trims trailing
|
|
67
|
+
whitespace, strips any preamble before the first heading, and
|
|
68
|
+
normalizes the H1 title.
|
|
66
69
|
"""
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
+
# Normalize Windows clipboard line endings to LF so fence content and
|
|
71
|
+
# extracted message sections never carry stray carriage returns.
|
|
72
|
+
normalized_content = plan_content.replace("\r\n", "\n")
|
|
70
73
|
|
|
71
74
|
# Trim trailing whitespace to prevent mistletoe from
|
|
72
75
|
# interpreting trailing indentation as an unexpected code block.
|
|
73
76
|
# We keep leading whitespace for potential Markdown significance (though rare at top-level).
|
|
74
|
-
clean_content =
|
|
77
|
+
clean_content = normalized_content.rstrip()
|
|
75
78
|
|
|
76
79
|
if not clean_content:
|
|
77
80
|
raise InvalidPlanError("Plan content cannot be empty.")
|
|
78
81
|
|
|
79
|
-
# Strip preamble (text before the first # heading at start of a line)
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
+
# Strip preamble (text before the first # heading at start of a line).
|
|
83
|
+
# MULTILINE lets ^ match the start of any line, and Markdown permits up
|
|
84
|
+
# to 3 leading spaces before a heading marker.
|
|
82
85
|
h1_match = re.search(r"^[ \t]*#", clean_content, re.MULTILINE)
|
|
83
86
|
if h1_match and h1_match.start() > 0:
|
|
84
87
|
clean_content = clean_content[h1_match.start() :]
|
|
85
88
|
|
|
86
|
-
# Normalize H1 heading
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
+
# Normalize the H1 heading (e.g. #Title -> # Title) after preamble
|
|
90
|
+
# stripping so it always targets the heading line.
|
|
91
|
+
return normalize_headings(clean_content)
|
|
92
|
+
|
|
93
|
+
@staticmethod
|
|
94
|
+
def _is_session_plan(plan_path: Optional[str]) -> bool:
|
|
95
|
+
"""Return True when the plan path points inside a session directory."""
|
|
96
|
+
if not plan_path:
|
|
97
|
+
return False
|
|
98
|
+
normalized_path = plan_path.replace("\\", "/").lower()
|
|
99
|
+
return ".teddy/sessions/" in normalized_path
|
|
100
|
+
|
|
101
|
+
def _write_back_session_plan(self, plan_path: str, clean_content: str) -> None:
|
|
102
|
+
"""Persist normalized content to a session plan file when it changed."""
|
|
103
|
+
from pathlib import Path
|
|
104
|
+
|
|
105
|
+
path_obj = Path(plan_path)
|
|
106
|
+
try:
|
|
107
|
+
current_disk = path_obj.read_text(encoding="utf-8")
|
|
108
|
+
except Exception:
|
|
109
|
+
current_disk = None
|
|
110
|
+
if current_disk is not None and current_disk.rstrip() != clean_content:
|
|
111
|
+
path_obj.write_text(clean_content, encoding="utf-8", newline="")
|
|
112
|
+
|
|
113
|
+
def parse(self, plan_content: str, plan_path: Optional[str] = None) -> Plan:
|
|
114
|
+
"""
|
|
115
|
+
Parses the specified Markdown plan string into a structured Plan object.
|
|
116
|
+
"""
|
|
117
|
+
from mistletoe.block_token import (
|
|
118
|
+
Document,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
clean_content = self._normalize_plan_content(plan_content)
|
|
89
122
|
|
|
90
123
|
processed_content = self._preprocessor.process(clean_content)
|
|
91
124
|
doc = Document(processed_content)
|
|
@@ -106,10 +139,7 @@ class MarkdownPlanParser(IPlanParser):
|
|
|
106
139
|
stream, clean_content, section_heading, doc
|
|
107
140
|
)
|
|
108
141
|
|
|
109
|
-
is_session =
|
|
110
|
-
if plan_path:
|
|
111
|
-
normalized_path = plan_path.replace("\\", "/").lower()
|
|
112
|
-
is_session = ".teddy/sessions/" in normalized_path
|
|
142
|
+
is_session = self._is_session_plan(plan_path)
|
|
113
143
|
|
|
114
144
|
plan = Plan(
|
|
115
145
|
title=title,
|
|
@@ -122,17 +152,8 @@ class MarkdownPlanParser(IPlanParser):
|
|
|
122
152
|
raw_content=clean_content,
|
|
123
153
|
)
|
|
124
154
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
from pathlib import Path
|
|
128
|
-
|
|
129
|
-
path_obj = Path(plan_path)
|
|
130
|
-
try:
|
|
131
|
-
current_disk = path_obj.read_text(encoding="utf-8")
|
|
132
|
-
except Exception:
|
|
133
|
-
current_disk = None
|
|
134
|
-
if current_disk is not None and current_disk.rstrip() != clean_content:
|
|
135
|
-
path_obj.write_text(clean_content, encoding="utf-8", newline="")
|
|
155
|
+
if is_session and plan_path:
|
|
156
|
+
self._write_back_session_plan(plan_path, clean_content)
|
|
136
157
|
|
|
137
158
|
return plan
|
|
138
159
|
except InvalidPlanError as e:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/adapters/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/domain/models/plan.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/ports/inbound/init.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/services/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/markdown.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/paths.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/serialization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/string.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/core/utils/terminal.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/reviewer.py
RENAMED
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/registries/validators.py
RENAMED
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{teddy_cli-0.1.17.dev1329 → teddy_cli-0.1.17.dev1330}/src/teddy_executor/resources/templates/ci.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|