tactus 0.34.1__py3-none-any.whl → 0.35.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tactus/__init__.py +1 -1
- tactus/adapters/broker_log.py +17 -14
- tactus/adapters/channels/__init__.py +17 -15
- tactus/adapters/channels/base.py +16 -7
- tactus/adapters/channels/broker.py +43 -13
- tactus/adapters/channels/cli.py +19 -15
- tactus/adapters/channels/host.py +15 -6
- tactus/adapters/channels/ipc.py +82 -31
- tactus/adapters/channels/sse.py +41 -23
- tactus/adapters/cli_hitl.py +19 -19
- tactus/adapters/cli_log.py +4 -4
- tactus/adapters/control_loop.py +138 -99
- tactus/adapters/cost_collector_log.py +9 -9
- tactus/adapters/file_storage.py +56 -52
- tactus/adapters/http_callback_log.py +23 -13
- tactus/adapters/ide_log.py +17 -9
- tactus/adapters/lua_tools.py +4 -5
- tactus/adapters/mcp.py +16 -19
- tactus/adapters/mcp_manager.py +46 -30
- tactus/adapters/memory.py +9 -9
- tactus/adapters/plugins.py +42 -42
- tactus/broker/client.py +75 -78
- tactus/broker/protocol.py +57 -57
- tactus/broker/server.py +252 -197
- tactus/cli/app.py +3 -1
- tactus/cli/control.py +2 -2
- tactus/core/config_manager.py +181 -135
- tactus/core/dependencies/registry.py +66 -48
- tactus/core/dsl_stubs.py +222 -163
- tactus/core/exceptions.py +10 -1
- tactus/core/execution_context.py +152 -112
- tactus/core/lua_sandbox.py +72 -64
- tactus/core/message_history_manager.py +138 -43
- tactus/core/mocking.py +41 -27
- tactus/core/output_validator.py +49 -44
- tactus/core/registry.py +94 -80
- tactus/core/runtime.py +211 -176
- tactus/core/template_resolver.py +16 -16
- tactus/core/yaml_parser.py +55 -45
- tactus/docs/extractor.py +7 -6
- tactus/ide/server.py +119 -78
- tactus/primitives/control.py +10 -6
- tactus/primitives/file.py +48 -46
- tactus/primitives/handles.py +47 -35
- tactus/primitives/host.py +29 -27
- tactus/primitives/human.py +154 -137
- tactus/primitives/json.py +22 -23
- tactus/primitives/log.py +26 -26
- tactus/primitives/message_history.py +285 -31
- tactus/primitives/model.py +15 -9
- tactus/primitives/procedure.py +86 -64
- tactus/primitives/procedure_callable.py +58 -51
- tactus/primitives/retry.py +31 -29
- tactus/primitives/session.py +42 -29
- tactus/primitives/state.py +54 -43
- tactus/primitives/step.py +9 -13
- tactus/primitives/system.py +34 -21
- tactus/primitives/tool.py +44 -31
- tactus/primitives/tool_handle.py +76 -54
- tactus/primitives/toolset.py +25 -22
- tactus/sandbox/config.py +4 -4
- tactus/sandbox/container_runner.py +161 -107
- tactus/sandbox/docker_manager.py +20 -20
- tactus/sandbox/entrypoint.py +16 -14
- tactus/sandbox/protocol.py +15 -15
- tactus/stdlib/classify/llm.py +1 -3
- tactus/stdlib/core/validation.py +0 -3
- tactus/testing/pydantic_eval_runner.py +1 -1
- tactus/utils/asyncio_helpers.py +27 -0
- tactus/utils/cost_calculator.py +7 -7
- tactus/utils/model_pricing.py +11 -12
- tactus/utils/safe_file_library.py +156 -132
- tactus/utils/safe_libraries.py +27 -27
- tactus/validation/error_listener.py +18 -5
- tactus/validation/semantic_visitor.py +392 -333
- tactus/validation/validator.py +89 -49
- {tactus-0.34.1.dist-info → tactus-0.35.0.dist-info}/METADATA +12 -3
- {tactus-0.34.1.dist-info → tactus-0.35.0.dist-info}/RECORD +81 -80
- {tactus-0.34.1.dist-info → tactus-0.35.0.dist-info}/WHEEL +0 -0
- {tactus-0.34.1.dist-info → tactus-0.35.0.dist-info}/entry_points.txt +0 -0
- {tactus-0.34.1.dist-info → tactus-0.35.0.dist-info}/licenses/LICENSE +0 -0
tactus/validation/validator.py
CHANGED
|
@@ -9,7 +9,7 @@ Validates .tac files using ANTLR parser:
|
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
11
|
from enum import Enum
|
|
12
|
-
from typing import
|
|
12
|
+
from typing import Optional
|
|
13
13
|
|
|
14
14
|
from antlr4 import InputStream, CommonTokenStream
|
|
15
15
|
from .generated.LuaLexer import LuaLexer
|
|
@@ -36,6 +36,41 @@ class TactusValidator:
|
|
|
36
36
|
visitor for DSL construct recognition.
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
|
+
def _build_parser(self, source: str) -> LuaParser:
|
|
40
|
+
"""
|
|
41
|
+
Build a LuaParser for the provided source string.
|
|
42
|
+
"""
|
|
43
|
+
source_stream = InputStream(source)
|
|
44
|
+
lexer = LuaLexer(source_stream)
|
|
45
|
+
token_stream = CommonTokenStream(lexer)
|
|
46
|
+
return LuaParser(token_stream)
|
|
47
|
+
|
|
48
|
+
def _result_with_errors(
|
|
49
|
+
self,
|
|
50
|
+
errors: list[ValidationMessage],
|
|
51
|
+
warnings: Optional[list[ValidationMessage]] = None,
|
|
52
|
+
registry: Optional[object] = None,
|
|
53
|
+
) -> ValidationResult:
|
|
54
|
+
return ValidationResult(
|
|
55
|
+
valid=False,
|
|
56
|
+
errors=errors,
|
|
57
|
+
warnings=warnings or [],
|
|
58
|
+
registry=registry,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
def _result_success(
|
|
62
|
+
self,
|
|
63
|
+
errors: Optional[list[ValidationMessage]] = None,
|
|
64
|
+
warnings: Optional[list[ValidationMessage]] = None,
|
|
65
|
+
registry: Optional[object] = None,
|
|
66
|
+
) -> ValidationResult:
|
|
67
|
+
return ValidationResult(
|
|
68
|
+
valid=not errors,
|
|
69
|
+
errors=errors or [],
|
|
70
|
+
warnings=warnings or [],
|
|
71
|
+
registry=registry,
|
|
72
|
+
)
|
|
73
|
+
|
|
39
74
|
def validate(
|
|
40
75
|
self,
|
|
41
76
|
source: str,
|
|
@@ -51,65 +86,76 @@ class TactusValidator:
|
|
|
51
86
|
Returns:
|
|
52
87
|
ValidationResult with errors, warnings, and registry
|
|
53
88
|
"""
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
89
|
+
validation_errors: list[ValidationMessage] = []
|
|
90
|
+
validation_warnings: list[ValidationMessage] = []
|
|
91
|
+
validation_registry: Optional[object] = None
|
|
57
92
|
|
|
58
93
|
try:
|
|
59
94
|
# Phase 1: Lexical and syntactic analysis via ANTLR
|
|
60
|
-
|
|
61
|
-
lexer = LuaLexer(input_stream)
|
|
62
|
-
token_stream = CommonTokenStream(lexer)
|
|
63
|
-
parser = LuaParser(token_stream)
|
|
95
|
+
parser = self._build_parser(source)
|
|
64
96
|
|
|
65
97
|
# Attach error listener to collect syntax errors
|
|
66
|
-
|
|
98
|
+
syntax_error_collector = TactusErrorListener()
|
|
67
99
|
parser.removeErrorListeners()
|
|
68
|
-
parser.addErrorListener(
|
|
100
|
+
parser.addErrorListener(syntax_error_collector)
|
|
69
101
|
|
|
70
102
|
# Parse (start rule is 'start_' which expects chunk + EOF)
|
|
71
|
-
|
|
103
|
+
lua_parse_tree = parser.start_()
|
|
72
104
|
|
|
73
105
|
# Check for syntax errors
|
|
74
|
-
if
|
|
75
|
-
return
|
|
76
|
-
|
|
106
|
+
if syntax_error_collector.syntax_errors:
|
|
107
|
+
return self._result_with_errors(
|
|
108
|
+
errors=syntax_error_collector.syntax_errors,
|
|
109
|
+
warnings=[],
|
|
110
|
+
registry=None,
|
|
77
111
|
)
|
|
78
112
|
|
|
79
113
|
# Quick mode: just syntax check
|
|
80
114
|
if mode == ValidationMode.QUICK:
|
|
81
|
-
return
|
|
115
|
+
return self._result_success(errors=[], warnings=[], registry=None)
|
|
82
116
|
|
|
83
117
|
# Phase 2: Semantic analysis (DSL validation)
|
|
84
|
-
|
|
85
|
-
|
|
118
|
+
dsl_semantic_visitor = TactusDSLVisitor()
|
|
119
|
+
dsl_semantic_visitor.visit(lua_parse_tree)
|
|
86
120
|
|
|
87
121
|
# Combine visitor errors
|
|
88
|
-
|
|
89
|
-
|
|
122
|
+
validation_errors = dsl_semantic_visitor.errors
|
|
123
|
+
validation_warnings = dsl_semantic_visitor.warnings
|
|
90
124
|
|
|
91
125
|
# Phase 3: Registry validation
|
|
92
|
-
if not
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
126
|
+
if not validation_errors:
|
|
127
|
+
registry_validation_result = dsl_semantic_visitor.builder.validate()
|
|
128
|
+
validation_errors.extend(registry_validation_result.errors)
|
|
129
|
+
validation_warnings.extend(registry_validation_result.warnings)
|
|
130
|
+
validation_registry = (
|
|
131
|
+
registry_validation_result.registry
|
|
132
|
+
if registry_validation_result.valid
|
|
133
|
+
else None
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
return self._result_success(
|
|
137
|
+
errors=validation_errors,
|
|
138
|
+
warnings=validation_warnings,
|
|
139
|
+
registry=validation_registry,
|
|
102
140
|
)
|
|
103
141
|
|
|
104
|
-
except Exception as
|
|
105
|
-
logger.error(
|
|
106
|
-
|
|
142
|
+
except Exception as unexpected_exception:
|
|
143
|
+
logger.error(
|
|
144
|
+
"Validation failed with unexpected error: %s",
|
|
145
|
+
unexpected_exception,
|
|
146
|
+
exc_info=True,
|
|
147
|
+
)
|
|
148
|
+
validation_errors.append(
|
|
107
149
|
ValidationMessage(
|
|
108
150
|
level="error",
|
|
109
|
-
message=f"Validation error: {
|
|
151
|
+
message=f"Validation error: {unexpected_exception}",
|
|
110
152
|
)
|
|
111
153
|
)
|
|
112
|
-
return
|
|
154
|
+
return self._result_with_errors(
|
|
155
|
+
errors=validation_errors,
|
|
156
|
+
warnings=validation_warnings,
|
|
157
|
+
registry=None,
|
|
158
|
+
)
|
|
113
159
|
|
|
114
160
|
def validate_file(
|
|
115
161
|
self,
|
|
@@ -127,30 +173,24 @@ class TactusValidator:
|
|
|
127
173
|
ValidationResult
|
|
128
174
|
"""
|
|
129
175
|
try:
|
|
130
|
-
with open(file_path, "r") as
|
|
131
|
-
|
|
132
|
-
return self.validate(
|
|
176
|
+
with open(file_path, "r") as source_file_handle:
|
|
177
|
+
source_text = source_file_handle.read()
|
|
178
|
+
return self.validate(source_text, mode)
|
|
133
179
|
except FileNotFoundError:
|
|
134
|
-
return
|
|
135
|
-
valid=False,
|
|
180
|
+
return self._result_with_errors(
|
|
136
181
|
errors=[
|
|
137
182
|
ValidationMessage(
|
|
138
183
|
level="error",
|
|
139
184
|
message=f"File not found: {file_path}",
|
|
140
185
|
)
|
|
141
|
-
]
|
|
142
|
-
warnings=[],
|
|
143
|
-
registry=None,
|
|
186
|
+
]
|
|
144
187
|
)
|
|
145
|
-
except Exception as
|
|
146
|
-
return
|
|
147
|
-
valid=False,
|
|
188
|
+
except Exception as exception:
|
|
189
|
+
return self._result_with_errors(
|
|
148
190
|
errors=[
|
|
149
191
|
ValidationMessage(
|
|
150
192
|
level="error",
|
|
151
|
-
message=f"Error reading file: {
|
|
193
|
+
message=f"Error reading file: {exception}",
|
|
152
194
|
)
|
|
153
|
-
]
|
|
154
|
-
warnings=[],
|
|
155
|
-
registry=None,
|
|
195
|
+
]
|
|
156
196
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tactus
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.35.0
|
|
4
4
|
Summary: Tactus: Lua-based DSL for agentic workflows
|
|
5
5
|
Project-URL: Homepage, https://github.com/AnthusAI/Tactus
|
|
6
6
|
Project-URL: Documentation, https://github.com/AnthusAI/Tactus/tree/main/docs
|
|
@@ -28,12 +28,14 @@ Requires-Dist: flask-cors>=4.0.0
|
|
|
28
28
|
Requires-Dist: flask>=3.0.0
|
|
29
29
|
Requires-Dist: gherkin-official>=28.0.0
|
|
30
30
|
Requires-Dist: h5py>=3.10
|
|
31
|
+
Requires-Dist: jinja2>=3.0
|
|
31
32
|
Requires-Dist: lupa>=2.6
|
|
33
|
+
Requires-Dist: markdown>=3.0
|
|
32
34
|
Requires-Dist: nanoid>=2.0.0
|
|
33
35
|
Requires-Dist: nest-asyncio>=1.5.0
|
|
34
36
|
Requires-Dist: openpyxl>=3.1
|
|
35
37
|
Requires-Dist: pyarrow>=14.0
|
|
36
|
-
Requires-Dist: pydantic-ai[bedrock]
|
|
38
|
+
Requires-Dist: pydantic-ai-slim[bedrock,evals]
|
|
37
39
|
Requires-Dist: pydantic>=2.0
|
|
38
40
|
Requires-Dist: pyyaml
|
|
39
41
|
Requires-Dist: rapidfuzz>=3.0.0
|
|
@@ -42,7 +44,8 @@ Requires-Dist: typer
|
|
|
42
44
|
Provides-Extra: dev
|
|
43
45
|
Requires-Dist: antlr4-tools>=0.2.1; extra == 'dev'
|
|
44
46
|
Requires-Dist: behave>=1.2.6; extra == 'dev'
|
|
45
|
-
Requires-Dist: black; extra == 'dev'
|
|
47
|
+
Requires-Dist: black==25.12.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: coverage>=7.4; extra == 'dev'
|
|
46
49
|
Requires-Dist: fastmcp>=2.3.5; extra == 'dev'
|
|
47
50
|
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
|
|
48
51
|
Requires-Dist: pytest-xdist>=3.0; extra == 'dev'
|
|
@@ -63,6 +66,9 @@ Description-Content-Type: text/markdown
|
|
|
63
66
|
|
|
64
67
|
# Tactus
|
|
65
68
|
|
|
69
|
+
![Continuous integration][continuous-integration-badge]
|
|
70
|
+
![Coverage][coverage-badge]
|
|
71
|
+
|
|
66
72
|
**A programming language for reliable, tool-using AI agents.**
|
|
67
73
|
|
|
68
74
|
*Agents that never lose their place.*
|
|
@@ -1821,3 +1827,6 @@ See `tactus/validation/README.md` for detailed documentation.
|
|
|
1821
1827
|
## License
|
|
1822
1828
|
|
|
1823
1829
|
MIT License - see LICENSE file for details.
|
|
1830
|
+
|
|
1831
|
+
[continuous-integration-badge]: https://github.com/AnthusAI/Tactus/actions/workflows/release.yml/badge.svg?branch=main
|
|
1832
|
+
[coverage-badge]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FAnthusAI%2FTactus%2Fmain%2Fcoverage_badge.json
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
tactus/__init__.py,sha256=
|
|
1
|
+
tactus/__init__.py,sha256=TLJbK9I-_38F3ieSk4YYBBrUy1C9RY1OTfxYYNTNxrc,1245
|
|
2
2
|
tactus/adapters/__init__.py,sha256=47Y8kGBR4QGxqEGvjA1mneOSACb2L7oELnj6P2uI7uk,759
|
|
3
|
-
tactus/adapters/broker_log.py,sha256=
|
|
4
|
-
tactus/adapters/cli_hitl.py,sha256=
|
|
5
|
-
tactus/adapters/cli_log.py,sha256=
|
|
6
|
-
tactus/adapters/control_loop.py,sha256=
|
|
7
|
-
tactus/adapters/cost_collector_log.py,sha256=
|
|
8
|
-
tactus/adapters/file_storage.py,sha256=
|
|
9
|
-
tactus/adapters/http_callback_log.py,sha256=
|
|
10
|
-
tactus/adapters/ide_log.py,sha256=
|
|
11
|
-
tactus/adapters/lua_tools.py,sha256=
|
|
12
|
-
tactus/adapters/mcp.py,sha256=
|
|
13
|
-
tactus/adapters/mcp_manager.py,sha256=
|
|
14
|
-
tactus/adapters/memory.py,sha256=
|
|
15
|
-
tactus/adapters/plugins.py,sha256=
|
|
16
|
-
tactus/adapters/channels/__init__.py,sha256=
|
|
17
|
-
tactus/adapters/channels/base.py,sha256=
|
|
18
|
-
tactus/adapters/channels/broker.py,sha256=
|
|
19
|
-
tactus/adapters/channels/cli.py,sha256=
|
|
20
|
-
tactus/adapters/channels/host.py,sha256=
|
|
21
|
-
tactus/adapters/channels/ipc.py,sha256=
|
|
22
|
-
tactus/adapters/channels/sse.py,sha256=
|
|
3
|
+
tactus/adapters/broker_log.py,sha256=9ZR-rJdyW6bMNZx3OfXoQEnDxcAzNsiJ8aPxZGqJYrM,6019
|
|
4
|
+
tactus/adapters/cli_hitl.py,sha256=Nrfoi35Ei9fTMReLG2QxKkhKyIvl3pYcAUdQCAUOZDk,17361
|
|
5
|
+
tactus/adapters/cli_log.py,sha256=w2orj3bDAcuK8QEQxLMM9yVarAMJDyTQjemQwbgJDWw,8890
|
|
6
|
+
tactus/adapters/control_loop.py,sha256=6n48j1qR0yVeX6_7jIufp0bs2gNGdIynQELRYCnT2PA,35578
|
|
7
|
+
tactus/adapters/cost_collector_log.py,sha256=O8w03qikrVqq5oltoEmBHIxwydTlODNrHYgfdWZP-a4,1784
|
|
8
|
+
tactus/adapters/file_storage.py,sha256=CslJoOh2yatwTleNllmiXY6apdyqc3OMSxB3Fj5Kz9I,14684
|
|
9
|
+
tactus/adapters/http_callback_log.py,sha256=J3K47zDUFj1SDka1CGwzLHhKw7ffKNNZhY5x8tJdnXY,3907
|
|
10
|
+
tactus/adapters/ide_log.py,sha256=lJsstRlK1iKpO72T3oQL7WmiGBtpLf9YeK0rQ8zT7HU,2435
|
|
11
|
+
tactus/adapters/lua_tools.py,sha256=eEQueiEI1e50ElqDD39cGsFlVDW7cPUcsGT9TkUiiJU,12988
|
|
12
|
+
tactus/adapters/mcp.py,sha256=EiwmFYp8JJKiDP18cp-DlwzV8HNOBwz7vVDFlltF6iI,10836
|
|
13
|
+
tactus/adapters/mcp_manager.py,sha256=5EM3O8wGu5GQNpgaX7PHsjwjQKKisy_gSR-inRLW-xo,7918
|
|
14
|
+
tactus/adapters/memory.py,sha256=fCBNMIQQMVOUgFM39_Kky2idffP1sCifSjRafZsBbkg,2060
|
|
15
|
+
tactus/adapters/plugins.py,sha256=DRLvQT7GIy1q-PGhs80p6wswEs_arhYmhfe4O6sb5WU,14513
|
|
16
|
+
tactus/adapters/channels/__init__.py,sha256=oh1ymJmP8Lalq6JSDnXEnPdKMiPosAuqiUYF_HxEO64,4925
|
|
17
|
+
tactus/adapters/channels/base.py,sha256=zKzGMkmL465RjWvc27aYDsgdkNA9CThgh_hd5mEJgvg,5584
|
|
18
|
+
tactus/adapters/channels/broker.py,sha256=jXoTvjlOhCS96nHacoK5K7HbytZCXleZl_f-SvG3q5c,7431
|
|
19
|
+
tactus/adapters/channels/cli.py,sha256=lC4WcUuVZD7ik5DkKDmaHTzA2axfnH7yKhWvAH55MuQ,16847
|
|
20
|
+
tactus/adapters/channels/host.py,sha256=1ytWVTqTiVlzZsFiKZPT9dWgIp6DvXiV0t9hFFigayk,7594
|
|
21
|
+
tactus/adapters/channels/ipc.py,sha256=xKcYERNA_UNoVHDktmOELpgRSQ7c6omZ6z177AstvVU,11749
|
|
22
|
+
tactus/adapters/channels/sse.py,sha256=d7ztbZXchX-G9nYmGgqGVkX4nfkXgPbFZ1cAK0AG8oM,11318
|
|
23
23
|
tactus/backends/http_backend.py,sha256=QZEAGdaKhdjmrLbT2kR5O_hgkER5_fhA2Wax9I6S3yA,1652
|
|
24
24
|
tactus/backends/model_backend.py,sha256=P8dCUpDxJmA8_EO1snZuXyIyUZ_BlqReeC6zenO7Kv0,763
|
|
25
25
|
tactus/backends/pytorch_backend.py,sha256=I7H7UTa_Scx9_FtmPWn-G4noadaNVEQj-9Kjtjpgl6E,3305
|
|
26
26
|
tactus/broker/__init__.py,sha256=UTvqLofrgE3c4m6u2iNOg5R7BrS4dmfzMRO4Oq_0A9U,396
|
|
27
|
-
tactus/broker/client.py,sha256=
|
|
28
|
-
tactus/broker/protocol.py,sha256=
|
|
29
|
-
tactus/broker/server.py,sha256=
|
|
27
|
+
tactus/broker/client.py,sha256=Af6oZRrbaMWp6EBVowebmZRK1FXZ_a7OE-ATrdqgV3s,10377
|
|
28
|
+
tactus/broker/protocol.py,sha256=v4DFSVoecerqxbqK-vbRfYEAD10tk-QXNH_d9PFgkWg,5342
|
|
29
|
+
tactus/broker/server.py,sha256=mEFB1p9HbTUSHb6Jg1ETdA_baSVDRsGUFIw5hOEVxUc,55817
|
|
30
30
|
tactus/broker/stdio.py,sha256=JXkEz-PCU3IQXNkt16YJtYmwkR43eS6CfjxAHc-YCfQ,439
|
|
31
31
|
tactus/cli/__init__.py,sha256=kVhdCkwWEPdt3vn9si-iKvh6M9817aOH6rLSsNzRuyg,80
|
|
32
|
-
tactus/cli/app.py,sha256=
|
|
33
|
-
tactus/cli/control.py,sha256=
|
|
32
|
+
tactus/cli/app.py,sha256=t-0WzquFq9BH3tw41ruARLQVVxZZYpTaqyB3b1NDy3E,96374
|
|
33
|
+
tactus/cli/control.py,sha256=jCKKy8f6x8wV5im-MwxOtgz85oYLTHhPKXx-3FtRwoU,13364
|
|
34
34
|
tactus/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
35
|
tactus/core/__init__.py,sha256=TK5rWr3HmOO_igFa5ESGp6teWwS58vnvQhIWqkcgqwk,880
|
|
36
|
-
tactus/core/config_manager.py,sha256=
|
|
37
|
-
tactus/core/dsl_stubs.py,sha256=
|
|
38
|
-
tactus/core/exceptions.py,sha256=
|
|
39
|
-
tactus/core/execution_context.py,sha256=
|
|
40
|
-
tactus/core/lua_sandbox.py,sha256=
|
|
41
|
-
tactus/core/message_history_manager.py,sha256=
|
|
42
|
-
tactus/core/mocking.py,sha256=
|
|
43
|
-
tactus/core/output_validator.py,sha256=
|
|
44
|
-
tactus/core/registry.py,sha256=
|
|
45
|
-
tactus/core/runtime.py,sha256=
|
|
46
|
-
tactus/core/template_resolver.py,sha256=
|
|
47
|
-
tactus/core/yaml_parser.py,sha256=
|
|
36
|
+
tactus/core/config_manager.py,sha256=kxz853j4Nx97SBh8-fAar_OfmfWZvvcfafLyxjTQG1A,35131
|
|
37
|
+
tactus/core/dsl_stubs.py,sha256=5ioc98euqdVaC2M1WczKa9m9llPavEkWxox9sAM3uus,87523
|
|
38
|
+
tactus/core/exceptions.py,sha256=Mjg7J5_zs528wcoHn-4vGROFFhk1DGbjMmwjII4-uZI,1683
|
|
39
|
+
tactus/core/execution_context.py,sha256=JJoZp4nNtdbR9rg5yI0Px8ciRohBfoSZCD6nYrE9kI4,29138
|
|
40
|
+
tactus/core/lua_sandbox.py,sha256=gCAfWceZtZRbqX2vnRJHx9vcdV-Bxoxbfl3Botgjihg,18769
|
|
41
|
+
tactus/core/message_history_manager.py,sha256=W4FbwBWFm1VBtSprVY-tiJFMsHCq4DR-t7Ws5aX5rkk,11346
|
|
42
|
+
tactus/core/mocking.py,sha256=ew0rv-kzMCiObk5bKOtZOeIohfu6KVfnlkIG-aJOo3A,9521
|
|
43
|
+
tactus/core/output_validator.py,sha256=Y9Eb2fRa-8pDqHEj8C-CJ-2t1pIuPzEi-MzM8z0xzJA,10522
|
|
44
|
+
tactus/core/registry.py,sha256=eLOWdqbLn_1kbU33G3kl0bsoX4Ab8fdbldOEBPleP_E,20970
|
|
45
|
+
tactus/core/runtime.py,sha256=QBb3eK4TsjZqnHAhS52An18XHgQjNI9n7mn6jken8V8,141407
|
|
46
|
+
tactus/core/template_resolver.py,sha256=r97KzFNaK4nFSoWtIFZeSKyuUWgbp-ay1_BGrb-BgUY,4179
|
|
47
|
+
tactus/core/yaml_parser.py,sha256=JD7Nehaxw3uP1KV_uTU_xiXTbEWqoKOceU5tAJ4lcH8,13985
|
|
48
48
|
tactus/core/dependencies/__init__.py,sha256=28-TM7_i-JqTD3hvkq1kMzr__A8VjfIKXymdW9mn5NM,362
|
|
49
|
-
tactus/core/dependencies/registry.py,sha256=
|
|
49
|
+
tactus/core/dependencies/registry.py,sha256=QsMJkgQP5-HhgwftHhxBdDPrGq02FQdewZs4sAFAXeY,6722
|
|
50
50
|
tactus/docker/Dockerfile,sha256=fnK5kZlgM-L7vboiwfTqcs70OsZsvh1ba4YzRxie138,1887
|
|
51
51
|
tactus/docker/Dockerfile.pypi,sha256=jn9tMgUMhGiNuV4cikaGvSmg2l8qw9SpefI54E9GWEg,1515
|
|
52
52
|
tactus/docker/entrypoint.sh,sha256=pL-1MwMdjD1fGgRZYkBeXmJZg57Knmub9ETLYAANvOg,1985
|
|
53
53
|
tactus/docs/__init__.py,sha256=_SosqiUn6bZgP_YY0mUgpGUW5geE5BVFYegplKGKLKA,899
|
|
54
|
-
tactus/docs/extractor.py,sha256=
|
|
54
|
+
tactus/docs/extractor.py,sha256=U4HHsAXwtOelFG2XIzsH6bSBO_TmjARmim20iXK0two,11249
|
|
55
55
|
tactus/docs/html_renderer.py,sha256=9Whf27iiUh6If-I3Raio2J19gDzbV3GikWJhiUo2Pdo,2325
|
|
56
56
|
tactus/docs/models.py,sha256=BsutXNaw4ilH4ImeX4qCFC-n82o2gwBYcuVZF81_b64,4342
|
|
57
57
|
tactus/docs/templates/base.html,sha256=7ZNIKnAR7bsEug6_3uw68oooz8ity4T77a7IImJ6hyU,5007
|
|
@@ -70,27 +70,27 @@ tactus/formatting/formatter.py,sha256=DfHp977t5reMPIWZwRChRE5Yflw7xGgTNUM0AOcS8L
|
|
|
70
70
|
tactus/ide/__init__.py,sha256=1fSC0xWP-Lq5wl4FgDq7SMnkvZ0DxXupreTl3ZRX1zw,143
|
|
71
71
|
tactus/ide/coding_assistant.py,sha256=GgmspWIn9IPgBK0ZYapeISIOrcDfRyK7yyPDPV85r8g,12184
|
|
72
72
|
tactus/ide/config_server.py,sha256=U8OWxi5l24GH1lUHIAQ8WB8j0cJ5ofLX9iVecW1O2vc,18862
|
|
73
|
-
tactus/ide/server.py,sha256=
|
|
73
|
+
tactus/ide/server.py,sha256=Mp52RhXt351k56a3XreMP6bWxYZR3RP6MA-KXYh2eX4,110205
|
|
74
74
|
tactus/primitives/__init__.py,sha256=x6bGwoa9DizKUwqsg7SqURfJxisEdctTCv1XnSAZxIk,1709
|
|
75
|
-
tactus/primitives/control.py,sha256=
|
|
76
|
-
tactus/primitives/file.py,sha256
|
|
77
|
-
tactus/primitives/handles.py,sha256=
|
|
78
|
-
tactus/primitives/host.py,sha256=
|
|
79
|
-
tactus/primitives/human.py,sha256=
|
|
80
|
-
tactus/primitives/json.py,sha256
|
|
81
|
-
tactus/primitives/log.py,sha256=
|
|
82
|
-
tactus/primitives/message_history.py,sha256=
|
|
83
|
-
tactus/primitives/model.py,sha256=
|
|
84
|
-
tactus/primitives/procedure.py,sha256=
|
|
85
|
-
tactus/primitives/procedure_callable.py,sha256=
|
|
86
|
-
tactus/primitives/retry.py,sha256=
|
|
87
|
-
tactus/primitives/session.py,sha256=
|
|
88
|
-
tactus/primitives/state.py,sha256=
|
|
89
|
-
tactus/primitives/step.py,sha256=
|
|
90
|
-
tactus/primitives/system.py,sha256=
|
|
91
|
-
tactus/primitives/tool.py,sha256=
|
|
92
|
-
tactus/primitives/tool_handle.py,sha256=
|
|
93
|
-
tactus/primitives/toolset.py,sha256=
|
|
75
|
+
tactus/primitives/control.py,sha256=jw-7ggHtNLfFL5aTUUs6Fo5y4xsxEG8OIRe0RyIjVnc,4783
|
|
76
|
+
tactus/primitives/file.py,sha256=GFHmXOADRllfJw6gHpIdVMmZ_ZS7DVgresQ0F71nqJE,7458
|
|
77
|
+
tactus/primitives/handles.py,sha256=su7w61BO8cgNl-z-a7By-J6P8PxEuu4-db7fu8fMoiQ,13260
|
|
78
|
+
tactus/primitives/host.py,sha256=NLgzAicqnfvZ7a2s2jBeM6iW4PJhM-QDmnYrM2RMAjI,3456
|
|
79
|
+
tactus/primitives/human.py,sha256=YTxw0LXtTL_hxm2G1fhNxR9Qa7n9MJGG9OD9WGRTnp0,36507
|
|
80
|
+
tactus/primitives/json.py,sha256=-uFwrr9y2kfFLy3D7q8oLAgM1p3mUmfIL-DX36TA6sQ,5771
|
|
81
|
+
tactus/primitives/log.py,sha256=LFHIFv8157wtEJF-qEqhLDKwh914oF0jiI257JUUyd0,6491
|
|
82
|
+
tactus/primitives/message_history.py,sha256=2EnWPBLxzA8ufL37jMNfRzxoYANlpZNZ7hUY3YDzpfI,14857
|
|
83
|
+
tactus/primitives/model.py,sha256=KBdxJ72AwRWGBUAt3ToA-ooAS7L7whINTXuywmXbQXM,5266
|
|
84
|
+
tactus/primitives/procedure.py,sha256=_C5eNlx_sowyuz4LtP9o-9vba4LoS--j7pagYdLv_Bg,20012
|
|
85
|
+
tactus/primitives/procedure_callable.py,sha256=vGNFaATxkJqusFPJ6KekCiXWiU5pKvPaoxuAvIjeqKw,14167
|
|
86
|
+
tactus/primitives/retry.py,sha256=zhGSZX3VPWcWdGjhf_-uFAksq_APf50wtO9AVelXKKc,5428
|
|
87
|
+
tactus/primitives/session.py,sha256=g72vfxYXsAeGjVSXoDS2AHQyDD0paj7GrucjeHxpwWs,4883
|
|
88
|
+
tactus/primitives/state.py,sha256=l6uKexHsnkI_agzSnw0zYm_Cuh-9sMd4vimNsVCzofM,6205
|
|
89
|
+
tactus/primitives/step.py,sha256=edSKLFLAHyJuJV894K0frPOUefd1R7vXoI8-BTrNUOI,7065
|
|
90
|
+
tactus/primitives/system.py,sha256=gDMvxYDmPrn9dMCYBLfOTNMWIOscX_CVHkPkcT2iCTw,3630
|
|
91
|
+
tactus/primitives/tool.py,sha256=2nv8torlSv_cLxM402HmFxOLGXjM1ZQjbmjrZl72Z5w,12829
|
|
92
|
+
tactus/primitives/tool_handle.py,sha256=sHgcxwi5UNql2Cf_zI6xn2vM4olS-kZZN09ZDBOFCtA,10044
|
|
93
|
+
tactus/primitives/toolset.py,sha256=omlU2RQrdWCzXvjFnM_LAQJ7Bgw1YiHL1litk9ly9eQ,7868
|
|
94
94
|
tactus/protocols/__init__.py,sha256=exFwWenyU0LXjqK5Ong3abY00xVYIHPu80-zLReCfxQ,1341
|
|
95
95
|
tactus/protocols/chat_recorder.py,sha256=dswAHpwlxq30GTGKT-ktCIKCaixn5izEMSb7sbiZARE,2074
|
|
96
96
|
tactus/protocols/config.py,sha256=VozGLUQPujGdS1pXhDaYhVOyxClOiNti4gDXdMy8beY,3345
|
|
@@ -108,11 +108,11 @@ tactus/providers/bedrock.py,sha256=cVNDV7uHhCnnL6BNl7DFF8OwkD9ZYqa9CP2wXMcCJGY,3
|
|
|
108
108
|
tactus/providers/google.py,sha256=wgZ3eiQif1rq1T8BK5V2kL_QVCmqBQZuWLz37y9cxOQ,3123
|
|
109
109
|
tactus/providers/openai.py,sha256=3qSXfdELTHdU7vuRSxQrtnfNctt0HhrePOLFj3YlViA,2692
|
|
110
110
|
tactus/sandbox/__init__.py,sha256=UCBvPD63szvSdwSzpznLW-cnJOgGkVHiKcmJtsAmnuA,1424
|
|
111
|
-
tactus/sandbox/config.py,sha256=
|
|
112
|
-
tactus/sandbox/container_runner.py,sha256
|
|
113
|
-
tactus/sandbox/docker_manager.py,sha256=
|
|
114
|
-
tactus/sandbox/entrypoint.py,sha256=
|
|
115
|
-
tactus/sandbox/protocol.py,sha256=
|
|
111
|
+
tactus/sandbox/config.py,sha256=43FINPDE0k1nL56IKxI29dEw7pi-Arp8qtZYtdkLvec,5813
|
|
112
|
+
tactus/sandbox/container_runner.py,sha256=-0iac9qwjZKsj1ID8wGYf2R27_OByiuraG4cysyyZfw,47267
|
|
113
|
+
tactus/sandbox/docker_manager.py,sha256=2oWu7_E6l4KNhGFt9gPAjiKrIqjhY9_YM71U72_OI3c,14793
|
|
114
|
+
tactus/sandbox/entrypoint.py,sha256=AYwqPB19vn9pzHMa8eQ7PN7U71z4kHIhzoa3NAyNCCE,8121
|
|
115
|
+
tactus/sandbox/protocol.py,sha256=8EOSxB7qASYMalnI_L-0Co_o9Te7Y_SHYcHtTAYkmXc,6210
|
|
116
116
|
tactus/stdlib/README.md,sha256=j1p0jsC8vAcO31AOzOwqDdCpx3DF27F5efoSFAeVsUw,2235
|
|
117
117
|
tactus/stdlib/__init__.py,sha256=NkRsL413VXr0rLAadbb3meP5TelwcrEFVJd1u39XCbk,1047
|
|
118
118
|
tactus/stdlib/loader.py,sha256=qjVnz5mn3Uu7g1O4vjSREHkR-YdRoON1vqJQq-oiFIE,8679
|
|
@@ -120,14 +120,14 @@ tactus/stdlib/classify/__init__.py,sha256=51Lqge0g0Q6GWXkmw42HwuqkkDCsww9VBcoreY
|
|
|
120
120
|
tactus/stdlib/classify/classify.spec.tac,sha256=0yuRD_2dbPKTuhyqwk3vtsj_R3kwGoSEiEF4OY-ARqA,6475
|
|
121
121
|
tactus/stdlib/classify/classify.tac,sha256=KvOXLihspPK1_g2GcT9wnLkynDubglp1S_JUfZlo-88,6850
|
|
122
122
|
tactus/stdlib/classify/fuzzy.py,sha256=x0ZpBECjflBorwGa83sXVcBRbGueh1m9cYcb6BE57WY,10437
|
|
123
|
-
tactus/stdlib/classify/llm.py,sha256=
|
|
123
|
+
tactus/stdlib/classify/llm.py,sha256=dNqTe5QjWSkSF1IYoerQKAbIuUXwX7j1cGiV3MtWJ5o,11470
|
|
124
124
|
tactus/stdlib/classify/primitive.py,sha256=0RHFw1_SHnB40r9KsdBuLEopfy9vfIRwlLulfUTdFeI,9636
|
|
125
125
|
tactus/stdlib/core/__init__.py,sha256=I_neS0DMeVicd58ttGs5MGcPcKuaBi-bGTQ6oiYMdhY,1332
|
|
126
126
|
tactus/stdlib/core/base.py,sha256=Qhkp4ASXKu7MZXHW0eqDycMK9akyJKZyh2O4KwdVrZg,10016
|
|
127
127
|
tactus/stdlib/core/confidence.py,sha256=WemGKUn74W2DQETtxBWHfGzUxUV_x_mduSnubvkOMXE,5064
|
|
128
128
|
tactus/stdlib/core/models.py,sha256=Vf-3N24WVVL3x9dL5C56McMGDH2JpoO4HVZPuEfndHg,6089
|
|
129
129
|
tactus/stdlib/core/retry.py,sha256=TeA6FVE4SHCPOcNNCcDoIblMO3PkpwWAEI6_kF-pqrk,5234
|
|
130
|
-
tactus/stdlib/core/validation.py,sha256=
|
|
130
|
+
tactus/stdlib/core/validation.py,sha256=s1gmWmIZgmV8zT5rocIiLaIYJ-9VWoKewWjs6GaJevM,7184
|
|
131
131
|
tactus/stdlib/extract/__init__.py,sha256=5UB5X5BJ3LfRfQe4tb6CMRmSa8AyKZri1x-l_SYgnQk,4112
|
|
132
132
|
tactus/stdlib/extract/llm.py,sha256=ri0GAMXIT_x_KQPSX2PjlTPvTCYuagVOFsFf4WFxd2c,11423
|
|
133
133
|
tactus/stdlib/extract/primitive.py,sha256=8kNS3IMishXa9l6HHLlyhWCH4moU_FJplDu10XUagn8,8132
|
|
@@ -173,7 +173,7 @@ tactus/testing/mock_hitl.py,sha256=c5pe7j7ldiyC4nT19Moe_mJLLJT1nHMBMSDZQYgB8HE,5
|
|
|
173
173
|
tactus/testing/mock_registry.py,sha256=9PFlUuUxjCgZUR1a7wnxqwLiC_gpyO0vuUl1H5dDieI,5699
|
|
174
174
|
tactus/testing/mock_tools.py,sha256=huPkE5zJXPyZqpRwNisoXPS6XklZFY0_ut2jvviyEbY,4008
|
|
175
175
|
tactus/testing/models.py,sha256=8BG1XNUD5WXR6urUhicZBMy0aLQfvva9CEsuZu8LN6c,3257
|
|
176
|
-
tactus/testing/pydantic_eval_runner.py,sha256=
|
|
176
|
+
tactus/testing/pydantic_eval_runner.py,sha256=dGN3ix4U6TwAMdWjDmycc3kq3fyEZImSTor5WrXK8wQ,17842
|
|
177
177
|
tactus/testing/test_runner.py,sha256=w6is1xDXIGr3yrvaeJ-jbPIk2ClItHuVx9Rmh2Vskck,19171
|
|
178
178
|
tactus/testing/steps/__init__.py,sha256=oitGDW-M3uckHk8ySLnjCHi6VjCr6L4MDT2_uPYgR-8,257
|
|
179
179
|
tactus/testing/steps/builtin.py,sha256=O3xUkIcbQsEC2sZxchd6nJob1JjKUNoD7MjjxkdfY5s,31662
|
|
@@ -182,17 +182,18 @@ tactus/testing/steps/registry.py,sha256=71xN-4B9nyBjeYNFZlOyKCjBBl1Ad9Oj6jdLxHA8
|
|
|
182
182
|
tactus/tracing/__init__.py,sha256=32Uc7ACuxBfstNh7t2A4q2mub-PGR_zB-02mNH5f_0s,142
|
|
183
183
|
tactus/tracing/trace_manager.py,sha256=PNCEztpza-P6-L2a4gWZS_0Z7yOvaV9V2BEsK9csZWk,12922
|
|
184
184
|
tactus/utils/__init__.py,sha256=8TN2bqJybOVlf1Wx5fsV0cLjue5UC4EhL0K1TVzBzIQ,34
|
|
185
|
-
tactus/utils/
|
|
186
|
-
tactus/utils/
|
|
187
|
-
tactus/utils/
|
|
188
|
-
tactus/utils/
|
|
185
|
+
tactus/utils/asyncio_helpers.py,sha256=kYt0Go3_0OfipsFdjLha8I2rLZL1hNhPaLrEF4jnnzY,792
|
|
186
|
+
tactus/utils/cost_calculator.py,sha256=cZFKlapBxeIDyMDjd0Zjqczrnx_eggf0B24h0bVmOYo,2524
|
|
187
|
+
tactus/utils/model_pricing.py,sha256=ggfPJK6RSq8j8YcBXWrnNoujrhP-MkPhexOUsCMwiPY,5051
|
|
188
|
+
tactus/utils/safe_file_library.py,sha256=_SfbdyoVy6rm-DMhQg3Iau7M4QJLr7UtlcsKUZE4Rns,17855
|
|
189
|
+
tactus/utils/safe_libraries.py,sha256=3wg88N7HGLTuYvi4OtQRRlDzGX49_PDRJmfOJHhv0cI,7992
|
|
189
190
|
tactus/validation/LuaLexerBase.py,sha256=b2Q3kiWFAle-MY4GaUCsewJh6L9oGKYcjGkNCbkRPmk,1683
|
|
190
191
|
tactus/validation/LuaParserBase.py,sha256=o3klCIY0ANkVCU0VHml0IOYE4CdEledeoyoIAPxV58k,528
|
|
191
192
|
tactus/validation/README.md,sha256=AS6vr4blY7IKWRsj4wuvWBHVMTc5fto7IgNmv-Rjkdo,5366
|
|
192
193
|
tactus/validation/__init__.py,sha256=rnap-YvNievWigYYUewuXBcLtAdjZ8YpeJDYS1T7XZM,153
|
|
193
|
-
tactus/validation/error_listener.py,sha256=
|
|
194
|
-
tactus/validation/semantic_visitor.py,sha256=
|
|
195
|
-
tactus/validation/validator.py,sha256=
|
|
194
|
+
tactus/validation/error_listener.py,sha256=MPkvsVbojwYjNA8MpapG_GNtR6ZDyb3cTt7aLwekCtM,1010
|
|
195
|
+
tactus/validation/semantic_visitor.py,sha256=GRPZeAugevrAeqwPfKjvXjVUuJwLQjOK-gc_k973OqI,41628
|
|
196
|
+
tactus/validation/validator.py,sha256=v2klPlZwv827HkNMswv37q9jDbZYiwMtzJH2iGNHVIA,6355
|
|
196
197
|
tactus/validation/generated/LuaLexer.interp,sha256=B-Xb6HNXS7YYYQB_cvsWzf8OQLFnEhZHDN5vCOyP3yw,20444
|
|
197
198
|
tactus/validation/generated/LuaLexer.py,sha256=6B-HNB_vAp3bA5iACLvMWw0R4KFENsuiG7bccysxbRQ,67252
|
|
198
199
|
tactus/validation/generated/LuaLexer.tokens,sha256=uo4NdATiGedhiDccWz1jXH5tYJWyT3OZ0216z1Zif7E,1005
|
|
@@ -205,8 +206,8 @@ tactus/validation/generated/LuaParserVisitor.py,sha256=ageKSmHPxnO3jBS2fBtkmYBOd
|
|
|
205
206
|
tactus/validation/generated/__init__.py,sha256=5gWlwRI0UvmHw2fnBpj_IG6N8oZeabr5tbj1AODDvjc,196
|
|
206
207
|
tactus/validation/grammar/LuaLexer.g4,sha256=t2MXiTCr127RWAyQGvamkcU_m4veqPzSuHUtAKwalw4,2771
|
|
207
208
|
tactus/validation/grammar/LuaParser.g4,sha256=ceZenb90BdiZmVdOxMGj9qJk3QbbWVZe5HUqPgoePfY,3202
|
|
208
|
-
tactus-0.
|
|
209
|
-
tactus-0.
|
|
210
|
-
tactus-0.
|
|
211
|
-
tactus-0.
|
|
212
|
-
tactus-0.
|
|
209
|
+
tactus-0.35.0.dist-info/METADATA,sha256=8gtDmbFYwzxEcYoUw7sFchxE7ab0N2DMjKlgQ14MCHQ,59903
|
|
210
|
+
tactus-0.35.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
211
|
+
tactus-0.35.0.dist-info/entry_points.txt,sha256=vWseqty8m3z-Worje0IYxlioMjPDCoSsm0AtY4GghBY,47
|
|
212
|
+
tactus-0.35.0.dist-info/licenses/LICENSE,sha256=ivohBcAIYnaLPQ-lKEeCXSMvQUVISpQfKyxHBHoa4GA,1066
|
|
213
|
+
tactus-0.35.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|