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.
@@ -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
- - Work NON-STOP until finding something significant
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(keymap_indicator.update, "[dim]ESC to stop agent[/dim]")
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:[/bold cyan] {STRIX_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[:250] + "..." if len(code) > 250 else 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}[/bold #22c55e]"
31
+ return f"[bold #22c55e]{target_url}[/]"
32
32
  if target_repo := target.get("target_repo"):
33
- return f"[bold #22c55e]{target_repo}[/bold #22c55e]"
33
+ return f"[bold #22c55e]{target_repo}[/]"
34
34
  if target_path := target.get("target_path"):
35
- return f"[bold #22c55e]{target_path}[/bold #22c55e]"
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}[/bold #22c55e]"
52
+ content = f"🤖 Spawned subagent [bold #22c55e]{name}[/]"
53
53
  if task:
54
54
  content += f"\n Task: [dim]{task}[/dim]"
55
55
 
@@ -125,7 +125,7 @@ class TerminalRenderer(BaseToolRenderer):
125
125
  if not command:
126
126
  return ""
127
127
 
128
- if len(command) > 200:
129
- command = command[:197] + "..."
128
+ if len(command) > 400:
129
+ command = command[:397] + "..."
130
130
 
131
131
  return cls.escape_markup(command)
@@ -20,7 +20,7 @@ class ThinkRenderer(BaseToolRenderer):
20
20
  header = "🧠 [bold #a855f7]Thinking[/]"
21
21
 
22
22
  if thought:
23
- thought_display = thought[:200] + "..." if len(thought) > 200 else 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})
@@ -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=f"strix-scan-{scan_id}",
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
- containers = self.client.containers.list(filters={"label": f"strix-scan-id={scan_id}"})
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 timeout behavior. Set to higher values for long-running commands like installations or tests. Default is 10 seconds.</description>
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: Execute one command at a time. For multiple commands, chain them with
59
- && or ; operators, or make separate tool calls.
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
- - All commands return status "completed" - you have full control
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>120</parameter>
101
+ <parameter=timeout>60</parameter>
99
102
  </function>
100
103
 
101
104
  # Check progress of running command (waits for timeout to collect output)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strix-agent
3
- Version: 0.1.11
3
+ Version: 0.1.13
4
4
  Summary: Open-source AI Hackers for your apps
5
5
  License: Apache-2.0
6
6
  Keywords: cybersecurity,security,vulnerability,scanner,pentest,agent,ai,cli
@@ -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=NDOnqVDC1Eayixmv2PZEO-OM0_Ok0fWLZ5fhS2XOHzI,15412
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=x05-SyJrZrodGbw-vS5f0oNMJrXzM2ESRKlQu83d3O8,39284
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=f0XGL9rCqdm_aqGYEk79_vZoCxDkp_3Mcjpz4tUj3G4,21531
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=uddPvUVpeCU3ihHfn3zpM-IaWC883A8lEsmDNJ4j6WQ,1208
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=9gcwJIzp9R9pOn8DtYv8WtRF1QL-sWXihGiA3JMbZmw,1981
24
- strix/cli/tool_components/terminal_renderer.py,sha256=09gP26djA9i3uz1Lwbc09gYn9EQQGoFBNqMM86607nw,3330
25
- strix/cli/tool_components/thinking_renderer.py,sha256=s8Y1V8lvDYv9sottCZPOWQmKLyvDP1wpHO22x7XMc_U,927
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=M84mVstjWY3-fwc2KyVAcfpF3IMHWnbkjRpGUUQ1TcM,2474
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=n0RqsTuWqYSlSIyowtXbTkZ32_69vAPRhqP-Nq5JHyA,12695
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=7D4MWAumYolgYpg2fbzYQkFL69Pkk6RtPZkt2gb3hyM,20374
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=X-dbr9Bybdx58qvA71GCHPCpdfj__85DpsUCf_t_1qk,6971
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.11.dist-info/LICENSE,sha256=fblpcTQlHjFL2NOSV_4XDJiz4q2bLtZ-l6yvlhPnueM,11345
96
- strix_agent-0.1.11.dist-info/METADATA,sha256=gS18scoidSrz-61DWr15V2K21s38P1mCiLy3uQcLiB0,6139
97
- strix_agent-0.1.11.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
98
- strix_agent-0.1.11.dist-info/entry_points.txt,sha256=sswIgnkzSVSzQ3Rd046g7mhIPQaj_7RYlXgU_bQelF0,45
99
- strix_agent-0.1.11.dist-info/RECORD,,
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,,