tactus 0.15.1__tar.gz → 0.22.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.15.1 → tactus-0.22.0}/.github/workflows/release.yml +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/.gitignore +2 -0
- {tactus-0.15.1 → tactus-0.22.0}/AGENTS.md +12 -1
- {tactus-0.15.1 → tactus-0.22.0}/CHANGELOG.md +119 -0
- {tactus-0.15.1 → tactus-0.22.0}/IMPLEMENTATION.md +107 -103
- {tactus-0.15.1 → tactus-0.22.0}/PKG-INFO +142 -101
- {tactus-0.15.1 → tactus-0.22.0}/README.md +140 -98
- tactus-0.22.0/SPECIFICATION.md +3258 -0
- tactus-0.15.1/SPECIFICATION.md → tactus-0.22.0/SPECIFICATION.md.bak +696 -269
- tactus-0.22.0/TECHNICAL_DEBT.md +262 -0
- tactus-0.22.0/docs/AGENTS.md +22 -0
- {tactus-0.15.1 → tactus-0.22.0}/docs/BDD_TESTING.md +253 -12
- {tactus-0.15.1 → tactus-0.22.0}/docs/CONFIGURATION.md +153 -7
- {tactus-0.15.1 → tactus-0.22.0}/docs/DURABILITY.md +98 -71
- tactus-0.22.0/docs/SANDBOXING.md +499 -0
- tactus-0.22.0/docs/STREAMING.md +140 -0
- {tactus-0.15.1 → tactus-0.22.0}/docs/TOOLS.md +281 -263
- {tactus-0.15.1 → tactus-0.22.0}/docs/TOOL_ROADMAP.md +20 -20
- tactus-0.22.0/examples/01-basics-hello-world.tac +9 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/02-basics-simple-logic.tac +20 -25
- {tactus-0.15.1 → tactus-0.22.0}/examples/03-basics-parameters.tac +18 -21
- tactus-0.22.0/examples/04-basics-simple-agent.tac +71 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/05-basics-multi-model.tac +39 -20
- tactus-0.22.0/examples/06-basics-streaming.tac +33 -0
- tactus-0.22.0/examples/07-basics-bedrock.tac +91 -0
- tactus-0.22.0/examples/08-basics-models.tac +285 -0
- tactus-0.22.0/examples/09-basics-google-gemini.tac +154 -0
- tactus-0.22.0/examples/10-feature-state.tac +58 -0
- tactus-0.22.0/examples/11-feature-message-history.tac +73 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/12-feature-structured-output.tac +39 -40
- tactus-0.22.0/examples/13-feature-session.tac +73 -0
- tactus-0.22.0/examples/14-feature-per-turn-tools-simple.tac +53 -0
- tactus-0.22.0/examples/14-feature-per-turn-tools.tac +140 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/15-feature-local-tools.tac +45 -46
- tactus-0.22.0/examples/16-feature-toolsets-advanced.tac +187 -0
- tactus-0.22.0/examples/17-feature-toolsets-dsl.tac +130 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/18-feature-lua-tools-individual.tac +49 -39
- {tactus-0.15.1 → tactus-0.22.0}/examples/18-feature-lua-tools-inline.tac +62 -48
- {tactus-0.15.1 → tactus-0.22.0}/examples/18-feature-lua-tools-toolset.tac +50 -37
- tactus-0.22.0/examples/19-feature-direct-tool-calls.tac +156 -0
- tactus-0.22.0/examples/20-bdd-complete.tac +135 -0
- tactus-0.15.1/examples/20-bdd-complete.tac → tactus-0.22.0/examples/20-bdd-complete.tac.bak +50 -54
- tactus-0.22.0/examples/20-bdd-complete.tac.bak2 +122 -0
- tactus-0.22.0/examples/21-bdd-passing.tac +102 -0
- tactus-0.15.1/examples/21-bdd-passing.tac → tactus-0.22.0/examples/21-bdd-passing.tac.bak +34 -37
- tactus-0.22.0/examples/21-bdd-passing.tac.bak2 +92 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/30-eval-simple.tac +12 -13
- {tactus-0.15.1 → tactus-0.22.0}/examples/31-eval-demo.tac +43 -21
- {tactus-0.15.1 → tactus-0.22.0}/examples/32-eval-success-rate.tac +53 -31
- {tactus-0.15.1 → tactus-0.22.0}/examples/33-eval-thresholds.tac +41 -20
- {tactus-0.15.1 → tactus-0.22.0}/examples/34-eval-dataset.tac +46 -25
- tactus-0.22.0/examples/35-eval-trace.tac +154 -0
- tactus-0.22.0/examples/35-eval-trace.tac.bak +132 -0
- tactus-0.15.1/examples/35-eval-trace.tac → tactus-0.22.0/examples/35-eval-trace.tac.bak2 +50 -37
- {tactus-0.15.1 → tactus-0.22.0}/examples/36-eval-advanced.tac +39 -23
- tactus-0.22.0/examples/37-eval-comprehensive.tac +145 -0
- tactus-0.15.1/examples/37-eval-comprehensive.tac → tactus-0.22.0/examples/37-eval-comprehensive.tac.bak +44 -32
- tactus-0.22.0/examples/37-eval-comprehensive.tac.bak2 +129 -0
- tactus-0.22.0/examples/39-model-simple.tac +42 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/40-mcp-test.tac +41 -40
- tactus-0.22.0/examples/40-model-text-classifier.tac +99 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/41-mcp-simple.tac +25 -24
- tactus-0.22.0/examples/41-model-pytorch.tac +90 -0
- tactus-0.22.0/examples/43-sub-procedure-simple.tac +54 -0
- tactus-0.22.0/examples/44-sub-procedure-composition.tac +105 -0
- tactus-0.22.0/examples/45-sub-procedure-recursive.tac +37 -0
- tactus-0.22.0/examples/46-checkpoint-explicit.tac +51 -0
- tactus-0.22.0/examples/47-checkpoint-expensive-ops.tac +46 -0
- tactus-0.22.0/examples/48-script-mode-simple.tac +21 -0
- tactus-0.22.0/examples/50-inputs-showcase.tac +66 -0
- tactus-0.22.0/examples/51-inputs-calculator.tac +82 -0
- tactus-0.22.0/examples/52-file-io-basics.tac +93 -0
- tactus-0.22.0/examples/53-tsv-file-io.tac +87 -0
- tactus-0.22.0/examples/54-json-file-io.tac +141 -0
- tactus-0.22.0/examples/55-parquet-file-io.tac +129 -0
- tactus-0.22.0/examples/56-hdf5-file-io.tac +109 -0
- tactus-0.22.0/examples/57-excel-file-io.tac +154 -0
- tactus-0.22.0/examples/58-text-file-io.tac +224 -0
- tactus-0.22.0/examples/60-tool-sources.tac +122 -0
- tactus-0.22.0/examples/61-inline-toolset-lua.tac +167 -0
- tactus-0.22.0/examples/62-mcp-toolset-by-server.tac +177 -0
- tactus-0.22.0/examples/63-toolset-import-from-file.tac +167 -0
- tactus-0.22.0/examples/64-require-modules.tac +57 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/65-optional-state-demo.tac +30 -24
- tactus-0.22.0/examples/70-mocking-static.tac +150 -0
- tactus-0.22.0/examples/71-mocking-temporal.tac +135 -0
- tactus-0.22.0/examples/72-mocking-conditional.tac +155 -0
- tactus-0.22.0/examples/99-misc-test-loading.tac +20 -0
- tactus-0.22.0/examples/app_config.ini +26 -0
- tactus-0.22.0/examples/demo_output.json +11 -0
- tactus-0.22.0/examples/helpers/math_module.tac +39 -0
- tactus-0.22.0/examples/helpers/product.tac +18 -0
- tactus-0.22.0/examples/helpers/string_module.tac +35 -0
- tactus-0.22.0/examples/helpers/sum.tac +18 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/helpers/text_tools.tac +4 -4
- tactus-0.22.0/examples/inventory_summary.tsv +4 -0
- tactus-0.22.0/examples/output_summary.txt +1 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/tools/data_analysis.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/examples/tools/search.py +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/examples/with_dependencies/simple_http_test.tac +15 -22
- {tactus-0.15.1 → tactus-0.22.0}/examples/with_dependencies/time_lookup.tac +15 -21
- {tactus-0.15.1 → tactus-0.22.0}/features/17_lua_dsl_validation.feature +6 -21
- {tactus-0.15.1 → tactus-0.22.0}/features/18_example_procedures.feature +0 -2
- {tactus-0.15.1 → tactus-0.22.0}/features/20_parameters.feature +12 -12
- {tactus-0.15.1 → tactus-0.22.0}/features/21_outputs.feature +12 -12
- {tactus-0.15.1 → tactus-0.22.0}/features/23_prompts.feature +4 -4
- {tactus-0.15.1 → tactus-0.22.0}/features/24_bdd_specifications.feature +9 -9
- {tactus-0.15.1 → tactus-0.22.0}/features/25_bdd_custom_steps.feature +3 -3
- {tactus-0.15.1 → tactus-0.22.0}/features/26_bdd_evaluation.feature +8 -8
- {tactus-0.15.1 → tactus-0.22.0}/features/27_default_settings.feature +6 -6
- {tactus-0.15.1 → tactus-0.22.0}/features/28_custom_prompts.feature +5 -5
- {tactus-0.15.1 → tactus-0.22.0}/features/29_execution_settings.feature +5 -5
- {tactus-0.15.1 → tactus-0.22.0}/features/30_session_filters.feature +5 -5
- {tactus-0.15.1 → tactus-0.22.0}/features/31_matchers.feature +5 -5
- {tactus-0.15.1 → tactus-0.22.0}/features/32_result_object.feature +6 -8
- {tactus-0.15.1 → tactus-0.22.0}/features/42_model_primitive.feature +9 -9
- {tactus-0.15.1 → tactus-0.22.0}/features/46_explicit_checkpoint.feature +2 -2
- tactus-0.22.0/features/51_dspy_lm_config.feature +199 -0
- tactus-0.22.0/features/52_dspy_signature.feature +302 -0
- tactus-0.22.0/features/53_dspy_module.feature +322 -0
- tactus-0.22.0/features/54_dspy_history.feature +302 -0
- tactus-0.22.0/features/55_dspy_prediction.feature +295 -0
- tactus-0.22.0/features/56_dspy_agent.feature +323 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/documentation/Lua DSL/README.md +18 -18
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/agent_primitives_steps.py +16 -5
- tactus-0.22.0/features/steps/dspy_agent_steps.py +832 -0
- tactus-0.22.0/features/steps/dspy_history_steps.py +652 -0
- tactus-0.22.0/features/steps/dspy_lm_steps.py +351 -0
- tactus-0.22.0/features/steps/dspy_module_steps.py +499 -0
- tactus-0.22.0/features/steps/dspy_prediction_steps.py +811 -0
- tactus-0.22.0/features/steps/dspy_signature_steps.py +381 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/example_procedures_steps.py +5 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/lua_dsl_validation_steps.py +9 -2
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/result_and_output_steps.py +17 -7
- {tactus-0.15.1 → tactus-0.22.0}/pyproject.toml +2 -2
- tactus-0.22.0/scripts/audit_examples_mocking.py +229 -0
- tactus-0.22.0/scripts/convert_examples.py +213 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/__init__.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/cli_log.py +25 -0
- tactus-0.22.0/tactus/adapters/http_callback_log.py +109 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/ide_log.py +10 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/cli/app.py +249 -64
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/config_manager.py +77 -7
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/dependencies/registry.py +2 -3
- tactus-0.22.0/tactus/core/dsl_stubs.py +1796 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/execution_context.py +8 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/lua_sandbox.py +139 -41
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/output_validator.py +3 -6
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/registry.py +47 -3
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/runtime.py +263 -158
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/yaml_parser.py +11 -1
- tactus-0.22.0/tactus/docker/Dockerfile +57 -0
- tactus-0.22.0/tactus/docker/entrypoint.sh +68 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/dspy/__init__.py +2 -1
- tactus-0.22.0/tactus/dspy/agent.py +962 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/dspy/config.py +34 -0
- tactus-0.22.0/tactus/dspy/history.py +196 -0
- tactus-0.22.0/tactus/dspy/module.py +270 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/dspy/prediction.py +110 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/dspy/signature.py +33 -0
- tactus-0.22.0/tactus/ide/coding_assistant.py +343 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/ide/server.py +497 -65
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/__init__.py +2 -0
- tactus-0.22.0/tactus/primitives/handles.py +346 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/model.py +23 -3
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/procedure.py +24 -3
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/procedure_callable.py +46 -54
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/step.py +57 -0
- tactus-0.22.0/tactus/primitives/system.py +93 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/tool.py +4 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/tool_handle.py +114 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/__init__.py +7 -0
- tactus-0.22.0/tactus/protocols/cost.py +31 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/log_handler.py +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/models.py +15 -1
- tactus-0.22.0/tactus/protocols/result.py +33 -0
- tactus-0.22.0/tactus/sandbox/__init__.py +63 -0
- tactus-0.22.0/tactus/sandbox/config.py +121 -0
- tactus-0.22.0/tactus/sandbox/container_runner.py +391 -0
- tactus-0.22.0/tactus/sandbox/docker_manager.py +321 -0
- tactus-0.22.0/tactus/sandbox/entrypoint.py +186 -0
- tactus-0.22.0/tactus/sandbox/protocol.py +222 -0
- tactus-0.22.0/tactus/stdlib/__init__.py +10 -0
- tactus-0.22.0/tactus/stdlib/io/__init__.py +13 -0
- tactus-0.22.0/tactus/stdlib/io/csv.py +88 -0
- tactus-0.22.0/tactus/stdlib/io/excel.py +136 -0
- tactus-0.22.0/tactus/stdlib/io/file.py +90 -0
- tactus-0.22.0/tactus/stdlib/io/hdf5.py +121 -0
- tactus-0.22.0/tactus/stdlib/io/json.py +109 -0
- tactus-0.22.0/tactus/stdlib/io/parquet.py +83 -0
- tactus-0.22.0/tactus/stdlib/io/tsv.py +88 -0
- tactus-0.22.0/tactus/stdlib/loader.py +274 -0
- tactus-0.22.0/tactus/stdlib/tac/tactus/tools/done.tac +33 -0
- tactus-0.22.0/tactus/stdlib/tac/tactus/tools/log.tac +49 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/README.md +6 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/behave_integration.py +15 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/context.py +18 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/evaluation_runner.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/gherkin_parser.py +2 -3
- tactus-0.22.0/tactus/testing/mock_agent.py +223 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/mock_hitl.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/mock_tools.py +18 -7
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/models.py +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/steps/builtin.py +79 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/test_runner.py +35 -5
- {tactus-0.15.1 → tactus-0.22.0}/tactus/tracing/trace_manager.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/LuaLexerBase.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/LuaParserBase.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaLexer.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaLexerBase.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaParser.py +6 -32
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaParserBase.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaParserVisitor.py +0 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/__init__.py +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/semantic_visitor.py +243 -40
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/ARCHITECTURE.md +3 -3
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/README.md +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/test_lsp_server.py +4 -4
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/README.md +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/demo.ts +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/package-lock.json +1471 -2095
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/App.tsx +95 -6
- tactus-0.22.0/tactus-ide/frontend/src/components/ChatSidebar.tsx +195 -0
- tactus-0.22.0/tactus-ide/frontend/src/components/MessageFeed.tsx +158 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureInputsModal.tsx +47 -24
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ResultsSidebar.tsx +31 -2
- tactus-0.22.0/tactus-ide/frontend/src/components/TestOptionsModal.tsx +185 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.stories.tsx +1 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/CheckpointEventComponent.tsx +6 -5
- tactus-0.22.0/tactus-ide/frontend/src/components/events/CollapsibleTestScenario.tsx +194 -0
- tactus-0.22.0/tactus-ide/frontend/src/components/events/ContainerStatusEventComponent.tsx +95 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/CostEventComponent.tsx +2 -2
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/EventRenderer.tsx +15 -21
- tactus-0.22.0/tactus-ide/frontend/src/components/events/LoadingEventComponent.tsx +42 -0
- tactus-0.22.0/tactus-ide/frontend/src/components/events/TestProgressContainer.tsx +262 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/OutputsSection.tsx +8 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/ParametersSection.tsx +8 -1
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/hooks/useEventStream.ts +91 -16
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/types/events.ts +18 -1
- {tactus-0.15.1 → tactus-0.22.0}/tests/cli/test_cli.py +14 -14
- {tactus-0.15.1 → tactus-0.22.0}/tests/cli/test_cli_inputs.py +31 -20
- {tactus-0.15.1 → tactus-0.22.0}/tests/core/test_lua_sandbox_security.py +23 -6
- {tactus-0.15.1 → tactus-0.22.0}/tests/core/test_runtime_inputs.py +20 -20
- tactus-0.22.0/tests/core/test_script_mode.py +206 -0
- tactus-0.22.0/tests/dspy/__init__.py +1 -0
- tactus-0.22.0/tests/dspy/test_module_parameter.py +142 -0
- tactus-0.22.0/tests/dspy/test_streaming.py +276 -0
- tactus-0.22.0/tests/primitives/test_checkpoint_primitive.py +48 -0
- tactus-0.22.0/tests/primitives/test_system_alert.py +73 -0
- tactus-0.22.0/tests/stdlib/__init__.py +1 -0
- tactus-0.22.0/tests/stdlib/test_loader.py +180 -0
- tactus-0.22.0/tests/stdlib/test_require_python.py +228 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/test_mcp_integration.py +3 -6
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_all_examples.py +91 -19
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_e2e.py +10 -10
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_gherkin_parser.py +3 -3
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_models.py +9 -9
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_runtime_integration.py +22 -15
- {tactus-0.15.1 → tactus-0.22.0}/tests/utils/test_safe_file_library.py +12 -8
- tactus-0.15.1/docs/STREAMING.md +0 -107
- tactus-0.15.1/examples/01-basics-hello-world.tac +0 -53
- tactus-0.15.1/examples/04-basics-simple-agent.tac +0 -78
- tactus-0.15.1/examples/06-basics-streaming.tac +0 -50
- tactus-0.15.1/examples/07-basics-bedrock.tac +0 -83
- tactus-0.15.1/examples/08-basics-models.tac +0 -241
- tactus-0.15.1/examples/09-basics-google-gemini.tac +0 -141
- tactus-0.15.1/examples/10-feature-state.tac +0 -55
- tactus-0.15.1/examples/11-feature-message-history.tac +0 -71
- tactus-0.15.1/examples/13-feature-session.tac +0 -71
- tactus-0.15.1/examples/14-feature-per-turn-tools-simple.tac +0 -53
- tactus-0.15.1/examples/14-feature-per-turn-tools.tac +0 -129
- tactus-0.15.1/examples/15-feature-local-tools.tac.yml +0 -11
- tactus-0.15.1/examples/16-feature-toolsets-advanced.tac +0 -165
- tactus-0.15.1/examples/16-feature-toolsets-advanced.tac.yml +0 -33
- tactus-0.15.1/examples/17-feature-toolsets-dsl.tac +0 -115
- tactus-0.15.1/examples/17-feature-toolsets-dsl.tac.yml +0 -6
- tactus-0.15.1/examples/19-feature-direct-tool-calls.tac +0 -143
- tactus-0.15.1/examples/39-model-simple.tac +0 -40
- tactus-0.15.1/examples/40-model-text-classifier.tac +0 -83
- tactus-0.15.1/examples/41-model-pytorch.tac +0 -76
- tactus-0.15.1/examples/43-sub-procedure-simple.tac +0 -59
- tactus-0.15.1/examples/44-sub-procedure-composition.tac +0 -116
- tactus-0.15.1/examples/45-sub-procedure-recursive.tac +0 -78
- tactus-0.15.1/examples/46-checkpoint-explicit.tac +0 -98
- tactus-0.15.1/examples/47-checkpoint-expensive-ops.tac +0 -83
- tactus-0.15.1/examples/48-script-mode-simple.tac +0 -19
- tactus-0.15.1/examples/50-inputs-showcase.tac +0 -69
- tactus-0.15.1/examples/51-inputs-calculator.tac +0 -80
- tactus-0.15.1/examples/52-file-io-basics.tac +0 -87
- tactus-0.15.1/examples/53-tsv-file-io.tac +0 -83
- tactus-0.15.1/examples/54-json-file-io.tac +0 -136
- tactus-0.15.1/examples/55-parquet-file-io.tac +0 -125
- tactus-0.15.1/examples/56-hdf5-file-io.tac +0 -146
- tactus-0.15.1/examples/57-excel-file-io.tac +0 -150
- tactus-0.15.1/examples/58-text-file-io.tac +0 -215
- tactus-0.15.1/examples/60-tool-sources.tac +0 -120
- tactus-0.15.1/examples/61-inline-toolset-lua.tac +0 -161
- tactus-0.15.1/examples/62-mcp-toolset-by-server.tac +0 -173
- tactus-0.15.1/examples/63-toolset-import-from-file.tac +0 -164
- tactus-0.15.1/examples/70-mocking-static.tac +0 -146
- tactus-0.15.1/examples/71-mocking-temporal.tac +0 -132
- tactus-0.15.1/examples/72-mocking-conditional.tac +0 -168
- tactus-0.15.1/examples/99-misc-test-loading.tac +0 -15
- tactus-0.15.1/examples/helpers/product.tac +0 -22
- tactus-0.15.1/examples/helpers/sum.tac +0 -22
- tactus-0.15.1/features/50_dspy_integration.feature +0 -108
- tactus-0.15.1/features/documentation/Lua DSL/PLAN.md +0 -243
- tactus-0.15.1/features/steps/dspy_integration_steps.py +0 -488
- tactus-0.15.1/features/steps/storage_backend_steps.py.bak +0 -343
- tactus-0.15.1/tactus/core/dsl_stubs.py +0 -1242
- tactus-0.15.1/tactus/dspy/agent.py +0 -244
- tactus-0.15.1/tactus/dspy/history.py +0 -114
- tactus-0.15.1/tactus/dspy/module.py +0 -127
- tactus-0.15.1/tactus/primitives/_deprecated_pydantic_ai/agent.py +0 -1318
- tactus-0.15.1/tactus/primitives/_deprecated_pydantic_ai/deps_generator.py +0 -106
- tactus-0.15.1/tactus/primitives/_deprecated_pydantic_ai/result.py +0 -260
- tactus-0.15.1/tactus/primitives/_deprecated_pydantic_ai/test_agent_tool_integration.py +0 -439
- tactus-0.15.1/tactus/primitives/_deprecated_pydantic_ai/test_tool_error_handling.py +0 -371
- tactus-0.15.1/tactus/primitives/handles.py +0 -223
- tactus-0.15.1/tactus/stdlib/__init__.py +0 -97
- tactus-0.15.1/tactus/stdlib/done/__init__.py +0 -39
- tactus-0.15.1/tactus/stdlib/file/__init__.py +0 -230
- tactus-0.15.1/tactus/stdlib/http/__init__.py +0 -197
- tactus-0.15.1/tactus/stdlib/log/__init__.py +0 -65
- tactus-0.15.1/tactus/stdlib/tools/done.tac +0 -21
- tactus-0.15.1/tactus/testing/mock_agent.py +0 -69
- tactus-0.15.1/tactus/validation/grammar/Lua.g4 +0 -1439
- tactus-0.15.1/tactus-ide/frontend/src/components/MessageFeed.tsx +0 -83
- tactus-0.15.1/tactus-ide/frontend/src/components/events/LoadingEventComponent.tsx +0 -29
- {tactus-0.15.1 → tactus-0.22.0}/.claude/agents.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/.github/workflows/desktop-release.yml +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/.tactus/config.yml.example +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/LICENSE +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/Makefile +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/behave.ini +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/docs/FILE_IO.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/.tactus/config.yml +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/34-eval-dataset.jsonl +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/data/sample.csv +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/mock-config.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/models/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/models/create_sentiment_model.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/tools/calculations.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/examples/with_dependencies/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/01_state_management.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/02_checkpointing.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/03_human_in_the_loop.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/04_control_flow.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/05_tool_integration.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/06_retry_logic.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/07_file_operations.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/08_agent_primitives.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/09_workflow_execution.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/10_lua_integration.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/11_storage_backends.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/12_json_operations.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/13_logging.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/14_stage_and_step_tracking.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/15_procedure_calls.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/16_session_management.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/19_ide_server.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/33_output_type.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/43_sub_procedure_checkpointing.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/48_script_mode.feature +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/documentation/IDE_SERVER_BEHAVIOR.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/environment.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/checkpointing_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/control_flow_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/file_operations_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/human_in_the_loop_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/ide_server_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/json_operations_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/logging_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/lua_integration_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/mocking_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/procedure_calls_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/retry_logic_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/session_management_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/stage_tracking_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/state_management_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/storage_backend_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/support/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/support/harnesses.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/tool_integration_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/features/steps/workflow_execution_steps.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/start-web-ide.sh +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/cli_hitl.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/file_storage.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/lua_tools.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/mcp.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/mcp_manager.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/memory.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/adapters/plugins.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/backends/http_backend.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/backends/model_backend.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/backends/pytorch_backend.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/cli/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/cli/commands/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/dependencies/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/exceptions.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/message_history_manager.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/mocking.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/core/template_resolver.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/ide/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/control.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/file.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/human.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/json.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/log.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/message_history.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/retry.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/session.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/stage.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/state.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/primitives/toolset.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/chat_recorder.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/config.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/hitl.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/protocols/storage.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/providers/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/providers/base.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/providers/bedrock.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/providers/google.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/providers/openai.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/eval_models.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/evaluators.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/events.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/mock_dependencies.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/mock_registry.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/pydantic_eval_runner.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/steps/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/steps/custom.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/testing/steps/registry.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/tracing/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/utils/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/utils/cost_calculator.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/utils/model_pricing.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/utils/safe_file_library.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/utils/safe_libraries.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/error_listener.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaLexer.interp +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaLexer.tokens +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaParser.interp +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/generated/LuaParser.tokens +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/grammar/LuaLexer.g4 +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/grammar/LuaParser.g4 +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus/validation/validator.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/.gitignore +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/RUN_ELECTRON.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/SETUP_COMPLETE.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/backend/hook-lupa.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/backend/tactus_backend.spec +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/package-lock.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/package.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/preload/preload.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/preload/tsconfig.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/rebuild-and-test.sh +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/scripts/build-backend.js +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/scripts/build-frontend.js +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/src/backend-manager.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/src/main.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/src/menu.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-desktop/tsconfig.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/CHANGELOG.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/DEV_MODE.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/QUICK_START.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/RESTART_INSTRUCTIONS.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/TROUBLESHOOTING.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/README.md +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/events.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/logging_capture.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/lsp_server.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/requirements.txt +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/backend/tactus_lsp_handler.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/dev.sh +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/.storybook/main.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/.storybook/preview.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/.storybook/vitest.setup.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/index.html +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/jest.config.js +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/package.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/postcss.config.js +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/Editor.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/LSPClient.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/LSPClientHTTP.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/TactusLanguage.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/commands/registry.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/CheckpointSummary.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/CollapsibleRun.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/Duration.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/Duration.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/FileTree.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/FileTree.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureInputsModal.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureTab.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ProcedureTab.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ResizeHandle.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ResultsSidebar.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/Timestamp.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/Timestamp.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/TopMenuBar.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/CheckpointList.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/CheckpointList.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/RunSelector.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/RunSelector.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/AgentStreamingComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/BaseEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/CostEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/LoadingEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/LogCluster.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/LogEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/LogEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/OutputEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/OutputEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/TestEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/TestEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ToolCallEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ValidationEventComponent.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/events/ValidationEventComponent.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/AgentsSection.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/EvaluationsSection.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/MetadataSections.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/SpecificationsSection.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/StagesSection.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/metadata/ToolsSection.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/scenarios/EvaluateScenarios.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/scenarios/RunScenarios.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/scenarios/TestScenarios.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/scenarios/ValidationScenarios.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/theme-provider.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/ai/conversation.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/ai/message.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/ai/prompt-input.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/button.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/dialog.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/input.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/logo.stories.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/logo.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/menubar.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/scroll-area.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/separator.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/components/ui/tabs.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/hooks/useTracing.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/index.css +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/lib/utils.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/main.tsx +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/types/metadata.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/types/results.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/types/tracing.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/validation/TactusValidator.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/validation/generated/LuaParser.interp +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/validation/generated/LuaParser.tokens +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/validation/types.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/src/vite-env.d.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/tailwind.config.js +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/tsconfig.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/tsconfig.node.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/vite.config.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/frontend/vitest.shims.d.ts +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/package.json +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tactus-ide/start-dev.sh +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/adapters/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/adapters/test_lua_tools_adapter.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/adapters/test_plugins.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/cli/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/conftest.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/core/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/core/test_config_manager.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/core/test_determinism_safety.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/fixtures/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/fixtures/test_mcp_server.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/integration/test_named_procedures.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/mocks/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/mocks/llm_mocks.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/primitives/test_retry_primitive.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/primitives/test_state_primitive.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/primitives/test_tool_primitive.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/primitives/test_toolset_dsl.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0/tests}/test_checkpoints_integration.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/test_tracing.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/conftest.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_integration.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/testing/test_step_registry.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/utils/__init__.py +0 -0
- {tactus-0.15.1 → tactus-0.22.0}/tests/validation/__init__.py +0 -0
|
@@ -77,10 +77,10 @@ jobs:
|
|
|
77
77
|
semantic-release publish
|
|
78
78
|
|
|
79
79
|
- name: Publish to PyPI
|
|
80
|
-
if: success()
|
|
80
|
+
if: success() && hashFiles('dist/*') != ''
|
|
81
81
|
env:
|
|
82
82
|
TWINE_USERNAME: __token__
|
|
83
83
|
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
|
84
84
|
run: |
|
|
85
85
|
pip install twine
|
|
86
|
-
twine upload dist/*
|
|
86
|
+
twine upload --skip-existing dist/*
|
|
@@ -98,6 +98,17 @@ Agent "bedrock_agent" {
|
|
|
98
98
|
- **Do NOT delete or truncate `CHANGELOG.md`**.
|
|
99
99
|
- Ensure your commit messages follow the [Angular Commit Message Convention](https://github.com/angular/angular/blob/master/CONTRIBUTING.md#commit) (e.g., `feat: ...`, `fix: ...`, `docs: ...`) so that Semantic Release can correctly generate the changelog.
|
|
100
100
|
|
|
101
|
+
## Commit Message Guidelines
|
|
102
|
+
|
|
103
|
+
When writing commit messages:
|
|
104
|
+
|
|
105
|
+
- **Do NOT use code blocks** (backticks or triple backticks) in commit messages
|
|
106
|
+
- Use plain text with proper formatting (bullet points, indentation)
|
|
107
|
+
- Keep commit subject lines concise (50-72 characters)
|
|
108
|
+
- Use the imperative mood ("fix bug" not "fixed bug")
|
|
109
|
+
- Include detailed explanations in the commit body when necessary
|
|
110
|
+
- Follow the Angular Commit Message Convention for the subject line
|
|
111
|
+
|
|
101
112
|
## Parser Generation Requirements
|
|
102
113
|
|
|
103
114
|
**IMPORTANT**: Tactus uses ANTLR4 to generate parsers from the Lua grammar for both Python and TypeScript.
|
|
@@ -138,7 +149,7 @@ The IDE uses a two-layer validation approach for optimal performance and user ex
|
|
|
138
149
|
|
|
139
150
|
**Layer 1: TypeScript Parser (Client-Side)**
|
|
140
151
|
- Location: `tactus-ide/frontend/src/validation/`
|
|
141
|
-
- ANTLR-generated from same `
|
|
152
|
+
- ANTLR-generated from same `LuaLexer.g4` and `LuaParser.g4` grammars as Python parser
|
|
142
153
|
- Purpose: Instant syntax validation (< 10ms)
|
|
143
154
|
- Runs in browser, no backend needed
|
|
144
155
|
- Provides immediate feedback as user types
|
|
@@ -2,6 +2,125 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.22.0 (2026-01-10)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **agent**: Add configurable `module` parameter for DSPy module selection (#21)
|
|
10
|
+
([#21](https://github.com/AnthusAI/Tactus/pull/21),
|
|
11
|
+
[`0c93af0`](https://github.com/AnthusAI/Tactus/commit/0c93af0575d191be58ed0635ed236e359d8b35af))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## v0.21.1 (2026-01-10)
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
- **ci**: Add --skip-existing to twine upload
|
|
19
|
+
([`7a1b369`](https://github.com/AnthusAI/Tactus/commit/7a1b369376ce68869b98f0faed877a52855b4459))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## v0.21.0 (2026-01-10)
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
- Add Checkpoint.exists and Checkpoint.get
|
|
27
|
+
([`d652411`](https://github.com/AnthusAI/Tactus/commit/d6524115dea8de42559b94a1f35309f7538958e7))
|
|
28
|
+
|
|
29
|
+
- Add System.alert primitive
|
|
30
|
+
([`18ece11`](https://github.com/AnthusAI/Tactus/commit/18ece114eea760e97b07a493b7ee13eb27034516))
|
|
31
|
+
|
|
32
|
+
- Clarify summarization prompts are logged
|
|
33
|
+
([`423b912`](https://github.com/AnthusAI/Tactus/commit/423b912c590cd7e9702a0e9dbb76288f26cdfd4a))
|
|
34
|
+
|
|
35
|
+
- Clarify template namespaces and rendering
|
|
36
|
+
([`a33a383`](https://github.com/AnthusAI/Tactus/commit/a33a3831fb335b81d1e3152f5feb6d24f436bdb8))
|
|
37
|
+
|
|
38
|
+
- Expose agent Result usage and history
|
|
39
|
+
([`7f41286`](https://github.com/AnthusAI/Tactus/commit/7f412860f94c79a442fc8e86365f71ddddc9b58f))
|
|
40
|
+
|
|
41
|
+
- Handle string input in agent __call__ method
|
|
42
|
+
([`4af6ad5`](https://github.com/AnthusAI/Tactus/commit/4af6ad590cacb116885ce60ca93656c092f01435))
|
|
43
|
+
|
|
44
|
+
- Remove incompatible tests and skip deprecated YAML test
|
|
45
|
+
([`f96f084`](https://github.com/AnthusAI/Tactus/commit/f96f0842ceffa8176329b5553096c39ff1ba15d1))
|
|
46
|
+
|
|
47
|
+
- Standardize on TactusResult.value and fix agent mock lookup
|
|
48
|
+
([`a4e02c0`](https://github.com/AnthusAI/Tactus/commit/a4e02c0699a40461a2d0476e1359216d02a82616))
|
|
49
|
+
|
|
50
|
+
- Support message alias for agent calls
|
|
51
|
+
([`9a2b817`](https://github.com/AnthusAI/Tactus/commit/9a2b817478acf5848dad346fa9d0f0dd1a78eb86))
|
|
52
|
+
|
|
53
|
+
- **ci**: Only run twine upload when dist files exist
|
|
54
|
+
([`d490f55`](https://github.com/AnthusAI/Tactus/commit/d490f5527c8588666ffcafa67d13e195815c2856))
|
|
55
|
+
|
|
56
|
+
### Chores
|
|
57
|
+
|
|
58
|
+
- Update .gitignore to include tmp/ directory
|
|
59
|
+
([`1294360`](https://github.com/AnthusAI/Tactus/commit/1294360a261cec1ff8c35f8063ae2b652c340373))
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## v0.20.0 (2026-01-09)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
## v0.19.0 (2026-01-09)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
## v0.18.0 (2026-01-09)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## v0.17.0 (2026-01-08)
|
|
72
|
+
|
|
73
|
+
### Bug Fixes
|
|
74
|
+
|
|
75
|
+
- Pass registry and mock_manager to DSPy agent creation
|
|
76
|
+
([`e86a069`](https://github.com/AnthusAI/Tactus/commit/e86a0690cba607507f4745106f8a609aab38c8f3))
|
|
77
|
+
|
|
78
|
+
- Remove unused Path import in test_script_mode.py
|
|
79
|
+
([`1c28430`](https://github.com/AnthusAI/Tactus/commit/1c28430502ac2f1c0b08f6456ec7374e9fc4252a))
|
|
80
|
+
|
|
81
|
+
### Code Style
|
|
82
|
+
|
|
83
|
+
- Format code with black
|
|
84
|
+
([`2fc1a07`](https://github.com/AnthusAI/Tactus/commit/2fc1a0734f639c3d502f4e96b0eb44703a3522c8))
|
|
85
|
+
|
|
86
|
+
### Testing
|
|
87
|
+
|
|
88
|
+
- Skip agent mock test in CI until mocking fully implemented
|
|
89
|
+
([`f46f183`](https://github.com/AnthusAI/Tactus/commit/f46f1834a616a8dfde31b9ee6cdb928264489b93))
|
|
90
|
+
|
|
91
|
+
- Skip DSPy agent mock test - assignment name interception not working
|
|
92
|
+
([`b7971d3`](https://github.com/AnthusAI/Tactus/commit/b7971d3d87dd07f43c98fcab524a5cad5848db5d))
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## v0.16.0 (2026-01-07)
|
|
96
|
+
|
|
97
|
+
### Bug Fixes
|
|
98
|
+
|
|
99
|
+
- **tests**: Resolve ruff linting errors
|
|
100
|
+
([`892f73e`](https://github.com/AnthusAI/Tactus/commit/892f73eed13602cb6cb6328c363b1caa938db850))
|
|
101
|
+
|
|
102
|
+
### Code Style
|
|
103
|
+
|
|
104
|
+
- Format code with black
|
|
105
|
+
([`bdec5b8`](https://github.com/AnthusAI/Tactus/commit/bdec5b8836d7d95bd6531ede2c4f000e24e79764))
|
|
106
|
+
|
|
107
|
+
### Features
|
|
108
|
+
|
|
109
|
+
- **dspy**: Add comprehensive behavior specifications for DSPy integration
|
|
110
|
+
([`531167e`](https://github.com/AnthusAI/Tactus/commit/531167e2c423c605792f1e5ab3602f7eb05ab6d8))
|
|
111
|
+
|
|
112
|
+
- **dspy**: Add model_type parameter support for reasoning models
|
|
113
|
+
([`bf8cef3`](https://github.com/AnthusAI/Tactus/commit/bf8cef38e0e0674ccf1ebfac75a92c54e80b6d0c))
|
|
114
|
+
|
|
115
|
+
- **dspy**: Add model_type parameter support for reasoning models
|
|
116
|
+
([`0043293`](https://github.com/AnthusAI/Tactus/commit/00432937a11adc01a846909fe1ae9520cc927eab))
|
|
117
|
+
|
|
118
|
+
### Refactoring
|
|
119
|
+
|
|
120
|
+
- **examples**: Simplify agent example and add gpt-5-mini support
|
|
121
|
+
([`7e7934e`](https://github.com/AnthusAI/Tactus/commit/7e7934eb89508d100dbce5ebd497ddcefda7778d))
|
|
122
|
+
|
|
123
|
+
|
|
5
124
|
## v0.15.1 (2026-01-07)
|
|
6
125
|
|
|
7
126
|
|
|
@@ -176,7 +176,7 @@ input {
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
-- Top-level code acts as main procedure
|
|
179
|
-
Worker
|
|
179
|
+
Worker({message = input.task})
|
|
180
180
|
return {result = "done"}
|
|
181
181
|
```
|
|
182
182
|
|
|
@@ -249,7 +249,7 @@ output {
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
-- Top-level code returns output
|
|
252
|
-
Worker
|
|
252
|
+
Worker()
|
|
253
253
|
return {result = "done"}
|
|
254
254
|
```
|
|
255
255
|
|
|
@@ -277,87 +277,94 @@ return {result = "done"}
|
|
|
277
277
|
|
|
278
278
|
### Script Mode (Phase 6)
|
|
279
279
|
|
|
280
|
-
**Status**: ✅ **Fully Implemented**
|
|
280
|
+
**Status**: ✅ **Fully Implemented** (Zero-Wrapper with Source Transformation)
|
|
281
|
+
|
|
282
|
+
Script mode allows simple procedures to be written without explicit `Procedure {}` wrappers. Top-level code becomes the entry point, making Tactus feel more like a script than a framework.
|
|
281
283
|
|
|
282
|
-
|
|
284
|
+
#### Zero-Wrapper Syntax
|
|
283
285
|
|
|
284
|
-
|
|
286
|
+
Write procedures without any wrapper - just top-level `input {}`, `output {}`, and executable code:
|
|
285
287
|
|
|
286
|
-
**
|
|
288
|
+
**Basic Example:**
|
|
287
289
|
|
|
288
290
|
```lua
|
|
289
|
-
-- No
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
system_prompt = "You are a helpful assistant."
|
|
291
|
+
-- No Procedure wrapper needed
|
|
292
|
+
input {
|
|
293
|
+
name = field.string{required = true}
|
|
293
294
|
}
|
|
294
295
|
|
|
295
|
-
|
|
296
|
-
|
|
296
|
+
output {
|
|
297
|
+
greeting = field.string{required = true}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
local message = "Hello, " .. input.name .. "!"
|
|
301
|
+
return {greeting = message}
|
|
297
302
|
```
|
|
298
303
|
|
|
299
|
-
**
|
|
304
|
+
**With Agents:**
|
|
300
305
|
|
|
301
306
|
```lua
|
|
302
307
|
input {
|
|
303
|
-
|
|
304
|
-
language = {type = "string", default = "en"}
|
|
308
|
+
task = field.string{required = true}
|
|
305
309
|
}
|
|
306
310
|
|
|
307
311
|
output {
|
|
308
|
-
result = {
|
|
312
|
+
result = field.string{required = true}
|
|
309
313
|
}
|
|
310
314
|
|
|
311
|
-
|
|
312
|
-
|
|
315
|
+
done = tactus.done
|
|
316
|
+
|
|
317
|
+
worker = Agent {
|
|
318
|
+
provider = "openai",
|
|
319
|
+
model = "gpt-4o",
|
|
320
|
+
system_prompt = "Complete tasks efficiently",
|
|
321
|
+
tools = {done}
|
|
313
322
|
}
|
|
314
323
|
|
|
315
|
-
|
|
316
|
-
|
|
324
|
+
worker({message = input.task})
|
|
325
|
+
|
|
326
|
+
if done.called() then
|
|
327
|
+
return {result = "Success: " .. done.last_call().args.reason}
|
|
328
|
+
else
|
|
329
|
+
return {result = "Agent did not complete"}
|
|
330
|
+
end
|
|
317
331
|
```
|
|
318
332
|
|
|
319
|
-
**
|
|
333
|
+
**With State:**
|
|
320
334
|
|
|
321
335
|
```lua
|
|
322
|
-
input {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
-- Helper sub-procedure
|
|
326
|
-
summarize_chunk = procedure "summarize_chunk" {
|
|
327
|
-
input = {chunk = {type = "string"}},
|
|
328
|
-
output = {summary = {type = "string"}},
|
|
329
|
-
run = function()
|
|
330
|
-
Summarizer = agent "summarizer" {
|
|
331
|
-
model = "claude-sonnet-4-20250514"
|
|
332
|
-
}
|
|
333
|
-
Summarizer.turn({inject = input.chunk})
|
|
334
|
-
return {summary = Summarizer.output}
|
|
335
|
-
end
|
|
336
|
+
input {
|
|
337
|
+
value = field.number{required = true}
|
|
336
338
|
}
|
|
337
339
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
340
|
+
output {
|
|
341
|
+
doubled = field.number{required = true}
|
|
342
|
+
}
|
|
341
343
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
state.summaries[i] = result.summary
|
|
345
|
-
end
|
|
344
|
+
state.original = input.value
|
|
345
|
+
state.result = state.original * 2
|
|
346
346
|
|
|
347
|
-
return {
|
|
347
|
+
return {doubled = state.result}
|
|
348
348
|
```
|
|
349
349
|
|
|
350
350
|
#### How It Works
|
|
351
351
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
-
|
|
357
|
-
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
352
|
+
**Source Transformation Approach:**
|
|
353
|
+
|
|
354
|
+
1. **Detection**: Runtime detects script mode when file has top-level `input {}` or `output {}` without explicit `Procedure {}`
|
|
355
|
+
2. **Splitting**: Source is split into:
|
|
356
|
+
- **Declarations**: `input {}`, `output {}`, `Mocks {}`, Agent/Tool/Model definitions, comments
|
|
357
|
+
- **Executable code**: Local variables, agent calls, state assignments, control flow, returns
|
|
358
|
+
3. **Transformation**: Executable code is wrapped in implicit `Procedure { function(input) ... end }`
|
|
359
|
+
4. **Schema merging**: Top-level schemas are merged into the implicit main procedure
|
|
360
|
+
5. **Normal execution**: The transformed code executes through standard procedure flow
|
|
361
|
+
|
|
362
|
+
**Why transformation?** During parsing, Lua code executes but agents aren't connected to LLMs yet. The `Procedure { function() ... end }` pattern stores the function during parsing and calls it later. Script mode uses source transformation to wrap executable code before parsing, preventing premature execution.
|
|
363
|
+
|
|
364
|
+
**Pattern Detection:**
|
|
365
|
+
- **Declarations**: Tracked via brace depth - entire multi-line blocks (Agent {}, Mocks {}) stay together
|
|
366
|
+
- **Executable code**: Everything else that doesn't match declaration patterns
|
|
367
|
+
- **Special handling**: Comments, empty lines, and `tactus.*` references treated as declarations
|
|
361
368
|
|
|
362
369
|
#### When to Use
|
|
363
370
|
|
|
@@ -387,7 +394,7 @@ Script mode files can be gradually converted to explicit procedures without brea
|
|
|
387
394
|
```lua
|
|
388
395
|
-- Before (script mode)
|
|
389
396
|
input {text = {type = "string"}}
|
|
390
|
-
Worker
|
|
397
|
+
Worker({message = input.text})
|
|
391
398
|
return {result = Worker.output}
|
|
392
399
|
|
|
393
400
|
-- After (explicit procedure)
|
|
@@ -396,7 +403,7 @@ main = procedure "main" {
|
|
|
396
403
|
output = {result = {type = "string"}},
|
|
397
404
|
run = function()
|
|
398
405
|
Worker = agent "worker" {...}
|
|
399
|
-
Worker
|
|
406
|
+
Worker({message = input.text})
|
|
400
407
|
return {result = Worker.output}
|
|
401
408
|
end
|
|
402
409
|
}
|
|
@@ -500,7 +507,7 @@ main = procedure("main", {
|
|
|
500
507
|
output = {...}
|
|
501
508
|
}, function()
|
|
502
509
|
-- Dependencies available to agents via AgentDeps
|
|
503
|
-
Worker
|
|
510
|
+
Worker()
|
|
504
511
|
return {...}
|
|
505
512
|
end)
|
|
506
513
|
```
|
|
@@ -647,7 +654,7 @@ main = procedure("main", {
|
|
|
647
654
|
tools = {weather_lookup_tool} -- Tool uses weather_api from deps
|
|
648
655
|
})
|
|
649
656
|
|
|
650
|
-
Worker
|
|
657
|
+
Worker({message = "Get weather for " .. input.location})
|
|
651
658
|
return {
|
|
652
659
|
temperature = state.temp,
|
|
653
660
|
condition = state.condition
|
|
@@ -734,9 +741,9 @@ Defines interface for HITL implementations.
|
|
|
734
741
|
|
|
735
742
|
**Specification**: Programmatic alerts from anywhere (not just procedures).
|
|
736
743
|
|
|
737
|
-
**Status**:
|
|
744
|
+
**Status**: ✅ **Implemented**
|
|
738
745
|
|
|
739
|
-
|
|
746
|
+
Implemented as a non-blocking primitive that emits a structured `SystemAlertEvent` via the configured `LogHandler` (CLI/IDE), with a fallback to standard Python logging when no handler is present.
|
|
740
747
|
|
|
741
748
|
#### Message Classification
|
|
742
749
|
|
|
@@ -781,7 +788,7 @@ Inline procedures are not parsed by `ProcedureYAMLParser` and cannot be invoked.
|
|
|
781
788
|
- ❌ `filter` - Not implemented (no ComposedFilter, TokenBudget, etc.)
|
|
782
789
|
- ❌ `response.retries` / `response.retry_delay` - Not implemented
|
|
783
790
|
|
|
784
|
-
**Usage in Lua**: `Worker
|
|
791
|
+
**Usage in Lua**: `Worker()` (capitalized agent name, callable syntax)
|
|
785
792
|
|
|
786
793
|
### Model Primitive (Phase 3: ML Inference)
|
|
787
794
|
|
|
@@ -864,9 +871,9 @@ state.intent = IntentClassifier.predict(input.message)
|
|
|
864
871
|
|
|
865
872
|
-- Use result
|
|
866
873
|
if state.intent == "billing" then
|
|
867
|
-
BillingAgent
|
|
874
|
+
BillingAgent()
|
|
868
875
|
elseif state.intent == "technical" then
|
|
869
|
-
TechAgent
|
|
876
|
+
TechAgent()
|
|
870
877
|
end
|
|
871
878
|
```
|
|
872
879
|
|
|
@@ -928,7 +935,7 @@ summarize_chunk = procedure "summarize_chunk" {
|
|
|
928
935
|
Summarizer = agent "summarizer" {
|
|
929
936
|
model = "claude-sonnet-4-20250514"
|
|
930
937
|
}
|
|
931
|
-
Summarizer
|
|
938
|
+
Summarizer({message = input.chunk})
|
|
932
939
|
return {summary = Summarizer.output}
|
|
933
940
|
end
|
|
934
941
|
}
|
|
@@ -1051,7 +1058,7 @@ All procedure invocation primitives are missing.
|
|
|
1051
1058
|
state.clusters = cluster_embeddings(state.embeddings)
|
|
1052
1059
|
checkpoint() -- Save before proceeding
|
|
1053
1060
|
|
|
1054
|
-
Worker
|
|
1061
|
+
Worker({message = state.clusters})
|
|
1055
1062
|
```
|
|
1056
1063
|
|
|
1057
1064
|
2. **Before risky operations:**
|
|
@@ -1096,6 +1103,9 @@ Explicit checkpoints do **not** create suspend points. They simply persist curre
|
|
|
1096
1103
|
|
|
1097
1104
|
- ✅ `Checkpoint.clear_all()` - Clear all checkpoints (execution log)
|
|
1098
1105
|
- ✅ `Checkpoint.clear_after(position)` - Clear from position onwards
|
|
1106
|
+
- ✅ `Checkpoint.next_position()` - Get next checkpoint position
|
|
1107
|
+
- ✅ `Checkpoint.exists(position)` - Check whether a checkpoint exists
|
|
1108
|
+
- ✅ `Checkpoint.get(position)` - Get cached value (or nil)
|
|
1099
1109
|
|
|
1100
1110
|
**Usage**: Testing and debugging checkpoint replay behavior. These are utility functions for test scenarios, not for production use.
|
|
1101
1111
|
|
|
@@ -1107,10 +1117,10 @@ Explicit checkpoints do **not** create suspend points. They simply persist curre
|
|
|
1107
1117
|
|
|
1108
1118
|
**Status**: ✅ **Fully Implemented**
|
|
1109
1119
|
|
|
1110
|
-
- ✅ `AgentName
|
|
1111
|
-
- ✅ `AgentName
|
|
1112
|
-
- ✅ `AgentName
|
|
1113
|
-
- ✅ `AgentName
|
|
1120
|
+
- ✅ `AgentName()` - Execute agent turn
|
|
1121
|
+
- ✅ `AgentName({message = "..."})` - Call with a message
|
|
1122
|
+
- ✅ `AgentName({tools = {...}})` - Call with specific tools
|
|
1123
|
+
- ✅ `AgentName({tools = {}})` - Call with no tools
|
|
1114
1124
|
- ✅ Per-turn model parameter overrides (temperature, max_tokens, top_p, etc.)
|
|
1115
1125
|
|
|
1116
1126
|
**Per-Turn Overrides:**
|
|
@@ -1123,15 +1133,15 @@ The `turn()` method now accepts an optional table to override behavior for a sin
|
|
|
1123
1133
|
**Common pattern - Tool result summarization:**
|
|
1124
1134
|
```lua
|
|
1125
1135
|
repeat
|
|
1126
|
-
Researcher
|
|
1127
|
-
|
|
1128
|
-
if
|
|
1129
|
-
Researcher
|
|
1130
|
-
|
|
1136
|
+
Researcher() -- Agent has all tools
|
|
1137
|
+
|
|
1138
|
+
if search.called() then
|
|
1139
|
+
Researcher({
|
|
1140
|
+
message = "Summarize the search results",
|
|
1131
1141
|
tools = {} -- No tools for summarization
|
|
1132
1142
|
})
|
|
1133
1143
|
end
|
|
1134
|
-
until
|
|
1144
|
+
until done.called()
|
|
1135
1145
|
```
|
|
1136
1146
|
|
|
1137
1147
|
**Response Access:**
|
|
@@ -1174,35 +1184,30 @@ main = procedure("main", {
|
|
|
1174
1184
|
end)
|
|
1175
1185
|
```
|
|
1176
1186
|
|
|
1177
|
-
####
|
|
1178
|
-
|
|
1179
|
-
**Status**: ✅ **Fully Implemented**
|
|
1187
|
+
#### Result (`tactus/protocols/result.py`)
|
|
1180
1188
|
|
|
1181
|
-
|
|
1189
|
+
**Status**: ✅ **Implemented (DSPy)**
|
|
1182
1190
|
|
|
1183
|
-
|
|
1191
|
+
`Agent()` returns a standard `TactusResult` wrapper (instead of raw text).
|
|
1184
1192
|
|
|
1185
1193
|
**Features:**
|
|
1186
|
-
- ✅ `result.
|
|
1194
|
+
- ✅ `result.value` - Response value (string or structured data)
|
|
1187
1195
|
- ✅ `result.usage` - Token usage stats (prompt_tokens, completion_tokens, total_tokens)
|
|
1188
|
-
- ✅ `result.
|
|
1189
|
-
- ✅ `result.all_messages()` - Full conversation history
|
|
1190
|
-
- ✅ `result.cost()` - Token usage (for cost calculation)
|
|
1196
|
+
- ✅ `result.cost()` - Cost stats (total_cost, prompt_cost, completion_cost)
|
|
1191
1197
|
|
|
1192
|
-
**Breaking change:**
|
|
1198
|
+
**Breaking change:** Access agent output via `result.value` (not `result.message` / `result.data`).
|
|
1199
|
+
|
|
1200
|
+
**Implementation locations:**
|
|
1201
|
+
- `tactus/dspy/agent.py` (`DSPyAgentHandle.__call__`)
|
|
1202
|
+
- `tactus/protocols/result.py` (`TactusResult`)
|
|
1203
|
+
- `tactus/protocols/cost.py` (`UsageStats`, `CostStats`)
|
|
1193
1204
|
|
|
1194
1205
|
**Example:**
|
|
1195
1206
|
```lua
|
|
1196
|
-
local result = Agent
|
|
1197
|
-
|
|
1198
|
-
-- Access response
|
|
1199
|
-
Log.info(result.data)
|
|
1200
|
-
|
|
1201
|
-
-- Access usage
|
|
1207
|
+
local result = Agent()
|
|
1208
|
+
Log.info(result.value)
|
|
1202
1209
|
Log.info("Tokens", {total = result.usage.total_tokens})
|
|
1203
|
-
|
|
1204
|
-
-- Access messages
|
|
1205
|
-
local msgs = result.new_messages()
|
|
1210
|
+
Log.info("Cost", {total = result.cost().total_cost})
|
|
1206
1211
|
```
|
|
1207
1212
|
|
|
1208
1213
|
#### Structured Output (output_type)
|
|
@@ -1226,8 +1231,8 @@ agent("extractor", {
|
|
|
1226
1231
|
})
|
|
1227
1232
|
|
|
1228
1233
|
-- Agent automatically validates output against schema
|
|
1229
|
-
local result = Extractor
|
|
1230
|
-
Log.info(result.
|
|
1234
|
+
local result = Extractor()
|
|
1235
|
+
Log.info(result.value.city)
|
|
1231
1236
|
```
|
|
1232
1237
|
|
|
1233
1238
|
#### State Primitives
|
|
@@ -1309,7 +1314,7 @@ procedure "order_fulfillment" {
|
|
|
1309
1314
|
- ✅ `Iterations.exceeded(max)` - Check if exceeded limit
|
|
1310
1315
|
|
|
1311
1316
|
**Implementation:**
|
|
1312
|
-
- Incremented by
|
|
1317
|
+
- Incremented by agent calls automatically
|
|
1313
1318
|
- Can be checked in procedure code for safety limits
|
|
1314
1319
|
|
|
1315
1320
|
#### StopPrimitive (`tactus/primitives/control.py`)
|
|
@@ -1486,7 +1491,7 @@ No graph/tree structure primitives. Procedures are linear sequences, not graphs.
|
|
|
1486
1491
|
|
|
1487
1492
|
| Type | Description | Created By |
|
|
1488
1493
|
|------|-------------|------------|
|
|
1489
|
-
| `agent_turn` | LLM conversation turn | `
|
|
1494
|
+
| `agent_turn` | LLM conversation turn | `Agent()` (callable syntax) |
|
|
1490
1495
|
| `model_predict` | ML inference | `ModelPrimitive.predict()` |
|
|
1491
1496
|
| `procedure_call` | Sub-procedure invocation | Procedure callable |
|
|
1492
1497
|
| `hitl_approval` | Human approval request | `Human.approve()` |
|
|
@@ -1542,9 +1547,9 @@ checkpoint()
|
|
|
1542
1547
|
|
|
1543
1548
|
-- ❌ Unsafe: Random value used across checkpoints
|
|
1544
1549
|
local x = math.random(100) -- WARNING!
|
|
1545
|
-
Worker
|
|
1550
|
+
Worker() -- Checkpoint
|
|
1546
1551
|
if x > 50 then -- Diverges on replay
|
|
1547
|
-
Publisher
|
|
1552
|
+
Publisher()
|
|
1548
1553
|
end
|
|
1549
1554
|
```
|
|
1550
1555
|
|
|
@@ -1749,9 +1754,9 @@ tactus evaluate procedure.tac --runs 10
|
|
|
1749
1754
|
- Only local context exists
|
|
1750
1755
|
- No AWS Lambda integration
|
|
1751
1756
|
|
|
1752
|
-
4. **System.alert()**
|
|
1753
|
-
-
|
|
1754
|
-
-
|
|
1757
|
+
4. **System.alert()** ✅
|
|
1758
|
+
- Non-blocking alerts via `System.alert()`
|
|
1759
|
+
- Emits structured `system_alert` events to log handlers (CLI/IDE)
|
|
1755
1760
|
|
|
1756
1761
|
5. **Async Procedure Spawning** ❌
|
|
1757
1762
|
- No `Procedure.spawn()` for async invocation
|
|
@@ -1818,7 +1823,6 @@ tactus/
|
|
|
1818
1823
|
│ ├── retry.py # RetryPrimitive
|
|
1819
1824
|
│ ├── file.py # FilePrimitive
|
|
1820
1825
|
│ ├── message_history.py # MessageHistoryPrimitive
|
|
1821
|
-
│ ├── result.py # ResultPrimitive
|
|
1822
1826
|
│ └── deps_generator.py # Dynamic AgentDeps generation [NEW]
|
|
1823
1827
|
│
|
|
1824
1828
|
├── backends/
|
|
@@ -1895,7 +1899,7 @@ To align the implementation with the specification:
|
|
|
1895
1899
|
### Medium Priority
|
|
1896
1900
|
4. **Inline Procedures** - Parse and support `procedures:` section in YAML
|
|
1897
1901
|
5. **Agent `prepare` hook** - Enable `prepared` template namespace
|
|
1898
|
-
6. **System.alert()** -
|
|
1902
|
+
6. **System.alert() integrations** - Route alerts to external monitoring
|
|
1899
1903
|
7. **Template variables** - Add `context`, `env`, `output` support
|
|
1900
1904
|
8. **More Model Backends** - BERT, scikit-learn, ONNX, SageMaker
|
|
1901
1905
|
|