Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,21 +48,21 @@ Neuro SAN also offers:
**🚀 For the easiest way to get started, use our automated quick start scripts!**

See the [quick-start/README.md](quick-start/README.md) for simple one-command scripts that handle all setup automatically:
- **macOS/Linux:** `./quick-start/start-server.sh`
- **Windows:** `quick-start\start-server.bat`
* **macOS/Linux:** `./quick-start/start-server.sh`
* **Windows:** `quick-start\start-server.bat`
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fix pymarkdownlint - why didn't this show up before?


### Prerequisites

Before running the quick start scripts, ensure you have:
- You have Python 3.12 or better installed on your machine
- You have virtual environment support for Python installed (typically included with Python 3.12+)
* You have Python 3.12 or better installed on your machine
* You have virtual environment support for Python installed (typically included with Python 3.12+)

These scripts automatically:
- Create and activate virtual environment
- Install all dependencies
- Set up environment variables
- Enable CORS for web applications
- Launch the server
* Create and activate virtual environment
* Install all dependencies
* Set up environment variables
* Enable CORS for web applications
* Launch the server

For manual setup, continue with the instructions below.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ def get_inspector(self) -> AgentNetworkInspector:
# For now, our inspector is an AgentToolFactory
return self.factory

def get_sly_data(self) -> Dict[str, Any]:
"""
:return: A mapping whose keys might be referenceable by agents, but whose
values should not appear in agent chat text. Can be an empty dictionary.
"""
return self.sly_data
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add get_sly_data() implementation.


def get_origin(self) -> List[Dict[str, Any]]:
"""
:return: A List of origin dictionaries indicating the origin of the run.
Expand Down
7 changes: 7 additions & 0 deletions neuro_san/internals/run_context/interfaces/tool_caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,10 @@ def get_name(self) -> str:
:return: the name of the data-driven agent as it comes from the spec
"""
raise NotImplementedError

def get_sly_data(self) -> Dict[str, Any]:
"""
:return: A mapping whose keys might be referenceable by agents, but whose
values should not appear in agent chat text. Can be an empty dictionary.
"""
raise NotImplementedError
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add get_sly_data() method to ToolCaller interface

Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ async def create_mcp_tool(self, mcp_info: Union[str, Dict[str, Any]]) -> List[Ba
# By default, assume no allowed tools. This may get updated below or in the LangChainMcpAdadter.
allowed_tools: List[str] = None
# Get HTTP headers from sly_data if available
http_headers: Dict[str, Any] = self.tool_caller.sly_data.get("http_headers", {})
http_headers: Dict[str, Any] = self.tool_caller.get_sly_data().get("http_headers", {})
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use get_sly_data() method instead of assuming a member on an interface.


if isinstance(mcp_info, str):
server_url: str = mcp_info
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,11 +430,11 @@ def parse_tool_output(self, tool_output: Dict[str, Any]) -> BaseMessage:

# Integrate any sly data
tool_sly_data: Dict[str, Any] = tool_output.get("sly_data")
if tool_sly_data and tool_sly_data != self.tool_caller.sly_data:
if tool_sly_data and tool_sly_data != self.tool_caller.get_sly_data():
# We have sly data from the tool output that is not the same as our own
# and it has data in it. Integrate that.
# It's possible we might need to run a SlyDataRedactor against from_download.sly_data on this.
self.tool_caller.sly_data.update(tool_sly_data)
self.tool_caller.get_sly_data().update(tool_sly_data)

return tool_message

Expand Down
1 change: 1 addition & 0 deletions quick-start/start-client.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ else
fi

echo "Activating virtual environment..."
# shellcheck disable=SC1091
Copy link
Collaborator Author

@d1donlydfink d1donlydfink Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixes to shellcheck - why didn't these show up before?

source "$VENV_DIR/bin/activate"
echo "✅ Virtual environment activated"
echo ""
Expand Down
3 changes: 2 additions & 1 deletion quick-start/start-server.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ echo ""
VENV_DIR=".venv"

echo "Activating virtual environment..."
# shellcheck disable=SC1091
source "$VENV_DIR/bin/activate"
echo "✅ Virtual environment activated"
echo ""
Expand Down Expand Up @@ -61,7 +62,7 @@ echo ""

# Check if port is already in use
PORT=${AGENT_HTTP_PORT:-8080}
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1 ; then
if lsof -Pi :"$PORT" -sTCP:LISTEN -t >/dev/null 2>&1 ; then
echo "❌ ERROR: Port $PORT is already in use!"
echo ""
echo "To see what's using the port:"
Expand Down
Loading