tactus 0.20.1__tar.gz → 0.21.0__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.
- {tactus-0.20.1 → tactus-0.21.0}/.gitignore +1 -0
- {tactus-0.20.1 → tactus-0.21.0}/CHANGELOG.md +17 -3
- {tactus-0.20.1 → tactus-0.21.0}/PKG-INFO +1 -1
- {tactus-0.20.1 → tactus-0.21.0}/SPECIFICATION.md +3 -3
- {tactus-0.20.1 → tactus-0.21.0}/docs/CONFIGURATION.md +133 -0
- tactus-0.21.0/docs/SANDBOXING.md +499 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/04-basics-simple-agent.tac +10 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/05-basics-multi-model.tac +17 -2
- {tactus-0.20.1 → tactus-0.21.0}/examples/07-basics-bedrock.tac +10 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/08-basics-models.tac +46 -3
- {tactus-0.20.1 → tactus-0.21.0}/examples/09-basics-google-gemini.tac +18 -8
- {tactus-0.20.1 → tactus-0.21.0}/examples/11-feature-message-history.tac +8 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/12-feature-structured-output.tac +30 -25
- {tactus-0.20.1 → tactus-0.21.0}/examples/13-feature-session.tac +8 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/14-feature-per-turn-tools.tac +9 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/16-feature-toolsets-advanced.tac +42 -24
- {tactus-0.20.1 → tactus-0.21.0}/examples/17-feature-toolsets-dsl.tac +16 -2
- {tactus-0.20.1 → tactus-0.21.0}/examples/18-feature-lua-tools-individual.tac +13 -3
- {tactus-0.20.1 → tactus-0.21.0}/examples/18-feature-lua-tools-inline.tac +13 -2
- {tactus-0.20.1 → tactus-0.21.0}/examples/18-feature-lua-tools-toolset.tac +13 -3
- {tactus-0.20.1 → tactus-0.21.0}/examples/19-feature-direct-tool-calls.tac +15 -5
- {tactus-0.20.1 → tactus-0.21.0}/examples/20-bdd-complete.tac +13 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/21-bdd-passing.tac +10 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/31-eval-demo.tac +23 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/32-eval-success-rate.tac +23 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/33-eval-thresholds.tac +23 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/34-eval-dataset.tac +23 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/35-eval-trace.tac +30 -8
- {tactus-0.20.1 → tactus-0.21.0}/examples/36-eval-advanced.tac +10 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/37-eval-comprehensive.tac +22 -6
- {tactus-0.20.1 → tactus-0.21.0}/examples/40-model-text-classifier.tac +31 -10
- {tactus-0.20.1 → tactus-0.21.0}/examples/41-model-pytorch.tac +32 -10
- {tactus-0.20.1 → tactus-0.21.0}/examples/44-sub-procedure-composition.tac +36 -37
- {tactus-0.20.1 → tactus-0.21.0}/examples/52-file-io-basics.tac +4 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/53-tsv-file-io.tac +4 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/54-json-file-io.tac +4 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/55-parquet-file-io.tac +4 -4
- {tactus-0.20.1 → tactus-0.21.0}/examples/56-hdf5-file-io.tac +9 -9
- {tactus-0.20.1 → tactus-0.21.0}/examples/57-excel-file-io.tac +7 -7
- {tactus-0.20.1 → tactus-0.21.0}/examples/58-text-file-io.tac +13 -13
- {tactus-0.20.1 → tactus-0.21.0}/examples/60-tool-sources.tac +17 -19
- {tactus-0.20.1 → tactus-0.21.0}/examples/61-inline-toolset-lua.tac +15 -12
- {tactus-0.20.1 → tactus-0.21.0}/examples/63-toolset-import-from-file.tac +16 -16
- {tactus-0.20.1 → tactus-0.21.0}/examples/65-optional-state-demo.tac +21 -13
- {tactus-0.20.1 → tactus-0.21.0}/examples/70-mocking-static.tac +10 -9
- {tactus-0.20.1 → tactus-0.21.0}/examples/71-mocking-temporal.tac +15 -15
- {tactus-0.20.1 → tactus-0.21.0}/examples/72-mocking-conditional.tac +10 -26
- {tactus-0.20.1 → tactus-0.21.0}/pyproject.toml +1 -1
- {tactus-0.20.1 → tactus-0.21.0}/tactus/__init__.py +1 -1
- tactus-0.21.0/tactus/adapters/http_callback_log.py +109 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/cli/app.py +190 -5
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/config_manager.py +11 -1
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/dsl_stubs.py +105 -20
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/execution_context.py +8 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/output_validator.py +3 -6
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/registry.py +25 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/runtime.py +73 -39
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/yaml_parser.py +11 -1
- tactus-0.21.0/tactus/docker/Dockerfile +57 -0
- tactus-0.21.0/tactus/docker/entrypoint.sh +68 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/agent.py +3 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/ide/server.py +284 -65
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/handles.py +11 -2
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/tool.py +2 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/tool_handle.py +2 -2
- tactus-0.21.0/tactus/sandbox/__init__.py +63 -0
- tactus-0.21.0/tactus/sandbox/config.py +121 -0
- tactus-0.21.0/tactus/sandbox/container_runner.py +391 -0
- tactus-0.21.0/tactus/sandbox/docker_manager.py +321 -0
- tactus-0.21.0/tactus/sandbox/entrypoint.py +186 -0
- tactus-0.21.0/tactus/sandbox/protocol.py +222 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/tac/tactus/tools/done.tac +3 -3
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/README.md +4 -0
- tactus-0.21.0/tactus/testing/mock_agent.py +208 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/mock_tools.py +18 -7
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/test_runner.py +18 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/test_lsp_server.py +4 -4
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/package-lock.json +1471 -2095
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/App.tsx +92 -4
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/MessageFeed.tsx +27 -1
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ResultsSidebar.tsx +31 -2
- tactus-0.21.0/tactus-ide/frontend/src/components/TestOptionsModal.tsx +185 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/CheckpointEventComponent.tsx +6 -5
- tactus-0.21.0/tactus-ide/frontend/src/components/events/CollapsibleTestScenario.tsx +194 -0
- tactus-0.21.0/tactus-ide/frontend/src/components/events/ContainerStatusEventComponent.tsx +95 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/CostEventComponent.tsx +2 -2
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/EventRenderer.tsx +15 -21
- tactus-0.21.0/tactus-ide/frontend/src/components/events/LoadingEventComponent.tsx +42 -0
- tactus-0.21.0/tactus-ide/frontend/src/components/events/TestProgressContainer.tsx +262 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/hooks/useEventStream.ts +91 -16
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/types/events.ts +18 -1
- {tactus-0.20.1 → tactus-0.21.0}/tests/cli/test_cli.py +4 -2
- {tactus-0.20.1 → tactus-0.21.0}/tests/cli/test_cli_inputs.py +22 -11
- {tactus-0.20.1 → tactus-0.21.0}/tests/test_mcp_integration.py +2 -5
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_all_examples.py +17 -16
- tactus-0.20.1/examples/app_config.json +0 -1
- tactus-0.20.1/examples/app_summary.json +0 -1
- tactus-0.20.1/examples/data_export.csv +0 -11
- tactus-0.20.1/examples/executive_summary.xlsx +0 -0
- tactus-0.20.1/examples/inventory.tsv +0 -6
- tactus-0.20.1/examples/output_high_performers.csv +0 -5
- tactus-0.20.1/examples/output_summary.json +0 -5
- tactus-0.20.1/examples/product_analysis.xlsx +0 -0
- tactus-0.20.1/examples/sales_analysis.xlsx +0 -0
- tactus-0.20.1/examples/sales_report.xlsx +0 -0
- tactus-0.20.1/examples/scientific_data.h5 +0 -0
- tactus-0.20.1/examples/sensor_data.parquet +0 -0
- tactus-0.20.1/examples/sensor_report.parquet +0 -0
- tactus-0.20.1/examples/sensor_summary.parquet +0 -0
- tactus-0.20.1/examples/status_report.md +0 -31
- tactus-0.20.1/examples/summary.json +0 -6
- tactus-0.20.1/tactus/testing/mock_agent.py +0 -179
- tactus-0.20.1/tactus-ide/frontend/src/components/events/LoadingEventComponent.tsx +0 -29
- {tactus-0.20.1 → tactus-0.21.0}/.claude/agents.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/.github/workflows/desktop-release.yml +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/.github/workflows/release.yml +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/.tactus/config.yml.example +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/AGENTS.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/IMPLEMENTATION.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/LICENSE +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/Makefile +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/SPECIFICATION.md.bak +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/TECHNICAL_DEBT.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/behave.ini +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/AGENTS.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/BDD_TESTING.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/DURABILITY.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/FILE_IO.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/STREAMING.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/TOOLS.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/docs/TOOL_ROADMAP.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/.tactus/config.yml +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/01-basics-hello-world.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/02-basics-simple-logic.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/03-basics-parameters.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/06-basics-streaming.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/10-feature-state.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/14-feature-per-turn-tools-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/15-feature-local-tools.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/20-bdd-complete.tac.bak +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/20-bdd-complete.tac.bak2 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/21-bdd-passing.tac.bak +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/21-bdd-passing.tac.bak2 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/30-eval-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/34-eval-dataset.jsonl +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/35-eval-trace.tac.bak +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/35-eval-trace.tac.bak2 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/37-eval-comprehensive.tac.bak +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/37-eval-comprehensive.tac.bak2 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/39-model-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/40-mcp-test.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/41-mcp-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/43-sub-procedure-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/45-sub-procedure-recursive.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/46-checkpoint-explicit.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/47-checkpoint-expensive-ops.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/48-script-mode-simple.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/50-inputs-showcase.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/51-inputs-calculator.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/62-mcp-toolset-by-server.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/64-require-modules.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/99-misc-test-loading.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/app_config.ini +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/data/sample.csv +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/demo_output.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/helpers/math_module.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/helpers/product.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/helpers/string_module.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/helpers/sum.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/helpers/text_tools.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/inventory_summary.tsv +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/mock-config.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/models/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/models/create_sentiment_model.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/output_summary.txt +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/tools/calculations.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/tools/data_analysis.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/tools/search.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/with_dependencies/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/with_dependencies/simple_http_test.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/examples/with_dependencies/time_lookup.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/01_state_management.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/02_checkpointing.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/03_human_in_the_loop.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/04_control_flow.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/05_tool_integration.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/06_retry_logic.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/07_file_operations.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/08_agent_primitives.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/09_workflow_execution.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/10_lua_integration.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/11_storage_backends.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/12_json_operations.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/13_logging.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/14_stage_and_step_tracking.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/15_procedure_calls.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/16_session_management.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/17_lua_dsl_validation.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/18_example_procedures.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/19_ide_server.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/20_parameters.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/21_outputs.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/23_prompts.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/24_bdd_specifications.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/25_bdd_custom_steps.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/26_bdd_evaluation.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/27_default_settings.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/28_custom_prompts.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/29_execution_settings.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/30_session_filters.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/31_matchers.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/32_result_object.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/33_output_type.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/42_model_primitive.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/43_sub_procedure_checkpointing.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/46_explicit_checkpoint.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/48_script_mode.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/51_dspy_lm_config.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/52_dspy_signature.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/53_dspy_module.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/54_dspy_history.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/55_dspy_prediction.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/56_dspy_agent.feature +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/documentation/IDE_SERVER_BEHAVIOR.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/documentation/Lua DSL/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/environment.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/agent_primitives_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/checkpointing_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/control_flow_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_agent_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_history_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_lm_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_module_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_prediction_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/dspy_signature_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/example_procedures_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/file_operations_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/human_in_the_loop_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/ide_server_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/json_operations_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/logging_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/lua_dsl_validation_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/lua_integration_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/mocking_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/procedure_calls_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/result_and_output_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/retry_logic_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/session_management_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/stage_tracking_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/state_management_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/storage_backend_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/support/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/support/harnesses.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/tool_integration_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/features/steps/workflow_execution_steps.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/scripts/audit_examples_mocking.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/scripts/convert_examples.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/start-web-ide.sh +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/cli_hitl.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/cli_log.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/file_storage.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/ide_log.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/lua_tools.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/mcp.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/mcp_manager.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/memory.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/adapters/plugins.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/backends/http_backend.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/backends/model_backend.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/backends/pytorch_backend.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/cli/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/cli/commands/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/dependencies/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/dependencies/registry.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/exceptions.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/lua_sandbox.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/message_history_manager.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/mocking.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/core/template_resolver.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/config.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/history.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/module.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/prediction.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/dspy/signature.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/ide/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/control.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/file.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/human.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/json.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/log.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/message_history.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/model.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/procedure.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/procedure_callable.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/retry.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/session.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/stage.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/state.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/step.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/primitives/toolset.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/chat_recorder.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/config.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/hitl.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/log_handler.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/models.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/protocols/storage.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/providers/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/providers/base.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/providers/bedrock.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/providers/google.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/providers/openai.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/csv.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/excel.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/file.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/hdf5.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/json.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/parquet.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/io/tsv.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/loader.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/stdlib/tac/tactus/tools/log.tac +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/behave_integration.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/context.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/eval_models.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/evaluation_runner.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/evaluators.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/events.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/gherkin_parser.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/mock_dependencies.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/mock_hitl.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/mock_registry.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/models.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/pydantic_eval_runner.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/steps/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/steps/builtin.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/steps/custom.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/testing/steps/registry.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/tracing/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/tracing/trace_manager.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/utils/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/utils/cost_calculator.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/utils/model_pricing.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/utils/safe_file_library.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/utils/safe_libraries.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/LuaLexerBase.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/LuaParserBase.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/error_listener.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaLexer.interp +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaLexer.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaLexer.tokens +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaLexerBase.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaParser.interp +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaParser.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaParser.tokens +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaParserBase.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/LuaParserVisitor.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/generated/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/grammar/LuaLexer.g4 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/grammar/LuaParser.g4 +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/semantic_visitor.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus/validation/validator.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/.gitignore +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/RUN_ELECTRON.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/SETUP_COMPLETE.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/backend/hook-lupa.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/backend/tactus_backend.spec +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/package-lock.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/package.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/preload/preload.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/preload/tsconfig.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/rebuild-and-test.sh +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/scripts/build-backend.js +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/scripts/build-frontend.js +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/src/backend-manager.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/src/main.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/src/menu.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-desktop/tsconfig.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/ARCHITECTURE.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/CHANGELOG.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/DEV_MODE.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/QUICK_START.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/RESTART_INSTRUCTIONS.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/TROUBLESHOOTING.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/events.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/logging_capture.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/lsp_server.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/requirements.txt +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/backend/tactus_lsp_handler.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/dev.sh +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/.storybook/main.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/.storybook/preview.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/.storybook/vitest.setup.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/README.md +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/demo.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/index.html +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/jest.config.js +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/package.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/postcss.config.js +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/Editor.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/LSPClient.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/LSPClientHTTP.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/TactusLanguage.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/commands/registry.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/CheckpointSummary.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/CollapsibleRun.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/Duration.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/Duration.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/FileTree.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/FileTree.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureInputsModal.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureInputsModal.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureTab.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ProcedureTab.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ResizeHandle.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ResultsSidebar.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/Timestamp.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/Timestamp.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/TopMenuBar.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/CheckpointList.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/CheckpointList.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/RunSelector.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/RunSelector.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/AgentStreamingComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/BaseEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/CostEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/LoadingEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/LogCluster.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/LogEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/LogEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/OutputEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/OutputEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/TestEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/TestEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ToolCallEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ValidationEventComponent.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/events/ValidationEventComponent.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/AgentsSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/EvaluationsSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/MetadataSections.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/OutputsSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/ParametersSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/SpecificationsSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/StagesSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/metadata/ToolsSection.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/scenarios/EvaluateScenarios.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/scenarios/RunScenarios.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/scenarios/TestScenarios.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/scenarios/ValidationScenarios.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/theme-provider.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/ai/conversation.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/ai/message.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/ai/prompt-input.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/button.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/dialog.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/input.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/logo.stories.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/logo.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/menubar.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/scroll-area.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/separator.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/components/ui/tabs.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/hooks/useTracing.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/index.css +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/lib/utils.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/main.tsx +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/types/metadata.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/types/results.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/types/tracing.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/validation/TactusValidator.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/validation/generated/LuaParser.interp +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/validation/generated/LuaParser.tokens +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/validation/types.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/src/vite-env.d.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/tailwind.config.js +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/tsconfig.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/tsconfig.node.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/vite.config.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/frontend/vitest.shims.d.ts +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/package.json +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tactus-ide/start-dev.sh +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/adapters/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/adapters/test_lua_tools_adapter.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/adapters/test_plugins.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/cli/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/conftest.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/test_config_manager.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/test_determinism_safety.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/test_lua_sandbox_security.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/test_runtime_inputs.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/core/test_script_mode.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/dspy/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/dspy/test_streaming.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/fixtures/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/fixtures/test_mcp_server.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/integration/test_named_procedures.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/mocks/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/mocks/llm_mocks.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/primitives/test_retry_primitive.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/primitives/test_state_primitive.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/primitives/test_tool_primitive.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/primitives/test_toolset_dsl.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/stdlib/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/stdlib/test_loader.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/stdlib/test_require_python.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/test_checkpoints_integration.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/test_tracing.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/conftest.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_e2e.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_gherkin_parser.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_integration.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_models.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_runtime_integration.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/testing/test_step_registry.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/utils/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/utils/test_safe_file_library.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tests/validation/__init__.py +0 -0
- {tactus-0.20.1 → tactus-0.21.0}/tmp/langchain.db/topics_llm_cache.db +0 -0
|
@@ -2,12 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
-
## v0.
|
|
5
|
+
## v0.21.0 (2026-01-10)
|
|
6
6
|
|
|
7
7
|
### Bug Fixes
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
([`
|
|
9
|
+
- Clarify summarization prompts are logged
|
|
10
|
+
([`1fbabee`](https://github.com/AnthusAI/Tactus/commit/1fbabeef3c6634fb9b2927e39a3e575f1074ff7d))
|
|
11
|
+
|
|
12
|
+
- Clarify template namespaces and rendering
|
|
13
|
+
([`b4b61c1`](https://github.com/AnthusAI/Tactus/commit/b4b61c15107a85c83c7646d347fafc3dd98943c3))
|
|
14
|
+
|
|
15
|
+
- Remove incompatible tests and skip deprecated YAML test
|
|
16
|
+
([`5960ed3`](https://github.com/AnthusAI/Tactus/commit/5960ed3580d958101dffca626c0d2cdd773e83be))
|
|
17
|
+
|
|
18
|
+
- Support message alias for agent calls
|
|
19
|
+
([`43c911b`](https://github.com/AnthusAI/Tactus/commit/43c911bd9ad8aa3be6b7f0751f044d25f40cd9fa))
|
|
20
|
+
|
|
21
|
+
### Chores
|
|
22
|
+
|
|
23
|
+
- Update .gitignore to include tmp/ directory
|
|
24
|
+
([`9871bae`](https://github.com/AnthusAI/Tactus/commit/9871baeaa0d0dd3a14861d1e88b329164f238a2f))
|
|
11
25
|
|
|
12
26
|
|
|
13
27
|
## v0.20.0 (2026-01-09)
|
|
@@ -1883,12 +1883,12 @@ local web_search = Tool.get("web_search") -- From MCP server
|
|
|
1883
1883
|
local result = web_search({query = "weather"})
|
|
1884
1884
|
```
|
|
1885
1885
|
|
|
1886
|
-
###
|
|
1886
|
+
### toolset() with type="lua"
|
|
1887
1887
|
|
|
1888
1888
|
Group multiple related tools into a named toolset:
|
|
1889
1889
|
|
|
1890
1890
|
```lua
|
|
1891
|
-
|
|
1891
|
+
toolset("math_tools", {
|
|
1892
1892
|
type = "lua",
|
|
1893
1893
|
tools = {
|
|
1894
1894
|
{
|
|
@@ -3260,4 +3260,4 @@ Tests are executed using Behave programmatically with:
|
|
|
3260
3260
|
|
|
3261
3261
|
**Declarative + Imperative:** Declare HITL points in YAML for documentation, invoke them in Lua for control.
|
|
3262
3262
|
|
|
3263
|
-
**BDD Testing:** First-class Gherkin specifications with built-in steps, custom steps, parallel execution, and consistency evaluation.
|
|
3263
|
+
**BDD Testing:** First-class Gherkin specifications with built-in steps, custom steps, parallel execution, and consistency evaluation.
|
|
@@ -93,6 +93,138 @@ default_model: "gpt-4o-mini"
|
|
|
93
93
|
|
|
94
94
|
**Security**: Sidecar files can contain file paths and command execution. Only use trusted sidecar files.
|
|
95
95
|
|
|
96
|
+
## Sandbox Configuration
|
|
97
|
+
|
|
98
|
+
Tactus runs procedures in Docker containers by default for security isolation. You can configure sandbox behavior at any configuration level (user, project, or sidecar).
|
|
99
|
+
|
|
100
|
+
### Basic Sandbox Settings
|
|
101
|
+
|
|
102
|
+
```yaml
|
|
103
|
+
# ~/.tactus/config.yml or .tactus/config.yml
|
|
104
|
+
sandbox:
|
|
105
|
+
enabled: true # Default: true (if Docker available)
|
|
106
|
+
image: "tactus-sandbox:local" # Docker image name (auto-built on first use)
|
|
107
|
+
timeout: 3600 # Max execution time in seconds (default: 1 hour)
|
|
108
|
+
mcp_servers_path: "~/.tactus/mcp-servers" # Path to MCP servers
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**Note**: If Docker is unavailable and `enabled: true`, execution will fail with an error. Use `--no-sandbox` flag or `enabled: false` to explicitly run without isolation.
|
|
112
|
+
|
|
113
|
+
### Resource Limits
|
|
114
|
+
|
|
115
|
+
Control memory and CPU usage per container:
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
sandbox:
|
|
119
|
+
limits:
|
|
120
|
+
memory: "2g" # Per-container memory limit (default: 2GB)
|
|
121
|
+
cpus: "2" # Per-container CPU cores (default: 2)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Error handling**:
|
|
125
|
+
- Out of memory: Container killed with exit code 137
|
|
126
|
+
- Timeout exceeded: Container killed with exit code 124
|
|
127
|
+
|
|
128
|
+
### Network Configuration
|
|
129
|
+
|
|
130
|
+
Control network access for procedures:
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
sandbox:
|
|
134
|
+
network: "bridge" # Network mode (default: bridge)
|
|
135
|
+
|
|
136
|
+
# Options:
|
|
137
|
+
# - "bridge": Default Docker bridge (allows outbound connections)
|
|
138
|
+
# - "none": No network access (most secure, but can't call LLM APIs)
|
|
139
|
+
# - "host": Use host network (not recommended for security)
|
|
140
|
+
# - "custom-network": Use a custom Docker network
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Security consideration**: Default `bridge` mode allows outbound connections (needed for LLM API calls), but agents could potentially exfiltrate data. See [Sandboxing Guide: Threat Model](./SANDBOXING.md#threat-model) for details.
|
|
144
|
+
|
|
145
|
+
### Volume Mounts
|
|
146
|
+
|
|
147
|
+
Mount host directories into the container:
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
sandbox:
|
|
151
|
+
volumes:
|
|
152
|
+
- "/host/data:/data:ro" # Read-only mount
|
|
153
|
+
- "/host/outputs:/outputs:rw" # Read-write mount
|
|
154
|
+
- "/shared/config:/config:ro"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Default mounts** (always included):
|
|
158
|
+
- Workspace: Temporary directory at `/workspace` (ephemeral, destroyed after run)
|
|
159
|
+
- MCP Servers: `~/.tactus/mcp-servers` at `/mcp-servers` (read-only)
|
|
160
|
+
|
|
161
|
+
### Environment Variables
|
|
162
|
+
|
|
163
|
+
Pass environment variables to the container:
|
|
164
|
+
|
|
165
|
+
```yaml
|
|
166
|
+
sandbox:
|
|
167
|
+
env:
|
|
168
|
+
CUSTOM_VAR: "value"
|
|
169
|
+
DEBUG: "true"
|
|
170
|
+
LOG_LEVEL: "info"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Automatically passed through** (no configuration needed):
|
|
174
|
+
- `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`
|
|
175
|
+
- `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_DEFAULT_REGION`, `AWS_SESSION_TOKEN`
|
|
176
|
+
- `AZURE_OPENAI_API_KEY`, `AZURE_OPENAI_ENDPOINT`
|
|
177
|
+
|
|
178
|
+
### Per-Procedure Sandbox Configuration
|
|
179
|
+
|
|
180
|
+
Use sidecar files to customize sandbox settings per procedure:
|
|
181
|
+
|
|
182
|
+
**Example**: `financial_analysis.tac.yml`
|
|
183
|
+
```yaml
|
|
184
|
+
# Procedure-specific sandbox configuration
|
|
185
|
+
sandbox:
|
|
186
|
+
enabled: true
|
|
187
|
+
|
|
188
|
+
limits:
|
|
189
|
+
memory: "4g" # More memory for data-heavy processing
|
|
190
|
+
cpus: "4" # More CPU cores
|
|
191
|
+
|
|
192
|
+
timeout: 1800 # 30 minute timeout
|
|
193
|
+
|
|
194
|
+
network: "none" # No network access for sensitive data
|
|
195
|
+
|
|
196
|
+
volumes:
|
|
197
|
+
- "/data/financial:/data:ro" # Read-only financial data
|
|
198
|
+
- "/output/reports:/reports:rw" # Write reports here
|
|
199
|
+
|
|
200
|
+
env:
|
|
201
|
+
DATA_PATH: "/data"
|
|
202
|
+
OUTPUT_PATH: "/reports"
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
**Use cases for per-procedure sandbox configs**:
|
|
206
|
+
- Higher resource limits for data-intensive procedures
|
|
207
|
+
- Network isolation for procedures handling sensitive data
|
|
208
|
+
- Custom volume mounts for specific data sources
|
|
209
|
+
- Procedure-specific environment variables
|
|
210
|
+
|
|
211
|
+
### Disabling the Sandbox
|
|
212
|
+
|
|
213
|
+
To run without Docker isolation:
|
|
214
|
+
|
|
215
|
+
**Via CLI**:
|
|
216
|
+
```bash
|
|
217
|
+
tactus run procedure.tac --no-sandbox
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Via configuration**:
|
|
221
|
+
```yaml
|
|
222
|
+
sandbox:
|
|
223
|
+
enabled: false
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Security warning**: Running without sandbox removes OS-level isolation. Only disable for trusted procedures or development. See [Sandboxing Guide](./SANDBOXING.md) for security implications.
|
|
227
|
+
|
|
96
228
|
### Directory-Level Configuration
|
|
97
229
|
|
|
98
230
|
You can place `.tactus/config.yml` files in any directory to configure settings for procedures in that directory and subdirectories.
|
|
@@ -322,6 +454,7 @@ api_key = config.get("openai_api_key")
|
|
|
322
454
|
|
|
323
455
|
## See Also
|
|
324
456
|
|
|
457
|
+
- [Sandboxing & Security](SANDBOXING.md) - Security concepts and threat models
|
|
325
458
|
- [Tool Roadmap](TOOL_ROADMAP.md) - Information about tool loading
|
|
326
459
|
- [README](../README.md) - General Tactus documentation
|
|
327
460
|
- [Examples](../examples/) - Example procedures with sidecar configs
|