Skip to content

Commit 68b133c

Browse files
committed
renaming project
1 parent 8e8c23e commit 68b133c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+209
-209
lines changed

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contributing
22

3-
Thank you for considering contributing to agentspy! We welcome contributions to improve this project. For general contributions and community guidelines, please see the [repo](https://github.com/cyberark/community/).
3+
Thank you for considering contributing to agentwatch! We welcome contributions to improve this project. For general contributions and community guidelines, please see the [repo](https://github.com/cyberark/community/).
44
## General Steps for Contributing
55

66
1. Fork the project.

MANIFEST.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ include LICENSE
33
include pyproject.toml
44
include setup.cfg
55
include setup.py
6-
recursive-include src/agentspy *.py
6+
recursive-include src/agentwatch *.py
77
recursive-include tests *.py
88
recursive-include examples *.py
99
recursive-include docs *.md

NOTICES.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Copyright (c) 2025 CyberArk Software Ltd. All rights reserved
22

3-
agentspy is using the following open source components:
3+
agentwatch is using the following open source components:
44

55
1) pydantic (https://github.com/pydantic/pydantic): MIT License
66
Copyright (c) 2017 to present Pydantic Services Inc. and individual contributors.

README.md

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
<p align="center">
2-
<img src="resources/logo.png" alt="agentspy - AI Agent Observability Platform" width="400"/>
2+
<img src="resources/logo.png" alt="agentwatch - AI Agent Observability Platform" width="400"/>
33
</p>
4-
<h3 align="center" style="font-family: 'Fira Mono', Monospace;">agentspy</h3>
4+
<h3 align="center" style="font-family: 'Fira Mono', Monospace;">agentwatch</h3>
55
<h3 align="center" style="font-family: 'Fira Mono', Monospace;">Platform-Agnostic Agentic AI Runtime Observability Framework</h3>
66

77
<p align="center">
8-
<a href="https://github.com/cyberark/agentspy/commits/main">
9-
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/cyberark/agentspy">
8+
<a href="https://github.com/cyberark/agentwatch/commits/main">
9+
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/cyberark/agentwatch">
1010
</a>
11-
<a href="https://github.com/cyberark/agentspy">
12-
<img alt="GitHub code size" src="https://img.shields.io/github/languages/code-size/cyberark/agentspy">
11+
<a href="https://github.com/cyberark/agentwatch">
12+
<img alt="GitHub code size" src="https://img.shields.io/github/languages/code-size/cyberark/agentwatch">
1313
</a>
14-
<a href="https://github.com/cyberark/agentspy/blob/master/LICENSE">
15-
<img alt="Apache License" src="https://img.shields.io/github/license/cyberark/agentspy">
14+
<a href="https://github.com/cyberark/agentwatch/blob/master/LICENSE">
15+
<img alt="Apache License" src="https://img.shields.io/github/license/cyberark/agentwatch">
1616
</a>
1717
<a href="https://discord.gg/Zt297RAK">
1818
<img alt="Join Discord Community" src="https://img.shields.io/discord/1330486843938177157">
@@ -21,10 +21,10 @@
2121

2222
## 🌟 Overview
2323

24-
agentspy is a cutting-edge observability framework designed to provide deep insights into AI agent interactions across diverse platforms and frameworks. By seamlessly intercepting, logging, and analyzing interactions, agentspy empowers developers to understand and optimize their AI-driven applications with unprecedented visibility.
24+
agentwatch is a cutting-edge observability framework designed to provide deep insights into AI agent interactions across diverse platforms and frameworks. By seamlessly intercepting, logging, and analyzing interactions, agentwatch empowers developers to understand and optimize their AI-driven applications with unprecedented visibility.
2525

2626
<p align="center">
27-
<img src="resources/agentspy.gif" alt="agentspy Demonstration" width="800"/>
27+
<img src="resources/agentwatch.gif" alt="agentwatch Demonstration" width="800"/>
2828
</p>
2929

3030
## ✨ Key Features
@@ -42,25 +42,25 @@ agentspy is a cutting-edge observability framework designed to provide deep insi
4242
- Any other framework or library which uses an LLM :D
4343

4444
## 📦 Prerequisites
45-
To ensure compatibility with agentspy, your application must be written in Python. The visualization UI will be built locally on your endpoint using npm,
45+
To ensure compatibility with agentwatch, your application must be written in Python. The visualization UI will be built locally on your endpoint using npm,
4646
so make sure you have the following installed:
4747

4848
- Python 3.11+
4949
- npm
5050

5151
## 🔧 Installation
5252

53-
Install agentspy directly from GitHub:
53+
Install agentwatch directly from GitHub:
5454

5555
```bash
56-
pip install git+https://github.com/cyberark/agentspy.git
56+
pip install git+https://github.com/cyberark/agentwatch.git
5757
```
5858

5959
## 🖥️ Quick Start
6060

61-
1. Import agentspy in your main module:
61+
1. Import agentwatch in your main module:
6262
```python
63-
import agentspy
63+
import agentwatch
6464
```
6565

6666
2. Ensure your entry point is within a `__main__` block:
@@ -71,14 +71,14 @@ pip install git+https://github.com/cyberark/agentspy.git
7171

7272
3. Launch the UI:
7373
```bash
74-
agentspy ui
74+
agentwatch ui
7575
# (Take note this will open a new tab in your browser)
7676
```
7777

7878
Run your main module - and AI agent interactions will now be automatically tracked and monitored in the UI!
7979

8080
## 📌 Examples
81-
We've included a few examples under the [examples/](https://github.com/cyberark/agentspy/tree/main/examples) folder.
81+
We've included a few examples under the [examples/](https://github.com/cyberark/agentwatch/tree/main/examples) folder.
8282
To use the examples, clone this repository, and follow these steps:
8383

8484
1. Install python dependencies using poetry. If you don't have Poetry installed, get it [here](https://python-poetry.org/)
@@ -98,15 +98,15 @@ To use the examples, clone this repository, and follow these steps:
9898

9999
## 📚 Documentation
100100

101-
For comprehensive guides and detailed usage instructions, visit our [GitHub Wiki](https://github.com/cyberark/agentspy/wiki).
101+
For comprehensive guides and detailed usage instructions, visit our [GitHub Wiki](https://github.com/cyberark/agentwatch/wiki).
102102

103103
## 🤝 Contributing
104104

105-
We welcome contributions! Please review our [CONTRIBUTING.md](https://github.com/cyberark/agentspy/blob/main/CONTRIBUTING.md) for guidelines on how to get involved.
105+
We welcome contributions! Please review our [CONTRIBUTING.md](https://github.com/cyberark/agentwatch/blob/main/CONTRIBUTING.md) for guidelines on how to get involved.
106106

107107
## 📄 License
108108

109-
agentspy is released under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
109+
agentwatch is released under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
110110

111111
## 📧 Contact
112112

examples/autogen_example.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import autogen
77
from dotenv import load_dotenv
88

9-
from agentspy.core import initialize
9+
from agentwatch.core import initialize
1010

1111
logging.basicConfig(level=logging.DEBUG)
1212

examples/crewi_example.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from crewai import LLM, Agent, Crew, Process, Task
88
from crewai.tools import tool
99

10-
import agentspy
10+
import agentwatch
1111

1212
logger = logging.getLogger(__name__)
1313

examples/langgraph_example.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from langchain_openai import ChatOpenAI
1010
from langgraph.prebuilt import create_react_agent
1111

12-
import agentspy
12+
import agentwatch
1313

1414
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
1515

examples/weather_example.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from langchain_openai import ChatOpenAI
99
from langgraph.prebuilt import create_react_agent
1010

11-
# Uncomment this to use agentspy
12-
#import agentspy
11+
# Uncomment this to use agentwatch
12+
#import agentwatch
1313

1414
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
1515
load_dotenv()

pyproject.toml

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
[tool.setuptools]
2-
py-modules = ["agentspy"]
2+
py-modules = ["agentwatch"]
33

44
[tool.poetry]
5-
name = "agentspy"
5+
name = "agentwatch"
66
version = "1.0.0"
77
description = "Platform agnostic Agentic AI runtime observability framework"
88
authors = ["Shai Dvash <[email protected]>"]
@@ -39,7 +39,7 @@ pythonpath = [
3939
]
4040

4141
[tool.poetry.scripts]
42-
agentspy = "agentspy.cli:main"
42+
agentwatch = "agentwatch.cli:main"
4343

4444
[build-system]
4545
requires = ["setuptools>=40.9.0", "wheel", "poetry-core>=1.0.0"]
File renamed without changes.

run_ui.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
#!/bin/bash
2-
poetry run python src/agentspy/cli.py ui
2+
poetry run python src/agentwatch/cli.py ui

src/agentspy/consts.py

-3
This file was deleted.

src/agentspy/core.py

-14
This file was deleted.

src/agentspy/__init__.py src/agentwatch/__init__.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
import sys
33
from multiprocessing import current_process
44

5-
from agentspy.consts import AGENTSPY_INTERNAL
6-
from agentspy.core import initialize
5+
from agentwatch.consts import AGENTWATCH_INTERNAL
6+
from agentwatch.core import initialize
77

88

99
def _is_direct_execution() -> bool:
10-
return sys.argv[0].endswith("agentspy")
10+
return sys.argv[0].endswith("agentwatch")
1111

1212
def _safe_to_start() -> bool:
1313
# Only run on original script execution, not in subprocess or interpreter bootstrapping
1414
return current_process().name == "MainProcess" \
1515
and not hasattr(sys, '_called_from_spawn') \
16-
and os.environ.get(AGENTSPY_INTERNAL) is None \
16+
and os.environ.get(AGENTWATCH_INTERNAL) is None \
1717
and "PYTEST_VERSION" not in os.environ \
1818
and not _is_direct_execution()
1919

src/agentspy/cli.py src/agentwatch/cli.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
import sys
33
from pathlib import Path
44

5-
from agentspy.consts import AGENTSPY_INTERNAL
5+
from agentwatch.consts import AGENTWATCH_INTERNAL
66

77
sys.path.insert(0, str(Path(__file__).parent.parent))
8-
os.environ[AGENTSPY_INTERNAL] = "1"
8+
os.environ[AGENTWATCH_INTERNAL] = "1"
99

1010
import argparse
1111
import asyncio
@@ -15,14 +15,14 @@
1515
from pathlib import Path
1616
from typing import Any
1717

18-
from agentspy.visualization.app import run_fastapi
19-
from agentspy.visualization.consts import VISUALIZATION_SERVER_PORT
18+
from agentwatch.visualization.app import run_fastapi
19+
from agentwatch.visualization.consts import VISUALIZATION_SERVER_PORT
2020

2121
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
2222

2323
async def run_server() -> None:
2424
try:
25-
tasks = [run_fastapi("agentspy.visualization.server:app")]
25+
tasks = [run_fastapi("agentwatch.visualization.server:app")]
2626
await asyncio.sleep(1.0)
2727
webbrowser.open_new_tab(f"http://localhost:{VISUALIZATION_SERVER_PORT}/ui")
2828
await asyncio.gather(*tasks)
@@ -54,11 +54,11 @@ def run_ui() -> None:
5454
pass
5555

5656
def main() -> None:
57-
parser = argparse.ArgumentParser(prog="agentspy", description="agentspy - a platform agnostic agentic ai observability framework")
57+
parser = argparse.ArgumentParser(prog="agentwatch", description="agentwatch - a platform agnostic agentic ai observability framework")
5858
subparsers = parser.add_subparsers(dest="command", required=True)
5959

6060
# UI Command
61-
ui_parser = subparsers.add_parser("ui", help="Launch (and build, if necessary) the agentspy")
61+
ui_parser = subparsers.add_parser("ui", help="Launch (and build, if necessary) the agentwatch")
6262
ui_parser.set_defaults(func=run_ui)
6363

6464
args = parser.parse_args()

src/agentspy/client.py src/agentwatch/client.py

+19-19
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,26 @@
88
import uuid
99
from typing import Any, Optional, Type
1010

11-
from agentspy.enums import CommandAction
12-
from agentspy.event_processor import EventProcessor
13-
from agentspy.hooks.base import BaseHook, HookCallbackProto
14-
from agentspy.hooks.http.http_base_hook import HttpInterceptHook
15-
from agentspy.hooks.http.httpcore_hook import HttpcoreHook
16-
from agentspy.hooks.models import HookEvent
17-
from agentspy.models import Command, CommandResponse
18-
from agentspy.pipes import Pipes
11+
from agentwatch.enums import CommandAction
12+
from agentwatch.event_processor import EventProcessor
13+
from agentwatch.hooks.base import BaseHook, HookCallbackProto
14+
from agentwatch.hooks.http.http_base_hook import HttpInterceptHook
15+
from agentwatch.hooks.http.httpcore_hook import HttpcoreHook
16+
from agentwatch.hooks.models import HookEvent
17+
from agentwatch.models import Command, CommandResponse
18+
from agentwatch.pipes import Pipes
1919

2020
logger = logging.getLogger(__name__)
21-
class AgentspyClient(HookCallbackProto):
21+
class AgentwatchClient(HookCallbackProto):
2222
def __init__(self) -> None:
2323
self._process: Optional[multiprocessing.Process] = None
2424
self._running = False
2525

2626
self._exit_ready_event = multiprocessing.Event()
2727
self._initialized_event = multiprocessing.Event()
2828

29-
self._client_fd, self._agentspy_fd = multiprocessing.Pipe()
30-
self._agentspy = EventProcessor()
29+
self._client_fd, self._agentwatch_fd = multiprocessing.Pipe()
30+
self._agentwatch = EventProcessor()
3131

3232
self._llm_hosts =[
3333
"api.openai.com",
@@ -47,7 +47,7 @@ def __init__(self) -> None:
4747
atexit.register(self._cleanup)
4848

4949
self._execution_id = uuid.uuid4().hex
50-
self._start_agentspy()
50+
self._start_agentwatch()
5151

5252
def set_verbose(self) -> None:
5353
logger.setLevel(logging.DEBUG)
@@ -116,15 +116,15 @@ def send_command_wait(self, action: CommandAction, params: Optional[dict[str, An
116116
except TimeoutError:
117117
raise TimeoutError(f"Timeout waiting for response to {action}")
118118

119-
def _start_agentspy(self) -> None:
119+
def _start_agentwatch(self) -> None:
120120
"""Initialize the library by starting the process"""
121121
if self._running:
122122
logger.warning("Library is already initialized")
123123
return
124124

125125
logger.debug("Initializing library process")
126126
self._process = multiprocessing.Process(
127-
target=self._agentspy.start,
127+
target=self._agentwatch.start,
128128
args=(self._client_fd, self._initialized_event, self._exit_ready_event),
129129
daemon=True
130130
)
@@ -154,23 +154,23 @@ def _cleanup(self) -> None:
154154
def _write_command(self, command: Command) -> None:
155155
"""Write a command to the command pipe"""
156156
try:
157-
logger.debug(f"Sending command: {command.action}:{command.callback_id} to fd {self._agentspy_fd.fileno()}")
158-
Pipes.write_payload_sync(self._agentspy_fd, command)
157+
logger.debug(f"Sending command: {command.action}:{command.callback_id} to fd {self._agentwatch_fd.fileno()}")
158+
Pipes.write_payload_sync(self._agentwatch_fd, command)
159159
except Exception as e:
160160
logger.error(f"Error writing command: {e}")
161161
raise
162162

163163
def _read_response(self, timeout: float = 5.0) -> Optional[CommandResponse]:
164164
"""Read a response from the response pipe with timeout"""
165-
return Pipes.read_response(self._agentspy_fd, timeout)
165+
return Pipes.read_response(self._agentwatch_fd, timeout)
166166

167167
def shutdown(self) -> None:
168168
"""Shut down the library process"""
169169
if not self._running:
170170
logger.warning("Library is not running")
171171
return
172172

173-
logger.debug("Shutting down agentspy")
173+
logger.debug("Shutting down agentwatch")
174174
try:
175175
# Send shutdown command
176176
self.send_command(CommandAction.SHUTDOWN)
@@ -183,7 +183,7 @@ def shutdown(self) -> None:
183183

184184
# Force terminate if still running
185185
if self._process and self._process.is_alive():
186-
logger.warning("agentspy didn't shut down gracefully, terminating")
186+
logger.warning("agentwatch didn't shut down gracefully, terminating")
187187
self._process.terminate()
188188

189189
# Wait for process to terminate

src/agentwatch/consts.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from typing import Final
2+
3+
AGENTWATCH_INTERNAL: Final[str] = "AGENTWATCH_INTERNAL"

0 commit comments

Comments
 (0)