tactus 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. tactus-0.5.0/.claude/agents.md +47 -0
  2. tactus-0.5.0/.github/workflows/desktop-release.yml +83 -0
  3. tactus-0.5.0/.github/workflows/release.yml +86 -0
  4. tactus-0.5.0/.gitignore +39 -0
  5. tactus-0.5.0/AGENTS.md +221 -0
  6. tactus-0.5.0/CHANGELOG.md +73 -0
  7. tactus-0.5.0/IMPLEMENTATION.md +923 -0
  8. tactus-0.5.0/LICENSE +21 -0
  9. tactus-0.5.0/Makefile +91 -0
  10. tactus-0.5.0/PKG-INFO +915 -0
  11. tactus-0.5.0/README.md +869 -0
  12. tactus-0.5.0/RUNTIME_INTEGRATION_SUMMARY.md +359 -0
  13. tactus-0.5.0/SPECIFICATION.md +2279 -0
  14. tactus-0.5.0/SPEC_MISMATCHES.md +256 -0
  15. tactus-0.5.0/behave.ini +29 -0
  16. tactus-0.5.0/docs/BDD_TESTING.md +546 -0
  17. tactus-0.5.0/examples/.tac/config.yml.example +2 -0
  18. tactus-0.5.0/examples/README.md +171 -0
  19. tactus-0.5.0/examples/complete-bdd-example.tac +138 -0
  20. tactus-0.5.0/examples/hello-world.tac +64 -0
  21. tactus-0.5.0/examples/message-history-demo.tac +77 -0
  22. tactus-0.5.0/examples/mock-config.json +27 -0
  23. tactus-0.5.0/examples/multi-model.tac +70 -0
  24. tactus-0.5.0/examples/session-demo.tac +77 -0
  25. tactus-0.5.0/examples/simple-agent.tac +68 -0
  26. tactus-0.5.0/examples/simple-no-agent.tac +83 -0
  27. tactus-0.5.0/examples/state-management.tac +66 -0
  28. tactus-0.5.0/examples/structured-output-demo.tac +79 -0
  29. tactus-0.5.0/examples/with-bdd-tests-working.tac +102 -0
  30. tactus-0.5.0/examples/with-parameters.tac +65 -0
  31. tactus-0.5.0/features/01_state_management.feature +43 -0
  32. tactus-0.5.0/features/02_checkpointing.feature +37 -0
  33. tactus-0.5.0/features/03_human_in_the_loop.feature +50 -0
  34. tactus-0.5.0/features/04_control_flow.feature +39 -0
  35. tactus-0.5.0/features/05_tool_integration.feature +43 -0
  36. tactus-0.5.0/features/06_retry_logic.feature +44 -0
  37. tactus-0.5.0/features/07_file_operations.feature +65 -0
  38. tactus-0.5.0/features/08_agent_primitives.feature +66 -0
  39. tactus-0.5.0/features/09_workflow_execution.feature +109 -0
  40. tactus-0.5.0/features/10_lua_integration.feature +104 -0
  41. tactus-0.5.0/features/11_storage_backends.feature +62 -0
  42. tactus-0.5.0/features/12_json_operations.feature +95 -0
  43. tactus-0.5.0/features/13_logging.feature +68 -0
  44. tactus-0.5.0/features/14_stage_and_step_tracking.feature +73 -0
  45. tactus-0.5.0/features/15_procedure_calls.feature +79 -0
  46. tactus-0.5.0/features/16_session_management.feature +85 -0
  47. tactus-0.5.0/features/17_lua_dsl_validation.feature +150 -0
  48. tactus-0.5.0/features/18_example_procedures.feature +48 -0
  49. tactus-0.5.0/features/19_ide_server.feature +39 -0
  50. tactus-0.5.0/features/20_parameters.feature +162 -0
  51. tactus-0.5.0/features/21_outputs.feature +169 -0
  52. tactus-0.5.0/features/23_prompts.feature +97 -0
  53. tactus-0.5.0/features/24_bdd_specifications.feature +142 -0
  54. tactus-0.5.0/features/25_bdd_custom_steps.feature +109 -0
  55. tactus-0.5.0/features/26_bdd_evaluation.feature +121 -0
  56. tactus-0.5.0/features/27_default_settings.feature +101 -0
  57. tactus-0.5.0/features/28_custom_prompts.feature +124 -0
  58. tactus-0.5.0/features/29_execution_settings.feature +102 -0
  59. tactus-0.5.0/features/30_session_filters.feature +117 -0
  60. tactus-0.5.0/features/31_matchers.feature +106 -0
  61. tactus-0.5.0/features/32_result_object.feature +34 -0
  62. tactus-0.5.0/features/33_output_type.feature +31 -0
  63. tactus-0.5.0/features/documentation/IDE_SERVER_BEHAVIOR.md +169 -0
  64. tactus-0.5.0/features/documentation/Lua DSL/IMPLEMENTATION_STATUS.md +246 -0
  65. tactus-0.5.0/features/documentation/Lua DSL/PLAN.md +238 -0
  66. tactus-0.5.0/features/documentation/Lua DSL/README.md +1067 -0
  67. tactus-0.5.0/features/environment.py +78 -0
  68. tactus-0.5.0/features/steps/agent_primitives_steps.py +387 -0
  69. tactus-0.5.0/features/steps/checkpointing_steps.py +161 -0
  70. tactus-0.5.0/features/steps/control_flow_steps.py +130 -0
  71. tactus-0.5.0/features/steps/example_procedures_steps.py +134 -0
  72. tactus-0.5.0/features/steps/file_operations_steps.py +210 -0
  73. tactus-0.5.0/features/steps/human_in_the_loop_steps.py +313 -0
  74. tactus-0.5.0/features/steps/ide_server_steps.py +426 -0
  75. tactus-0.5.0/features/steps/json_operations_steps.py +255 -0
  76. tactus-0.5.0/features/steps/logging_steps.py +263 -0
  77. tactus-0.5.0/features/steps/lua_dsl_validation_steps.py +394 -0
  78. tactus-0.5.0/features/steps/lua_integration_steps.py +188 -0
  79. tactus-0.5.0/features/steps/procedure_calls_steps.py +289 -0
  80. tactus-0.5.0/features/steps/result_and_output_steps.py +199 -0
  81. tactus-0.5.0/features/steps/retry_logic_steps.py +249 -0
  82. tactus-0.5.0/features/steps/session_management_steps.py +302 -0
  83. tactus-0.5.0/features/steps/stage_tracking_steps.py +270 -0
  84. tactus-0.5.0/features/steps/state_management_steps.py +136 -0
  85. tactus-0.5.0/features/steps/storage_backend_steps.py +343 -0
  86. tactus-0.5.0/features/steps/support/__init__.py +19 -0
  87. tactus-0.5.0/features/steps/support/harnesses.py +517 -0
  88. tactus-0.5.0/features/steps/tool_integration_steps.py +184 -0
  89. tactus-0.5.0/features/steps/workflow_execution_steps.py +440 -0
  90. tactus-0.5.0/pyproject.toml +105 -0
  91. tactus-0.5.0/start-web-ide.sh +30 -0
  92. tactus-0.5.0/tactus/__init__.py +49 -0
  93. tactus-0.5.0/tactus/adapters/__init__.py +9 -0
  94. tactus-0.5.0/tactus/adapters/cli_hitl.py +189 -0
  95. tactus-0.5.0/tactus/adapters/cli_log.py +108 -0
  96. tactus-0.5.0/tactus/adapters/file_storage.py +202 -0
  97. tactus-0.5.0/tactus/adapters/ide_log.py +62 -0
  98. tactus-0.5.0/tactus/adapters/mcp.py +289 -0
  99. tactus-0.5.0/tactus/adapters/memory.py +119 -0
  100. tactus-0.5.0/tactus/cli/__init__.py +7 -0
  101. tactus-0.5.0/tactus/cli/app.py +846 -0
  102. tactus-0.5.0/tactus/cli/commands/__init__.py +0 -0
  103. tactus-0.5.0/tactus/core/__init__.py +32 -0
  104. tactus-0.5.0/tactus/core/dsl_stubs.py +260 -0
  105. tactus-0.5.0/tactus/core/exceptions.py +66 -0
  106. tactus-0.5.0/tactus/core/execution_context.py +225 -0
  107. tactus-0.5.0/tactus/core/lua_sandbox.py +304 -0
  108. tactus-0.5.0/tactus/core/message_history_manager.py +236 -0
  109. tactus-0.5.0/tactus/core/output_validator.py +198 -0
  110. tactus-0.5.0/tactus/core/registry.py +344 -0
  111. tactus-0.5.0/tactus/core/runtime.py +1130 -0
  112. tactus-0.5.0/tactus/core/template_resolver.py +142 -0
  113. tactus-0.5.0/tactus/core/yaml_parser.py +301 -0
  114. tactus-0.5.0/tactus/ide/__init__.py +9 -0
  115. tactus-0.5.0/tactus/ide/server.py +1158 -0
  116. tactus-0.5.0/tactus/primitives/__init__.py +48 -0
  117. tactus-0.5.0/tactus/primitives/agent.py +432 -0
  118. tactus-0.5.0/tactus/primitives/control.py +168 -0
  119. tactus-0.5.0/tactus/primitives/file.py +195 -0
  120. tactus-0.5.0/tactus/primitives/human.py +342 -0
  121. tactus-0.5.0/tactus/primitives/json.py +189 -0
  122. tactus-0.5.0/tactus/primitives/log.py +183 -0
  123. tactus-0.5.0/tactus/primitives/message_history.py +157 -0
  124. tactus-0.5.0/tactus/primitives/result.py +207 -0
  125. tactus-0.5.0/tactus/primitives/retry.py +155 -0
  126. tactus-0.5.0/tactus/primitives/stage.py +202 -0
  127. tactus-0.5.0/tactus/primitives/state.py +133 -0
  128. tactus-0.5.0/tactus/primitives/step.py +132 -0
  129. tactus-0.5.0/tactus/primitives/tool.py +163 -0
  130. tactus-0.5.0/tactus/protocols/__init__.py +38 -0
  131. tactus-0.5.0/tactus/protocols/chat_recorder.py +81 -0
  132. tactus-0.5.0/tactus/protocols/config.py +102 -0
  133. tactus-0.5.0/tactus/protocols/hitl.py +71 -0
  134. tactus-0.5.0/tactus/protocols/log_handler.py +27 -0
  135. tactus-0.5.0/tactus/protocols/models.py +186 -0
  136. tactus-0.5.0/tactus/protocols/storage.py +151 -0
  137. tactus-0.5.0/tactus/providers/__init__.py +12 -0
  138. tactus-0.5.0/tactus/providers/base.py +92 -0
  139. tactus-0.5.0/tactus/providers/bedrock.py +116 -0
  140. tactus-0.5.0/tactus/providers/openai.py +98 -0
  141. tactus-0.5.0/tactus/testing/README.md +275 -0
  142. tactus-0.5.0/tactus/testing/__init__.py +61 -0
  143. tactus-0.5.0/tactus/testing/behave_integration.py +333 -0
  144. tactus-0.5.0/tactus/testing/context.py +318 -0
  145. tactus-0.5.0/tactus/testing/evaluation_runner.py +220 -0
  146. tactus-0.5.0/tactus/testing/events.py +94 -0
  147. tactus-0.5.0/tactus/testing/gherkin_parser.py +135 -0
  148. tactus-0.5.0/tactus/testing/mock_agent.py +69 -0
  149. tactus-0.5.0/tactus/testing/mock_hitl.py +139 -0
  150. tactus-0.5.0/tactus/testing/mock_tools.py +122 -0
  151. tactus-0.5.0/tactus/testing/models.py +115 -0
  152. tactus-0.5.0/tactus/testing/steps/__init__.py +13 -0
  153. tactus-0.5.0/tactus/testing/steps/builtin.py +614 -0
  154. tactus-0.5.0/tactus/testing/steps/custom.py +69 -0
  155. tactus-0.5.0/tactus/testing/steps/registry.py +68 -0
  156. tactus-0.5.0/tactus/testing/test_runner.py +278 -0
  157. tactus-0.5.0/tactus/utils/__init__.py +1 -0
  158. tactus-0.5.0/tactus/utils/cost_calculator.py +72 -0
  159. tactus-0.5.0/tactus/utils/model_pricing.py +132 -0
  160. tactus-0.5.0/tactus/validation/LuaLexerBase.py +67 -0
  161. tactus-0.5.0/tactus/validation/LuaParserBase.py +24 -0
  162. tactus-0.5.0/tactus/validation/README.md +219 -0
  163. tactus-0.5.0/tactus/validation/__init__.py +7 -0
  164. tactus-0.5.0/tactus/validation/error_listener.py +21 -0
  165. tactus-0.5.0/tactus/validation/generated/LuaLexer.interp +231 -0
  166. tactus-0.5.0/tactus/validation/generated/LuaLexer.py +5549 -0
  167. tactus-0.5.0/tactus/validation/generated/LuaLexer.tokens +124 -0
  168. tactus-0.5.0/tactus/validation/generated/LuaLexerBase.py +67 -0
  169. tactus-0.5.0/tactus/validation/generated/LuaParser.interp +173 -0
  170. tactus-0.5.0/tactus/validation/generated/LuaParser.py +6465 -0
  171. tactus-0.5.0/tactus/validation/generated/LuaParser.tokens +124 -0
  172. tactus-0.5.0/tactus/validation/generated/LuaParserBase.py +24 -0
  173. tactus-0.5.0/tactus/validation/generated/LuaParserVisitor.py +119 -0
  174. tactus-0.5.0/tactus/validation/generated/__init__.py +7 -0
  175. tactus-0.5.0/tactus/validation/grammar/Lua.g4 +1439 -0
  176. tactus-0.5.0/tactus/validation/grammar/LuaLexer.g4 +123 -0
  177. tactus-0.5.0/tactus/validation/grammar/LuaParser.g4 +178 -0
  178. tactus-0.5.0/tactus/validation/semantic_visitor.py +342 -0
  179. tactus-0.5.0/tactus/validation/validator.py +157 -0
  180. tactus-0.5.0/tactus-desktop/.gitignore +7 -0
  181. tactus-0.5.0/tactus-desktop/README.md +88 -0
  182. tactus-0.5.0/tactus-desktop/RUN_ELECTRON.md +86 -0
  183. tactus-0.5.0/tactus-desktop/SETUP_COMPLETE.md +181 -0
  184. tactus-0.5.0/tactus-desktop/backend/hook-lupa.py +27 -0
  185. tactus-0.5.0/tactus-desktop/backend/tactus_backend.spec +101 -0
  186. tactus-0.5.0/tactus-desktop/package-lock.json +4097 -0
  187. tactus-0.5.0/tactus-desktop/package.json +78 -0
  188. tactus-0.5.0/tactus-desktop/preload/preload.ts +19 -0
  189. tactus-0.5.0/tactus-desktop/preload/tsconfig.json +11 -0
  190. tactus-0.5.0/tactus-desktop/rebuild-and-test.sh +35 -0
  191. tactus-0.5.0/tactus-desktop/scripts/build-backend.js +88 -0
  192. tactus-0.5.0/tactus-desktop/scripts/build-frontend.js +91 -0
  193. tactus-0.5.0/tactus-desktop/src/backend-manager.ts +150 -0
  194. tactus-0.5.0/tactus-desktop/src/main.ts +119 -0
  195. tactus-0.5.0/tactus-desktop/src/menu.ts +116 -0
  196. tactus-0.5.0/tactus-desktop/tsconfig.json +18 -0
  197. tactus-0.5.0/tactus-ide/ARCHITECTURE.md +510 -0
  198. tactus-0.5.0/tactus-ide/CHANGELOG.md +84 -0
  199. tactus-0.5.0/tactus-ide/DEV_MODE.md +81 -0
  200. tactus-0.5.0/tactus-ide/IDE_OVERHAUL_SUMMARY.md +159 -0
  201. tactus-0.5.0/tactus-ide/QUICK_START.md +199 -0
  202. tactus-0.5.0/tactus-ide/README.md +236 -0
  203. tactus-0.5.0/tactus-ide/RESTART_INSTRUCTIONS.md +56 -0
  204. tactus-0.5.0/tactus-ide/TROUBLESHOOTING.md +423 -0
  205. tactus-0.5.0/tactus-ide/backend/README.md +87 -0
  206. tactus-0.5.0/tactus-ide/backend/app.py +806 -0
  207. tactus-0.5.0/tactus-ide/backend/app_simple.py +140 -0
  208. tactus-0.5.0/tactus-ide/backend/events.py +59 -0
  209. tactus-0.5.0/tactus-ide/backend/logging_capture.py +193 -0
  210. tactus-0.5.0/tactus-ide/backend/lsp_server.py +187 -0
  211. tactus-0.5.0/tactus-ide/backend/requirements.txt +17 -0
  212. tactus-0.5.0/tactus-ide/backend/tactus_lsp_handler.py +291 -0
  213. tactus-0.5.0/tactus-ide/backend/test_lsp_server.py +226 -0
  214. tactus-0.5.0/tactus-ide/dev.sh +159 -0
  215. tactus-0.5.0/tactus-ide/frontend/README.md +125 -0
  216. tactus-0.5.0/tactus-ide/frontend/demo.ts +187 -0
  217. tactus-0.5.0/tactus-ide/frontend/index.html +19 -0
  218. tactus-0.5.0/tactus-ide/frontend/jest.config.js +11 -0
  219. tactus-0.5.0/tactus-ide/frontend/package-lock.json +7006 -0
  220. tactus-0.5.0/tactus-ide/frontend/package.json +52 -0
  221. tactus-0.5.0/tactus-ide/frontend/postcss.config.js +10 -0
  222. tactus-0.5.0/tactus-ide/frontend/src/App.tsx +569 -0
  223. tactus-0.5.0/tactus-ide/frontend/src/Editor.tsx +236 -0
  224. tactus-0.5.0/tactus-ide/frontend/src/LSPClient.ts +201 -0
  225. tactus-0.5.0/tactus-ide/frontend/src/LSPClientHTTP.ts +199 -0
  226. tactus-0.5.0/tactus-ide/frontend/src/TactusLanguage.ts +181 -0
  227. tactus-0.5.0/tactus-ide/frontend/src/commands/registry.ts +140 -0
  228. tactus-0.5.0/tactus-ide/frontend/src/components/FileTree.tsx +186 -0
  229. tactus-0.5.0/tactus-ide/frontend/src/components/ResizeHandle.tsx +65 -0
  230. tactus-0.5.0/tactus-ide/frontend/src/components/ResultsSidebar.tsx +188 -0
  231. tactus-0.5.0/tactus-ide/frontend/src/components/events/CostEventComponent.tsx +215 -0
  232. tactus-0.5.0/tactus-ide/frontend/src/components/events/EvaluationEventComponent.tsx +106 -0
  233. tactus-0.5.0/tactus-ide/frontend/src/components/events/EventRenderer.tsx +60 -0
  234. tactus-0.5.0/tactus-ide/frontend/src/components/events/ExecutionEventComponent.tsx +66 -0
  235. tactus-0.5.0/tactus-ide/frontend/src/components/events/ExecutionSummaryEventComponent.tsx +118 -0
  236. tactus-0.5.0/tactus-ide/frontend/src/components/events/LogCluster.tsx +78 -0
  237. tactus-0.5.0/tactus-ide/frontend/src/components/events/LogEventComponent.tsx +65 -0
  238. tactus-0.5.0/tactus-ide/frontend/src/components/events/OutputEventComponent.tsx +20 -0
  239. tactus-0.5.0/tactus-ide/frontend/src/components/events/TestEventComponent.tsx +161 -0
  240. tactus-0.5.0/tactus-ide/frontend/src/components/events/ValidationEventComponent.tsx +41 -0
  241. tactus-0.5.0/tactus-ide/frontend/src/components/ui/ai/conversation.tsx +52 -0
  242. tactus-0.5.0/tactus-ide/frontend/src/components/ui/ai/message.tsx +54 -0
  243. tactus-0.5.0/tactus-ide/frontend/src/components/ui/ai/prompt-input.tsx +104 -0
  244. tactus-0.5.0/tactus-ide/frontend/src/components/ui/button.tsx +61 -0
  245. tactus-0.5.0/tactus-ide/frontend/src/components/ui/dialog.tsx +124 -0
  246. tactus-0.5.0/tactus-ide/frontend/src/components/ui/input.tsx +29 -0
  247. tactus-0.5.0/tactus-ide/frontend/src/components/ui/menubar.tsx +238 -0
  248. tactus-0.5.0/tactus-ide/frontend/src/components/ui/scroll-area.tsx +50 -0
  249. tactus-0.5.0/tactus-ide/frontend/src/components/ui/separator.tsx +33 -0
  250. tactus-0.5.0/tactus-ide/frontend/src/hooks/useEventStream.ts +93 -0
  251. tactus-0.5.0/tactus-ide/frontend/src/index.css +77 -0
  252. tactus-0.5.0/tactus-ide/frontend/src/lib/utils.ts +10 -0
  253. tactus-0.5.0/tactus-ide/frontend/src/main.tsx +57 -0
  254. tactus-0.5.0/tactus-ide/frontend/src/types/events.ts +199 -0
  255. tactus-0.5.0/tactus-ide/frontend/src/utils/exportForAI.ts +235 -0
  256. tactus-0.5.0/tactus-ide/frontend/src/validation/TactusValidator.ts +257 -0
  257. tactus-0.5.0/tactus-ide/frontend/src/validation/generated/LuaParser.interp +173 -0
  258. tactus-0.5.0/tactus-ide/frontend/src/validation/generated/LuaParser.tokens +124 -0
  259. tactus-0.5.0/tactus-ide/frontend/src/validation/types.ts +115 -0
  260. tactus-0.5.0/tactus-ide/frontend/src/vite-env.d.ts +16 -0
  261. tactus-0.5.0/tactus-ide/frontend/tailwind.config.js +71 -0
  262. tactus-0.5.0/tactus-ide/frontend/tsconfig.json +38 -0
  263. tactus-0.5.0/tactus-ide/frontend/tsconfig.node.json +17 -0
  264. tactus-0.5.0/tactus-ide/frontend/vite.config.ts +28 -0
  265. tactus-0.5.0/tactus-ide/package.json +19 -0
  266. tactus-0.5.0/tactus-ide/start-dev.sh +73 -0
  267. tactus-0.5.0/tests/__init__.py +0 -0
  268. tactus-0.5.0/tests/adapters/__init__.py +0 -0
  269. tactus-0.5.0/tests/cli/__init__.py +3 -0
  270. tactus-0.5.0/tests/cli/test_cli.py +126 -0
  271. tactus-0.5.0/tests/conftest.py +65 -0
  272. tactus-0.5.0/tests/core/__init__.py +0 -0
  273. tactus-0.5.0/tests/mocks/__init__.py +7 -0
  274. tactus-0.5.0/tests/mocks/llm_mocks.py +251 -0
  275. tactus-0.5.0/tests/primitives/test_retry_primitive.py +33 -0
  276. tactus-0.5.0/tests/primitives/test_state_primitive.py +24 -0
  277. tactus-0.5.0/tests/primitives/test_tool_primitive.py +12 -0
  278. tactus-0.5.0/tests/testing/__init__.py +1 -0
  279. tactus-0.5.0/tests/testing/test_e2e.py +179 -0
  280. tactus-0.5.0/tests/testing/test_gherkin_parser.py +115 -0
  281. tactus-0.5.0/tests/testing/test_integration.py +118 -0
  282. tactus-0.5.0/tests/testing/test_models.py +161 -0
  283. tactus-0.5.0/tests/testing/test_runtime_integration.py +247 -0
  284. tactus-0.5.0/tests/testing/test_step_registry.py +130 -0
  285. tactus-0.5.0/tests/validation/__init__.py +1 -0
@@ -0,0 +1,47 @@
1
+ # AI Agent Guidelines
2
+
3
+ ## Semantic Release & Versioning
4
+
5
+ This project uses **semantic-release** for automated versioning and releases.
6
+
7
+ ### Commit Message Format (Conventional Commits)
8
+
9
+ - `feat:` → MINOR version bump (0.1.0 → 0.2.0) - use sparingly
10
+ - `fix:` → PATCH version bump (0.1.0 → 0.1.1)
11
+ - `docs:`, `test:`, `chore:`, `refactor:`, `style:` → No version bump
12
+
13
+ ### Important: Version Escalation Awareness
14
+
15
+ **Do NOT use `feat:` for every new feature.** Be conscious of version escalation:
16
+
17
+ - Group related changes into meaningful releases
18
+ - Use `chore:` or `refactor:` for internal improvements that don't add user-facing features
19
+ - Reserve `feat:` for significant new capabilities that warrant a minor version bump
20
+ - Consider if the change truly adds value that users should know about in the changelog
21
+
22
+ ### Examples
23
+
24
+ **Good:**
25
+ ```
26
+ feat: add AWS Bedrock provider support
27
+ fix: handle missing config file gracefully
28
+ chore: update dependencies
29
+ refactor: simplify error handling logic
30
+ ```
31
+
32
+ **Avoid:**
33
+ ```
34
+ feat: add helper function # Use chore:
35
+ feat: improve internal logic # Use refactor:
36
+ feat: add logging statement # Use chore:
37
+ ```
38
+
39
+ ### Release Process
40
+
41
+ Releases happen automatically on push to main. The CI runs:
42
+ 1. Linting (ruff), formatting (black)
43
+ 2. Tests (pytest + behave, excluding integration tests)
44
+ 3. Semantic-release (if tests pass)
45
+ 4. Publishes to PyPI
46
+
47
+ Monitor with: `gh run watch`
@@ -0,0 +1,83 @@
1
+ name: Desktop Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'desktop-v*'
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ matrix:
13
+ os: [macos-latest, windows-latest, ubuntu-latest]
14
+
15
+ steps:
16
+ - name: Checkout code
17
+ uses: actions/checkout@v3
18
+
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v3
21
+ with:
22
+ node-version: '18'
23
+
24
+ - name: Setup Python
25
+ uses: actions/setup-python@v4
26
+ with:
27
+ python-version: '3.11'
28
+
29
+ - name: Install Python dependencies
30
+ run: |
31
+ python -m pip install --upgrade pip
32
+ pip install pyinstaller
33
+ pip install -e .
34
+
35
+ - name: Install Node dependencies (Desktop)
36
+ working-directory: ./tactus-desktop
37
+ run: npm install
38
+
39
+ - name: Build Frontend
40
+ working-directory: ./tactus-desktop
41
+ run: npm run build:frontend
42
+
43
+ - name: Build Backend
44
+ working-directory: ./tactus-desktop
45
+ run: npm run build:backend
46
+
47
+ - name: Build Electron
48
+ working-directory: ./tactus-desktop
49
+ run: npm run build
50
+
51
+ - name: Package Application (macOS)
52
+ if: matrix.os == 'macos-latest'
53
+ working-directory: ./tactus-desktop
54
+ run: npm run package:mac
55
+ env:
56
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57
+
58
+ - name: Package Application (Windows)
59
+ if: matrix.os == 'windows-latest'
60
+ working-directory: ./tactus-desktop
61
+ run: npm run package:win
62
+ env:
63
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
64
+
65
+ - name: Package Application (Linux)
66
+ if: matrix.os == 'ubuntu-latest'
67
+ working-directory: ./tactus-desktop
68
+ run: npm run package:linux
69
+ env:
70
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
71
+
72
+ - name: Upload artifacts
73
+ uses: actions/upload-artifact@v3
74
+ with:
75
+ name: ${{ matrix.os }}-build
76
+ path: tactus-desktop/dist-electron/*
77
+
78
+ - name: Release
79
+ uses: softprops/action-gh-release@v1
80
+ with:
81
+ files: tactus-desktop/dist-electron/*
82
+ env:
83
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,86 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+
8
+ permissions:
9
+ contents: write
10
+ id-token: write
11
+
12
+ jobs:
13
+ quality-checks:
14
+ name: Quality Checks
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout code
19
+ uses: actions/checkout@v4
20
+ with:
21
+ fetch-depth: 0
22
+
23
+ - name: Set up Python
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: '3.11'
27
+ cache: 'pip'
28
+
29
+ - name: Install dependencies
30
+ run: |
31
+ python -m pip install --upgrade pip
32
+ pip install -e ".[dev]"
33
+
34
+ - name: Run ruff linting
35
+ run: ruff check tactus/ tests/ features/steps/
36
+
37
+ - name: Run black formatting check
38
+ run: black --check tactus/ tests/ features/steps/
39
+
40
+ - name: Run pytest tests
41
+ run: pytest tests/ -v --tb=short -m "not integration"
42
+
43
+ - name: Run behave BDD tests
44
+ run: behave
45
+
46
+ release:
47
+ name: Semantic Release
48
+ runs-on: ubuntu-latest
49
+ needs: quality-checks
50
+
51
+ steps:
52
+ - name: Checkout code
53
+ uses: actions/checkout@v4
54
+ with:
55
+ fetch-depth: 0
56
+ token: ${{ secrets.GH_TOKEN }}
57
+
58
+ - name: Set up Python
59
+ uses: actions/setup-python@v5
60
+ with:
61
+ python-version: '3.11'
62
+ cache: 'pip'
63
+
64
+ - name: Install python-semantic-release
65
+ run: |
66
+ python -m pip install --upgrade pip
67
+ pip install python-semantic-release
68
+
69
+ - name: Python Semantic Release
70
+ env:
71
+ GH_TOKEN: ${{ secrets.GH_TOKEN }}
72
+ PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
73
+ run: |
74
+ git config user.name "github-actions[bot]"
75
+ git config user.email "github-actions[bot]@users.noreply.github.com"
76
+ semantic-release version
77
+ semantic-release publish
78
+
79
+ - name: Publish to PyPI
80
+ if: success()
81
+ env:
82
+ TWINE_USERNAME: __token__
83
+ TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
84
+ run: |
85
+ pip install twine
86
+ twine upload dist/*
@@ -0,0 +1,39 @@
1
+ # Python
2
+ __pycache__/
3
+ *.pyc
4
+ *.pyo
5
+ *.pyd
6
+ .Python
7
+ env/
8
+ venv/
9
+ .env
10
+ .venv
11
+ pip-log.txt
12
+ pip-delete-this-directory.txt
13
+ .tox/
14
+ .coverage
15
+ .coverage.*
16
+ .cache
17
+ nosetests.xml
18
+ coverage.xml
19
+ *.cover
20
+ *.log
21
+ .pytest_cache/
22
+ .ruff_cache/
23
+
24
+ # Distribution / packaging
25
+ dist/
26
+ build/
27
+ *.egg-info/
28
+
29
+ # Node / frontend
30
+ node_modules/
31
+ .vite/
32
+ npm-debug.log*
33
+ yarn-debug.log*
34
+ yarn-error.log*
35
+
36
+ # Tactus specific
37
+ .tac/config.yml
38
+ progress.output
39
+ .tactus/config.yml
tactus-0.5.0/AGENTS.md ADDED
@@ -0,0 +1,221 @@
1
+ # Instructions for Coding Agents
2
+
3
+ This document provides guidelines for AI coding agents working on the Tactus project.
4
+
5
+ ## Pre-Commit Checklist
6
+
7
+ **CRITICAL**: Before committing any changes, you MUST run the complete test and linting suite:
8
+
9
+ ```bash
10
+ # 1. Run unit tests
11
+ pytest tests/ -x -k "not test_real_execution"
12
+
13
+ # 2. Run BDD behavior tests
14
+ behave --summary
15
+
16
+ # 3. Check code style with ruff (no uncommitted code should have ruff errors)
17
+ ruff check .
18
+
19
+ # 4. Format code with black
20
+ black tactus tactus-ide/backend features/steps tests
21
+
22
+ # 5. Verify all checks pass again
23
+ ruff check .
24
+ black tactus tactus-ide/backend features/steps tests --check
25
+ ```
26
+
27
+ Only commit when ALL of the above pass. Do not skip this step or commit before running these checks.
28
+
29
+ ## Reference Documentation
30
+
31
+ - **[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.
32
+ - **[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.
33
+
34
+ ## Multi-Model and Multi-Provider Support
35
+
36
+ **IMPORTANT**: Tactus now supports multiple LLM providers and models:
37
+
38
+ - **Providers**: `openai` and `bedrock` are supported
39
+ - **Provider is REQUIRED**: Every agent must specify `provider:` (either directly or via `default_provider:` at procedure level)
40
+ - **Multiple models**: Different agents can use different models (e.g., GPT-4o, GPT-4o-mini, Claude 3.5 Sonnet)
41
+ - **Model parameters**: Supports model-specific parameters like `temperature`, `max_tokens`, `openai_reasoning_effort`
42
+
43
+ Example:
44
+ ```yaml
45
+ agents:
46
+ openai_agent:
47
+ provider: openai
48
+ model:
49
+ name: gpt-4o
50
+ temperature: 0.7
51
+ system_prompt: "..."
52
+ tools: [done]
53
+
54
+ bedrock_agent:
55
+ provider: bedrock
56
+ model: anthropic.claude-3-5-sonnet-20240620-v1:0
57
+ system_prompt: "..."
58
+ tools: [done]
59
+ ```
60
+
61
+ ## Production Readiness
62
+
63
+ **IMPORTANT**: Tactus is **NOT** ready for production. It is in early development (Alpha status).
64
+
65
+ ### Do NOT:
66
+ - Declare that Tactus is "ready for production"
67
+ - Claim that features are "production-ready"
68
+ - State that the project is "complete" or "finished"
69
+ - Use phrases like "ready to use in production" or "production-ready"
70
+
71
+ ### Do:
72
+ - Focus on testing and verification
73
+ - Run existing tests before declaring changes complete
74
+ - Verify that implementations actually work as intended
75
+ - Acknowledge limitations and incomplete features
76
+ - Suggest improvements and note areas that need work
77
+
78
+ ## Semantic Release and Changelog
79
+
80
+ **IMPORTANT**: This project uses Semantic Release to automatically manage versioning and the changelog.
81
+
82
+ - **Do NOT manually edit `CHANGELOG.md`**. It is generated and updated automatically by the release workflow.
83
+ - **Do NOT add `CHANGELOG.md` to `.gitignore`**. It must be tracked in the repository so the release bot can commit updates to it.
84
+ - **Do NOT delete or truncate `CHANGELOG.md`**.
85
+ - 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.
86
+
87
+ ## Parser Generation Requirements
88
+
89
+ **IMPORTANT**: Tactus uses ANTLR4 to generate parsers from the Lua grammar for both Python and TypeScript.
90
+
91
+ ### Requirements for Parser Generation
92
+
93
+ **Docker is REQUIRED** for generating parsers:
94
+ - Parser generation uses ANTLR4 which requires Java
95
+ - We use Docker to avoid requiring Java installation on developer machines
96
+ - Docker image: `eclipse-temurin:17-jre`
97
+
98
+ **When to regenerate parsers:**
99
+ - Only when modifying the Lua grammar files
100
+ - Generated parsers are committed to version control
101
+ - End users don't need Docker or Java
102
+
103
+ **How to regenerate parsers:**
104
+ ```bash
105
+ # Ensure Docker is running
106
+ make generate-parsers
107
+
108
+ # Or generate individually:
109
+ make generate-python-parser
110
+ make generate-typescript-parser
111
+ ```
112
+
113
+ **Generated files (committed to repo):**
114
+ - `tactus/validation/generated/*.py` - Python parser
115
+ - `tactus-ide/frontend/src/validation/generated/*.ts` - TypeScript parser
116
+
117
+ ## Tactus IDE Development
118
+
119
+ When working on the Tactus IDE:
120
+
121
+ ### Architecture: Hybrid Validation
122
+
123
+ The IDE uses a two-layer validation approach for optimal performance and user experience:
124
+
125
+ **Layer 1: TypeScript Parser (Client-Side)**
126
+ - Location: `tactus-ide/frontend/src/validation/`
127
+ - ANTLR-generated from same `Lua.g4` grammar as Python parser
128
+ - Purpose: Instant syntax validation (< 10ms)
129
+ - Runs in browser, no backend needed
130
+ - Provides immediate feedback as user types
131
+ - Works offline
132
+
133
+ **Layer 2: Python LSP (Backend)**
134
+ - Location: `tactus-ide/backend/`
135
+ - Uses existing `TactusValidator` from `tactus/validation/`
136
+ - Purpose: Semantic validation and intelligence
137
+ - Debounced (300ms) to reduce load
138
+ - Provides completions, hover, signature help
139
+ - Cross-reference validation
140
+
141
+ ### Why Hybrid?
142
+
143
+ 1. **Performance**: Syntax errors appear instantly (no network delay)
144
+ 2. **Offline**: Basic editing works without backend
145
+ 3. **Intelligence**: LSP adds semantic features when available
146
+ 4. **Scalability**: Reduces backend load (syntax is client-side)
147
+ 5. **User Experience**: No lag, no waiting for validation
148
+
149
+ ### Backend (Python LSP Server)
150
+ - Location: `tactus-ide/backend/`
151
+ - Uses existing `TactusValidator` from `tactus/validation/`
152
+ - Implements LSP protocol for language intelligence
153
+ - Flask server provides HTTP and WebSocket endpoints
154
+ - Focus on semantic validation, not syntax (handled client-side)
155
+
156
+ ### Frontend (React + Monaco)
157
+ - Location: `tactus-ide/frontend/`
158
+ - Monaco Editor for code editing (same as VS Code)
159
+ - TypeScript parser for instant syntax validation
160
+ - LSP client communicates with Python backend via WebSocket
161
+ - Can be packaged as Electron app
162
+
163
+ ### Testing IDE Features
164
+ - TypeScript parser: `cd tactus-ide/frontend && npm test`
165
+ - Backend LSP: `pytest tactus-ide/backend/` (when tests are added)
166
+ - Integration: Test with example `.tac` files
167
+ - Verify both layers work independently and together
168
+
169
+ ### Running the IDE
170
+
171
+ ```bash
172
+ # Terminal 1: Backend
173
+ cd tactus-ide/backend
174
+ pip install -r requirements.txt
175
+ python app.py
176
+
177
+ # Terminal 2: Frontend
178
+ cd tactus-ide/frontend
179
+ npm install
180
+ npm run dev
181
+ ```
182
+
183
+ ### Electron Packaging
184
+ The IDE is designed to run as a desktop application:
185
+ - Backend runs as subprocess or separate service
186
+ - Frontend uses Electron's IPC for file operations
187
+ - No dependency on browser-specific APIs
188
+ - Hybrid validation works in Electron environment
189
+
190
+ ## Testing Requirements
191
+
192
+ Before declaring any change complete:
193
+
194
+ 1. **Run existing tests**: Use `pytest` to verify no regressions
195
+ 2. **Test the specific feature**: Create or update tests for new functionality
196
+ 3. **Verify imports**: Ensure all imports resolve correctly
197
+ 4. **Check for errors**: Run linters and fix any issues
198
+ 5. **Test parser changes**: If grammar modified, run `make test-parsers`
199
+
200
+ ## Code Quality
201
+
202
+ - Follow existing code patterns and style
203
+ - Add appropriate logging for debugging
204
+ - Include docstrings for public APIs
205
+ - Handle errors gracefully with proper exception types
206
+ - Keep implementations simple and maintainable
207
+
208
+ ## Project Status
209
+
210
+ Tactus is a standalone workflow engine extracted from a larger project. It is:
211
+ - In active development
212
+ - Missing some features (noted in code with TODO comments)
213
+ - Subject to API changes
214
+ - Not yet suitable for production use
215
+
216
+ When working on Tactus, focus on:
217
+ - Making incremental improvements
218
+ - Fixing bugs and issues
219
+ - Adding missing functionality
220
+ - Improving documentation
221
+ - Writing and maintaining tests
@@ -0,0 +1,73 @@
1
+ # CHANGELOG
2
+
3
+ <!-- version list -->
4
+
5
+ ## v0.5.0 (2025-12-13)
6
+
7
+
8
+ ## v0.4.0 (2025-12-13)
9
+
10
+
11
+ ## v0.3.0 (2025-12-12)
12
+
13
+ ### Bug Fixes
14
+
15
+ - Add missing fallback logging in LogPrimitive.debug()
16
+ ([`26fc8d7`](https://github.com/AnthusAI/Tactus/commit/26fc8d74794afd38f9b421b4cffcf090f5b74340))
17
+
18
+ - Resolve ruff and black linter issues
19
+ ([`4091d41`](https://github.com/AnthusAI/Tactus/commit/4091d416b00293f8f60d0a2a3997ab4a7c055172))
20
+
21
+ ### Chores
22
+
23
+ - Add .tactus/config.yml to gitignore
24
+ ([`bcc75f6`](https://github.com/AnthusAI/Tactus/commit/bcc75f66fb901c3845807663d816bcc5194c6026))
25
+
26
+ ### Code Style
27
+
28
+ - Apply black formatting to all files
29
+ ([`7f76e75`](https://github.com/AnthusAI/Tactus/commit/7f76e757a59687a12397032ba089f3eb40d1e99a))
30
+
31
+ ### Features
32
+
33
+ - **BDD**: Tactus is BDD at the core. 🤘
34
+ ([`66e8fb7`](https://github.com/AnthusAI/Tactus/commit/66e8fb7786a30e1a494d7339c4e473d95767288f))
35
+
36
+ ### Refactoring
37
+
38
+ - Remove deprecated description() construct from DSL
39
+ ([`380ac5f`](https://github.com/AnthusAI/Tactus/commit/380ac5f164d71ba48bd6462644a8f958a50a4053))
40
+
41
+
42
+ ## v0.2.1 (2025-12-12)
43
+
44
+ ### Bug Fixes
45
+
46
+ - Add PyPI upload step to release workflow
47
+ ([`1849407`](https://github.com/AnthusAI/Tactus/commit/1849407c1b14683bc137390bab08173118664557))
48
+
49
+
50
+ ## v0.2.0 (2025-12-11)
51
+
52
+ ### Documentation
53
+
54
+ - Add AI agent guidelines for semantic release
55
+ ([`daa1736`](https://github.com/AnthusAI/Tactus/commit/daa173665f888dce5de423e72f6dab909b95b632))
56
+
57
+ ### Features
58
+
59
+ - Migrate to pure Lua DSL and add Electron-based IDE
60
+ ([`5d91807`](https://github.com/AnthusAI/Tactus/commit/5d91807e770bbb5f6203407239eb9da8ee44aac8))
61
+
62
+ ### Breaking Changes
63
+
64
+ - Workflow format changed from YAML+Lua (.tyml) to pure Lua DSL (.tac.lua)
65
+
66
+
67
+ ## v0.1.0 (2025-12-11)
68
+
69
+ - Initial Release
70
+
71
+ ## v0.0.0 (2025-12-11)
72
+
73
+ - Initial Release