strix-agent 0.1.12__py3-none-any.whl → 0.1.14__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.
- strix/agents/StrixAgent/system_prompt.jinja +8 -0
- strix/agents/base_agent.py +33 -6
- strix/agents/state.py +4 -1
- strix/cli/app.py +10 -3
- strix/cli/tool_components/browser_renderer.py +13 -0
- strix/cli/tool_components/file_edit_renderer.py +4 -0
- strix/llm/__init__.py +4 -1
- strix/llm/llm.py +8 -9
- strix/llm/memory_compressor.py +4 -1
- strix/llm/request_queue.py +2 -2
- strix/tools/agents_graph/agents_graph_actions.py +3 -0
- strix/tools/terminal/terminal_actions_schema.xml +5 -4
- {strix_agent-0.1.12.dist-info → strix_agent-0.1.14.dist-info}/METADATA +1 -1
- {strix_agent-0.1.12.dist-info → strix_agent-0.1.14.dist-info}/RECORD +17 -17
- {strix_agent-0.1.12.dist-info → strix_agent-0.1.14.dist-info}/LICENSE +0 -0
- {strix_agent-0.1.12.dist-info → strix_agent-0.1.14.dist-info}/WHEEL +0 -0
- {strix_agent-0.1.12.dist-info → strix_agent-0.1.14.dist-info}/entry_points.txt +0 -0
@@ -24,6 +24,8 @@ USER INTERACTION:
|
|
24
24
|
- NEVER be redundant or repeat information - say it once and move on
|
25
25
|
- If you need user input, IMMEDIATELY call wait_for_message tool
|
26
26
|
- Never ask questions without calling wait_for_message in the same response
|
27
|
+
- Minimize user messaging: avoid redundancy and repetition; consolidate updates into a single concise message
|
28
|
+
- If there is nothing to execute and no user query to answer any more: do NOT send filler/repetitive text — either call wait_for_message or finish your work (subagents: agent_finish; root: finish_scan)
|
27
29
|
</communication_rules>
|
28
30
|
|
29
31
|
<execution_guidelines>
|
@@ -114,6 +116,8 @@ VALIDATION REQUIREMENTS:
|
|
114
116
|
- Independent verification through subagent
|
115
117
|
- Document complete attack chain
|
116
118
|
- Keep going until you find something that matters
|
119
|
+
- A vulnerability is ONLY considered reported when a reporting agent uses create_vulnerability_report with full details. Mentions in agent_finish, finish_scan, or messages to the user are NOT sufficient
|
120
|
+
- Do NOT patch/fix before reporting: first create the vulnerability report via create_vulnerability_report (by the reporting agent). Only after reporting is completed should fixing/patching proceed
|
117
121
|
</execution_guidelines>
|
118
122
|
|
119
123
|
<vulnerability_focus>
|
@@ -193,6 +197,10 @@ SIMPLE WORKFLOW RULES:
|
|
193
197
|
4. **MULTIPLE VULNS = MULTIPLE CHAINS** - Each vulnerability finding gets its own validation chain
|
194
198
|
5. **CREATE AGENTS AS YOU GO** - Don't create all agents at start, create them when you discover new attack surfaces
|
195
199
|
6. **ONE JOB PER AGENT** - Each agent has ONE specific task only
|
200
|
+
7. **VIEW THE AGENT GRAPH BEFORE ACTING** - Always call view_agent_graph before creating or messaging agents to avoid duplicates and to target correctly
|
201
|
+
8. **SCALE AGENT COUNT TO SCOPE** - Number of agents should correlate with target size and difficulty; avoid both agent sprawl and under-staffing
|
202
|
+
9. **CHILDREN ARE MEANINGFUL SUBTASKS** - Child agents must be focused subtasks that directly support their parent's task; do NOT create unrelated children
|
203
|
+
10. **UNIQUENESS** - Do not create two agents with the same task; ensure clear, non-overlapping responsibilities for every agent
|
196
204
|
|
197
205
|
WHEN TO CREATE NEW AGENTS:
|
198
206
|
|
strix/agents/base_agent.py
CHANGED
@@ -13,7 +13,7 @@ from jinja2 import (
|
|
13
13
|
select_autoescape,
|
14
14
|
)
|
15
15
|
|
16
|
-
from strix.llm import LLM, LLMConfig
|
16
|
+
from strix.llm import LLM, LLMConfig, LLMRequestFailedError
|
17
17
|
from strix.llm.utils import clean_content
|
18
18
|
from strix.tools import process_tool_invocations
|
19
19
|
|
@@ -164,6 +164,10 @@ class BaseAgent(metaclass=AgentMeta):
|
|
164
164
|
await self._enter_waiting_state(tracer)
|
165
165
|
continue
|
166
166
|
|
167
|
+
if self.state.llm_failed:
|
168
|
+
await self._wait_for_input()
|
169
|
+
continue
|
170
|
+
|
167
171
|
self.state.increment_iteration()
|
168
172
|
|
169
173
|
try:
|
@@ -176,6 +180,13 @@ class BaseAgent(metaclass=AgentMeta):
|
|
176
180
|
await self._enter_waiting_state(tracer, error_occurred=False, was_cancelled=True)
|
177
181
|
continue
|
178
182
|
|
183
|
+
except LLMRequestFailedError as e:
|
184
|
+
self.state.add_error(f"LLM request failed: {e}")
|
185
|
+
self.state.enter_waiting_state(llm_failed=True)
|
186
|
+
if tracer:
|
187
|
+
tracer.update_agent_status(self.state.agent_id, "llm_failed")
|
188
|
+
continue
|
189
|
+
|
179
190
|
except (RuntimeError, ValueError, TypeError) as e:
|
180
191
|
if not await self._handle_iteration_error(e, tracer):
|
181
192
|
await self._enter_waiting_state(tracer, error_occurred=True)
|
@@ -327,7 +338,7 @@ class BaseAgent(metaclass=AgentMeta):
|
|
327
338
|
tracer.update_agent_status(self.state.agent_id, "error")
|
328
339
|
return True
|
329
340
|
|
330
|
-
def _check_agent_messages(self, state: AgentState) -> None:
|
341
|
+
def _check_agent_messages(self, state: AgentState) -> None: # noqa: PLR0912
|
331
342
|
try:
|
332
343
|
from strix.tools.agents_graph.agents_graph_actions import _agent_graph, _agent_messages
|
333
344
|
|
@@ -340,12 +351,28 @@ class BaseAgent(metaclass=AgentMeta):
|
|
340
351
|
has_new_messages = False
|
341
352
|
for message in messages:
|
342
353
|
if not message.get("read", False):
|
354
|
+
sender_id = message.get("from")
|
355
|
+
|
343
356
|
if state.is_waiting_for_input():
|
344
|
-
state.
|
345
|
-
|
357
|
+
if state.llm_failed:
|
358
|
+
if sender_id == "user":
|
359
|
+
state.resume_from_waiting()
|
360
|
+
has_new_messages = True
|
346
361
|
|
347
|
-
|
348
|
-
|
362
|
+
from strix.cli.tracer import get_global_tracer
|
363
|
+
|
364
|
+
tracer = get_global_tracer()
|
365
|
+
if tracer:
|
366
|
+
tracer.update_agent_status(state.agent_id, "running")
|
367
|
+
else:
|
368
|
+
state.resume_from_waiting()
|
369
|
+
has_new_messages = True
|
370
|
+
|
371
|
+
from strix.cli.tracer import get_global_tracer
|
372
|
+
|
373
|
+
tracer = get_global_tracer()
|
374
|
+
if tracer:
|
375
|
+
tracer.update_agent_status(state.agent_id, "running")
|
349
376
|
|
350
377
|
if sender_id == "user":
|
351
378
|
sender_name = "User"
|
strix/agents/state.py
CHANGED
@@ -23,6 +23,7 @@ class AgentState(BaseModel):
|
|
23
23
|
completed: bool = False
|
24
24
|
stop_requested: bool = False
|
25
25
|
waiting_for_input: bool = False
|
26
|
+
llm_failed: bool = False
|
26
27
|
final_result: dict[str, Any] | None = None
|
27
28
|
|
28
29
|
messages: list[dict[str, Any]] = Field(default_factory=list)
|
@@ -85,15 +86,17 @@ class AgentState(BaseModel):
|
|
85
86
|
def is_waiting_for_input(self) -> bool:
|
86
87
|
return self.waiting_for_input
|
87
88
|
|
88
|
-
def enter_waiting_state(self) -> None:
|
89
|
+
def enter_waiting_state(self, llm_failed: bool = False) -> None:
|
89
90
|
self.waiting_for_input = True
|
90
91
|
self.stop_requested = False
|
92
|
+
self.llm_failed = llm_failed
|
91
93
|
self.last_updated = datetime.now(UTC).isoformat()
|
92
94
|
|
93
95
|
def resume_from_waiting(self, new_task: str | None = None) -> None:
|
94
96
|
self.waiting_for_input = False
|
95
97
|
self.stop_requested = False
|
96
98
|
self.completed = False
|
99
|
+
self.llm_failed = False
|
97
100
|
if new_task:
|
98
101
|
self.task = new_task
|
99
102
|
self.last_updated = datetime.now(UTC).isoformat()
|
strix/cli/app.py
CHANGED
@@ -420,6 +420,7 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
420
420
|
"failed": "❌",
|
421
421
|
"stopped": "⏹️",
|
422
422
|
"stopping": "⏸️",
|
423
|
+
"llm_failed": "🔴",
|
423
424
|
}
|
424
425
|
|
425
426
|
status_icon = status_indicators.get(status, "🔵")
|
@@ -544,6 +545,12 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
544
545
|
self._safe_widget_operation(status_text.update, "Agent completed")
|
545
546
|
self._safe_widget_operation(keymap_indicator.update, "")
|
546
547
|
self._safe_widget_operation(status_display.remove_class, "hidden")
|
548
|
+
elif status == "llm_failed":
|
549
|
+
self._safe_widget_operation(status_text.update, "[red]LLM request failed[/red]")
|
550
|
+
self._safe_widget_operation(
|
551
|
+
keymap_indicator.update, "[dim]Send message to retry[/dim]"
|
552
|
+
)
|
553
|
+
self._safe_widget_operation(status_display.remove_class, "hidden")
|
547
554
|
elif status == "waiting":
|
548
555
|
animated_text = self._get_animated_waiting_text(self.selected_agent_id)
|
549
556
|
self._safe_widget_operation(status_text.update, animated_text)
|
@@ -626,7 +633,7 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
626
633
|
|
627
634
|
for agent_id, agent_data in self.tracer.agents.items():
|
628
635
|
status = agent_data.get("status", "running")
|
629
|
-
if status in ["running", "waiting"]:
|
636
|
+
if status in ["running", "waiting", "llm_failed"]:
|
630
637
|
has_active_agents = True
|
631
638
|
current_dots = self._agent_dot_states.get(agent_id, 0)
|
632
639
|
self._agent_dot_states[agent_id] = (current_dots + 1) % 4
|
@@ -637,7 +644,7 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
637
644
|
and self.selected_agent_id in self.tracer.agents
|
638
645
|
):
|
639
646
|
selected_status = self.tracer.agents[self.selected_agent_id].get("status", "running")
|
640
|
-
if selected_status in ["running", "waiting"]:
|
647
|
+
if selected_status in ["running", "waiting", "llm_failed"]:
|
641
648
|
self._update_agent_status_display()
|
642
649
|
|
643
650
|
if not has_active_agents:
|
@@ -645,7 +652,7 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
645
652
|
for agent_id in list(self._agent_dot_states.keys()):
|
646
653
|
if agent_id not in self.tracer.agents or self.tracer.agents[agent_id].get(
|
647
654
|
"status"
|
648
|
-
) not in ["running", "waiting"]:
|
655
|
+
) not in ["running", "waiting", "llm_failed"]:
|
649
656
|
del self._agent_dot_states[agent_id]
|
650
657
|
|
651
658
|
def _gather_agent_events(self, agent_id: str) -> list[dict[str, Any]]:
|
@@ -30,6 +30,8 @@ class BrowserRenderer(BaseToolRenderer):
|
|
30
30
|
url = args.get("url")
|
31
31
|
text = args.get("text")
|
32
32
|
js_code = args.get("js_code")
|
33
|
+
key = args.get("key")
|
34
|
+
file_path = args.get("file_path")
|
33
35
|
|
34
36
|
if action in [
|
35
37
|
"launch",
|
@@ -40,6 +42,8 @@ class BrowserRenderer(BaseToolRenderer):
|
|
40
42
|
"click",
|
41
43
|
"double_click",
|
42
44
|
"hover",
|
45
|
+
"press_key",
|
46
|
+
"save_pdf",
|
43
47
|
]:
|
44
48
|
if action == "launch":
|
45
49
|
display_url = cls._format_url(url) if url else None
|
@@ -60,6 +64,12 @@ class BrowserRenderer(BaseToolRenderer):
|
|
60
64
|
message = (
|
61
65
|
f"executing javascript\n{display_js}" if display_js else "executing javascript"
|
62
66
|
)
|
67
|
+
elif action == "press_key":
|
68
|
+
display_key = cls.escape_markup(key) if key else None
|
69
|
+
message = f"pressing key {display_key}" if display_key else "pressing key"
|
70
|
+
elif action == "save_pdf":
|
71
|
+
display_path = cls.escape_markup(file_path) if file_path else None
|
72
|
+
message = f"saving PDF to {display_path}" if display_path else "saving PDF"
|
63
73
|
else:
|
64
74
|
action_words = {
|
65
75
|
"click": "clicking",
|
@@ -73,11 +83,14 @@ class BrowserRenderer(BaseToolRenderer):
|
|
73
83
|
simple_actions = {
|
74
84
|
"back": "going back in browser history",
|
75
85
|
"forward": "going forward in browser history",
|
86
|
+
"scroll_down": "scrolling down",
|
87
|
+
"scroll_up": "scrolling up",
|
76
88
|
"refresh": "refreshing browser tab",
|
77
89
|
"close_tab": "closing browser tab",
|
78
90
|
"switch_tab": "switching browser tab",
|
79
91
|
"list_tabs": "listing browser tabs",
|
80
92
|
"view_source": "viewing page source",
|
93
|
+
"get_console_logs": "getting console logs",
|
81
94
|
"screenshot": "taking screenshot of browser tab",
|
82
95
|
"wait": "waiting...",
|
83
96
|
"close": "closing browser",
|
@@ -25,6 +25,10 @@ class StrReplaceEditorRenderer(BaseToolRenderer):
|
|
25
25
|
header = "✏️ [bold #10b981]Editing file[/]"
|
26
26
|
elif command == "create":
|
27
27
|
header = "📝 [bold #10b981]Creating file[/]"
|
28
|
+
elif command == "insert":
|
29
|
+
header = "✏️ [bold #10b981]Inserting text[/]"
|
30
|
+
elif command == "undo_edit":
|
31
|
+
header = "↩️ [bold #10b981]Undoing edit[/]"
|
28
32
|
else:
|
29
33
|
header = "📄 [bold #10b981]File operation[/]"
|
30
34
|
|
strix/llm/__init__.py
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
import litellm
|
2
2
|
|
3
3
|
from .config import LLMConfig
|
4
|
-
from .llm import LLM
|
4
|
+
from .llm import LLM, LLMRequestFailedError
|
5
5
|
|
6
6
|
|
7
7
|
__all__ = [
|
8
8
|
"LLM",
|
9
9
|
"LLMConfig",
|
10
|
+
"LLMRequestFailedError",
|
10
11
|
]
|
11
12
|
|
13
|
+
litellm._logging._disable_debugging()
|
14
|
+
|
12
15
|
litellm.drop_params = True
|
strix/llm/llm.py
CHANGED
@@ -28,6 +28,11 @@ api_key = os.getenv("LLM_API_KEY")
|
|
28
28
|
if api_key:
|
29
29
|
litellm.api_key = api_key
|
30
30
|
|
31
|
+
|
32
|
+
class LLMRequestFailedError(Exception):
|
33
|
+
"""Raised when LLM request fails after all retry attempts."""
|
34
|
+
|
35
|
+
|
31
36
|
MODELS_WITHOUT_STOP_WORDS = [
|
32
37
|
"gpt-5",
|
33
38
|
"gpt-5-mini",
|
@@ -250,15 +255,8 @@ class LLM:
|
|
250
255
|
tool_invocations=tool_invocations if tool_invocations else None,
|
251
256
|
)
|
252
257
|
|
253
|
-
except
|
254
|
-
|
255
|
-
return LLMResponse(
|
256
|
-
scan_id=scan_id,
|
257
|
-
step_number=step_number,
|
258
|
-
role=StepRole.AGENT,
|
259
|
-
content="An error occurred while generating the response",
|
260
|
-
tool_invocations=None,
|
261
|
-
)
|
258
|
+
except Exception as e:
|
259
|
+
raise LLMRequestFailedError("LLM request failed after all retry attempts") from e
|
262
260
|
|
263
261
|
@property
|
264
262
|
def usage_stats(self) -> dict[str, dict[str, int | float]]:
|
@@ -307,6 +305,7 @@ class LLM:
|
|
307
305
|
"model": self.config.model_name,
|
308
306
|
"messages": messages,
|
309
307
|
"temperature": self.config.temperature,
|
308
|
+
"timeout": 180,
|
310
309
|
}
|
311
310
|
|
312
311
|
if self._should_include_stop_param():
|
strix/llm/memory_compressor.py
CHANGED
@@ -106,10 +106,13 @@ def _summarize_messages(
|
|
106
106
|
completion_args = {
|
107
107
|
"model": model,
|
108
108
|
"messages": [{"role": "user", "content": prompt}],
|
109
|
+
"timeout": 180,
|
109
110
|
}
|
110
111
|
|
111
112
|
response = litellm.completion(**completion_args)
|
112
|
-
summary = response.choices[0].message.content
|
113
|
+
summary = response.choices[0].message.content or ""
|
114
|
+
if not summary.strip():
|
115
|
+
return messages[0]
|
113
116
|
summary_msg = "<context_summary message_count='{count}'>{text}</context_summary>"
|
114
117
|
return {
|
115
118
|
"role": "assistant",
|
strix/llm/request_queue.py
CHANGED
@@ -38,8 +38,8 @@ class LLMRequestQueue:
|
|
38
38
|
self._semaphore.release()
|
39
39
|
|
40
40
|
@retry( # type: ignore[misc]
|
41
|
-
stop=stop_after_attempt(
|
42
|
-
wait=wait_exponential(multiplier=
|
41
|
+
stop=stop_after_attempt(5),
|
42
|
+
wait=wait_exponential(multiplier=2, min=1, max=30),
|
43
43
|
reraise=True,
|
44
44
|
)
|
45
45
|
async def _reliable_request(self, completion_args: dict[str, Any]) -> ModelResponse:
|
@@ -53,6 +53,9 @@ def _run_agent_in_thread(
|
|
53
53
|
<instructions>
|
54
54
|
- You have {context_status}
|
55
55
|
- Inherited context is for BACKGROUND ONLY - don't continue parent's work
|
56
|
+
- Maintain strict self-identity: never speak as or for your parent
|
57
|
+
- Do not merge your conversation with the parent's;
|
58
|
+
- Do not claim parent's actions or messages as your own
|
56
59
|
- Focus EXCLUSIVELY on your delegated task above
|
57
60
|
- Work independently with your own approach
|
58
61
|
- Use agent_finish when complete to report back to parent
|
@@ -25,7 +25,7 @@
|
|
25
25
|
Use is_input=true for regular text input to running processes.</description>
|
26
26
|
</parameter>
|
27
27
|
<parameter name="timeout" type="number" required="false">
|
28
|
-
<description>Optional timeout in seconds for command execution. If not provided, uses default
|
28
|
+
<description>Optional timeout in seconds for command execution. CAPPED AT 60 SECONDS. If not provided, uses default wait (30s). On timeout, the command keeps running and the tool returns with status 'running'. For truly long-running tasks, prefer backgrounding with '&'.</description>
|
29
29
|
</parameter>
|
30
30
|
<parameter name="terminal_id" type="string" required="false">
|
31
31
|
<description>Identifier for the terminal session. Defaults to "default". Use different IDs to manage multiple concurrent terminal sessions.</description>
|
@@ -63,14 +63,15 @@
|
|
63
63
|
3. LONG-RUNNING COMMANDS:
|
64
64
|
- Commands never get killed automatically - they keep running in background
|
65
65
|
- Set timeout to control how long to wait for output before returning
|
66
|
+
- For daemons/servers or very long jobs, append '&' to run in background
|
66
67
|
- Use empty command "" to check progress (waits for timeout period to collect output)
|
67
68
|
- Use C-c, C-d, C-z to interrupt processes (works automatically, no is_input needed)
|
68
69
|
|
69
70
|
4. TIMEOUT HANDLING:
|
70
|
-
- Timeout controls how long to wait before returning current output
|
71
|
+
- Timeout controls how long to wait before returning current output (max 60s cap)
|
71
72
|
- Commands are NEVER killed on timeout - they keep running
|
72
73
|
- After timeout, you can run new commands or check progress with empty command
|
73
|
-
-
|
74
|
+
- On timeout, status is 'running'; on completion, status is 'completed'
|
74
75
|
|
75
76
|
5. MULTIPLE TERMINALS: Use different terminal_id values to run multiple concurrent sessions.
|
76
77
|
|
@@ -97,7 +98,7 @@
|
|
97
98
|
# Run a command with custom timeout
|
98
99
|
<function=terminal_execute>
|
99
100
|
<parameter=command>npm install</parameter>
|
100
|
-
<parameter=timeout>
|
101
|
+
<parameter=timeout>60</parameter>
|
101
102
|
</function>
|
102
103
|
|
103
104
|
# Check progress of running command (waits for timeout to collect output)
|
@@ -1,19 +1,19 @@
|
|
1
1
|
strix/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
strix/agents/StrixAgent/__init__.py,sha256=VORJn9aPTJyNn2-QAv6DbTxO1P9wBQoSZlAw-YuTJhQ,63
|
3
3
|
strix/agents/StrixAgent/strix_agent.py,sha256=T0B2rcPe_YUE6Fv-B9Hl9C-xHTuvDL5whGEArqFRXVk,2676
|
4
|
-
strix/agents/StrixAgent/system_prompt.jinja,sha256=
|
4
|
+
strix/agents/StrixAgent/system_prompt.jinja,sha256=unDXkVFE3He8T6L5CKud_hM-uHisckrTPK3CDThSLrQ,18917
|
5
5
|
strix/agents/__init__.py,sha256=F64zhlv4XZIvYJSL9eSSuKUsIVGPLG3ycpQBhZwvE6A,168
|
6
|
-
strix/agents/base_agent.py,sha256=
|
7
|
-
strix/agents/state.py,sha256=
|
6
|
+
strix/agents/base_agent.py,sha256=hF_4qmhZ9QN-2i8GKbNxFwiP9yQTcsBPEscqqV6kZzI,15695
|
7
|
+
strix/agents/state.py,sha256=O5tuAsABlCOCYt-itoK7S30XtH44WD3JjEflkZP3y6E,4982
|
8
8
|
strix/cli/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
|
9
|
-
strix/cli/app.py,sha256=
|
9
|
+
strix/cli/app.py,sha256=ksBLYQ3t6FgyBCnODfDdLKVBx8OQXKX7HHlbkOq7oUk,39786
|
10
10
|
strix/cli/assets/cli.tcss,sha256=y7N_l8sJhDeflwqjmGz_Zm6xhVzpKUPJ6zcci-3qesE,11914
|
11
11
|
strix/cli/main.py,sha256=QVi10gEooDqovHzCXmb5rFg-YJFb9nQJJDYbxdMwdw0,21498
|
12
12
|
strix/cli/tool_components/__init__.py,sha256=Dz5ci3VMzvhlPOwQ2x9Nd11cmFzx1OP7sdlpZPMTT4k,935
|
13
13
|
strix/cli/tool_components/agents_graph_renderer.py,sha256=e470Fj47WI9DDrOKLM-8YqpToXPohwnzHQuA4Kp7qGs,4380
|
14
14
|
strix/cli/tool_components/base_renderer.py,sha256=e-xD2I3N8EDN-94tfMKAvVt0NGYC-5m2USNRGFMrEQc,1867
|
15
|
-
strix/cli/tool_components/browser_renderer.py,sha256=
|
16
|
-
strix/cli/tool_components/file_edit_renderer.py,sha256=
|
15
|
+
strix/cli/tool_components/browser_renderer.py,sha256=s3WmJ5qDq0QQQgzx0SyxKZfhHx1w4jP7UFXKO5TjrD8,4469
|
16
|
+
strix/cli/tool_components/file_edit_renderer.py,sha256=DfV8l4o3ssipXO_-uIrTS674h_9kALFLkuCb3ry0T0s,3612
|
17
17
|
strix/cli/tool_components/finish_renderer.py,sha256=Q5Jp-irOqh0rfdoG_wzEiNhDqLDkdP-NwhYoag4N_Kw,984
|
18
18
|
strix/cli/tool_components/notes_renderer.py,sha256=ZykNe589yXR9D9mm5rSHfdppZs65STVr356EDh7GaT0,3736
|
19
19
|
strix/cli/tool_components/proxy_renderer.py,sha256=9qk1tnebZWiOpjcDIeCeuQxOBxvIuyXSvhNhMk7fBd8,10186
|
@@ -26,11 +26,11 @@ strix/cli/tool_components/thinking_renderer.py,sha256=-MQLkKCgOJksrustULFf2jhAjJ
|
|
26
26
|
strix/cli/tool_components/user_message_renderer.py,sha256=6gHJ1hG-pwcTsxLM7JuYZuaDu8cZ2MeOuUDF3LGy-4I,1432
|
27
27
|
strix/cli/tool_components/web_search_renderer.py,sha256=JnJa22ACIcRksfxxdenesUo8Th9cHSxo-fej9YcuYHs,911
|
28
28
|
strix/cli/tracer.py,sha256=Dhr-0GCrRWxQ7mij0wosqC5hH-4_79_3p11ZqYF1iw0,11058
|
29
|
-
strix/llm/__init__.py,sha256=
|
29
|
+
strix/llm/__init__.py,sha256=WqYE3Xc2e1D3z4QyjwN_jZPTdqsSDX6ODYsu-dcufSk,230
|
30
30
|
strix/llm/config.py,sha256=iBv1tuUOUDcP2gVQWhjtN8wtO5lWOipsER7Rnc3p6k4,603
|
31
|
-
strix/llm/llm.py,sha256=
|
32
|
-
strix/llm/memory_compressor.py,sha256=
|
33
|
-
strix/llm/request_queue.py,sha256=
|
31
|
+
strix/llm/llm.py,sha256=JcfqSp5Ahwt73kUFJtCnKg3DLHvepeAA25hVxRFJCso,12572
|
32
|
+
strix/llm/memory_compressor.py,sha256=RFJWirlK39ZkoDc42eNicJUR8nMVbxSsviWvfJ4kRgs,6953
|
33
|
+
strix/llm/request_queue.py,sha256=EeESEHFSUk2N1x0NTwnxZg3y5O_492S1JLskI8l0G-Y,2086
|
34
34
|
strix/llm/utils.py,sha256=0Z0r6qo9IfUSOJt5FJsq3X-veXrA8A09frc2VIy-aS4,2540
|
35
35
|
strix/prompts/__init__.py,sha256=ocFjc9d-QolphPKr2cMVMHS52piJSSubBJdrwEFEBTI,3490
|
36
36
|
strix/prompts/coordination/root_agent.jinja,sha256=Z34uffB-lIt6Oei307dtD7oyXSmX2DSApeoRcA3LcnM,1902
|
@@ -50,7 +50,7 @@ strix/runtime/runtime.py,sha256=yUVLl9BTQChQgaba2jJCrEmHeJFDE9N0sF9M_XjqEbg,692
|
|
50
50
|
strix/runtime/tool_server.py,sha256=pKI_cL1aSEFC8b6Dqaz9bRfh0LvcCKwb6ZCN-v6OYls,6618
|
51
51
|
strix/tools/__init__.py,sha256=_uTsOImNlJ-q5FFuQBTIYpIAgTETNI7Pm2hkaLE-Z5Y,1743
|
52
52
|
strix/tools/agents_graph/__init__.py,sha256=FLJ2kGxXICY2pRKrC0sgIc3w3KhZo7VID7hbwYcgBfM,278
|
53
|
-
strix/tools/agents_graph/agents_graph_actions.py,sha256=
|
53
|
+
strix/tools/agents_graph/agents_graph_actions.py,sha256=7YSUQq7UIyVcV1GCKlYvNvfD0eiLQ5B9BKd67sRfKcY,20573
|
54
54
|
strix/tools/agents_graph/agents_graph_actions_schema.xml,sha256=KbDu8Ds2RWyy6b4iF0WY83T7wL9lU9mJ16midNiT_uI,12645
|
55
55
|
strix/tools/argument_parser.py,sha256=FA9LY0UBtMqDRJ9yHHUzQCbGmpTQvo4xTtLiNRYG2FU,3861
|
56
56
|
strix/tools/browser/__init__.py,sha256=7azA1td3CfwCVqMYIIzT0vGM0-JUNq3sZBYB0QnwFDk,75
|
@@ -83,7 +83,7 @@ strix/tools/reporting/reporting_actions.py,sha256=RIp3u3pmlRXx_uCr2Kc8R7yYiSe3pz
|
|
83
83
|
strix/tools/reporting/reporting_actions_schema.xml,sha256=y_g0iuyBuCh79fvA0ri8fOPlXY7uUd-P-mdzXLUyIJg,1629
|
84
84
|
strix/tools/terminal/__init__.py,sha256=xvflcrbLQ31o_K3cWFsIhTm7gxY5JF0nVnhOIadwFV0,80
|
85
85
|
strix/tools/terminal/terminal_actions.py,sha256=9BGsK7Io7PyW8YGpJfXHeJTP3AVqBAgaKZl-1YziF8Y,888
|
86
|
-
strix/tools/terminal/terminal_actions_schema.xml,sha256=
|
86
|
+
strix/tools/terminal/terminal_actions_schema.xml,sha256=L7dzjvKNZpJA0qDGp1gCBuwXiY4mtjOq7T2tNDmUPA4,7257
|
87
87
|
strix/tools/terminal/terminal_manager.py,sha256=cTWosczkMoSRSjQ-xPR56D5cIYcylA3NAZb4FSi32Ko,4838
|
88
88
|
strix/tools/terminal/terminal_session.py,sha256=peHQrYCty-KHYECbT8jOww06ayGUK_rAcnTlYIfQe00,16008
|
89
89
|
strix/tools/thinking/__init__.py,sha256=-v4fG4fyFkqsTSWspDtCT6IRlyRM8zeUwEM-kscaxDE,58
|
@@ -92,8 +92,8 @@ strix/tools/thinking/thinking_actions_schema.xml,sha256=otD4dOhQx4uyudLnjA_HIP6E
|
|
92
92
|
strix/tools/web_search/__init__.py,sha256=m5PCHXqeNVraLRLNIbh54Z2N4Y_75d-ftqwyq3dbCd0,70
|
93
93
|
strix/tools/web_search/web_search_actions.py,sha256=LRS3AjGO4JLIyu_B6-ogfWOsnENwqrrCa8Rz0vxuuGQ,3107
|
94
94
|
strix/tools/web_search/web_search_actions_schema.xml,sha256=Ihc3Gv4LaPI_MzBbwZOt3y4pwg9xmtl8KfPNvFihEP4,4805
|
95
|
-
strix_agent-0.1.
|
96
|
-
strix_agent-0.1.
|
97
|
-
strix_agent-0.1.
|
98
|
-
strix_agent-0.1.
|
99
|
-
strix_agent-0.1.
|
95
|
+
strix_agent-0.1.14.dist-info/LICENSE,sha256=fblpcTQlHjFL2NOSV_4XDJiz4q2bLtZ-l6yvlhPnueM,11345
|
96
|
+
strix_agent-0.1.14.dist-info/METADATA,sha256=GGgCJg59cRXdTZN7R7122AxtvJtSuATPjkDP2Gz7BbQ,6139
|
97
|
+
strix_agent-0.1.14.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
98
|
+
strix_agent-0.1.14.dist-info/entry_points.txt,sha256=sswIgnkzSVSzQ3Rd046g7mhIPQaj_7RYlXgU_bQelF0,45
|
99
|
+
strix_agent-0.1.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|