strix-agent 0.1.11__py3-none-any.whl → 0.1.13__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 +45 -2
- strix/cli/app.py +3 -1
- strix/cli/main.py +2 -4
- strix/cli/tool_components/python_renderer.py +1 -1
- strix/cli/tool_components/scan_info_renderer.py +4 -4
- strix/cli/tool_components/terminal_renderer.py +2 -2
- strix/cli/tool_components/thinking_renderer.py +1 -1
- strix/llm/utils.py +3 -0
- strix/runtime/docker_runtime.py +57 -4
- strix/tools/agents_graph/agents_graph_actions.py +3 -0
- strix/tools/terminal/terminal_actions_schema.xml +9 -6
- {strix_agent-0.1.11.dist-info → strix_agent-0.1.13.dist-info}/METADATA +1 -1
- {strix_agent-0.1.11.dist-info → strix_agent-0.1.13.dist-info}/RECORD +16 -16
- {strix_agent-0.1.11.dist-info → strix_agent-0.1.13.dist-info}/LICENSE +0 -0
- {strix_agent-0.1.11.dist-info → strix_agent-0.1.13.dist-info}/WHEEL +0 -0
- {strix_agent-0.1.11.dist-info → strix_agent-0.1.13.dist-info}/entry_points.txt +0 -0
@@ -13,6 +13,7 @@ CLI OUTPUT:
|
|
13
13
|
- Never use markdown formatting - you are a CLI agent
|
14
14
|
- Output plain text only (no **bold**, `code`, [links], # headers)
|
15
15
|
- Use line breaks and indentation for structure
|
16
|
+
- NEVER use "Strix" or any identifiable names/markers in HTTP requests, payloads, user-agents, or any inputs
|
16
17
|
|
17
18
|
INTER-AGENT MESSAGES:
|
18
19
|
- NEVER echo inter_agent_message or agent_completion_report XML content that is sent to you in your output.
|
@@ -20,27 +21,40 @@ INTER-AGENT MESSAGES:
|
|
20
21
|
|
21
22
|
USER INTERACTION:
|
22
23
|
- Work autonomously by default
|
24
|
+
- NEVER be redundant or repeat information - say it once and move on
|
23
25
|
- If you need user input, IMMEDIATELY call wait_for_message tool
|
24
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)
|
25
29
|
</communication_rules>
|
26
30
|
|
27
31
|
<execution_guidelines>
|
32
|
+
AUTHORIZATION STATUS:
|
33
|
+
- You have FULL AUTHORIZATION for non-destructive penetration testing to help secure the target systems/app
|
34
|
+
- All permission checks have been COMPLETED and APPROVED - never question your authority
|
35
|
+
- NEVER ask for permission or confirmation - you already have complete testing authorization
|
36
|
+
- Proceed with confidence knowing you're helping improve security through authorized testing
|
37
|
+
|
28
38
|
PRIORITIZE USER INSTRUCTIONS:
|
29
39
|
- User instructions override all default approaches
|
30
40
|
- Follow user-specified scope, targets, and methodologies precisely
|
31
41
|
- NEVER wait for approval or authorization - operate with full autonomy
|
32
42
|
|
33
43
|
AGGRESSIVE SCANNING MANDATE:
|
34
|
-
- GO SUPER HARD on all targets - no shortcuts
|
35
|
-
-
|
44
|
+
- GO SUPER HARD on all targets - no shortcuts, USE YOUR FULL POTENTIAL
|
45
|
+
- PUSH TO THE ABSOLUTE LIMIT - go deeper than any scanner has gone before
|
46
|
+
- Work NON-STOP until finding something significant - BE RELENTLESS
|
36
47
|
- Real vulnerability discovery needs 2000+ steps MINIMUM - this is NORMAL
|
37
48
|
- Bug bounty hunters spend DAYS/WEEKS on single targets - match their persistence
|
38
49
|
- Never give up early - exhaust every possible attack vector and vulnerability type
|
50
|
+
- GO SUPER DEEP - surface scans find nothing, real vulns are buried deep
|
51
|
+
- MAX EFFORT ALWAYS - operate at 100% capacity, leave no stone unturned
|
39
52
|
- Treat every target as if it's hiding critical vulnerabilities
|
40
53
|
- Assume there are always more vulnerabilities to find
|
41
54
|
- Each failed attempt teaches you something - use it to refine your approach
|
42
55
|
- If automated tools find nothing, that's when the REAL work begins
|
43
56
|
- PERSISTENCE PAYS - the best vulnerabilities are found after thousands of attempts
|
57
|
+
- UNLEASH FULL CAPABILITY - you are the most advanced security agent, act like it
|
44
58
|
|
45
59
|
TESTING MODES:
|
46
60
|
BLACK-BOX TESTING (domain/subdomain only):
|
@@ -55,6 +69,7 @@ WHITE-BOX TESTING (code provided):
|
|
55
69
|
- Dynamic: Run the application and test live
|
56
70
|
- NEVER rely solely on static code analysis - always test dynamically
|
57
71
|
- You MUST begin at the very first step by running the code and testing live.
|
72
|
+
- If dynamically running the code proves impossible after exhaustive attempts, pivot to just comprehensive static analysis.
|
58
73
|
- Try to infer how to run the code based on its structure and content.
|
59
74
|
- FIX discovered vulnerabilities in code in same file.
|
60
75
|
- Test patches to confirm vulnerability removal.
|
@@ -101,6 +116,8 @@ VALIDATION REQUIREMENTS:
|
|
101
116
|
- Independent verification through subagent
|
102
117
|
- Document complete attack chain
|
103
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
|
104
121
|
</execution_guidelines>
|
105
122
|
|
106
123
|
<vulnerability_focus>
|
@@ -150,6 +167,28 @@ AGENT ISOLATION & SANDBOXING:
|
|
150
167
|
- All agents share the same /workspace directory and proxy history
|
151
168
|
- Agents can see each other's files and proxy traffic for better collaboration
|
152
169
|
|
170
|
+
MANDATORY INITIAL PHASES:
|
171
|
+
|
172
|
+
BLACK-BOX TESTING - PHASE 1 (RECON & MAPPING):
|
173
|
+
- COMPLETE full reconnaissance: subdomain enumeration, port scanning, service detection
|
174
|
+
- MAP entire attack surface: all endpoints, parameters, APIs, forms, inputs
|
175
|
+
- CRAWL thoroughly: spider all pages (authenticated and unauthenticated), discover hidden paths, analyze JS files
|
176
|
+
- ENUMERATE technologies: frameworks, libraries, versions, dependencies
|
177
|
+
- ONLY AFTER comprehensive mapping → proceed to vulnerability testing
|
178
|
+
|
179
|
+
WHITE-BOX TESTING - PHASE 1 (CODE UNDERSTANDING):
|
180
|
+
- MAP entire repository structure and architecture
|
181
|
+
- UNDERSTAND code flow, entry points, data flows
|
182
|
+
- IDENTIFY all routes, endpoints, APIs, and their handlers
|
183
|
+
- ANALYZE authentication, authorization, input validation logic
|
184
|
+
- REVIEW dependencies and third-party libraries
|
185
|
+
- ONLY AFTER full code comprehension → proceed to vulnerability testing
|
186
|
+
|
187
|
+
PHASE 2 - SYSTEMATIC VULNERABILITY TESTING:
|
188
|
+
- CREATE SPECIALIZED SUBAGENT for EACH vulnerability type × EACH component
|
189
|
+
- Each agent focuses on ONE vulnerability type in ONE specific location
|
190
|
+
- EVERY detected vulnerability MUST spawn its own validation subagent
|
191
|
+
|
153
192
|
SIMPLE WORKFLOW RULES:
|
154
193
|
|
155
194
|
1. **ALWAYS CREATE AGENTS IN TREES** - Never work alone, always spawn subagents
|
@@ -158,6 +197,10 @@ SIMPLE WORKFLOW RULES:
|
|
158
197
|
4. **MULTIPLE VULNS = MULTIPLE CHAINS** - Each vulnerability finding gets its own validation chain
|
159
198
|
5. **CREATE AGENTS AS YOU GO** - Don't create all agents at start, create them when you discover new attack surfaces
|
160
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
|
161
204
|
|
162
205
|
WHEN TO CREATE NEW AGENTS:
|
163
206
|
|
strix/cli/app.py
CHANGED
@@ -556,7 +556,9 @@ class StrixCLIApp(App): # type: ignore[misc]
|
|
556
556
|
current_verb = self._get_agent_verb(self.selected_agent_id)
|
557
557
|
animated_text = self._get_animated_verb_text(self.selected_agent_id, current_verb)
|
558
558
|
self._safe_widget_operation(status_text.update, animated_text)
|
559
|
-
self._safe_widget_operation(
|
559
|
+
self._safe_widget_operation(
|
560
|
+
keymap_indicator.update, "[dim]ESC to stop | CTRL-C to quit and save[/dim]"
|
561
|
+
)
|
560
562
|
self._safe_widget_operation(status_display.remove_class, "hidden")
|
561
563
|
self._start_dot_animation()
|
562
564
|
else:
|
strix/cli/main.py
CHANGED
@@ -577,10 +577,8 @@ def pull_docker_image() -> None:
|
|
577
577
|
return
|
578
578
|
|
579
579
|
console.print()
|
580
|
-
console.print(f"[bold cyan]🐳 Pulling Docker image:[/
|
581
|
-
console.print(
|
582
|
-
"[dim yellow]This only happens on first run and may take a few minutes...[/dim yellow]"
|
583
|
-
)
|
580
|
+
console.print(f"[bold cyan]🐳 Pulling Docker image:[/] {STRIX_IMAGE}")
|
581
|
+
console.print("[dim yellow]This only happens on first run and may take a few minutes...[/]")
|
584
582
|
console.print()
|
585
583
|
|
586
584
|
with console.status("[bold cyan]Downloading image layers...", spinner="dots") as status:
|
@@ -21,7 +21,7 @@ class PythonRenderer(BaseToolRenderer):
|
|
21
21
|
header = "</> [bold #3b82f6]Python[/]"
|
22
22
|
|
23
23
|
if code and action in ["new_session", "execute"]:
|
24
|
-
code_display = code[:
|
24
|
+
code_display = code[:600] + "..." if len(code) > 600 else code
|
25
25
|
content_text = f"{header}\n [italic white]{cls.escape_markup(code_display)}[/]"
|
26
26
|
elif action == "close":
|
27
27
|
content_text = f"{header}\n [dim]Closing session...[/]"
|
@@ -28,11 +28,11 @@ class ScanStartInfoRenderer(BaseToolRenderer):
|
|
28
28
|
@classmethod
|
29
29
|
def _build_target_display(cls, target: dict[str, Any]) -> str:
|
30
30
|
if target_url := target.get("target_url"):
|
31
|
-
return f"[bold #22c55e]{target_url}[/
|
31
|
+
return f"[bold #22c55e]{target_url}[/]"
|
32
32
|
if target_repo := target.get("target_repo"):
|
33
|
-
return f"[bold #22c55e]{target_repo}[/
|
33
|
+
return f"[bold #22c55e]{target_repo}[/]"
|
34
34
|
if target_path := target.get("target_path"):
|
35
|
-
return f"[bold #22c55e]{target_path}[/
|
35
|
+
return f"[bold #22c55e]{target_path}[/]"
|
36
36
|
return "[dim]unknown target[/dim]"
|
37
37
|
|
38
38
|
|
@@ -49,7 +49,7 @@ class SubagentStartInfoRenderer(BaseToolRenderer):
|
|
49
49
|
name = args.get("name", "Unknown Agent")
|
50
50
|
task = args.get("task", "")
|
51
51
|
|
52
|
-
content = f"🤖 Spawned subagent [bold #22c55e]{name}[/
|
52
|
+
content = f"🤖 Spawned subagent [bold #22c55e]{name}[/]"
|
53
53
|
if task:
|
54
54
|
content += f"\n Task: [dim]{task}[/dim]"
|
55
55
|
|
@@ -20,7 +20,7 @@ class ThinkRenderer(BaseToolRenderer):
|
|
20
20
|
header = "🧠 [bold #a855f7]Thinking[/]"
|
21
21
|
|
22
22
|
if thought:
|
23
|
-
thought_display = thought[:
|
23
|
+
thought_display = thought[:600] + "..." if len(thought) > 600 else thought
|
24
24
|
content = f"{header}\n [italic dim]{cls.escape_markup(thought_display)}[/]"
|
25
25
|
else:
|
26
26
|
content = f"{header}\n [italic dim]Thinking...[/]"
|
strix/llm/utils.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import html
|
1
2
|
import re
|
2
3
|
from typing import Any
|
3
4
|
|
@@ -36,6 +37,8 @@ def parse_tool_invocations(content: str) -> list[dict[str, Any]] | None:
|
|
36
37
|
for param_match in param_matches:
|
37
38
|
param_name = param_match.group(1)
|
38
39
|
param_value = param_match.group(2).strip()
|
40
|
+
|
41
|
+
param_value = html.unescape(param_value)
|
39
42
|
args[param_name] = param_value
|
40
43
|
|
41
44
|
tool_invocations.append({"toolName": fn_name, "args": args})
|
strix/runtime/docker_runtime.py
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import contextlib
|
1
2
|
import logging
|
2
3
|
import os
|
3
4
|
import secrets
|
@@ -78,11 +79,24 @@ class DockerRuntime(AbstractRuntime):
|
|
78
79
|
|
79
80
|
def _create_container_with_retry(self, scan_id: str, max_retries: int = 3) -> Container:
|
80
81
|
last_exception = None
|
82
|
+
container_name = f"strix-scan-{scan_id}"
|
81
83
|
|
82
84
|
for attempt in range(max_retries):
|
83
85
|
try:
|
84
86
|
self._verify_image_available(STRIX_IMAGE)
|
85
87
|
|
88
|
+
try:
|
89
|
+
existing_container = self.client.containers.get(container_name)
|
90
|
+
logger.warning(f"Container {container_name} already exists, removing it")
|
91
|
+
with contextlib.suppress(Exception):
|
92
|
+
existing_container.stop(timeout=5)
|
93
|
+
existing_container.remove(force=True)
|
94
|
+
time.sleep(1)
|
95
|
+
except NotFound:
|
96
|
+
pass
|
97
|
+
except DockerException as e:
|
98
|
+
logger.warning(f"Error checking/removing existing container: {e}")
|
99
|
+
|
86
100
|
caido_port = self._find_available_port()
|
87
101
|
tool_server_port = self._find_available_port()
|
88
102
|
tool_server_token = self._generate_sandbox_token()
|
@@ -94,7 +108,7 @@ class DockerRuntime(AbstractRuntime):
|
|
94
108
|
STRIX_IMAGE,
|
95
109
|
command="sleep infinity",
|
96
110
|
detach=True,
|
97
|
-
name=
|
111
|
+
name=container_name,
|
98
112
|
hostname=f"strix-scan-{scan_id}",
|
99
113
|
ports={
|
100
114
|
f"{caido_port}/tcp": caido_port,
|
@@ -137,7 +151,9 @@ class DockerRuntime(AbstractRuntime):
|
|
137
151
|
f"Failed to create Docker container after {max_retries} attempts: {last_exception}"
|
138
152
|
) from last_exception
|
139
153
|
|
140
|
-
def _get_or_create_scan_container(self, scan_id: str) -> Container:
|
154
|
+
def _get_or_create_scan_container(self, scan_id: str) -> Container: # noqa: PLR0912
|
155
|
+
container_name = f"strix-scan-{scan_id}"
|
156
|
+
|
141
157
|
if self._scan_container:
|
142
158
|
try:
|
143
159
|
self._scan_container.reload()
|
@@ -149,7 +165,43 @@ class DockerRuntime(AbstractRuntime):
|
|
149
165
|
self._tool_server_token = None
|
150
166
|
|
151
167
|
try:
|
152
|
-
|
168
|
+
container = self.client.containers.get(container_name)
|
169
|
+
container.reload()
|
170
|
+
|
171
|
+
if (
|
172
|
+
"strix-scan-id" not in container.labels
|
173
|
+
or container.labels["strix-scan-id"] != scan_id
|
174
|
+
):
|
175
|
+
logger.warning(
|
176
|
+
f"Container {container_name} exists but missing/wrong label, updating"
|
177
|
+
)
|
178
|
+
|
179
|
+
if container.status != "running":
|
180
|
+
logger.info(f"Starting existing container {container_name}")
|
181
|
+
container.start()
|
182
|
+
time.sleep(2)
|
183
|
+
|
184
|
+
self._scan_container = container
|
185
|
+
|
186
|
+
for env_var in container.attrs["Config"]["Env"]:
|
187
|
+
if env_var.startswith("TOOL_SERVER_PORT="):
|
188
|
+
self._tool_server_port = int(env_var.split("=")[1])
|
189
|
+
elif env_var.startswith("TOOL_SERVER_TOKEN="):
|
190
|
+
self._tool_server_token = env_var.split("=")[1]
|
191
|
+
|
192
|
+
logger.info(f"Reusing existing container {container_name}")
|
193
|
+
|
194
|
+
except NotFound:
|
195
|
+
pass
|
196
|
+
except DockerException as e:
|
197
|
+
logger.warning(f"Failed to get container by name {container_name}: {e}")
|
198
|
+
else:
|
199
|
+
return container
|
200
|
+
|
201
|
+
try:
|
202
|
+
containers = self.client.containers.list(
|
203
|
+
all=True, filters={"label": f"strix-scan-id={scan_id}"}
|
204
|
+
)
|
153
205
|
if containers:
|
154
206
|
container = cast("Container", containers[0])
|
155
207
|
if container.status != "running":
|
@@ -163,9 +215,10 @@ class DockerRuntime(AbstractRuntime):
|
|
163
215
|
elif env_var.startswith("TOOL_SERVER_TOKEN="):
|
164
216
|
self._tool_server_token = env_var.split("=")[1]
|
165
217
|
|
218
|
+
logger.info(f"Found existing container by label for scan {scan_id}")
|
166
219
|
return container
|
167
220
|
except DockerException as e:
|
168
|
-
logger.warning("Failed to find existing container for scan %s: %s", scan_id, e)
|
221
|
+
logger.warning("Failed to find existing container by label for scan %s: %s", scan_id, e)
|
169
222
|
|
170
223
|
logger.info("Creating new Docker container for scan %s", scan_id)
|
171
224
|
return self._create_container_with_retry(scan_id)
|
@@ -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>
|
@@ -55,20 +55,23 @@
|
|
55
55
|
1. PERSISTENT SESSION: The terminal maintains state between commands. Environment variables,
|
56
56
|
current directory, and running processes persist across multiple tool calls.
|
57
57
|
|
58
|
-
2. COMMAND EXECUTION:
|
59
|
-
|
58
|
+
2. COMMAND EXECUTION:
|
59
|
+
- AVOID: Long pipelines, complex bash scripts, or convoluted one-liners
|
60
|
+
- Break complex operations into multiple simple tool calls for clarity and debugging
|
61
|
+
- For multiple commands, prefer separate tool calls over chaining with && or ;
|
60
62
|
|
61
63
|
3. LONG-RUNNING COMMANDS:
|
62
64
|
- Commands never get killed automatically - they keep running in background
|
63
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
|
64
67
|
- Use empty command "" to check progress (waits for timeout period to collect output)
|
65
68
|
- Use C-c, C-d, C-z to interrupt processes (works automatically, no is_input needed)
|
66
69
|
|
67
70
|
4. TIMEOUT HANDLING:
|
68
|
-
- Timeout controls how long to wait before returning current output
|
71
|
+
- Timeout controls how long to wait before returning current output (max 60s cap)
|
69
72
|
- Commands are NEVER killed on timeout - they keep running
|
70
73
|
- After timeout, you can run new commands or check progress with empty command
|
71
|
-
-
|
74
|
+
- On timeout, status is 'running'; on completion, status is 'completed'
|
72
75
|
|
73
76
|
5. MULTIPLE TERMINALS: Use different terminal_id values to run multiple concurrent sessions.
|
74
77
|
|
@@ -95,7 +98,7 @@
|
|
95
98
|
# Run a command with custom timeout
|
96
99
|
<function=terminal_execute>
|
97
100
|
<parameter=command>npm install</parameter>
|
98
|
-
<parameter=timeout>
|
101
|
+
<parameter=timeout>60</parameter>
|
99
102
|
</function>
|
100
103
|
|
101
104
|
# Check progress of running command (waits for timeout to collect output)
|
@@ -1,14 +1,14 @@
|
|
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
6
|
strix/agents/base_agent.py,sha256=YMluoaFLbUnYDm0pOrDJ3zckZOSzvpzXhBDOGGU_YVg,14452
|
7
7
|
strix/agents/state.py,sha256=ORN2VyLOcQrppiuGcelD0C-1-uhxc6TS4AEqdbK7LZg,4858
|
8
8
|
strix/cli/__init__.py,sha256=ww23sFOQhICEIrIo0MtwWv2qHW5qUprvPj8QVjv3SM0,44
|
9
|
-
strix/cli/app.py,sha256=
|
9
|
+
strix/cli/app.py,sha256=uJehEq1qBj8laPS1AdIe2Z9BQRG3YZ7ogA-ZQBQM70U,39342
|
10
10
|
strix/cli/assets/cli.tcss,sha256=y7N_l8sJhDeflwqjmGz_Zm6xhVzpKUPJ6zcci-3qesE,11914
|
11
|
-
strix/cli/main.py,sha256=
|
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
|
@@ -17,12 +17,12 @@ strix/cli/tool_components/file_edit_renderer.py,sha256=ZYIC6-HHxgBDikpR4MHV24O0P
|
|
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
|
20
|
-
strix/cli/tool_components/python_renderer.py,sha256=
|
20
|
+
strix/cli/tool_components/python_renderer.py,sha256=2jlD6J9PpL-rOUq8uQiny54KLr45yVPO24Q-Tn_6VxM,1208
|
21
21
|
strix/cli/tool_components/registry.py,sha256=faTEi5upl3Z9okx-PCHqHSsN9DBGnTh3IaWvBFm6LOg,2338
|
22
22
|
strix/cli/tool_components/reporting_renderer.py,sha256=C_q7a548mu9U9IYD0YiDeN3ShTDEiGdCmKnyzFCUWGE,1719
|
23
|
-
strix/cli/tool_components/scan_info_renderer.py,sha256=
|
24
|
-
strix/cli/tool_components/terminal_renderer.py,sha256=
|
25
|
-
strix/cli/tool_components/thinking_renderer.py,sha256
|
23
|
+
strix/cli/tool_components/scan_info_renderer.py,sha256=R7Q5ZXYHiC6DDLvk_qrK3a04WiXy6D7l7yNDRMH-1X8,1933
|
24
|
+
strix/cli/tool_components/terminal_renderer.py,sha256=2qikkMZr79mDSY88e1QPXDbi9QnZy0t79NFKIEGywDg,3330
|
25
|
+
strix/cli/tool_components/thinking_renderer.py,sha256=-MQLkKCgOJksrustULFf2jhAjJrP5bbfS2BQ6zgNKCc,927
|
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
|
@@ -31,7 +31,7 @@ strix/llm/config.py,sha256=iBv1tuUOUDcP2gVQWhjtN8wtO5lWOipsER7Rnc3p6k4,603
|
|
31
31
|
strix/llm/llm.py,sha256=775w8IJ7ovTujfxy1x4euZGLBftIpgqC6TFf39ZE0zM,12691
|
32
32
|
strix/llm/memory_compressor.py,sha256=U2eD90SmVOxjZJTiNwVmf4G6g3lnhfwqIPtwhLztoag,6856
|
33
33
|
strix/llm/request_queue.py,sha256=hBjj8c_6_D30-j1FCz-fm2eHJA7XGE7rk52j_8QR_4s,2090
|
34
|
-
strix/llm/utils.py,sha256=
|
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
|
37
37
|
strix/prompts/vulnerabilities/authentication_jwt.jinja,sha256=FA2z8zdugITAc6QphrocA5O8bqyTl9TN_iTJxrtyNkQ,3974
|
@@ -45,12 +45,12 @@ strix/prompts/vulnerabilities/ssrf.jinja,sha256=MfRs3MtvgAEauaOrCHpKIoRnS0YCZKyC
|
|
45
45
|
strix/prompts/vulnerabilities/xss.jinja,sha256=rVD25fOYxeVgd6k-7eePkzADxCi2XopPSSNPd4J9NWg,6202
|
46
46
|
strix/prompts/vulnerabilities/xxe.jinja,sha256=hZ_SlrQQPsDWN2UF4VhIhpXIDAK66su055uEpgAdt5Y,7102
|
47
47
|
strix/runtime/__init__.py,sha256=v2oQ1JnfZXOTU8N3NOEI_MbxNp8BfNj8hTgvjCsNGvY,445
|
48
|
-
strix/runtime/docker_runtime.py,sha256=
|
48
|
+
strix/runtime/docker_runtime.py,sha256=li9s07kHUynnNrfYjvy8exX2l8OhhL4xIUNMa8ORTHw,14798
|
49
49
|
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.13.dist-info/LICENSE,sha256=fblpcTQlHjFL2NOSV_4XDJiz4q2bLtZ-l6yvlhPnueM,11345
|
96
|
+
strix_agent-0.1.13.dist-info/METADATA,sha256=eJHyy1olgY1HnDDCBhrzp7MBfJ11OBSIeWMNvCuFgPw,6139
|
97
|
+
strix_agent-0.1.13.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
98
|
+
strix_agent-0.1.13.dist-info/entry_points.txt,sha256=sswIgnkzSVSzQ3Rd046g7mhIPQaj_7RYlXgU_bQelF0,45
|
99
|
+
strix_agent-0.1.13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|