tactus 0.34.1__tar.gz → 0.35.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1088) hide show
  1. tactus-0.35.1/.coveragerc +27 -0
  2. tactus-0.35.1/AGENTS.md +610 -0
  3. tactus-0.35.1/CHANGELOG.md +766 -0
  4. tactus-0.35.1/IMPLEMENTATION.md +1904 -0
  5. tactus-0.35.1/PKG-INFO +1835 -0
  6. tactus-0.35.1/README.md +1769 -0
  7. tactus-0.35.1/SPECIFICATION.md +3256 -0
  8. tactus-0.35.1/coverage.json +1 -0
  9. tactus-0.35.1/coverage_badge.json +1 -0
  10. tactus-0.35.1/examples/11-feature-message-history-transforms.tac +84 -0
  11. tactus-0.35.1/examples/11-feature-message-history.tac +66 -0
  12. tactus-0.35.1/examples/13-feature-session.tac +66 -0
  13. tactus-0.35.1/features/17_lua_dsl_validation.feature +147 -0
  14. tactus-0.35.1/features/30_session_filters.feature +204 -0
  15. tactus-0.35.1/features/60_formatting.feature +58 -0
  16. tactus-0.35.1/features/61_cli_run_exit_codes.feature +40 -0
  17. tactus-0.35.1/features/62_cli_info.feature +26 -0
  18. tactus-0.35.1/features/67_message_history_transforms.feature +21 -0
  19. tactus-0.35.1/features/68_ide_file_tools.feature +38 -0
  20. tactus-0.35.1/features/69_ide_assistant_service.feature +25 -0
  21. tactus-0.35.1/features/70_ide_chat_api.feature +52 -0
  22. tactus-0.35.1/features/71_ide_config_api.feature +39 -0
  23. tactus-0.35.1/features/steps/cli_info_steps.py +29 -0
  24. tactus-0.35.1/features/steps/formatting_steps.py +224 -0
  25. tactus-0.35.1/features/steps/ide_assistant_service_steps.py +141 -0
  26. tactus-0.35.1/features/steps/ide_chat_api_steps.py +204 -0
  27. tactus-0.35.1/features/steps/ide_config_api_steps.py +123 -0
  28. tactus-0.35.1/features/steps/ide_file_tools_steps.py +161 -0
  29. tactus-0.35.1/planning/CONVERSATION_HISTORY_TRANSFORMS.md +102 -0
  30. tactus-0.35.1/pyproject.toml +143 -0
  31. tactus-0.35.1/scripts/run_coverage.sh +49 -0
  32. tactus-0.35.1/scripts/run_precommit_suite.sh +61 -0
  33. tactus-0.35.1/tactus/__init__.py +49 -0
  34. tactus-0.35.1/tactus/adapters/broker_log.py +172 -0
  35. tactus-0.35.1/tactus/adapters/channels/__init__.py +155 -0
  36. tactus-0.35.1/tactus/adapters/channels/base.py +183 -0
  37. tactus-0.35.1/tactus/adapters/channels/broker.py +209 -0
  38. tactus-0.35.1/tactus/adapters/channels/cli.py +452 -0
  39. tactus-0.35.1/tactus/adapters/channels/host.py +240 -0
  40. tactus-0.35.1/tactus/adapters/channels/ipc.py +348 -0
  41. tactus-0.35.1/tactus/adapters/channels/sse.py +323 -0
  42. tactus-0.35.1/tactus/adapters/cli_hitl.py +411 -0
  43. tactus-0.35.1/tactus/adapters/cli_log.py +223 -0
  44. tactus-0.35.1/tactus/adapters/control_loop.py +918 -0
  45. tactus-0.35.1/tactus/adapters/cost_collector_log.py +56 -0
  46. tactus-0.35.1/tactus/adapters/file_storage.py +404 -0
  47. tactus-0.35.1/tactus/adapters/http_callback_log.py +119 -0
  48. tactus-0.35.1/tactus/adapters/ide_log.py +85 -0
  49. tactus-0.35.1/tactus/adapters/lua_tools.py +335 -0
  50. tactus-0.35.1/tactus/adapters/mcp.py +286 -0
  51. tactus-0.35.1/tactus/adapters/mcp_manager.py +212 -0
  52. tactus-0.35.1/tactus/adapters/memory.py +53 -0
  53. tactus-0.35.1/tactus/adapters/plugins.py +419 -0
  54. tactus-0.35.1/tactus/broker/client.py +274 -0
  55. tactus-0.35.1/tactus/broker/protocol.py +183 -0
  56. tactus-0.35.1/tactus/broker/server.py +1502 -0
  57. tactus-0.35.1/tactus/cli/app.py +2510 -0
  58. tactus-0.35.1/tactus/cli/control.py +393 -0
  59. tactus-0.35.1/tactus/core/config_manager.py +863 -0
  60. tactus-0.35.1/tactus/core/dependencies/registry.py +198 -0
  61. tactus-0.35.1/tactus/core/dsl_stubs.py +2260 -0
  62. tactus-0.35.1/tactus/core/exceptions.py +75 -0
  63. tactus-0.35.1/tactus/core/execution_context.py +777 -0
  64. tactus-0.35.1/tactus/core/lua_sandbox.py +515 -0
  65. tactus-0.35.1/tactus/core/message_history_manager.py +331 -0
  66. tactus-0.35.1/tactus/core/mocking.py +300 -0
  67. tactus-0.35.1/tactus/core/output_validator.py +296 -0
  68. tactus-0.35.1/tactus/core/registry.py +530 -0
  69. tactus-0.35.1/tactus/core/runtime.py +3150 -0
  70. tactus-0.35.1/tactus/core/template_resolver.py +142 -0
  71. tactus-0.35.1/tactus/core/yaml_parser.py +311 -0
  72. tactus-0.35.1/tactus/docs/extractor.py +327 -0
  73. tactus-0.35.1/tactus/ide/server.py +2588 -0
  74. tactus-0.35.1/tactus/primitives/control.py +172 -0
  75. tactus-0.35.1/tactus/primitives/file.py +231 -0
  76. tactus-0.35.1/tactus/primitives/handles.py +390 -0
  77. tactus-0.35.1/tactus/primitives/host.py +96 -0
  78. tactus-0.35.1/tactus/primitives/human.py +931 -0
  79. tactus-0.35.1/tactus/primitives/json.py +188 -0
  80. tactus-0.35.1/tactus/primitives/log.py +187 -0
  81. tactus-0.35.1/tactus/primitives/message_history.py +411 -0
  82. tactus-0.35.1/tactus/primitives/model.py +169 -0
  83. tactus-0.35.1/tactus/primitives/procedure.py +586 -0
  84. tactus-0.35.1/tactus/primitives/procedure_callable.py +325 -0
  85. tactus-0.35.1/tactus/primitives/retry.py +157 -0
  86. tactus-0.35.1/tactus/primitives/session.py +165 -0
  87. tactus-0.35.1/tactus/primitives/state.py +193 -0
  88. tactus-0.35.1/tactus/primitives/step.py +205 -0
  89. tactus-0.35.1/tactus/primitives/system.py +105 -0
  90. tactus-0.35.1/tactus/primitives/tool.py +388 -0
  91. tactus-0.35.1/tactus/primitives/tool_handle.py +301 -0
  92. tactus-0.35.1/tactus/primitives/toolset.py +232 -0
  93. tactus-0.35.1/tactus/sandbox/config.py +171 -0
  94. tactus-0.35.1/tactus/sandbox/container_runner.py +1221 -0
  95. tactus-0.35.1/tactus/sandbox/docker_manager.py +456 -0
  96. tactus-0.35.1/tactus/sandbox/entrypoint.py +255 -0
  97. tactus-0.35.1/tactus/sandbox/protocol.py +216 -0
  98. tactus-0.35.1/tactus/stdlib/classify/llm.py +317 -0
  99. tactus-0.35.1/tactus/stdlib/core/validation.py +271 -0
  100. tactus-0.35.1/tactus/testing/pydantic_eval_runner.py +508 -0
  101. tactus-0.35.1/tactus/utils/asyncio_helpers.py +27 -0
  102. tactus-0.35.1/tactus/utils/cost_calculator.py +72 -0
  103. tactus-0.35.1/tactus/utils/model_pricing.py +131 -0
  104. tactus-0.35.1/tactus/utils/safe_file_library.py +526 -0
  105. tactus-0.35.1/tactus/utils/safe_libraries.py +234 -0
  106. tactus-0.35.1/tactus/validation/error_listener.py +34 -0
  107. tactus-0.35.1/tactus/validation/semantic_visitor.py +882 -0
  108. tactus-0.35.1/tactus/validation/validator.py +196 -0
  109. tactus-0.35.1/tactus-desktop/backend/tactus_backend.spec +141 -0
  110. tactus-0.35.1/tests/adapters/channels/test_base_channel.py +130 -0
  111. tactus-0.35.1/tests/adapters/channels/test_broker_channel.py +130 -0
  112. tactus-0.35.1/tests/adapters/channels/test_channels_init.py +146 -0
  113. tactus-0.35.1/tests/adapters/channels/test_cli_channel.py +862 -0
  114. tactus-0.35.1/tests/adapters/channels/test_host_channel.py +165 -0
  115. tactus-0.35.1/tests/adapters/channels/test_ipc_channel.py +372 -0
  116. tactus-0.35.1/tests/adapters/channels/test_sse_channel.py +194 -0
  117. tactus-0.35.1/tests/adapters/test_broker_log.py +185 -0
  118. tactus-0.35.1/tests/adapters/test_cli_hitl_handler.py +559 -0
  119. tactus-0.35.1/tests/adapters/test_cli_log_handler.py +226 -0
  120. tactus-0.35.1/tests/adapters/test_control_loop.py +1188 -0
  121. tactus-0.35.1/tests/adapters/test_file_storage.py +402 -0
  122. tactus-0.35.1/tests/adapters/test_log_handlers.py +147 -0
  123. tactus-0.35.1/tests/adapters/test_lua_tools_adapter.py +565 -0
  124. tactus-0.35.1/tests/adapters/test_mcp_adapter.py +314 -0
  125. tactus-0.35.1/tests/adapters/test_mcp_manager.py +182 -0
  126. tactus-0.35.1/tests/adapters/test_memory_storage.py +31 -0
  127. tactus-0.35.1/tests/adapters/test_plugins.py +485 -0
  128. tactus-0.35.1/tests/backends/test_http_backend.py +65 -0
  129. tactus-0.35.1/tests/backends/test_pytorch_backend.py +230 -0
  130. tactus-0.35.1/tests/broker/test_broker_client_extra.py +136 -0
  131. tactus-0.35.1/tests/broker/test_broker_client_unit.py +458 -0
  132. tactus-0.35.1/tests/broker/test_broker_protocol.py +297 -0
  133. tactus-0.35.1/tests/broker/test_broker_server_additional.py +1153 -0
  134. tactus-0.35.1/tests/broker/test_broker_server_anyio_handlers.py +317 -0
  135. tactus-0.35.1/tests/broker/test_broker_server_asyncio_handlers.py +313 -0
  136. tactus-0.35.1/tests/broker/test_broker_server_connection.py +69 -0
  137. tactus-0.35.1/tests/broker/test_broker_server_helpers.py +78 -0
  138. tactus-0.35.1/tests/broker/test_broker_server_unit.py +332 -0
  139. tactus-0.35.1/tests/broker/test_broker_server_utils.py +28 -0
  140. tactus-0.35.1/tests/broker/test_broker_stdio_transport.py +169 -0
  141. tactus-0.35.1/tests/cli/test_app_commands.py +287 -0
  142. tactus-0.35.1/tests/cli/test_app_helpers.py +206 -0
  143. tactus-0.35.1/tests/cli/test_app_inputs.py +91 -0
  144. tactus-0.35.1/tests/cli/test_app_run.py +1617 -0
  145. tactus-0.35.1/tests/cli/test_app_sandbox.py +136 -0
  146. tactus-0.35.1/tests/cli/test_cli.py +195 -0
  147. tactus-0.35.1/tests/cli/test_cli_config_loading.py +227 -0
  148. tactus-0.35.1/tests/cli/test_cli_control_main.py +179 -0
  149. tactus-0.35.1/tests/cli/test_cli_display_helpers.py +325 -0
  150. tactus-0.35.1/tests/cli/test_cli_format_info.py +51 -0
  151. tactus-0.35.1/tests/cli/test_cli_ide_main.py +262 -0
  152. tactus-0.35.1/tests/cli/test_cli_input_helpers.py +88 -0
  153. tactus-0.35.1/tests/cli/test_cli_inputs.py +417 -0
  154. tactus-0.35.1/tests/cli/test_cli_logging.py +62 -0
  155. tactus-0.35.1/tests/cli/test_cli_main_entry.py +39 -0
  156. tactus-0.35.1/tests/cli/test_cli_run_errors.py +57 -0
  157. tactus-0.35.1/tests/cli/test_cli_sandbox_validate.py +118 -0
  158. tactus-0.35.1/tests/cli/test_cli_stdlib_control.py +416 -0
  159. tactus-0.35.1/tests/cli/test_cli_test_eval_commands.py +1022 -0
  160. tactus-0.35.1/tests/cli/test_cli_trace_commands.py +410 -0
  161. tactus-0.35.1/tests/cli/test_control_cli.py +789 -0
  162. tactus-0.35.1/tests/cli/test_sandbox_commands.py +132 -0
  163. tactus-0.35.1/tests/cli/test_validate_command.py +64 -0
  164. tactus-0.35.1/tests/cli/test_version_command.py +19 -0
  165. tactus-0.35.1/tests/core/dependencies/test_registry.py +220 -0
  166. tactus-0.35.1/tests/core/test_config_manager.py +999 -0
  167. tactus-0.35.1/tests/core/test_dsl_stubs_additional.py +2494 -0
  168. tactus-0.35.1/tests/core/test_dsl_stubs_minimal.py +93 -0
  169. tactus-0.35.1/tests/core/test_dsl_stubs_utils.py +44 -0
  170. tactus-0.35.1/tests/core/test_execution_context.py +466 -0
  171. tactus-0.35.1/tests/core/test_lua_sandbox_helpers.py +304 -0
  172. tactus-0.35.1/tests/core/test_lua_sandbox_security.py +161 -0
  173. tactus-0.35.1/tests/core/test_message_history_manager.py +299 -0
  174. tactus-0.35.1/tests/core/test_mocking.py +123 -0
  175. tactus-0.35.1/tests/core/test_output_validator.py +216 -0
  176. tactus-0.35.1/tests/core/test_registry_builder_errors.py +51 -0
  177. tactus-0.35.1/tests/core/test_runtime_dependencies.py +61 -0
  178. tactus-0.35.1/tests/core/test_runtime_enhance_handles.py +88 -0
  179. tactus-0.35.1/tests/core/test_runtime_execute_branches.py +867 -0
  180. tactus-0.35.1/tests/core/test_runtime_execute_workflow.py +218 -0
  181. tactus-0.35.1/tests/core/test_runtime_helpers.py +572 -0
  182. tactus-0.35.1/tests/core/test_runtime_init.py +43 -0
  183. tactus-0.35.1/tests/core/test_runtime_inject_primitives.py +178 -0
  184. tactus-0.35.1/tests/core/test_runtime_named_procedures.py +112 -0
  185. tactus-0.35.1/tests/core/test_runtime_output_models.py +64 -0
  186. tactus-0.35.1/tests/core/test_runtime_setup_agents_branches.py +233 -0
  187. tactus-0.35.1/tests/core/test_runtime_setup_agents_tools_output.py +674 -0
  188. tactus-0.35.1/tests/core/test_runtime_templates.py +116 -0
  189. tactus-0.35.1/tests/core/test_runtime_tool_source.py +665 -0
  190. tactus-0.35.1/tests/core/test_runtime_toolsets.py +852 -0
  191. tactus-0.35.1/tests/core/test_script_mode.py +237 -0
  192. tactus-0.35.1/tests/core/test_template_resolver.py +51 -0
  193. tactus-0.35.1/tests/core/test_yaml_parser.py +361 -0
  194. tactus-0.35.1/tests/docs/test_docs_extractor.py +405 -0
  195. tactus-0.35.1/tests/docs/test_docs_init.py +25 -0
  196. tactus-0.35.1/tests/docs/test_docs_models.py +19 -0
  197. tactus-0.35.1/tests/docs/test_html_renderer.py +58 -0
  198. tactus-0.35.1/tests/dspy/test_agent_execution.py +1554 -0
  199. tactus-0.35.1/tests/dspy/test_agent_handle.py +136 -0
  200. tactus-0.35.1/tests/dspy/test_agent_helpers.py +147 -0
  201. tactus-0.35.1/tests/dspy/test_agent_mocking.py +67 -0
  202. tactus-0.35.1/tests/dspy/test_agent_utilities.py +111 -0
  203. tactus-0.35.1/tests/dspy/test_broker_lm.py +413 -0
  204. tactus-0.35.1/tests/dspy/test_config.py +161 -0
  205. tactus-0.35.1/tests/dspy/test_config_utilities.py +80 -0
  206. tactus-0.35.1/tests/dspy/test_history.py +123 -0
  207. tactus-0.35.1/tests/dspy/test_module_utilities.py +536 -0
  208. tactus-0.35.1/tests/dspy/test_prediction_messages.py +157 -0
  209. tactus-0.35.1/tests/dspy/test_signature.py +63 -0
  210. tactus-0.35.1/tests/ide_backend/test_assistant_service.py +468 -0
  211. tactus-0.35.1/tests/ide_backend/test_assistant_tools.py +291 -0
  212. tactus-0.35.1/tests/ide_backend/test_chat_server.py +285 -0
  213. tactus-0.35.1/tests/ide_backend/test_coding_assistant.py +236 -0
  214. tactus-0.35.1/tests/ide_backend/test_config_helpers.py +69 -0
  215. tactus-0.35.1/tests/ide_backend/test_config_server.py +772 -0
  216. tactus-0.35.1/tests/ide_backend/test_config_server_api.py +419 -0
  217. tactus-0.35.1/tests/ide_backend/test_events.py +51 -0
  218. tactus-0.35.1/tests/ide_backend/test_ide_server.py +607 -0
  219. tactus-0.35.1/tests/ide_backend/test_ide_server_additional.py +91 -0
  220. tactus-0.35.1/tests/ide_backend/test_ide_server_basics.py +117 -0
  221. tactus-0.35.1/tests/ide_backend/test_ide_server_error_branches.py +672 -0
  222. tactus-0.35.1/tests/ide_backend/test_ide_server_hitl.py +20 -0
  223. tactus-0.35.1/tests/ide_backend/test_ide_server_hitl_chat_stream.py +66 -0
  224. tactus-0.35.1/tests/ide_backend/test_ide_server_lsp_additional.py +49 -0
  225. tactus-0.35.1/tests/ide_backend/test_ide_server_lsp_chat.py +133 -0
  226. tactus-0.35.1/tests/ide_backend/test_ide_server_metadata.py +222 -0
  227. tactus-0.35.1/tests/ide_backend/test_ide_server_misc.py +946 -0
  228. tactus-0.35.1/tests/ide_backend/test_ide_server_run_stream.py +850 -0
  229. tactus-0.35.1/tests/ide_backend/test_ide_server_stream_errors.py +67 -0
  230. tactus-0.35.1/tests/ide_backend/test_ide_server_stream_failures.py +403 -0
  231. tactus-0.35.1/tests/ide_backend/test_ide_server_stream_success.py +458 -0
  232. tactus-0.35.1/tests/ide_backend/test_ide_server_trace_errors.py +46 -0
  233. tactus-0.35.1/tests/ide_backend/test_ide_server_traces.py +170 -0
  234. tactus-0.35.1/tests/ide_backend/test_ide_server_validate.py +46 -0
  235. tactus-0.35.1/tests/ide_backend/test_logging_capture.py +121 -0
  236. tactus-0.35.1/tests/ide_backend/test_lsp_server.py +219 -0
  237. tactus-0.35.1/tests/ide_backend/test_tactus_lsp_handler.py +154 -0
  238. tactus-0.35.1/tests/ide_backend/test_text_editor_tool.py +229 -0
  239. tactus-0.35.1/tests/primitives/test_checkpoint_primitive.py +125 -0
  240. tactus-0.35.1/tests/primitives/test_control_primitive.py +53 -0
  241. tactus-0.35.1/tests/primitives/test_file_primitive.py +88 -0
  242. tactus-0.35.1/tests/primitives/test_handles.py +338 -0
  243. tactus-0.35.1/tests/primitives/test_host_primitive.py +98 -0
  244. tactus-0.35.1/tests/primitives/test_human_primitive.py +388 -0
  245. tactus-0.35.1/tests/primitives/test_json_primitive.py +115 -0
  246. tactus-0.35.1/tests/primitives/test_log_primitive.py +84 -0
  247. tactus-0.35.1/tests/primitives/test_message_history_primitive.py +501 -0
  248. tactus-0.35.1/tests/primitives/test_model_primitive.py +145 -0
  249. tactus-0.35.1/tests/primitives/test_procedure_callable.py +514 -0
  250. tactus-0.35.1/tests/primitives/test_procedure_primitive.py +534 -0
  251. tactus-0.35.1/tests/primitives/test_retry_primitive.py +125 -0
  252. tactus-0.35.1/tests/primitives/test_session_primitive.py +77 -0
  253. tactus-0.35.1/tests/primitives/test_state_primitive.py +48 -0
  254. tactus-0.35.1/tests/primitives/test_step_primitive.py +99 -0
  255. tactus-0.35.1/tests/primitives/test_system_primitive.py +69 -0
  256. tactus-0.35.1/tests/primitives/test_tool_handle.py +147 -0
  257. tactus-0.35.1/tests/primitives/test_tool_primitive.py +319 -0
  258. tactus-0.35.1/tests/primitives/test_toolset_primitive.py +237 -0
  259. tactus-0.35.1/tests/protocols/test_protocol_models.py +86 -0
  260. tactus-0.35.1/tests/protocols/test_protocol_stubs.py +27 -0
  261. tactus-0.35.1/tests/protocols/test_protocols_misc.py +146 -0
  262. tactus-0.35.1/tests/protocols/test_storage_protocol.py +12 -0
  263. tactus-0.35.1/tests/providers/test_provider_configurations.py +63 -0
  264. tactus-0.35.1/tests/providers/test_providers.py +143 -0
  265. tactus-0.35.1/tests/sandbox/test_config.py +12 -0
  266. tactus-0.35.1/tests/sandbox/test_container_runner.py +815 -0
  267. tactus-0.35.1/tests/sandbox/test_container_runner_helpers.py +321 -0
  268. tactus-0.35.1/tests/sandbox/test_container_runner_run_container.py +983 -0
  269. tactus-0.35.1/tests/sandbox/test_docker_manager.py +624 -0
  270. tactus-0.35.1/tests/sandbox/test_docker_sandbox_smoke.py +98 -0
  271. tactus-0.35.1/tests/sandbox/test_entrypoint.py +367 -0
  272. tactus-0.35.1/tests/sandbox/test_protocol.py +84 -0
  273. tactus-0.35.1/tests/stdlib/classify/test_classify_primitive.py +574 -0
  274. tactus-0.35.1/tests/stdlib/classify/test_fuzzy_classifier.py +261 -0
  275. tactus-0.35.1/tests/stdlib/classify/test_fuzzy_import_error.py +29 -0
  276. tactus-0.35.1/tests/stdlib/classify/test_llm_classifier_additional.py +157 -0
  277. tactus-0.35.1/tests/stdlib/core/test_base.py +138 -0
  278. tactus-0.35.1/tests/stdlib/core/test_confidence.py +38 -0
  279. tactus-0.35.1/tests/stdlib/core/test_models.py +22 -0
  280. tactus-0.35.1/tests/stdlib/core/test_retry.py +62 -0
  281. tactus-0.35.1/tests/stdlib/core/test_validation.py +109 -0
  282. tactus-0.35.1/tests/stdlib/extract/test_extract_primitive.py +162 -0
  283. tactus-0.35.1/tests/stdlib/extract/test_llm_extractor.py +363 -0
  284. tactus-0.35.1/tests/stdlib/io/test_excel.py +46 -0
  285. tactus-0.35.1/tests/stdlib/io/test_excel_parquet_hdf5.py +134 -0
  286. tactus-0.35.1/tests/stdlib/io/test_file.py +31 -0
  287. tactus-0.35.1/tests/stdlib/io/test_file_csv_tsv.py +93 -0
  288. tactus-0.35.1/tests/stdlib/io/test_fs.py +162 -0
  289. tactus-0.35.1/tests/stdlib/io/test_hdf5.py +30 -0
  290. tactus-0.35.1/tests/stdlib/io/test_import_errors.py +42 -0
  291. tactus-0.35.1/tests/stdlib/io/test_serializers.py +129 -0
  292. tactus-0.35.1/tests/stdlib/test_loader.py +233 -0
  293. tactus-0.35.1/tests/stdlib/test_require_python.py +228 -0
  294. tactus-0.35.1/tests/test_formatter.py +337 -0
  295. tactus-0.35.1/tests/test_tracing.py +975 -0
  296. tactus-0.35.1/tests/testing/test_behave_integration.py +127 -0
  297. tactus-0.35.1/tests/testing/test_behave_integration_additional.py +288 -0
  298. tactus-0.35.1/tests/testing/test_builtin_steps.py +350 -0
  299. tactus-0.35.1/tests/testing/test_builtin_steps_additional.py +351 -0
  300. tactus-0.35.1/tests/testing/test_builtin_steps_regex.py +31 -0
  301. tactus-0.35.1/tests/testing/test_context_agent_mocks.py +81 -0
  302. tactus-0.35.1/tests/testing/test_context_capture.py +37 -0
  303. tactus-0.35.1/tests/testing/test_context_edge_cases.py +249 -0
  304. tactus-0.35.1/tests/testing/test_context_fallbacks.py +20 -0
  305. tactus-0.35.1/tests/testing/test_context_helpers.py +74 -0
  306. tactus-0.35.1/tests/testing/test_context_internals.py +87 -0
  307. tactus-0.35.1/tests/testing/test_context_missing_branches.py +216 -0
  308. tactus-0.35.1/tests/testing/test_context_run_wrapper.py +15 -0
  309. tactus-0.35.1/tests/testing/test_custom_steps_additional.py +30 -0
  310. tactus-0.35.1/tests/testing/test_custom_steps_manager.py +100 -0
  311. tactus-0.35.1/tests/testing/test_e2e.py +175 -0
  312. tactus-0.35.1/tests/testing/test_eval_models.py +45 -0
  313. tactus-0.35.1/tests/testing/test_evaluation_runner.py +45 -0
  314. tactus-0.35.1/tests/testing/test_evaluation_runner_additional.py +96 -0
  315. tactus-0.35.1/tests/testing/test_evaluation_runner_edges.py +15 -0
  316. tactus-0.35.1/tests/testing/test_evaluators.py +183 -0
  317. tactus-0.35.1/tests/testing/test_evaluators_additional.py +126 -0
  318. tactus-0.35.1/tests/testing/test_evaluators_import_error.py +55 -0
  319. tactus-0.35.1/tests/testing/test_evaluators_more.py +175 -0
  320. tactus-0.35.1/tests/testing/test_evaluators_traceaware.py +45 -0
  321. tactus-0.35.1/tests/testing/test_gherkin_parser_additional.py +91 -0
  322. tactus-0.35.1/tests/testing/test_mock_agent.py +102 -0
  323. tactus-0.35.1/tests/testing/test_mock_agent_additional.py +326 -0
  324. tactus-0.35.1/tests/testing/test_mock_dependencies.py +65 -0
  325. tactus-0.35.1/tests/testing/test_mock_dependencies_additional.py +81 -0
  326. tactus-0.35.1/tests/testing/test_mock_hitl.py +63 -0
  327. tactus-0.35.1/tests/testing/test_mock_registry.py +95 -0
  328. tactus-0.35.1/tests/testing/test_mock_registry_additional.py +38 -0
  329. tactus-0.35.1/tests/testing/test_mock_tools.py +63 -0
  330. tactus-0.35.1/tests/testing/test_pydantic_eval_runner.py +242 -0
  331. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_dataset.py +53 -0
  332. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_errors.py +106 -0
  333. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_helpers.py +36 -0
  334. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_import_error.py +32 -0
  335. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_loaders.py +126 -0
  336. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_task.py +71 -0
  337. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_thresholds.py +84 -0
  338. tactus-0.35.1/tests/testing/test_pydantic_eval_runner_trace.py +59 -0
  339. tactus-0.35.1/tests/testing/test_test_runner_additional.py +110 -0
  340. tactus-0.35.1/tests/testing/test_test_runner_helpers.py +137 -0
  341. tactus-0.35.1/tests/testing/test_test_runner_run.py +353 -0
  342. tactus-0.35.1/tests/testing/test_test_runner_statuses.py +47 -0
  343. tactus-0.35.1/tests/tracing/test_trace_manager_additional.py +70 -0
  344. tactus-0.35.1/tests/utils/test_cost_calculator.py +35 -0
  345. tactus-0.35.1/tests/utils/test_model_pricing.py +55 -0
  346. tactus-0.35.1/tests/utils/test_safe_file_library_additional.py +539 -0
  347. tactus-0.35.1/tests/utils/test_safe_libraries.py +93 -0
  348. tactus-0.35.1/tests/validation/test_semantic_visitor.py +121 -0
  349. tactus-0.35.1/tests/validation/test_semantic_visitor_additional.py +43 -0
  350. tactus-0.35.1/tests/validation/test_semantic_visitor_helpers.py +3923 -0
  351. tactus-0.35.1/tests/validation/test_semantic_visitor_more.py +371 -0
  352. tactus-0.35.1/tests/validation/test_validator_additional.py +40 -0
  353. tactus-0.35.1/tests/validation/test_validator_helpers.py +28 -0
  354. tactus-0.34.1/AGENTS.md +0 -549
  355. tactus-0.34.1/CHANGELOG.md +0 -728
  356. tactus-0.34.1/IMPLEMENTATION.md +0 -1898
  357. tactus-0.34.1/PKG-INFO +0 -1823
  358. tactus-0.34.1/README.md +0 -1760
  359. tactus-0.34.1/SPECIFICATION.md +0 -3237
  360. tactus-0.34.1/examples/11-feature-message-history.tac +0 -66
  361. tactus-0.34.1/examples/13-feature-session.tac +0 -66
  362. tactus-0.34.1/features/17_lua_dsl_validation.feature +0 -143
  363. tactus-0.34.1/features/30_session_filters.feature +0 -116
  364. tactus-0.34.1/features/60_formatting.feature +0 -37
  365. tactus-0.34.1/features/61_cli_run_exit_codes.feature +0 -10
  366. tactus-0.34.1/features/steps/formatting_steps.py +0 -153
  367. tactus-0.34.1/pyproject.toml +0 -139
  368. tactus-0.34.1/scripts/run_precommit_suite.sh +0 -60
  369. tactus-0.34.1/tactus/__init__.py +0 -49
  370. tactus-0.34.1/tactus/adapters/broker_log.py +0 -169
  371. tactus-0.34.1/tactus/adapters/channels/__init__.py +0 -153
  372. tactus-0.34.1/tactus/adapters/channels/base.py +0 -174
  373. tactus-0.34.1/tactus/adapters/channels/broker.py +0 -179
  374. tactus-0.34.1/tactus/adapters/channels/cli.py +0 -448
  375. tactus-0.34.1/tactus/adapters/channels/host.py +0 -225
  376. tactus-0.34.1/tactus/adapters/channels/ipc.py +0 -297
  377. tactus-0.34.1/tactus/adapters/channels/sse.py +0 -305
  378. tactus-0.34.1/tactus/adapters/cli_hitl.py +0 -411
  379. tactus-0.34.1/tactus/adapters/cli_log.py +0 -223
  380. tactus-0.34.1/tactus/adapters/control_loop.py +0 -879
  381. tactus-0.34.1/tactus/adapters/cost_collector_log.py +0 -56
  382. tactus-0.34.1/tactus/adapters/file_storage.py +0 -400
  383. tactus-0.34.1/tactus/adapters/http_callback_log.py +0 -109
  384. tactus-0.34.1/tactus/adapters/ide_log.py +0 -77
  385. tactus-0.34.1/tactus/adapters/lua_tools.py +0 -336
  386. tactus-0.34.1/tactus/adapters/mcp.py +0 -289
  387. tactus-0.34.1/tactus/adapters/mcp_manager.py +0 -196
  388. tactus-0.34.1/tactus/adapters/memory.py +0 -53
  389. tactus-0.34.1/tactus/adapters/plugins.py +0 -419
  390. tactus-0.34.1/tactus/broker/client.py +0 -277
  391. tactus-0.34.1/tactus/broker/protocol.py +0 -183
  392. tactus-0.34.1/tactus/broker/server.py +0 -1447
  393. tactus-0.34.1/tactus/cli/app.py +0 -2508
  394. tactus-0.34.1/tactus/cli/control.py +0 -393
  395. tactus-0.34.1/tactus/core/config_manager.py +0 -817
  396. tactus-0.34.1/tactus/core/dependencies/registry.py +0 -180
  397. tactus-0.34.1/tactus/core/dsl_stubs.py +0 -2201
  398. tactus-0.34.1/tactus/core/exceptions.py +0 -66
  399. tactus-0.34.1/tactus/core/execution_context.py +0 -737
  400. tactus-0.34.1/tactus/core/lua_sandbox.py +0 -507
  401. tactus-0.34.1/tactus/core/message_history_manager.py +0 -236
  402. tactus-0.34.1/tactus/core/mocking.py +0 -286
  403. tactus-0.34.1/tactus/core/output_validator.py +0 -291
  404. tactus-0.34.1/tactus/core/registry.py +0 -516
  405. tactus-0.34.1/tactus/core/runtime.py +0 -3115
  406. tactus-0.34.1/tactus/core/template_resolver.py +0 -142
  407. tactus-0.34.1/tactus/core/yaml_parser.py +0 -301
  408. tactus-0.34.1/tactus/docs/extractor.py +0 -326
  409. tactus-0.34.1/tactus/ide/server.py +0 -2547
  410. tactus-0.34.1/tactus/primitives/control.py +0 -168
  411. tactus-0.34.1/tactus/primitives/file.py +0 -229
  412. tactus-0.34.1/tactus/primitives/handles.py +0 -378
  413. tactus-0.34.1/tactus/primitives/host.py +0 -94
  414. tactus-0.34.1/tactus/primitives/human.py +0 -914
  415. tactus-0.34.1/tactus/primitives/json.py +0 -189
  416. tactus-0.34.1/tactus/primitives/log.py +0 -187
  417. tactus-0.34.1/tactus/primitives/message_history.py +0 -157
  418. tactus-0.34.1/tactus/primitives/model.py +0 -163
  419. tactus-0.34.1/tactus/primitives/procedure.py +0 -564
  420. tactus-0.34.1/tactus/primitives/procedure_callable.py +0 -318
  421. tactus-0.34.1/tactus/primitives/retry.py +0 -155
  422. tactus-0.34.1/tactus/primitives/session.py +0 -152
  423. tactus-0.34.1/tactus/primitives/state.py +0 -182
  424. tactus-0.34.1/tactus/primitives/step.py +0 -209
  425. tactus-0.34.1/tactus/primitives/system.py +0 -92
  426. tactus-0.34.1/tactus/primitives/tool.py +0 -375
  427. tactus-0.34.1/tactus/primitives/tool_handle.py +0 -279
  428. tactus-0.34.1/tactus/primitives/toolset.py +0 -229
  429. tactus-0.34.1/tactus/sandbox/config.py +0 -171
  430. tactus-0.34.1/tactus/sandbox/container_runner.py +0 -1167
  431. tactus-0.34.1/tactus/sandbox/docker_manager.py +0 -456
  432. tactus-0.34.1/tactus/sandbox/entrypoint.py +0 -253
  433. tactus-0.34.1/tactus/sandbox/protocol.py +0 -216
  434. tactus-0.34.1/tactus/stdlib/classify/llm.py +0 -319
  435. tactus-0.34.1/tactus/stdlib/core/validation.py +0 -274
  436. tactus-0.34.1/tactus/testing/pydantic_eval_runner.py +0 -508
  437. tactus-0.34.1/tactus/utils/cost_calculator.py +0 -72
  438. tactus-0.34.1/tactus/utils/model_pricing.py +0 -132
  439. tactus-0.34.1/tactus/utils/safe_file_library.py +0 -502
  440. tactus-0.34.1/tactus/utils/safe_libraries.py +0 -234
  441. tactus-0.34.1/tactus/validation/error_listener.py +0 -21
  442. tactus-0.34.1/tactus/validation/semantic_visitor.py +0 -823
  443. tactus-0.34.1/tactus/validation/validator.py +0 -156
  444. tactus-0.34.1/tactus-desktop/backend/tactus_backend.spec +0 -114
  445. tactus-0.34.1/tactus-ide/backend/test_lsp_server.py +0 -226
  446. tactus-0.34.1/tests/adapters/test_lua_tools_adapter.py +0 -363
  447. tactus-0.34.1/tests/adapters/test_plugins.py +0 -149
  448. tactus-0.34.1/tests/cli/test_cli.py +0 -193
  449. tactus-0.34.1/tests/cli/test_cli_inputs.py +0 -393
  450. tactus-0.34.1/tests/core/test_config_manager.py +0 -595
  451. tactus-0.34.1/tests/core/test_lua_sandbox_security.py +0 -155
  452. tactus-0.34.1/tests/core/test_script_mode.py +0 -210
  453. tactus-0.34.1/tests/dspy/test_prediction_messages.py +0 -114
  454. tactus-0.34.1/tests/primitives/test_checkpoint_primitive.py +0 -48
  455. tactus-0.34.1/tests/primitives/test_host_primitive.py +0 -32
  456. tactus-0.34.1/tests/primitives/test_retry_primitive.py +0 -33
  457. tactus-0.34.1/tests/primitives/test_state_primitive.py +0 -24
  458. tactus-0.34.1/tests/primitives/test_tool_primitive.py +0 -208
  459. tactus-0.34.1/tests/sandbox/test_container_runner.py +0 -168
  460. tactus-0.34.1/tests/sandbox/test_docker_sandbox_smoke.py +0 -96
  461. tactus-0.34.1/tests/stdlib/classify/test_classify_primitive.py +0 -436
  462. tactus-0.34.1/tests/stdlib/classify/test_fuzzy_classifier.py +0 -247
  463. tactus-0.34.1/tests/stdlib/extract/test_extract_primitive.py +0 -377
  464. tactus-0.34.1/tests/stdlib/test_loader.py +0 -180
  465. tactus-0.34.1/tests/stdlib/test_require_python.py +0 -202
  466. tactus-0.34.1/tests/test_formatter.py +0 -71
  467. tactus-0.34.1/tests/test_tracing.py +0 -666
  468. tactus-0.34.1/tests/testing/test_e2e.py +0 -173
  469. {tactus-0.34.1 → tactus-0.35.1}/.claude/agents.md +0 -0
  470. {tactus-0.34.1 → tactus-0.35.1}/.github/workflows/release.yml +0 -0
  471. {tactus-0.34.1 → tactus-0.35.1}/.gitignore +0 -0
  472. {tactus-0.34.1 → tactus-0.35.1}/.tactus/config.yml.example +0 -0
  473. {tactus-0.34.1 → tactus-0.35.1}/CHANGES_SUMMARY.md +0 -0
  474. {tactus-0.34.1 → tactus-0.35.1}/CHECKPOINT_RESUME_PLAN.md +0 -0
  475. {tactus-0.34.1 → tactus-0.35.1}/CURRENT_STATUS_AND_NEXT_STEPS.md +0 -0
  476. {tactus-0.34.1 → tactus-0.35.1}/DETERMINISTIC_REQUEST_ID_FIX.md +0 -0
  477. {tactus-0.34.1 → tactus-0.35.1}/EXECUTION_TRACE.md +0 -0
  478. {tactus-0.34.1 → tactus-0.35.1}/LICENSE +0 -0
  479. {tactus-0.34.1 → tactus-0.35.1}/Makefile +0 -0
  480. {tactus-0.34.1 → tactus-0.35.1}/PHASE0_IPC_CHANNEL_COMPLETE.md +0 -0
  481. {tactus-0.34.1 → tactus-0.35.1}/PHASE2_INTEGRATION_COMPLETE.md +0 -0
  482. {tactus-0.34.1 → tactus-0.35.1}/PHASE3_IDE_HITL_INTEGRATION.md +0 -0
  483. {tactus-0.34.1 → tactus-0.35.1}/TECHNICAL_DEBT.md +0 -0
  484. {tactus-0.34.1 → tactus-0.35.1}/behave.ini +0 -0
  485. {tactus-0.34.1 → tactus-0.35.1}/docs/AGENTS.md +0 -0
  486. {tactus-0.34.1 → tactus-0.35.1}/docs/BDD_TESTING.md +0 -0
  487. {tactus-0.34.1 → tactus-0.35.1}/docs/CONFIGURATION.md +0 -0
  488. {tactus-0.34.1 → tactus-0.35.1}/docs/CONTROL_LOOP_PHASE1_COMPLETE.md +0 -0
  489. {tactus-0.34.1 → tactus-0.35.1}/docs/DURABILITY.md +0 -0
  490. {tactus-0.34.1 → tactus-0.35.1}/docs/FILE_IO.md +0 -0
  491. {tactus-0.34.1 → tactus-0.35.1}/docs/MANUAL_CHECKPOINT_TESTING.md +0 -0
  492. {tactus-0.34.1 → tactus-0.35.1}/docs/OMNICHANNEL_HITL_PLAN.md +0 -0
  493. {tactus-0.34.1 → tactus-0.35.1}/docs/SANDBOXING.md +0 -0
  494. {tactus-0.34.1 → tactus-0.35.1}/docs/STREAMING.md +0 -0
  495. {tactus-0.34.1 → tactus-0.35.1}/docs/TOOLS.md +0 -0
  496. {tactus-0.34.1 → tactus-0.35.1}/docs/TOOL_ROADMAP.md +0 -0
  497. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/CHECKPOINT_RESUME_STATUS.md +0 -0
  498. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/CHECKPOINT_TESTING_PLAN.md +0 -0
  499. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/CONTROL_LOOP_INTEGRATION.md +0 -0
  500. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/HITL_CHECKPOINT_FIX_COMPLETE.md +0 -0
  501. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/HITL_FIX_SUMMARY.md +0 -0
  502. {tactus-0.34.1 → tactus-0.35.1}/docs/archive/LLM_CHECKPOINTING_COMPLETE.md +0 -0
  503. {tactus-0.34.1 → tactus-0.35.1}/docs/development-mode.md +0 -0
  504. {tactus-0.34.1 → tactus-0.35.1}/docs_output/classify.html +0 -0
  505. {tactus-0.34.1 → tactus-0.35.1}/docs_output/index.html +0 -0
  506. {tactus-0.34.1 → tactus-0.35.1}/examples/.tactus/config.yml +0 -0
  507. {tactus-0.34.1 → tactus-0.35.1}/examples/.tactus/config.yml.example +0 -0
  508. {tactus-0.34.1 → tactus-0.35.1}/examples/01-basics-hello-world.tac +0 -0
  509. {tactus-0.34.1 → tactus-0.35.1}/examples/02-basics-simple-logic.tac +0 -0
  510. {tactus-0.34.1 → tactus-0.35.1}/examples/03-basics-parameters.tac +0 -0
  511. {tactus-0.34.1 → tactus-0.35.1}/examples/04-basics-simple-agent.tac +0 -0
  512. {tactus-0.34.1 → tactus-0.35.1}/examples/05-basics-multi-model.tac +0 -0
  513. {tactus-0.34.1 → tactus-0.35.1}/examples/06-basics-streaming.tac +0 -0
  514. {tactus-0.34.1 → tactus-0.35.1}/examples/07-basics-bedrock.tac +0 -0
  515. {tactus-0.34.1 → tactus-0.35.1}/examples/08-basics-models.tac +0 -0
  516. {tactus-0.34.1 → tactus-0.35.1}/examples/09-basics-google-gemini.tac +0 -0
  517. {tactus-0.34.1 → tactus-0.35.1}/examples/10-feature-state.tac +0 -0
  518. {tactus-0.34.1 → tactus-0.35.1}/examples/12-feature-structured-output.tac +0 -0
  519. {tactus-0.34.1 → tactus-0.35.1}/examples/14-feature-per-turn-tools-simple.tac +0 -0
  520. {tactus-0.34.1 → tactus-0.35.1}/examples/14-feature-per-turn-tools.tac +0 -0
  521. {tactus-0.34.1 → tactus-0.35.1}/examples/15-feature-local-tools.tac +0 -0
  522. {tactus-0.34.1 → tactus-0.35.1}/examples/16-feature-toolsets-advanced.tac +0 -0
  523. {tactus-0.34.1 → tactus-0.35.1}/examples/17-feature-toolsets-dsl.tac +0 -0
  524. {tactus-0.34.1 → tactus-0.35.1}/examples/18-feature-lua-tools-individual.tac +0 -0
  525. {tactus-0.34.1 → tactus-0.35.1}/examples/18-feature-lua-tools-inline.tac +0 -0
  526. {tactus-0.34.1 → tactus-0.35.1}/examples/18-feature-lua-tools-toolset.tac +0 -0
  527. {tactus-0.34.1 → tactus-0.35.1}/examples/19-feature-direct-tool-calls.tac +0 -0
  528. {tactus-0.34.1 → tactus-0.35.1}/examples/20-bdd-complete.tac +0 -0
  529. {tactus-0.34.1 → tactus-0.35.1}/examples/21-bdd-passing.tac +0 -0
  530. {tactus-0.34.1 → tactus-0.35.1}/examples/22-bdd-fuzzy-matching.tac +0 -0
  531. {tactus-0.34.1 → tactus-0.35.1}/examples/30-eval-simple.tac +0 -0
  532. {tactus-0.34.1 → tactus-0.35.1}/examples/31-eval-demo.tac +0 -0
  533. {tactus-0.34.1 → tactus-0.35.1}/examples/32-eval-success-rate.tac +0 -0
  534. {tactus-0.34.1 → tactus-0.35.1}/examples/33-eval-thresholds.tac +0 -0
  535. {tactus-0.34.1 → tactus-0.35.1}/examples/34-eval-dataset.jsonl +0 -0
  536. {tactus-0.34.1 → tactus-0.35.1}/examples/34-eval-dataset.tac +0 -0
  537. {tactus-0.34.1 → tactus-0.35.1}/examples/35-eval-trace.tac +0 -0
  538. {tactus-0.34.1 → tactus-0.35.1}/examples/36-eval-advanced.tac +0 -0
  539. {tactus-0.34.1 → tactus-0.35.1}/examples/37-eval-comprehensive.tac +0 -0
  540. {tactus-0.34.1 → tactus-0.35.1}/examples/39-model-simple.tac +0 -0
  541. {tactus-0.34.1 → tactus-0.35.1}/examples/40-mcp-test.tac +0 -0
  542. {tactus-0.34.1 → tactus-0.35.1}/examples/40-model-text-classifier.tac +0 -0
  543. {tactus-0.34.1 → tactus-0.35.1}/examples/41-mcp-simple.tac +0 -0
  544. {tactus-0.34.1 → tactus-0.35.1}/examples/41-model-pytorch.tac +0 -0
  545. {tactus-0.34.1 → tactus-0.35.1}/examples/43-sub-procedure-simple.tac +0 -0
  546. {tactus-0.34.1 → tactus-0.35.1}/examples/44-sub-procedure-composition.tac +0 -0
  547. {tactus-0.34.1 → tactus-0.35.1}/examples/45-sub-procedure-recursive.tac +0 -0
  548. {tactus-0.34.1 → tactus-0.35.1}/examples/46-checkpoint-explicit.tac +0 -0
  549. {tactus-0.34.1 → tactus-0.35.1}/examples/47-checkpoint-expensive-ops.tac +0 -0
  550. {tactus-0.34.1 → tactus-0.35.1}/examples/48-script-mode-simple.tac +0 -0
  551. {tactus-0.34.1 → tactus-0.35.1}/examples/50-inputs-showcase.tac +0 -0
  552. {tactus-0.34.1 → tactus-0.35.1}/examples/51-inputs-calculator.tac +0 -0
  553. {tactus-0.34.1 → tactus-0.35.1}/examples/52-file-io-basics.tac +0 -0
  554. {tactus-0.34.1 → tactus-0.35.1}/examples/53-tsv-file-io.tac +0 -0
  555. {tactus-0.34.1 → tactus-0.35.1}/examples/54-json-file-io.tac +0 -0
  556. {tactus-0.34.1 → tactus-0.35.1}/examples/55-parquet-file-io.tac +0 -0
  557. {tactus-0.34.1 → tactus-0.35.1}/examples/56-hdf5-file-io.tac +0 -0
  558. {tactus-0.34.1 → tactus-0.35.1}/examples/57-excel-file-io.tac +0 -0
  559. {tactus-0.34.1 → tactus-0.35.1}/examples/58-text-file-io.tac +0 -0
  560. {tactus-0.34.1 → tactus-0.35.1}/examples/60-tool-sources.tac +0 -0
  561. {tactus-0.34.1 → tactus-0.35.1}/examples/61-inline-toolset-lua.tac +0 -0
  562. {tactus-0.34.1 → tactus-0.35.1}/examples/62-mcp-toolset-by-server.tac +0 -0
  563. {tactus-0.34.1 → tactus-0.35.1}/examples/63-toolset-import-from-file.tac +0 -0
  564. {tactus-0.34.1 → tactus-0.35.1}/examples/64-require-modules.tac +0 -0
  565. {tactus-0.34.1 → tactus-0.35.1}/examples/65-optional-state-demo.tac +0 -0
  566. {tactus-0.34.1 → tactus-0.35.1}/examples/66-host-tools-via-broker.tac +0 -0
  567. {tactus-0.34.1 → tactus-0.35.1}/examples/67-host-tool-source.tac +0 -0
  568. {tactus-0.34.1 → tactus-0.35.1}/examples/70-mocking-static.tac +0 -0
  569. {tactus-0.34.1 → tactus-0.35.1}/examples/71-mocking-temporal.tac +0 -0
  570. {tactus-0.34.1 → tactus-0.35.1}/examples/72-mocking-conditional.tac +0 -0
  571. {tactus-0.34.1 → tactus-0.35.1}/examples/90-hitl-debug.tac +0 -0
  572. {tactus-0.34.1 → tactus-0.35.1}/examples/90-hitl-simple.tac +0 -0
  573. {tactus-0.34.1 → tactus-0.35.1}/examples/90-hitl-test-simple.tac +0 -0
  574. {tactus-0.34.1 → tactus-0.35.1}/examples/90-hitl-ultra-debug.tac +0 -0
  575. {tactus-0.34.1 → tactus-0.35.1}/examples/90-super-simple.tac +0 -0
  576. {tactus-0.34.1 → tactus-0.35.1}/examples/90-test-params.tac +0 -0
  577. {tactus-0.34.1 → tactus-0.35.1}/examples/91-control-loop-demo.tac +0 -0
  578. {tactus-0.34.1 → tactus-0.35.1}/examples/92-test-inputs-simple.tac +0 -0
  579. {tactus-0.34.1 → tactus-0.35.1}/examples/92-test-inputs.tac +0 -0
  580. {tactus-0.34.1 → tactus-0.35.1}/examples/92-test-multiple.tac +0 -0
  581. {tactus-0.34.1 → tactus-0.35.1}/examples/93-test-ide-hitl.tac +0 -0
  582. {tactus-0.34.1 → tactus-0.35.1}/examples/93-test-individual-hitl.tac +0 -0
  583. {tactus-0.34.1 → tactus-0.35.1}/examples/93-test-input-summary.tac +0 -0
  584. {tactus-0.34.1 → tactus-0.35.1}/examples/94-test-custom-components.tac +0 -0
  585. {tactus-0.34.1 → tactus-0.35.1}/examples/95-agent-hitl.tac +0 -0
  586. {tactus-0.34.1 → tactus-0.35.1}/examples/99-misc-test-loading.tac +0 -0
  587. {tactus-0.34.1 → tactus-0.35.1}/examples/README.md +0 -0
  588. {tactus-0.34.1 → tactus-0.35.1}/examples/agent_test.tac +0 -0
  589. {tactus-0.34.1 → tactus-0.35.1}/examples/app_config.ini +0 -0
  590. {tactus-0.34.1 → tactus-0.35.1}/examples/classify_test.tac +0 -0
  591. {tactus-0.34.1 → tactus-0.35.1}/examples/data/sample.csv +0 -0
  592. {tactus-0.34.1 → tactus-0.35.1}/examples/demo_output.json +0 -0
  593. {tactus-0.34.1 → tactus-0.35.1}/examples/fuzzy_matching_demo.tac +0 -0
  594. {tactus-0.34.1 → tactus-0.35.1}/examples/fuzzy_matching_demo_simple_spec.tac +0 -0
  595. {tactus-0.34.1 → tactus-0.35.1}/examples/fuzzy_simple_test.tac +0 -0
  596. {tactus-0.34.1 → tactus-0.35.1}/examples/helpers/math_module.tac +0 -0
  597. {tactus-0.34.1 → tactus-0.35.1}/examples/helpers/product.tac +0 -0
  598. {tactus-0.34.1 → tactus-0.35.1}/examples/helpers/string_module.tac +0 -0
  599. {tactus-0.34.1 → tactus-0.35.1}/examples/helpers/sum.tac +0 -0
  600. {tactus-0.34.1 → tactus-0.35.1}/examples/helpers/text_tools.tac +0 -0
  601. {tactus-0.34.1 → tactus-0.35.1}/examples/hitl_toolset.lua +0 -0
  602. {tactus-0.34.1 → tactus-0.35.1}/examples/inventory_summary.tsv +0 -0
  603. {tactus-0.34.1 → tactus-0.35.1}/examples/llm_classify_binary.tac +0 -0
  604. {tactus-0.34.1 → tactus-0.35.1}/examples/llm_classify_multiclass.tac +0 -0
  605. {tactus-0.34.1 → tactus-0.35.1}/examples/llm_classify_with_metadata.tac +0 -0
  606. {tactus-0.34.1 → tactus-0.35.1}/examples/mock-config.json +0 -0
  607. {tactus-0.34.1 → tactus-0.35.1}/examples/models/README.md +0 -0
  608. {tactus-0.34.1 → tactus-0.35.1}/examples/models/create_sentiment_model.py +0 -0
  609. {tactus-0.34.1 → tactus-0.35.1}/examples/output_summary.txt +0 -0
  610. {tactus-0.34.1 → tactus-0.35.1}/examples/test-raw-module.tac +0 -0
  611. {tactus-0.34.1 → tactus-0.35.1}/examples/test-raw-streaming.tac +0 -0
  612. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-basic.tac +0 -0
  613. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-hitl-types.tac +0 -0
  614. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-llm.tac +0 -0
  615. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-many-checkpoints.tac +0 -0
  616. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-mixed.tac +0 -0
  617. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-multi-hitl.tac +0 -0
  618. {tactus-0.34.1 → tactus-0.35.1}/examples/test-resume-timeout.tac +0 -0
  619. {tactus-0.34.1 → tactus-0.35.1}/examples/test-temperature-multi-calls.tac +0 -0
  620. {tactus-0.34.1 → tactus-0.35.1}/examples/test-temperature-variation.tac +0 -0
  621. {tactus-0.34.1 → tactus-0.35.1}/examples/tools/calculations.py +0 -0
  622. {tactus-0.34.1 → tactus-0.35.1}/examples/tools/data_analysis.py +0 -0
  623. {tactus-0.34.1 → tactus-0.35.1}/examples/tools/search.py +0 -0
  624. {tactus-0.34.1 → tactus-0.35.1}/examples/with_dependencies/README.md +0 -0
  625. {tactus-0.34.1 → tactus-0.35.1}/examples/with_dependencies/simple_http_test.tac +0 -0
  626. {tactus-0.34.1 → tactus-0.35.1}/examples/with_dependencies/time_lookup.tac +0 -0
  627. {tactus-0.34.1 → tactus-0.35.1}/features/01_state_management.feature +0 -0
  628. {tactus-0.34.1 → tactus-0.35.1}/features/02_checkpointing.feature +0 -0
  629. {tactus-0.34.1 → tactus-0.35.1}/features/03_human_in_the_loop.feature +0 -0
  630. {tactus-0.34.1 → tactus-0.35.1}/features/04_control_flow.feature +0 -0
  631. {tactus-0.34.1 → tactus-0.35.1}/features/05_tool_integration.feature +0 -0
  632. {tactus-0.34.1 → tactus-0.35.1}/features/06_retry_logic.feature +0 -0
  633. {tactus-0.34.1 → tactus-0.35.1}/features/07_file_operations.feature +0 -0
  634. {tactus-0.34.1 → tactus-0.35.1}/features/08_agent_primitives.feature +0 -0
  635. {tactus-0.34.1 → tactus-0.35.1}/features/09_workflow_execution.feature +0 -0
  636. {tactus-0.34.1 → tactus-0.35.1}/features/10_lua_integration.feature +0 -0
  637. {tactus-0.34.1 → tactus-0.35.1}/features/11_storage_backends.feature +0 -0
  638. {tactus-0.34.1 → tactus-0.35.1}/features/12_json_operations.feature +0 -0
  639. {tactus-0.34.1 → tactus-0.35.1}/features/13_logging.feature +0 -0
  640. {tactus-0.34.1 → tactus-0.35.1}/features/15_procedure_calls.feature +0 -0
  641. {tactus-0.34.1 → tactus-0.35.1}/features/16_session_management.feature +0 -0
  642. {tactus-0.34.1 → tactus-0.35.1}/features/18_example_procedures.feature +0 -0
  643. {tactus-0.34.1 → tactus-0.35.1}/features/19_ide_server.feature +0 -0
  644. {tactus-0.34.1 → tactus-0.35.1}/features/20_parameters.feature +0 -0
  645. {tactus-0.34.1 → tactus-0.35.1}/features/21_outputs.feature +0 -0
  646. {tactus-0.34.1 → tactus-0.35.1}/features/23_prompts.feature +0 -0
  647. {tactus-0.34.1 → tactus-0.35.1}/features/24_bdd_specifications.feature +0 -0
  648. {tactus-0.34.1 → tactus-0.35.1}/features/25_bdd_custom_steps.feature +0 -0
  649. {tactus-0.34.1 → tactus-0.35.1}/features/26_bdd_evaluation.feature +0 -0
  650. {tactus-0.34.1 → tactus-0.35.1}/features/27_default_settings.feature +0 -0
  651. {tactus-0.34.1 → tactus-0.35.1}/features/28_custom_prompts.feature +0 -0
  652. {tactus-0.34.1 → tactus-0.35.1}/features/29_execution_settings.feature +0 -0
  653. {tactus-0.34.1 → tactus-0.35.1}/features/31_matchers.feature +0 -0
  654. {tactus-0.34.1 → tactus-0.35.1}/features/32_result_object.feature +0 -0
  655. {tactus-0.34.1 → tactus-0.35.1}/features/33_output_type.feature +0 -0
  656. {tactus-0.34.1 → tactus-0.35.1}/features/42_model_primitive.feature +0 -0
  657. {tactus-0.34.1 → tactus-0.35.1}/features/43_sub_procedure_checkpointing.feature +0 -0
  658. {tactus-0.34.1 → tactus-0.35.1}/features/46_explicit_checkpoint.feature +0 -0
  659. {tactus-0.34.1 → tactus-0.35.1}/features/48_script_mode.feature +0 -0
  660. {tactus-0.34.1 → tactus-0.35.1}/features/51_dspy_lm_config.feature +0 -0
  661. {tactus-0.34.1 → tactus-0.35.1}/features/52_dspy_signature.feature +0 -0
  662. {tactus-0.34.1 → tactus-0.35.1}/features/53_dspy_module.feature +0 -0
  663. {tactus-0.34.1 → tactus-0.35.1}/features/54_dspy_history.feature +0 -0
  664. {tactus-0.34.1 → tactus-0.35.1}/features/55_dspy_prediction.feature +0 -0
  665. {tactus-0.34.1 → tactus-0.35.1}/features/56_dspy_agent.feature +0 -0
  666. {tactus-0.34.1 → tactus-0.35.1}/features/57_chat_assistant.feature +0 -0
  667. {tactus-0.34.1 → tactus-0.35.1}/features/61_classify_primitive.feature +0 -0
  668. {tactus-0.34.1 → tactus-0.35.1}/features/documentation/IDE_SERVER_BEHAVIOR.md +0 -0
  669. {tactus-0.34.1 → tactus-0.35.1}/features/documentation/Lua DSL/README.md +0 -0
  670. {tactus-0.34.1 → tactus-0.35.1}/features/environment.py +0 -0
  671. {tactus-0.34.1 → tactus-0.35.1}/features/steps/agent_primitives_steps.py +0 -0
  672. {tactus-0.34.1 → tactus-0.35.1}/features/steps/chat_assistant_steps.py +0 -0
  673. {tactus-0.34.1 → tactus-0.35.1}/features/steps/checkpointing_steps.py +0 -0
  674. {tactus-0.34.1 → tactus-0.35.1}/features/steps/classify_primitive_steps.py +0 -0
  675. {tactus-0.34.1 → tactus-0.35.1}/features/steps/cli_run_steps.py +0 -0
  676. {tactus-0.34.1 → tactus-0.35.1}/features/steps/control_flow_steps.py +0 -0
  677. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_agent_steps.py +0 -0
  678. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_history_steps.py +0 -0
  679. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_lm_steps.py +0 -0
  680. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_module_steps.py +0 -0
  681. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_prediction_steps.py +0 -0
  682. {tactus-0.34.1 → tactus-0.35.1}/features/steps/dspy_signature_steps.py +0 -0
  683. {tactus-0.34.1 → tactus-0.35.1}/features/steps/example_procedures_steps.py +0 -0
  684. {tactus-0.34.1 → tactus-0.35.1}/features/steps/file_operations_steps.py +0 -0
  685. {tactus-0.34.1 → tactus-0.35.1}/features/steps/human_in_the_loop_steps.py +0 -0
  686. {tactus-0.34.1 → tactus-0.35.1}/features/steps/ide_server_steps.py +0 -0
  687. {tactus-0.34.1 → tactus-0.35.1}/features/steps/json_operations_steps.py +0 -0
  688. {tactus-0.34.1 → tactus-0.35.1}/features/steps/logging_steps.py +0 -0
  689. {tactus-0.34.1 → tactus-0.35.1}/features/steps/lua_dsl_validation_steps.py +0 -0
  690. {tactus-0.34.1 → tactus-0.35.1}/features/steps/lua_integration_steps.py +0 -0
  691. {tactus-0.34.1 → tactus-0.35.1}/features/steps/mocking_steps.py +0 -0
  692. {tactus-0.34.1 → tactus-0.35.1}/features/steps/procedure_calls_steps.py +0 -0
  693. {tactus-0.34.1 → tactus-0.35.1}/features/steps/result_and_output_steps.py +0 -0
  694. {tactus-0.34.1 → tactus-0.35.1}/features/steps/retry_logic_steps.py +0 -0
  695. {tactus-0.34.1 → tactus-0.35.1}/features/steps/session_management_steps.py +0 -0
  696. {tactus-0.34.1 → tactus-0.35.1}/features/steps/state_management_steps.py +0 -0
  697. {tactus-0.34.1 → tactus-0.35.1}/features/steps/storage_backend_steps.py +0 -0
  698. {tactus-0.34.1 → tactus-0.35.1}/features/steps/support/__init__.py +0 -0
  699. {tactus-0.34.1 → tactus-0.35.1}/features/steps/support/harnesses.py +0 -0
  700. {tactus-0.34.1 → tactus-0.35.1}/features/steps/tool_integration_steps.py +0 -0
  701. {tactus-0.34.1 → tactus-0.35.1}/features/steps/workflow_execution_steps.py +0 -0
  702. {tactus-0.34.1 → tactus-0.35.1}/planning/BROKER_AND_TOOL_RUNNERS.md +0 -0
  703. {tactus-0.34.1 → tactus-0.35.1}/planning/FORMATTER.md +0 -0
  704. {tactus-0.34.1 → tactus-0.35.1}/scripts/audit_examples_mocking.py +0 -0
  705. {tactus-0.34.1 → tactus-0.35.1}/scripts/convert_examples.py +0 -0
  706. {tactus-0.34.1 → tactus-0.35.1}/scripts/timeout.py +0 -0
  707. {tactus-0.34.1 → tactus-0.35.1}/start-web-ide.sh +0 -0
  708. {tactus-0.34.1 → tactus-0.35.1}/tactus/adapters/__init__.py +0 -0
  709. {tactus-0.34.1 → tactus-0.35.1}/tactus/backends/http_backend.py +0 -0
  710. {tactus-0.34.1 → tactus-0.35.1}/tactus/backends/model_backend.py +0 -0
  711. {tactus-0.34.1 → tactus-0.35.1}/tactus/backends/pytorch_backend.py +0 -0
  712. {tactus-0.34.1 → tactus-0.35.1}/tactus/broker/__init__.py +0 -0
  713. {tactus-0.34.1 → tactus-0.35.1}/tactus/broker/stdio.py +0 -0
  714. {tactus-0.34.1 → tactus-0.35.1}/tactus/cli/__init__.py +0 -0
  715. {tactus-0.34.1 → tactus-0.35.1}/tactus/cli/commands/__init__.py +0 -0
  716. {tactus-0.34.1 → tactus-0.35.1}/tactus/core/__init__.py +0 -0
  717. {tactus-0.34.1 → tactus-0.35.1}/tactus/core/dependencies/__init__.py +0 -0
  718. {tactus-0.34.1 → tactus-0.35.1}/tactus/docker/Dockerfile +0 -0
  719. {tactus-0.34.1 → tactus-0.35.1}/tactus/docker/Dockerfile.pypi +0 -0
  720. {tactus-0.34.1 → tactus-0.35.1}/tactus/docker/entrypoint.sh +0 -0
  721. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/__init__.py +0 -0
  722. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/html_renderer.py +0 -0
  723. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/models.py +0 -0
  724. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/templates/base.html +0 -0
  725. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/templates/index.html +0 -0
  726. {tactus-0.34.1 → tactus-0.35.1}/tactus/docs/templates/module.html +0 -0
  727. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/__init__.py +0 -0
  728. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/agent.py +0 -0
  729. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/broker_lm.py +0 -0
  730. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/config.py +0 -0
  731. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/history.py +0 -0
  732. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/module.py +0 -0
  733. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/prediction.py +0 -0
  734. {tactus-0.34.1 → tactus-0.35.1}/tactus/dspy/signature.py +0 -0
  735. {tactus-0.34.1 → tactus-0.35.1}/tactus/formatting/__init__.py +0 -0
  736. {tactus-0.34.1 → tactus-0.35.1}/tactus/formatting/formatter.py +0 -0
  737. {tactus-0.34.1 → tactus-0.35.1}/tactus/ide/__init__.py +0 -0
  738. {tactus-0.34.1 → tactus-0.35.1}/tactus/ide/coding_assistant.py +0 -0
  739. {tactus-0.34.1 → tactus-0.35.1}/tactus/ide/config_server.py +0 -0
  740. {tactus-0.34.1 → tactus-0.35.1}/tactus/primitives/__init__.py +0 -0
  741. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/__init__.py +0 -0
  742. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/chat_recorder.py +0 -0
  743. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/config.py +0 -0
  744. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/control.py +0 -0
  745. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/cost.py +0 -0
  746. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/hitl.py +0 -0
  747. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/log_handler.py +0 -0
  748. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/models.py +0 -0
  749. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/notification.py +0 -0
  750. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/result.py +0 -0
  751. {tactus-0.34.1 → tactus-0.35.1}/tactus/protocols/storage.py +0 -0
  752. {tactus-0.34.1 → tactus-0.35.1}/tactus/providers/__init__.py +0 -0
  753. {tactus-0.34.1 → tactus-0.35.1}/tactus/providers/base.py +0 -0
  754. {tactus-0.34.1 → tactus-0.35.1}/tactus/providers/bedrock.py +0 -0
  755. {tactus-0.34.1 → tactus-0.35.1}/tactus/providers/google.py +0 -0
  756. {tactus-0.34.1 → tactus-0.35.1}/tactus/providers/openai.py +0 -0
  757. {tactus-0.34.1 → tactus-0.35.1}/tactus/sandbox/__init__.py +0 -0
  758. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/README.md +0 -0
  759. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/__init__.py +0 -0
  760. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/classify/__init__.py +0 -0
  761. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/classify/classify.spec.tac +0 -0
  762. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/classify/classify.tac +0 -0
  763. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/classify/fuzzy.py +0 -0
  764. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/classify/primitive.py +0 -0
  765. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/core/__init__.py +0 -0
  766. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/core/base.py +0 -0
  767. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/core/confidence.py +0 -0
  768. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/core/models.py +0 -0
  769. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/core/retry.py +0 -0
  770. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/extract/__init__.py +0 -0
  771. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/extract/llm.py +0 -0
  772. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/extract/primitive.py +0 -0
  773. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/__init__.py +0 -0
  774. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/csv.py +0 -0
  775. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/excel.py +0 -0
  776. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/file.py +0 -0
  777. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/fs.py +0 -0
  778. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/hdf5.py +0 -0
  779. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/json.py +0 -0
  780. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/parquet.py +0 -0
  781. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/io/tsv.py +0 -0
  782. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/loader.py +0 -0
  783. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify/base.tac +0 -0
  784. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify/fuzzy.tac +0 -0
  785. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify/index.md +0 -0
  786. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify/init.tac +0 -0
  787. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify/llm.tac +0 -0
  788. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/classify.spec.tac +0 -0
  789. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/extract/base.tac +0 -0
  790. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/extract/index.md +0 -0
  791. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/extract/init.tac +0 -0
  792. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/extract/llm.tac +0 -0
  793. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/extract.spec.tac +0 -0
  794. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/generate/base.tac +0 -0
  795. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/generate/index.md +0 -0
  796. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/generate/init.tac +0 -0
  797. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/generate/llm.tac +0 -0
  798. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/generate.spec.tac +0 -0
  799. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/tools/done.tac +0 -0
  800. {tactus-0.34.1 → tactus-0.35.1}/tactus/stdlib/tac/tactus/tools/log.tac +0 -0
  801. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/README.md +0 -0
  802. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/__init__.py +0 -0
  803. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/behave_integration.py +0 -0
  804. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/context.py +0 -0
  805. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/eval_models.py +0 -0
  806. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/evaluation_runner.py +0 -0
  807. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/evaluators.py +0 -0
  808. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/events.py +0 -0
  809. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/gherkin_parser.py +0 -0
  810. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/mock_agent.py +0 -0
  811. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/mock_dependencies.py +0 -0
  812. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/mock_hitl.py +0 -0
  813. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/mock_registry.py +0 -0
  814. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/mock_tools.py +0 -0
  815. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/models.py +0 -0
  816. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/steps/__init__.py +0 -0
  817. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/steps/builtin.py +0 -0
  818. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/steps/custom.py +0 -0
  819. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/steps/registry.py +0 -0
  820. {tactus-0.34.1 → tactus-0.35.1}/tactus/testing/test_runner.py +0 -0
  821. {tactus-0.34.1 → tactus-0.35.1}/tactus/tracing/__init__.py +0 -0
  822. {tactus-0.34.1 → tactus-0.35.1}/tactus/tracing/trace_manager.py +0 -0
  823. {tactus-0.34.1 → tactus-0.35.1}/tactus/utils/__init__.py +0 -0
  824. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/LuaLexerBase.py +0 -0
  825. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/LuaParserBase.py +0 -0
  826. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/README.md +0 -0
  827. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/__init__.py +0 -0
  828. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaLexer.interp +0 -0
  829. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaLexer.py +0 -0
  830. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaLexer.tokens +0 -0
  831. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaLexerBase.py +0 -0
  832. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaParser.interp +0 -0
  833. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaParser.py +0 -0
  834. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaParser.tokens +0 -0
  835. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaParserBase.py +0 -0
  836. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/LuaParserVisitor.py +0 -0
  837. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/generated/__init__.py +0 -0
  838. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/grammar/LuaLexer.g4 +0 -0
  839. {tactus-0.34.1 → tactus-0.35.1}/tactus/validation/grammar/LuaParser.g4 +0 -0
  840. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/.gitignore +0 -0
  841. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/BUILD_GUIDE.md +0 -0
  842. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/DISTRIBUTION.md +0 -0
  843. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/ELECTRON_INTEGRATION.md +0 -0
  844. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/README.md +0 -0
  845. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/RUN_ELECTRON.md +0 -0
  846. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/SETUP_COMPLETE.md +0 -0
  847. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/backend/hook-lupa.py +0 -0
  848. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/package-lock.json +0 -0
  849. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/package.json +0 -0
  850. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/preload/preload.ts +0 -0
  851. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/preload/tsconfig.json +0 -0
  852. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/rebuild-and-test.sh +0 -0
  853. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/resources/app-icon.icns +0 -0
  854. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/resources/app-icon.ico +0 -0
  855. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/resources/app-icon.png +0 -0
  856. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/scripts/build-backend.mjs +0 -0
  857. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/scripts/build-frontend.mjs +0 -0
  858. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/scripts/generate-icons.sh +0 -0
  859. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/scripts/test-ci-build.sh +0 -0
  860. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/src/backend-manager.ts +0 -0
  861. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/src/main.ts +0 -0
  862. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/src/menu.ts +0 -0
  863. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/src/preferences-window.ts +0 -0
  864. {tactus-0.34.1 → tactus-0.35.1}/tactus-desktop/tsconfig.json +0 -0
  865. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/ARCHITECTURE.md +0 -0
  866. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/CHANGELOG.md +0 -0
  867. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/DEV_MODE.md +0 -0
  868. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/QUICK_START.md +0 -0
  869. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/README.md +0 -0
  870. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/RESTART_INSTRUCTIONS.md +0 -0
  871. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/TROUBLESHOOTING.md +0 -0
  872. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/README.md +0 -0
  873. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/assistant_service.py +0 -0
  874. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/assistant_tools.py +0 -0
  875. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/chat_server.py +0 -0
  876. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/config_server.py +0 -0
  877. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/events.py +0 -0
  878. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/logging_capture.py +0 -0
  879. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/lsp_server.py +0 -0
  880. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/requirements.txt +0 -0
  881. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/tactus_lsp_handler.py +0 -0
  882. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/backend/text_editor_tool.py +0 -0
  883. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/dev.sh +0 -0
  884. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/.storybook/main.ts +0 -0
  885. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/.storybook/preview.ts +0 -0
  886. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/.storybook/vitest.setup.ts +0 -0
  887. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/README.md +0 -0
  888. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/components.json +0 -0
  889. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/demo.ts +0 -0
  890. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/index.html +0 -0
  891. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/jest.config.js +0 -0
  892. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/package-lock.json +0 -0
  893. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/package.json +0 -0
  894. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/postcss.config.js +0 -0
  895. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/App.tsx +0 -0
  896. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/Editor.tsx +0 -0
  897. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/LSPClient.ts +0 -0
  898. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/LSPClientHTTP.ts +0 -0
  899. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/TactusLanguage.ts +0 -0
  900. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/commands/registry.ts +0 -0
  901. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/AboutDialog.tsx +0 -0
  902. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/AuthErrorDialog.tsx +0 -0
  903. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ChatSidebar.tsx +0 -0
  904. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/CheckpointSummary.tsx +0 -0
  905. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/CollapsibleRun.tsx +0 -0
  906. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/Duration.stories.tsx +0 -0
  907. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/Duration.tsx +0 -0
  908. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/FileTree.stories.tsx +0 -0
  909. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/FileTree.tsx +0 -0
  910. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/MessageFeed.tsx +0 -0
  911. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/PreferencesView.tsx +0 -0
  912. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.stories.tsx +0 -0
  913. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureInputsDisplay.tsx +0 -0
  914. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureInputsModal.stories.tsx +0 -0
  915. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureInputsModal.tsx +0 -0
  916. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureTab.stories.tsx +0 -0
  917. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ProcedureTab.tsx +0 -0
  918. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ResizeHandle.tsx +0 -0
  919. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ResultsSidebar.stories.tsx +0 -0
  920. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ResultsSidebar.tsx +0 -0
  921. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/TestOptionsModal.tsx +0 -0
  922. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/Timestamp.stories.tsx +0 -0
  923. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/Timestamp.tsx +0 -0
  924. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/TopMenuBar.stories.tsx +0 -0
  925. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ai-elements/confirmation.tsx +0 -0
  926. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/chat/ChatInterface.tsx +0 -0
  927. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/chat/MessageInput.tsx +0 -0
  928. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/chat/MessageList.tsx +0 -0
  929. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.stories.tsx +0 -0
  930. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/CheckpointDetails.tsx +0 -0
  931. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/CheckpointList.stories.tsx +0 -0
  932. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/CheckpointList.tsx +0 -0
  933. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.stories.tsx +0 -0
  934. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/DebuggerPanel.tsx +0 -0
  935. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/RunSelector.stories.tsx +0 -0
  936. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/RunSelector.tsx +0 -0
  937. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.stories.tsx +0 -0
  938. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/debugger/StatisticsPanel.tsx +0 -0
  939. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/AgentStreamingComponent.tsx +0 -0
  940. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/BaseEventComponent.tsx +0 -0
  941. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/CheckpointEventComponent.tsx +0 -0
  942. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/CollapsibleTestScenario.tsx +0 -0
  943. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ContainerStatusEventComponent.tsx +0 -0
  944. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/CostEventComponent.stories.tsx +0 -0
  945. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/CostEventComponent.tsx +0 -0
  946. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.stories.tsx +0 -0
  947. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/EvaluationEventComponent.tsx +0 -0
  948. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/EventRenderer.tsx +0 -0
  949. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.stories.tsx +0 -0
  950. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ExecutionEventComponent.tsx +0 -0
  951. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.stories.tsx +0 -0
  952. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.tsx +0 -0
  953. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/HITLEventComponent.stories.tsx +0 -0
  954. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/HITLEventComponent.tsx +0 -0
  955. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/LoadingEventComponent.stories.tsx +0 -0
  956. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/LoadingEventComponent.tsx +0 -0
  957. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/LogCluster.tsx +0 -0
  958. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/LogEventComponent.stories.tsx +0 -0
  959. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/LogEventComponent.tsx +0 -0
  960. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/OutputEventComponent.stories.tsx +0 -0
  961. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/OutputEventComponent.tsx +0 -0
  962. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/TestEventComponent.stories.tsx +0 -0
  963. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/TestEventComponent.tsx +0 -0
  964. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/TestProgressContainer.tsx +0 -0
  965. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ToolCallEventComponent.tsx +0 -0
  966. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ValidationEventComponent.stories.tsx +0 -0
  967. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/events/ValidationEventComponent.tsx +0 -0
  968. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/registry.ts +0 -0
  969. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/builtin/ApprovalComponent.tsx +0 -0
  970. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/builtin/InputComponent.tsx +0 -0
  971. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/builtin/SelectComponent.tsx +0 -0
  972. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/builtin/index.ts +0 -0
  973. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/index.ts +0 -0
  974. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/selectors/ImageSelectorComponent.tsx +0 -0
  975. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/standard-library/selectors/index.ts +0 -0
  976. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/hitl/types.ts +0 -0
  977. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/AgentsSection.tsx +0 -0
  978. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/EvaluationsSection.tsx +0 -0
  979. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/MetadataSections.stories.tsx +0 -0
  980. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/OutputsSection.tsx +0 -0
  981. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/ParametersSection.tsx +0 -0
  982. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/SpecificationsSection.tsx +0 -0
  983. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/StagesSection.tsx +0 -0
  984. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/metadata/ToolsSection.tsx +0 -0
  985. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/preferences/ConfigFieldView.tsx +0 -0
  986. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/preferences/SourceBadge.tsx +0 -0
  987. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/preferences/YamlCodeEditor.tsx +0 -0
  988. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/scenarios/EvaluateScenarios.stories.tsx +0 -0
  989. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/scenarios/RunScenarios.stories.tsx +0 -0
  990. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/scenarios/TestScenarios.stories.tsx +0 -0
  991. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/scenarios/ValidationScenarios.stories.tsx +0 -0
  992. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/theme-provider.tsx +0 -0
  993. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/ai/conversation.tsx +0 -0
  994. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/ai/message.tsx +0 -0
  995. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/ai/prompt-input.tsx +0 -0
  996. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/alert.tsx +0 -0
  997. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/badge.tsx +0 -0
  998. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/button.tsx +0 -0
  999. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/dialog.tsx +0 -0
  1000. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/dropdown-menu.tsx +0 -0
  1001. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/input.tsx +0 -0
  1002. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/label.tsx +0 -0
  1003. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/logo.stories.tsx +0 -0
  1004. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/logo.tsx +0 -0
  1005. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/menubar.tsx +0 -0
  1006. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/scroll-area.tsx +0 -0
  1007. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/select.tsx +0 -0
  1008. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/separator.tsx +0 -0
  1009. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/switch.tsx +0 -0
  1010. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/tabs.tsx +0 -0
  1011. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/components/ui/tooltip.tsx +0 -0
  1012. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/hooks/useChatSSE.ts +0 -0
  1013. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/hooks/useEventStream.ts +0 -0
  1014. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/hooks/useTracing.ts +0 -0
  1015. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/index.css +0 -0
  1016. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/lib/utils.ts +0 -0
  1017. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/main.tsx +0 -0
  1018. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/types/events.ts +0 -0
  1019. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/types/metadata.ts +0 -0
  1020. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/types/preferences.ts +0 -0
  1021. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/types/results.ts +0 -0
  1022. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/types/tracing.ts +0 -0
  1023. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/utils/clipboard.ts +0 -0
  1024. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/utils/runExport.ts +0 -0
  1025. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/utils/yamlSync.ts +0 -0
  1026. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/validation/TactusValidator.ts +0 -0
  1027. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/validation/generated/LuaParser.interp +0 -0
  1028. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/validation/generated/LuaParser.tokens +0 -0
  1029. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/validation/types.ts +0 -0
  1030. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/src/vite-env.d.ts +0 -0
  1031. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/tailwind.config.js +0 -0
  1032. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/tests/runExport.test.ts +0 -0
  1033. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/tsconfig.json +0 -0
  1034. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/tsconfig.node.json +0 -0
  1035. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/vendor/tactus-hitl-components/package.json +0 -0
  1036. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/vendor/tactus-hitl-components/src/index.tsx +0 -0
  1037. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/vendor/tactus-hitl-components/src/styles.css +0 -0
  1038. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/vite.config.ts +0 -0
  1039. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/frontend/vitest.shims.d.ts +0 -0
  1040. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/package.json +0 -0
  1041. {tactus-0.34.1 → tactus-0.35.1}/tactus-ide/start-dev.sh +0 -0
  1042. {tactus-0.34.1 → tactus-0.35.1}/test-ci.sh +0 -0
  1043. {tactus-0.34.1 → tactus-0.35.1}/test_classify_loading.tac +0 -0
  1044. {tactus-0.34.1 → tactus-0.35.1}/test_run_inputs.sh +0 -0
  1045. {tactus-0.34.1 → tactus-0.35.1}/tests/__init__.py +0 -0
  1046. {tactus-0.34.1 → tactus-0.35.1}/tests/adapters/__init__.py +0 -0
  1047. {tactus-0.34.1 → tactus-0.35.1}/tests/broker/test_broker_host_tool_source.py +0 -0
  1048. {tactus-0.34.1 → tactus-0.35.1}/tests/broker/test_broker_integration.py +0 -0
  1049. {tactus-0.34.1 → tactus-0.35.1}/tests/broker/test_broker_tcp_integration.py +0 -0
  1050. {tactus-0.34.1 → tactus-0.35.1}/tests/broker/test_broker_tcp_unit.py +0 -0
  1051. {tactus-0.34.1 → tactus-0.35.1}/tests/broker/test_brokered_lm_unit.py +0 -0
  1052. {tactus-0.34.1 → tactus-0.35.1}/tests/cli/__init__.py +0 -0
  1053. {tactus-0.34.1 → tactus-0.35.1}/tests/conftest.py +0 -0
  1054. {tactus-0.34.1 → tactus-0.35.1}/tests/core/__init__.py +0 -0
  1055. {tactus-0.34.1 → tactus-0.35.1}/tests/core/test_determinism_safety.py +0 -0
  1056. {tactus-0.34.1 → tactus-0.35.1}/tests/core/test_runtime_inputs.py +0 -0
  1057. {tactus-0.34.1 → tactus-0.35.1}/tests/dspy/__init__.py +0 -0
  1058. {tactus-0.34.1 → tactus-0.35.1}/tests/dspy/test_mock_field_normalization.py +0 -0
  1059. {tactus-0.34.1 → tactus-0.35.1}/tests/dspy/test_module_parameter.py +0 -0
  1060. {tactus-0.34.1 → tactus-0.35.1}/tests/dspy/test_streaming.py +0 -0
  1061. {tactus-0.34.1 → tactus-0.35.1}/tests/fixtures/__init__.py +0 -0
  1062. {tactus-0.34.1 → tactus-0.35.1}/tests/fixtures/brave_search_mcp_server.py +0 -0
  1063. {tactus-0.34.1 → tactus-0.35.1}/tests/fixtures/filesystem_mcp_server.py +0 -0
  1064. {tactus-0.34.1 → tactus-0.35.1}/tests/fixtures/test_mcp_server.py +0 -0
  1065. {tactus-0.34.1 → tactus-0.35.1}/tests/integration/test_named_procedures.py +0 -0
  1066. {tactus-0.34.1 → tactus-0.35.1}/tests/mocks/__init__.py +0 -0
  1067. {tactus-0.34.1 → tactus-0.35.1}/tests/mocks/llm_mocks.py +0 -0
  1068. {tactus-0.34.1 → tactus-0.35.1}/tests/primitives/test_system_alert.py +0 -0
  1069. {tactus-0.34.1 → tactus-0.35.1}/tests/primitives/test_toolset_dsl.py +0 -0
  1070. {tactus-0.34.1 → tactus-0.35.1}/tests/stdlib/__init__.py +0 -0
  1071. {tactus-0.34.1 → tactus-0.35.1}/tests/stdlib/classify/__init__.py +0 -0
  1072. {tactus-0.34.1 → tactus-0.35.1}/tests/stdlib/classify/test_fuzzy_algorithms.py +0 -0
  1073. {tactus-0.34.1 → tactus-0.35.1}/tests/stdlib/classify/test_fuzzy_demo.py +0 -0
  1074. {tactus-0.34.1 → tactus-0.35.1}/tests/stdlib/extract/__init__.py +0 -0
  1075. {tactus-0.34.1 → tactus-0.35.1}/tests/test_checkpoints_integration.py +0 -0
  1076. {tactus-0.34.1 → tactus-0.35.1}/tests/test_mcp_integration.py +0 -0
  1077. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/__init__.py +0 -0
  1078. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/conftest.py +0 -0
  1079. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_all_examples.py +0 -0
  1080. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_gherkin_parser.py +0 -0
  1081. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_integration.py +0 -0
  1082. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_models.py +0 -0
  1083. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_runtime_integration.py +0 -0
  1084. {tactus-0.34.1 → tactus-0.35.1}/tests/testing/test_step_registry.py +0 -0
  1085. {tactus-0.34.1 → tactus-0.35.1}/tests/utils/__init__.py +0 -0
  1086. {tactus-0.34.1 → tactus-0.35.1}/tests/utils/test_safe_file_library.py +0 -0
  1087. {tactus-0.34.1 → tactus-0.35.1}/tests/validation/__init__.py +0 -0
  1088. {tactus-0.34.1 → tactus-0.35.1}/tests/validation/test_tool_curried_syntax_disallowed.py +0 -0
@@ -0,0 +1,27 @@
1
+ [run]
2
+ branch = True
3
+ parallel = True
4
+ source =
5
+ tactus
6
+ tactus-ide/backend
7
+ omit =
8
+ */__pycache__/*
9
+ tactus/validation/generated/*
10
+ tactus/validation/LuaLexerBase.py
11
+ tactus/validation/LuaParserBase.py
12
+ */tests/*
13
+ */features/*
14
+
15
+ [report]
16
+ show_missing = True
17
+ skip_covered = True
18
+ precision = 1
19
+ fail_under = 100
20
+ exclude_lines =
21
+ pragma: no cover
22
+ if __name__ == .__main__.:
23
+ raise NotImplementedError
24
+ @abstractmethod
25
+
26
+ [html]
27
+ directory = coverage_html
@@ -0,0 +1,610 @@
1
+ # Instructions for Coding Agents
2
+
3
+ This document provides guidelines for AI coding agents working on the Tactus project.
4
+
5
+ ## Brand Theme & Visual Design Policies
6
+
7
+ * **Flat Design Only**:
8
+ * No gradients.
9
+ * No drop-shadows (unless totally flat/hard).
10
+ * No borders/outlines on containers or regions.
11
+ * **Contrast & Separation**:
12
+ * Avoid thin lines (hrules, borders) for separating regions.
13
+ * Use **varying background colors** on flat rectangles with rounded corners to indicate regions and groupings.
14
+ * Use contrast carefully; avoid high contrast.
15
+ * Background black should not be fully black (e.g., use dark gray).
16
+ * Foreground white should not be fully white.
17
+ * Use a limited set of official colors: "not-black", "not-white", and 2-3 "muted" colors.
18
+ * **Color System**:
19
+ * Themes use **Radix Colors** (Cool, Neutral, Warm).
20
+ * Support both Light and Dark modes.
21
+ * **Typography & Layout**:
22
+ * Refined elegance, modern Bauhaus-inspired, Apple's modern minimalist Art Deco.
23
+ * **Animations**:
24
+ * Subtle animation effects are encouraged.
25
+ * **NO CSS animations** (like Framer Motion) for components that feature in Babulus videos.
26
+ * Use **frame-parameterized animations**: Animations must be driven by a `frame` parameter so they can be rendered deterministically in videos.
27
+ * **Development Workflow**:
28
+ * Refer to **Shadcn UI** for default UX design patterns.
29
+ * Provide examples of basic visual elements in **Storybook stories**.
30
+ * Do research into best practices for specific tasks.
31
+
32
+ ## Pre-Commit Checklist
33
+
34
+ **CRITICAL**: Before committing any changes, you MUST:
35
+
36
+ 1. **Wait for human approval** - DO NOT COMMIT until the human user has tested and approved your changes
37
+ 2. **Run the complete test and linting suite**:
38
+
39
+ ```bash
40
+ # 1. Run unit tests
41
+ pytest tests/ -x -k "not test_real_execution"
42
+
43
+ # 2. Run BDD behavior tests
44
+ behave --summary
45
+
46
+ # 3. Check code style with ruff (no uncommitted code should have ruff errors)
47
+ ruff check .
48
+
49
+ # 4. Format code with black
50
+ black tactus tactus-ide/backend features/steps tests
51
+
52
+ # 5. Verify all checks pass again
53
+ ruff check .
54
+ black tactus tactus-ide/backend features/steps tests --check
55
+ ```
56
+
57
+ Only commit when:
58
+ - The human user has explicitly approved the changes
59
+ - ALL of the above checks pass
60
+
61
+ Do not skip this step or commit before getting approval and running these checks.
62
+
63
+ ## Reference Documentation
64
+
65
+ - **[SPECIFICATION.md](SPECIFICATION.md)**: The official specification for the Tactus domain-specific language. Refer to this document for the definitive guide on DSL syntax, semantics, and behavior.
66
+ - **[IMPLEMENTATION.md](IMPLEMENTATION.md)**: Maps the specification to the actual codebase implementation. Shows where each feature is implemented, what's complete, and what's missing relative to the specification. Use this to understand the current implementation status when working on features.
67
+
68
+ ## Multi-Model and Multi-Provider Support
69
+
70
+ **IMPORTANT**: Tactus now supports multiple LLM providers and models:
71
+
72
+ - **Providers**: `openai` and `bedrock` are supported
73
+ - **Provider is REQUIRED**: Every agent must specify `provider:` (either directly or via `default_provider:` at procedure level)
74
+ - **Multiple models**: Different agents can use different models (e.g., GPT-4o, GPT-4o-mini, Claude 3.5 Sonnet)
75
+ - **Model parameters**: Supports model-specific parameters like `temperature`, `max_tokens`, `openai_reasoning_effort`
76
+
77
+ **Provider-Specific Dependencies**:
78
+ - **DO NOT add provider-specific SDK dependencies** (e.g., `openai`, `anthropic`, etc.) unless there is a SPECIFIC reason
79
+ - Tactus uses **LiteLLM (via DSPy)** for ALL LLM calls, which provides unified multi-provider support
80
+ - LiteLLM handles all provider-specific API calls internally
81
+ - Adding provider SDKs creates maintenance burden and can lead to bugs where code bypasses the LiteLLM layer
82
+ - Exception: `boto3` is needed for Bedrock support, but all actual LLM calls still go through LiteLLM
83
+
84
+ Example:
85
+ ```lua
86
+ -- Tool definition
87
+ Tool "done" { use = "tactus.done" }
88
+
89
+ -- OpenAI agent
90
+ Agent "openai_agent" {
91
+ provider = "openai",
92
+ model = {
93
+ name = "gpt-4o",
94
+ temperature = 0.7
95
+ },
96
+ system_prompt = "...",
97
+ toolsets = {"done"}
98
+ }
99
+
100
+ -- Bedrock agent
101
+ Agent "bedrock_agent" {
102
+ provider = "bedrock",
103
+ model = "anthropic.claude-3-5-sonnet-20240620-v1:0",
104
+ system_prompt = "...",
105
+ toolsets = {"done"}
106
+ }
107
+ ```
108
+
109
+ ## Production Readiness
110
+
111
+ **IMPORTANT**: Tactus is **NOT** ready for production. It is in early development (Alpha status).
112
+
113
+ ### Do NOT:
114
+ - Declare that Tactus is "ready for production"
115
+ - Claim that features are "production-ready"
116
+ - State that the project is "complete" or "finished"
117
+ - Use phrases like "ready to use in production" or "production-ready"
118
+
119
+ ### Do:
120
+ - Focus on testing and verification
121
+ - Run existing tests before declaring changes complete
122
+ - Verify that implementations actually work as intended
123
+ - Acknowledge limitations and incomplete features
124
+ - Suggest improvements and note areas that need work
125
+
126
+ ## Testing Philosophy (BDD-First)
127
+
128
+ Tactus aspires to be **religiously BDD** and **spec-first**:
129
+ - **Outside-in first**: Start with BDD specs that narrate the feature behavior.
130
+ - **Specs as story**: Scenarios should read like a short narrative of how the feature works.
131
+ - **Pytest is secondary**: Use unit tests only when a behavior is best verified at the unit level.
132
+ - **Unit tests are limited**: Prefer BDD unless a unit test is the most sensible and lowest-friction way to verify correctness.
133
+
134
+ ## Semantic Release and Changelog
135
+
136
+ **IMPORTANT**: This project uses Semantic Release to automatically manage versioning and the changelog.
137
+
138
+ - **Do NOT manually edit `CHANGELOG.md`**. It is generated and updated automatically by the release workflow.
139
+ - **Do NOT add `CHANGELOG.md` to `.gitignore`**. It must be tracked in the repository so the release bot can commit updates to it.
140
+ - **Do NOT delete or truncate `CHANGELOG.md`**.
141
+ - 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.
142
+
143
+ ## Commit Message Guidelines
144
+
145
+ When writing commit messages:
146
+
147
+ - **Do NOT use code blocks** (backticks or triple backticks) in commit messages
148
+ - Use plain text with proper formatting (bullet points, indentation)
149
+ - Keep commit subject lines concise (50-72 characters)
150
+ - Use the imperative mood ("fix bug" not "fixed bug")
151
+ - Include detailed explanations in the commit body when necessary
152
+ - Follow the Angular Commit Message Convention for the subject line
153
+
154
+ ## Git Branching Strategy
155
+
156
+ **Branch naming conventions** - Use these prefixes for all branches:
157
+
158
+ - `feature/` - New features or enhancements (e.g., `feature/preferences-ui`, `feature/mcp-server-config`)
159
+ - `fix/` - Bug fixes (e.g., `fix/config-cascade-merge`)
160
+ - `docs/` - Documentation changes (e.g., `docs/update-api-guide`)
161
+ - `refactor/` - Code refactoring (e.g., `refactor/config-manager`)
162
+ - `test/` - Test additions or improvements (e.g., `test/add-preferences-e2e`)
163
+
164
+ **IMPORTANT**: Always use `feature/` prefix for feature branches, NOT `feat/` or `feat-`.
165
+
166
+ **Branch workflow**:
167
+ 1. Create feature branch from `main`: `git checkout -b feature/my-feature`
168
+ 2. Make changes and commit following commit message guidelines
169
+ 3. Push to remote: `git push -u origin feature/my-feature`
170
+ 4. Create pull request to `main` branch
171
+ 5. After approval and merge, delete feature branch
172
+
173
+ ## Parser Generation Requirements
174
+
175
+ **IMPORTANT**: Tactus uses ANTLR4 to generate parsers from the Lua grammar for both Python and TypeScript.
176
+
177
+ ### Requirements for Parser Generation
178
+
179
+ **Docker is REQUIRED** for generating parsers:
180
+ - Parser generation uses ANTLR4 which requires Java
181
+ - We use Docker to avoid requiring Java installation on developer machines
182
+ - Docker image: `eclipse-temurin:17-jre`
183
+
184
+ **When to regenerate parsers:**
185
+ - Only when modifying the Lua grammar files
186
+ - Generated parsers are committed to version control
187
+ - End users don't need Docker or Java
188
+
189
+ **How to regenerate parsers:**
190
+ ```bash
191
+ # Ensure Docker is running
192
+ make generate-parsers
193
+
194
+ # Or generate individually:
195
+ make generate-python-parser
196
+ make generate-typescript-parser
197
+ ```
198
+
199
+ **Generated files (committed to repo):**
200
+ - `tactus/validation/generated/*.py` - Python parser
201
+ - `tactus-ide/frontend/src/validation/generated/*.ts` - TypeScript parser
202
+
203
+ ## Container Development Mode
204
+
205
+ **IMPORTANT**: The sandbox container uses development mode to avoid constant rebuilds during active development.
206
+
207
+ ### What is Development Mode?
208
+
209
+ Development mode (`dev_mode: true`) mounts your live Tactus source code into the container at runtime. This means:
210
+ - Code changes are **instantly available** in containers
211
+ - No rebuilding needed after changes
212
+ - No version mismatch errors between host and container
213
+
214
+ ### How It Works
215
+
216
+ The IDE automatically enables dev mode. The system finds your Tactus repository via:
217
+ 1. `TACTUS_DEV_PATH` environment variable (if set)
218
+ 2. Python module location (`tactus.__file__` when installed with `pip install -e .`)
219
+ 3. Current working directory (if it contains `tactus/` and `pyproject.toml`)
220
+
221
+ ### For Tactus Developers (Typical Workflow)
222
+
223
+ If you installed Tactus with `pip install -e .` from a repo clone:
224
+ - ✅ Dev mode works automatically everywhere
225
+ - ✅ No manual configuration needed
226
+ - ✅ No need to be in repo directory
227
+
228
+ ### Initial Container Build
229
+
230
+ Build the container once initially:
231
+ ```bash
232
+ docker build -t tactus-sandbox:local -f tactus/docker/Dockerfile .
233
+ ```
234
+
235
+ After that, code changes are instantly available with dev mode enabled.
236
+
237
+ ### When Dev Mode Activates
238
+
239
+ You'll see this log message:
240
+ ```
241
+ INFO:tactus.sandbox.container_runner:[DEV MODE] Mounting live Tactus source from: /path/to/Tactus
242
+ ```
243
+
244
+ If it can't find the source (e.g., PyPI-installed Tactus), you'll see:
245
+ ```
246
+ WARNING:tactus.sandbox.container_runner:[DEV MODE] Could not locate Tactus source directory, using baked-in version
247
+ ```
248
+
249
+ ### When to Rebuild Container
250
+
251
+ Only rebuild when:
252
+ - Changing dependencies in `pyproject.toml`
253
+ - Updating base system packages in Dockerfile
254
+ - Dev mode cannot find your source (rare)
255
+
256
+ **Never rebuild for regular code changes** - that's what dev mode prevents.
257
+
258
+ ### CRITICAL: Auto-Rebuild on Code Changes
259
+
260
+ **IMPORTANT**: The sandbox automatically rebuilds when it detects changes to core Tactus files. The hash includes:
261
+ - `tactus/dspy/` - DSPy integration
262
+ - `tactus/adapters/` - Adapters
263
+ - `tactus/broker/` - Broker client (used by sandbox for API calls)
264
+ - `tactus/core/` - Core runtime
265
+ - `tactus/primitives/` - Primitives
266
+ - `tactus/sandbox/` - Sandbox infrastructure
267
+ - `tactus/stdlib/` - Standard library
268
+ - `tactus/docker/` - Docker configuration
269
+ - `pyproject.toml` - Dependencies
270
+
271
+ **Common Pitfall**: When you make changes to these files (especially `tactus/broker/client.py`), the sandbox image is automatically rebuilt on the next `tactus run` command. However, AI agents often forget this and run tests with outdated containers, leading to confusing errors like:
272
+ - `TypeError: BrokerClient.llm_chat() got an unexpected keyword argument 'tools'`
273
+ - New parameters not being recognized
274
+ - Changes seemingly not taking effect
275
+
276
+ **Solution**: After making changes to any of the above paths, the next `tactus run` will automatically rebuild the sandbox image with your new code. Just wait for the rebuild to complete before declaring victory. Look for log lines indicating the build is happening.
277
+
278
+ See [docs/development-mode.md](docs/development-mode.md) for complete details.
279
+
280
+ ### Docker Sandbox Defaults (CLI)
281
+
282
+ - The CLI requires Docker sandboxing by default. If Docker is unavailable, `tactus run` should error rather than silently running without isolation.
283
+ - Easy opt-out is explicit: `--no-sandbox` or `sandbox.enabled: false`.
284
+ - For PyPI installs without a local source tree, the sandbox image builds by installing the matching Tactus version from PyPI inside the container.
285
+
286
+ ## Tactus IDE Development
287
+
288
+ When working on the Tactus IDE:
289
+
290
+ ### Architecture: Hybrid Validation
291
+
292
+ The IDE uses a two-layer validation approach for optimal performance and user experience:
293
+
294
+ **Layer 1: TypeScript Parser (Client-Side)**
295
+ - Location: `tactus-ide/frontend/src/validation/`
296
+ - ANTLR-generated from same `LuaLexer.g4` and `LuaParser.g4` grammars as Python parser
297
+ - Purpose: Instant syntax validation (< 10ms)
298
+ - Runs in browser, no backend needed
299
+ - Provides immediate feedback as user types
300
+ - Works offline
301
+
302
+ **Layer 2: Python LSP (Backend)**
303
+ - Location: `tactus-ide/backend/`
304
+ - Uses existing `TactusValidator` from `tactus/validation/`
305
+ - Purpose: Semantic validation and intelligence
306
+ - Debounced (300ms) to reduce load
307
+ - Provides completions, hover, signature help
308
+ - Cross-reference validation
309
+
310
+ ### Why Hybrid?
311
+
312
+ 1. **Performance**: Syntax errors appear instantly (no network delay)
313
+ 2. **Offline**: Basic editing works without backend
314
+ 3. **Intelligence**: LSP adds semantic features when available
315
+ 4. **Scalability**: Reduces backend load (syntax is client-side)
316
+ 5. **User Experience**: No lag, no waiting for validation
317
+
318
+ ### Backend (Python LSP Server)
319
+ - Location: `tactus-ide/backend/`
320
+ - Uses existing `TactusValidator` from `tactus/validation/`
321
+ - Implements LSP protocol for language intelligence
322
+ - Flask server provides HTTP and WebSocket endpoints
323
+ - Focus on semantic validation, not syntax (handled client-side)
324
+
325
+ ### Frontend (React + Monaco)
326
+ - Location: `tactus-ide/frontend/`
327
+ - Monaco Editor for code editing (same as VS Code)
328
+ - TypeScript parser for instant syntax validation
329
+ - LSP client communicates with Python backend via WebSocket
330
+ - Can be packaged as Electron app
331
+
332
+ ### Testing IDE Features
333
+ - TypeScript parser: `cd tactus-ide/frontend && npm test`
334
+ - Backend LSP: `pytest tactus-ide/backend/` (when tests are added)
335
+ - Integration: Test with example `.tac` files
336
+ - Verify both layers work independently and together
337
+
338
+ ### Running the IDE
339
+
340
+ ```bash
341
+ # Terminal 1: Backend
342
+ cd tactus-ide/backend
343
+ pip install -r requirements.txt
344
+ python app.py
345
+
346
+ # Terminal 2: Frontend
347
+ cd tactus-ide/frontend
348
+ npm install
349
+ npm run dev
350
+ ```
351
+
352
+ ### Electron Packaging
353
+ The IDE is designed to run as a desktop application:
354
+ - Backend runs as subprocess or separate service
355
+ - Frontend uses Electron's IPC for file operations
356
+ - No dependency on browser-specific APIs
357
+ - Hybrid validation works in Electron environment
358
+
359
+ ### UI/UX Standards
360
+
361
+ When working on the Tactus IDE frontend:
362
+
363
+ - **UI Framework**: Use [Shadcn UI](https://ui.shadcn.com/) components for all UI elements
364
+ - **AI Components**: Use [AI SDK Elements](https://ai-sdk.dev/elements) components by default for AI-related UI patterns
365
+ - Confirmation dialogs: Use the [Confirmation component](https://ai-sdk.dev/elements/components/confirmation) pattern
366
+ - Follow AI SDK Elements patterns for conversational interfaces, prompts, and responses
367
+ - **Icons**: Always use [Lucide React](https://lucide.dev/) icons - **NEVER use emojis**
368
+ - **Styling**: Use Tailwind CSS with the existing design system
369
+ - **Theme**: Support both light and dark modes (colors are defined in CSS variables)
370
+ - **Accessibility**: Ensure proper ARIA labels and keyboard navigation
371
+
372
+ Example icon usage:
373
+ ```tsx
374
+ import { Bot, CircleCheck, ChevronDown } from 'lucide-react';
375
+
376
+ <Bot className="h-5 w-5 text-muted-foreground stroke-[2]" />
377
+ ```
378
+
379
+ ### CLI and Logging Standards
380
+
381
+ When working on CLI output, logging, or documentation:
382
+
383
+ - **NEVER use emojis** - Always use Unicode symbols instead
384
+ - **CLI Output**: Use box-drawing characters (│ ─ ├ └), arrows (→ ←), bullets (•), checkmarks (✓ ✗)
385
+ - **Logging**: Use plain text or Unicode symbols for status indicators
386
+ - **Documentation**: Use Unicode symbols or standard markdown formatting
387
+
388
+ Example symbols:
389
+ ```python
390
+ # Good - Unicode symbols
391
+ print("✓ Test passed")
392
+ print("✗ Test failed")
393
+ print("→ Processing...")
394
+ print("• Item 1")
395
+
396
+ # Bad - Emojis
397
+ print("✅ Test passed") # ❌ Don't use
398
+ print("🔥 Error") # ❌ Don't use
399
+ ```
400
+
401
+ ## Testing Requirements
402
+
403
+ Before declaring any change complete:
404
+
405
+ 1. **Run existing tests**: Use `pytest` to verify no regressions
406
+ 2. **Test the specific feature**: Create or update tests for new functionality
407
+ 3. **Verify imports**: Ensure all imports resolve correctly
408
+ 4. **Check for errors**: Run linters and fix any issues
409
+ 5. **Test parser changes**: If grammar modified, run `make test-parsers`
410
+
411
+ ### Understanding Testing vs. Evaluation
412
+
413
+ Tactus has two distinct testing mechanisms that serve different purposes:
414
+
415
+ **Behavior Specifications (`specifications`):**
416
+ - Test the **Lua orchestration logic** (control flow, state management, coordination)
417
+ - Use Gherkin syntax (Given/When/Then)
418
+ - Run with `tactus test`
419
+ - Can use mocks to isolate logic from LLM behavior
420
+ - Fast and deterministic
421
+ - Example: Testing that a multi-agent workflow delegates correctly
422
+
423
+ **Evaluations (`evaluations`):**
424
+ - Test the **LLM's output quality** (accuracy, consistency, helpfulness)
425
+ - Use Pydantic AI Evals framework
426
+ - Run with `tactus eval`
427
+ - Use real API calls (not mocked)
428
+ - Slower and probabilistic
429
+ - Example: Testing that an agent generates high-quality greetings
430
+
431
+ **When to use which:**
432
+ - **Complex orchestration** → Use `specifications` to test the logic
433
+ - **Simple LLM wrapper** → Use `evaluations` to test the output
434
+ - **Both** → Use specifications for fast feedback on logic, evaluations for quality metrics
435
+
436
+ **Key principle:** Don't mock LLMs in evaluations—you're testing the model's actual behavior. Do mock them in specifications when you're testing orchestration logic, not intelligence.
437
+
438
+ ## Strict Behavior-Driven Development Policy
439
+
440
+ - **Specifications first**: every new behavior begins with a failing `features/*.feature` scenario before implementation starts.
441
+ - **Single vocabulary**: use the established domain terms consistently in specs so the language stays stable over time.
442
+ - **No “just tests”**: behavior specifications are architecture; they define what the system *is* rather than merely verifying it.
443
+ - **Specification completeness**: every surface behavior must have a specification. If a behavior cannot be expressed cleanly, it should be removed or treated as a hard error.
444
+ - **100% coverage mandate**: every line of code must be exercised by BDD scenarios. Partial coverage is unacceptable.
445
+
446
+ ## Working Backwards (Product-First Workflow)
447
+
448
+ - Draft a PR-FAQ for every new feature before coding so the product intent is explicit and the scope is understood.
449
+ - Once the PR-FAQ is approved, author the README/Sphinx docs as if the feature already exists—this drives implementation clarity and discoverability.
450
+ - Write BDD specifications that mirror and reinforce the documentation, then implement to match those scenarios exactly.
451
+ - Finish with rigorous quality gates: documentation, clear naming, validation, and the 100% coverage requirement.
452
+
453
+ ## Documentation as a Runnable Textbook
454
+
455
+ - Treat documentation as narrative teaching material: explanations must be paired with runnable examples using the ships-included demo data.
456
+ - Prefer elementary, educational examples that build progressively toward advanced techniques.
457
+ - Every documented concept needs an executable walkthrough so users can learn by doing.
458
+ - Keep docs tightly aligned with actual commands, scripts, and outputs.
459
+
460
+ ## One Official Way
461
+
462
+ - No backwards compatibility baggage or dual APIs—there is a single authoritative approach for each domain concept.
463
+ - Avoid hidden fallbacks; prefer explicit errors that surface misconfiguration or invalid states.
464
+ - Use the shared domain vocabulary across code, documentation, and specifications to keep the model clean and durable.
465
+
466
+ ## Pydantic-First Domain Modeling
467
+
468
+ - Represent domain constructs that cross boundaries (configs, APIs, tool schemas, CLI output) with Pydantic models.
469
+ - Surface validation errors as user-friendly messages, especially in the CLI and tool contexts.
470
+
471
+ ## Code Quality
472
+
473
+ - **No line-level comments** unless capturing a high-level idea that cannot be conveyed through naming; avoid running commentary.
474
+ - Use Sphinx-style docstrings with reStructuredText field lists (`:param`, `:type`, `:return`, `:rtype`, `:raises`, `:ivar`, `:vartype`) on public APIs.
475
+ - Keep implementations small, readable, and consistent with existing patterns; add logging judiciously to aid debugging.
476
+ - Emphasize intent through specs, docstrings, validation, and typing rather than through implementation noise.
477
+ - Black and Ruff compliance is mandatory; documentation tooling must support docstring generation.
478
+ - **Readability-first mandate**: prioritize clarity over brevity. Prefer long, descriptive names and explicit structure so code reads like precise pseudocode.
479
+ - **Expert judgment encouraged**: use your best professional knowledge about readability (Python best practices and general software design) to improve clarity, even when it requires structural refactors that preserve behavior.
480
+ - **Over-clarity bias**: if there is a tradeoff, choose the option that improves explicitness, transparency, and maintainability, especially at the cost of extra lines or more verbose naming.
481
+
482
+ ### Code Quality Optimization Loop (Required)
483
+
484
+ Repeat this loop for each iteration of readability improvements:
485
+
486
+ 1. Identify readability improvements (prioritize high-impact or high-traffic code paths).
487
+ 2. Make the largest safe readability refactor you can without changing behavior.
488
+ 3. Run the explicit test commands first (match the Pre-Commit Checklist flags):
489
+ - `pytest tests/ -x -k "not test_real_execution"`
490
+ - `behave --summary`
491
+ 4. Run the full local quality gate **including Ruff and Black** (do not skip):
492
+ - `ruff check .`
493
+ - `black tactus tactus-ide/backend features/steps tests`
494
+ - `black tactus tactus-ide/backend features/steps tests --check`
495
+ 5. Run the full coverage suite and regenerate reports:
496
+ - `scripts/run_coverage.sh`
497
+ 6. If anything fails, fix immediately, then repeat steps 3–5 before continuing.
498
+
499
+ ## Using the CLI for Development
500
+
501
+ The Tactus CLI provides powerful tools for developing and debugging agents.
502
+
503
+ ### Formatting `.tac` Files
504
+
505
+ Use `tactus format` to automatically reindent and normalize whitespace in `.tac` files.
506
+
507
+ ### Running and Debugging Procedures
508
+
509
+ When you run a procedure with `tactus run`, you get real-time visibility into what's happening:
510
+
511
+ ```bash
512
+ tactus run examples/04-basics-simple-agent.tac
513
+ ```
514
+
515
+ Output shows:
516
+ - **Agent activity**: See when agents start processing and complete
517
+ - **Tool calls**: See what tools agents call with full arguments and results
518
+ - **Agent responses**: See the actual text/reasoning from the LLM
519
+ - **Cost tracking**: Monitor tokens and costs for each LLM call
520
+ - **Summary**: Final iteration count, tools used, total cost
521
+
522
+ Example output:
523
+ ```
524
+ Running procedure: 04-basics-simple-agent.tac (lua format)
525
+
526
+ → Agent greeter: Waiting for response...
527
+ Hello! I'll help you with that task.
528
+ ✓ Agent greeter: Completed 1204ms
529
+ → Tool done
530
+ Args: {
531
+ "reason": "Hello there! I hope you're having a wonderful day."
532
+ }
533
+ Result: Done
534
+ $ Cost greeter: $0.001267 (354 tokens, openai:gpt-4o, 1204ms)
535
+
536
+ ✓ Procedure completed: 1 iterations, 1 tools used
537
+
538
+ $ Cost Summary
539
+ Total Cost: $0.001267
540
+ Total Tokens: 354
541
+ ```
542
+
543
+ ### Inspecting Procedure Structure
544
+
545
+ Use `tactus info` to view procedure metadata without running it:
546
+
547
+ ```bash
548
+ tactus info examples/04-basics-simple-agent.tac
549
+ ```
550
+
551
+ This shows:
552
+ - **Parameters**: What inputs the procedure expects
553
+ - **Outputs**: What results it returns
554
+ - **Agents**: Configuration for each agent (provider, model, tools, prompt preview)
555
+ - **Specifications**: Count of BDD test scenarios
556
+
557
+ This is useful for:
558
+ - Understanding what a procedure does before running it
559
+ - Checking agent configurations
560
+ - Verifying tool availability
561
+ - Documentation and code review
562
+
563
+ ### Debugging Agent Issues
564
+
565
+ If an agent doesn't work as expected, the CLI output helps you diagnose:
566
+
567
+ 1. **Agent never calls done tool**: Look for tool call events (→ Tool). If you don't see any, check:
568
+ - Does the agent definition include `tools = {"done"}`?
569
+ - Does the system prompt mention calling the done tool?
570
+
571
+ 2. **Agent calls wrong tool**: Tool call events show arguments. Check:
572
+ - Are tool names correct in the agent config?
573
+ - Does the system prompt clearly explain which tools to use?
574
+
575
+ 3. **High costs/token usage**: Cost events show per-call breakdown. Look for:
576
+ - Agents making too many turns (increase max_turns or improve prompts)
577
+ - Large context windows (check message history filtering)
578
+ - Repeated tool calls (agent might be stuck in a loop)
579
+
580
+ 4. **Slow execution**: Timing information shows where delays occur:
581
+ - Agent turns show duration (e.g., "1204ms")
582
+ - Multiple slow turns indicate LLM performance issues
583
+ - Consider using faster models for simple tasks
584
+
585
+ ### CLI Output Format
586
+
587
+ The CLI uses Unicode symbols (not emojis) for compatibility:
588
+
589
+ - `→` Agent or tool activity starting
590
+ - `✓` Successful completion
591
+ - `✗` Error or failure
592
+ - `$` Cost information
593
+ - `•` List items
594
+
595
+ All output is plain text with optional ANSI colors for readability in terminals.
596
+
597
+ ## Project Status
598
+
599
+ Tactus is a standalone workflow engine extracted from a larger project. It is:
600
+ - In active development
601
+ - Missing some features (noted in code with TODO comments)
602
+ - Subject to API changes
603
+ - Not yet suitable for production use
604
+
605
+ When working on Tactus, focus on:
606
+ - Making incremental improvements
607
+ - Fixing bugs and issues
608
+ - Adding missing functionality
609
+ - Improving documentation
610
+ - Writing and maintaining tests