cowork-dash 0.1.4__tar.gz → 0.1.6__tar.gz
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.
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/CHANGELOG.md +29 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/PKG-INFO +31 -40
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/README.md +30 -39
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/agent.py +7 -4
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/app.py +729 -121
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/assets/app.js +12 -1
- cowork_dash-0.1.6/cowork_dash/assets/favicon.ico +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/assets/styles.css +144 -2
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/canvas.py +194 -80
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/cli.py +7 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/components.py +194 -104
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/config.py +13 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/file_utils.py +17 -6
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/layout.py +117 -23
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/tools.py +88 -11
- cowork_dash-0.1.6/docs/dark.png +0 -0
- cowork_dash-0.1.6/docs/light.png +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/pyproject.toml +1 -1
- cowork_dash-0.1.4/requirements.txt +0 -22
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/.claude/settings.local.json +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/.gitignore +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/LICENSE +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/MANIFEST.in +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/__init__.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/__main__.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/cowork_dash/assets/favicon.svg +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/docs/CLI_USAGE.md +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/examples/example_agent.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/examples/python_api_example.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/templates/index.html +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/tests/__init__.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/tests/conftest.py +0 -0
- {cowork_dash-0.1.4 → cowork_dash-0.1.6}/tests/test_core.py +0 -0
|
@@ -5,6 +5,33 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.1.6] - 2026-01-25
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
- Duplicate agent response rendering issue
|
|
12
|
+
- Agent state now resets on page refresh for clean sessions
|
|
13
|
+
- Tool calls indicator disappearing during execution (race condition fix)
|
|
14
|
+
- Missing return value in interrupt handling callback
|
|
15
|
+
- Default agent workspace now uses environment variable or current directory
|
|
16
|
+
|
|
17
|
+
## [0.1.5] - 2026-01-24
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- Stop button to halt agent execution mid-run
|
|
21
|
+
- Clear canvas confirmation modal with archive functionality
|
|
22
|
+
- Canvas item collapse/expand and delete features
|
|
23
|
+
- Folder selection and creation in file browser
|
|
24
|
+
- Double-click folders to change working directory
|
|
25
|
+
- Demo video and screenshots in README
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- Default agent workspace root changed to "/" for full virtual filesystem access
|
|
29
|
+
- Simplified README with concise installation instructions
|
|
30
|
+
- Mermaid diagrams now respect light/dark theme changes
|
|
31
|
+
|
|
32
|
+
### Removed
|
|
33
|
+
- requirements.txt (dependencies managed via pyproject.toml)
|
|
34
|
+
|
|
8
35
|
## [0.1.4] - 2026-01-20
|
|
9
36
|
|
|
10
37
|
### Added
|
|
@@ -91,6 +118,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
91
118
|
- Resizable split-pane interface
|
|
92
119
|
- Upload/download functionality for files
|
|
93
120
|
|
|
121
|
+
[0.1.6]: https://github.com/dkedar7/cowork-dash/compare/v0.1.5...v0.1.6
|
|
122
|
+
[0.1.5]: https://github.com/dkedar7/cowork-dash/compare/v0.1.4...v0.1.5
|
|
94
123
|
[0.1.4]: https://github.com/dkedar7/cowork-dash/compare/v0.1.3...v0.1.4
|
|
95
124
|
[0.1.3]: https://github.com/dkedar7/cowork-dash/compare/v0.1.2...v0.1.3
|
|
96
125
|
[0.1.2]: https://github.com/dkedar7/cowork-dash/compare/v0.1.1...v0.1.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cowork-dash
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.6
|
|
4
4
|
Summary: AI Agent Web Interface with Filesystem and Canvas Visualization
|
|
5
5
|
Project-URL: Homepage, https://github.com/dkedar7/cowork-dash
|
|
6
6
|
Project-URL: Documentation, https://github.com/dkedar7/cowork-dash/blob/main/README.md
|
|
@@ -51,6 +51,11 @@ Description-Content-Type: text/markdown
|
|
|
51
51
|
|
|
52
52
|
A web interface for AI agent interactions with filesystem workspace, canvas visualization, and real-time streaming.
|
|
53
53
|
|
|
54
|
+
<p align="center">
|
|
55
|
+
<img src="docs/light.png" alt="Cowork Dash - Light Mode" width="48%">
|
|
56
|
+
<img src="docs/dark.png" alt="Cowork Dash - Dark Mode" width="48%">
|
|
57
|
+
</p>
|
|
58
|
+
|
|
54
59
|
## Features
|
|
55
60
|
|
|
56
61
|
- **AI Agent Chat**: Real-time streaming with thinking process and task progress
|
|
@@ -58,6 +63,15 @@ A web interface for AI agent interactions with filesystem workspace, canvas visu
|
|
|
58
63
|
- **Canvas**: Visualize DataFrames, Plotly/Matplotlib charts, Mermaid diagrams, images
|
|
59
64
|
- **Flexible Configuration**: Environment variables, CLI args, or config file
|
|
60
65
|
|
|
66
|
+
## Demo
|
|
67
|
+
|
|
68
|
+
<p align="center">
|
|
69
|
+
<em>Organizing files with an AI agent</em><br><br>
|
|
70
|
+
<a href="https://www.youtube.com/watch?v=yKB9cBx80VE">
|
|
71
|
+
<img src="https://img.youtube.com/vi/yKB9cBx80VE/maxresdefault.jpg" alt="Cowork Dash Demo Video" width="70%">
|
|
72
|
+
</a>
|
|
73
|
+
</p>
|
|
74
|
+
|
|
61
75
|
## Quick Start
|
|
62
76
|
|
|
63
77
|
### Installation
|
|
@@ -68,7 +82,7 @@ pip install cowork-dash
|
|
|
68
82
|
|
|
69
83
|
# Or run directly with uvx (no installation needed)
|
|
70
84
|
export ANTHROPIC_API_KEY="your_anthropic_api_key"
|
|
71
|
-
|
|
85
|
+
cowork-dash run
|
|
72
86
|
```
|
|
73
87
|
|
|
74
88
|
### Run
|
|
@@ -100,19 +114,6 @@ Open browser to `http://localhost:8050`
|
|
|
100
114
|
2. **Environment Variables** - `DEEPAGENT_*`
|
|
101
115
|
3. **Config File** - `config.py` defaults
|
|
102
116
|
|
|
103
|
-
### Environment Variables (optional)
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
export DEEPAGENT_SPEC=my_agent.py:agent # Set any Langgraph agent
|
|
107
|
-
export DEEPAGENT_WORKSPACE_ROOT=/path/to/workspace
|
|
108
|
-
export DEEPAGENT_PORT=9000 # optional (default: 8050)
|
|
109
|
-
export DEEPAGENT_HOST=0.0.0.0 # optional (default: localhost)
|
|
110
|
-
export DEEPAGENT_DEBUG=true # optional (default: false)
|
|
111
|
-
export DEEPAGENT_APP_TITLE="My App" # optional
|
|
112
|
-
export DEEPAGENT_APP_SUBTITLE="Subtitle" # optional
|
|
113
|
-
|
|
114
|
-
cowork-dash run
|
|
115
|
-
```
|
|
116
117
|
|
|
117
118
|
### CLI Options (all optional)
|
|
118
119
|
|
|
@@ -120,12 +121,26 @@ cowork-dash run
|
|
|
120
121
|
cowork-dash run [OPTIONS]
|
|
121
122
|
|
|
122
123
|
--workspace PATH Workspace directory (default: current directory)
|
|
123
|
-
--agent PATH:OBJECT
|
|
124
|
+
--agent PATH:OBJECT Point to your Langgraph agent (default: default agent, manual mode)
|
|
124
125
|
--port PORT Server port (default: 8050)
|
|
125
126
|
--host HOST Server host (default: localhost)
|
|
126
127
|
--debug Enable debug mode
|
|
127
128
|
--title TITLE App title (default: "Cowork Dash")
|
|
128
129
|
--subtitle TEXT App subtitle (default: "AI-Powered Workspace")
|
|
130
|
+
--welcome-message TEXT Welcome message shown in chat (supports markdown)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Environment Variables (optional)
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
export DEEPAGENT_SPEC=my_agent.py:agent # Set any Langgraph agent
|
|
137
|
+
export DEEPAGENT_WORKSPACE_ROOT=/path/to/workspace
|
|
138
|
+
export DEEPAGENT_DEBUG=true # optional (default: false)
|
|
139
|
+
export DEEPAGENT_APP_TITLE="My App" # optional
|
|
140
|
+
export DEEPAGENT_APP_SUBTITLE="Subtitle" # optional
|
|
141
|
+
export DEEPAGENT_WELCOME_MESSAGE="Hello!" # optional (supports markdown)
|
|
142
|
+
|
|
143
|
+
cowork-dash run
|
|
129
144
|
```
|
|
130
145
|
|
|
131
146
|
### Python API
|
|
@@ -141,27 +156,10 @@ run_app(agent, workspace="~/my-workspace")
|
|
|
141
156
|
# Option 2: Use agent spec
|
|
142
157
|
run_app(agent_spec="my_agent.py:agent", workspace="~/my-workspace")
|
|
143
158
|
|
|
144
|
-
# Option 3: Manual mode (no agent)
|
|
145
|
-
run_app(workspace="~/my-workspace", port=8080, debug=True)
|
|
146
159
|
```
|
|
147
160
|
|
|
148
161
|
## Agent Integration
|
|
149
162
|
|
|
150
|
-
### Workspace Access
|
|
151
|
-
|
|
152
|
-
Cowork Dash sets `DEEPAGENT_WORKSPACE_ROOT` environment variable for your agent:
|
|
153
|
-
|
|
154
|
-
```python
|
|
155
|
-
import os
|
|
156
|
-
from pathlib import Path
|
|
157
|
-
|
|
158
|
-
# In your agent code
|
|
159
|
-
workspace = Path(os.getenv('DEEPAGENT_WORKSPACE_ROOT', './'))
|
|
160
|
-
|
|
161
|
-
# Read/write files in workspace
|
|
162
|
-
config_file = workspace / "config.json"
|
|
163
|
-
```
|
|
164
|
-
|
|
165
163
|
### Agent Specification
|
|
166
164
|
|
|
167
165
|
Load agents using `path:object` format:
|
|
@@ -174,13 +172,6 @@ cowork-dash run --agent agent.py:my_agent
|
|
|
174
172
|
cowork-dash run --agent /path/to/agent.py:agent_instance
|
|
175
173
|
```
|
|
176
174
|
|
|
177
|
-
### Agent Requirements
|
|
178
|
-
|
|
179
|
-
Your agent must implement:
|
|
180
|
-
- **Streaming**: `agent.stream(input, stream_mode="updates")`
|
|
181
|
-
- **Message format**: `{"messages": [{"role": "user", "content": "..."}]}`
|
|
182
|
-
- **Workspace access** (optional): Read `DEEPAGENT_WORKSPACE_ROOT` env var
|
|
183
|
-
|
|
184
175
|
### Example Agent Setup
|
|
185
176
|
|
|
186
177
|
```python
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
A web interface for AI agent interactions with filesystem workspace, canvas visualization, and real-time streaming.
|
|
4
4
|
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="docs/light.png" alt="Cowork Dash - Light Mode" width="48%">
|
|
7
|
+
<img src="docs/dark.png" alt="Cowork Dash - Dark Mode" width="48%">
|
|
8
|
+
</p>
|
|
9
|
+
|
|
5
10
|
## Features
|
|
6
11
|
|
|
7
12
|
- **AI Agent Chat**: Real-time streaming with thinking process and task progress
|
|
@@ -9,6 +14,15 @@ A web interface for AI agent interactions with filesystem workspace, canvas visu
|
|
|
9
14
|
- **Canvas**: Visualize DataFrames, Plotly/Matplotlib charts, Mermaid diagrams, images
|
|
10
15
|
- **Flexible Configuration**: Environment variables, CLI args, or config file
|
|
11
16
|
|
|
17
|
+
## Demo
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<em>Organizing files with an AI agent</em><br><br>
|
|
21
|
+
<a href="https://www.youtube.com/watch?v=yKB9cBx80VE">
|
|
22
|
+
<img src="https://img.youtube.com/vi/yKB9cBx80VE/maxresdefault.jpg" alt="Cowork Dash Demo Video" width="70%">
|
|
23
|
+
</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
12
26
|
## Quick Start
|
|
13
27
|
|
|
14
28
|
### Installation
|
|
@@ -19,7 +33,7 @@ pip install cowork-dash
|
|
|
19
33
|
|
|
20
34
|
# Or run directly with uvx (no installation needed)
|
|
21
35
|
export ANTHROPIC_API_KEY="your_anthropic_api_key"
|
|
22
|
-
|
|
36
|
+
cowork-dash run
|
|
23
37
|
```
|
|
24
38
|
|
|
25
39
|
### Run
|
|
@@ -51,19 +65,6 @@ Open browser to `http://localhost:8050`
|
|
|
51
65
|
2. **Environment Variables** - `DEEPAGENT_*`
|
|
52
66
|
3. **Config File** - `config.py` defaults
|
|
53
67
|
|
|
54
|
-
### Environment Variables (optional)
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
export DEEPAGENT_SPEC=my_agent.py:agent # Set any Langgraph agent
|
|
58
|
-
export DEEPAGENT_WORKSPACE_ROOT=/path/to/workspace
|
|
59
|
-
export DEEPAGENT_PORT=9000 # optional (default: 8050)
|
|
60
|
-
export DEEPAGENT_HOST=0.0.0.0 # optional (default: localhost)
|
|
61
|
-
export DEEPAGENT_DEBUG=true # optional (default: false)
|
|
62
|
-
export DEEPAGENT_APP_TITLE="My App" # optional
|
|
63
|
-
export DEEPAGENT_APP_SUBTITLE="Subtitle" # optional
|
|
64
|
-
|
|
65
|
-
cowork-dash run
|
|
66
|
-
```
|
|
67
68
|
|
|
68
69
|
### CLI Options (all optional)
|
|
69
70
|
|
|
@@ -71,12 +72,26 @@ cowork-dash run
|
|
|
71
72
|
cowork-dash run [OPTIONS]
|
|
72
73
|
|
|
73
74
|
--workspace PATH Workspace directory (default: current directory)
|
|
74
|
-
--agent PATH:OBJECT
|
|
75
|
+
--agent PATH:OBJECT Point to your Langgraph agent (default: default agent, manual mode)
|
|
75
76
|
--port PORT Server port (default: 8050)
|
|
76
77
|
--host HOST Server host (default: localhost)
|
|
77
78
|
--debug Enable debug mode
|
|
78
79
|
--title TITLE App title (default: "Cowork Dash")
|
|
79
80
|
--subtitle TEXT App subtitle (default: "AI-Powered Workspace")
|
|
81
|
+
--welcome-message TEXT Welcome message shown in chat (supports markdown)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Environment Variables (optional)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
export DEEPAGENT_SPEC=my_agent.py:agent # Set any Langgraph agent
|
|
88
|
+
export DEEPAGENT_WORKSPACE_ROOT=/path/to/workspace
|
|
89
|
+
export DEEPAGENT_DEBUG=true # optional (default: false)
|
|
90
|
+
export DEEPAGENT_APP_TITLE="My App" # optional
|
|
91
|
+
export DEEPAGENT_APP_SUBTITLE="Subtitle" # optional
|
|
92
|
+
export DEEPAGENT_WELCOME_MESSAGE="Hello!" # optional (supports markdown)
|
|
93
|
+
|
|
94
|
+
cowork-dash run
|
|
80
95
|
```
|
|
81
96
|
|
|
82
97
|
### Python API
|
|
@@ -92,27 +107,10 @@ run_app(agent, workspace="~/my-workspace")
|
|
|
92
107
|
# Option 2: Use agent spec
|
|
93
108
|
run_app(agent_spec="my_agent.py:agent", workspace="~/my-workspace")
|
|
94
109
|
|
|
95
|
-
# Option 3: Manual mode (no agent)
|
|
96
|
-
run_app(workspace="~/my-workspace", port=8080, debug=True)
|
|
97
110
|
```
|
|
98
111
|
|
|
99
112
|
## Agent Integration
|
|
100
113
|
|
|
101
|
-
### Workspace Access
|
|
102
|
-
|
|
103
|
-
Cowork Dash sets `DEEPAGENT_WORKSPACE_ROOT` environment variable for your agent:
|
|
104
|
-
|
|
105
|
-
```python
|
|
106
|
-
import os
|
|
107
|
-
from pathlib import Path
|
|
108
|
-
|
|
109
|
-
# In your agent code
|
|
110
|
-
workspace = Path(os.getenv('DEEPAGENT_WORKSPACE_ROOT', './'))
|
|
111
|
-
|
|
112
|
-
# Read/write files in workspace
|
|
113
|
-
config_file = workspace / "config.json"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
114
|
### Agent Specification
|
|
117
115
|
|
|
118
116
|
Load agents using `path:object` format:
|
|
@@ -125,13 +123,6 @@ cowork-dash run --agent agent.py:my_agent
|
|
|
125
123
|
cowork-dash run --agent /path/to/agent.py:agent_instance
|
|
126
124
|
```
|
|
127
125
|
|
|
128
|
-
### Agent Requirements
|
|
129
|
-
|
|
130
|
-
Your agent must implement:
|
|
131
|
-
- **Streaming**: `agent.stream(input, stream_mode="updates")`
|
|
132
|
-
- **Message format**: `{"messages": [{"role": "user", "content": "..."}]}`
|
|
133
|
-
- **Workspace access** (optional): Read `DEEPAGENT_WORKSPACE_ROOT` env var
|
|
134
|
-
|
|
135
126
|
### Example Agent Setup
|
|
136
127
|
|
|
137
128
|
```python
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
import uuid
|
|
2
3
|
from deepagents import create_deep_agent
|
|
3
4
|
from langgraph.checkpoint.memory import InMemorySaver
|
|
@@ -85,14 +86,16 @@ Work iteratively like a human using Jupyter:
|
|
|
85
86
|
4. Keep cells focused on single tasks for easier debugging
|
|
86
87
|
|
|
87
88
|
### General
|
|
88
|
-
1.
|
|
89
|
-
2.
|
|
89
|
+
1. ALWAYS use write_todos to track your progress and next steps
|
|
90
|
+
2. ALWAYS think_tool to reason through reqests, irrespective of complexity
|
|
90
91
|
3. Be proactive in exploring the filesystem when relevant
|
|
91
92
|
4. Provide clear, helpful responses
|
|
92
93
|
|
|
93
94
|
The workspace is your sandbox - feel free to create files, organize content, and help users manage their projects."""
|
|
94
95
|
|
|
95
|
-
|
|
96
|
+
# Get workspace root from environment variable or default to current directory
|
|
97
|
+
workspace_root = os.getenv("DEEPAGENT_WORKSPACE_ROOT", os.getcwd())
|
|
98
|
+
backend = FilesystemBackend(root_dir=workspace_root, virtual_mode=True)
|
|
96
99
|
|
|
97
100
|
agent = create_deep_agent(
|
|
98
101
|
system_prompt=SYSTEM_PROMPT,
|
|
@@ -113,6 +116,6 @@ agent = create_deep_agent(
|
|
|
113
116
|
get_notebook_canvas_items,
|
|
114
117
|
clear_notebook_canvas_items,
|
|
115
118
|
],
|
|
116
|
-
|
|
119
|
+
interrupt_on=dict(bash=True),
|
|
117
120
|
checkpointer=InMemorySaver()
|
|
118
121
|
)
|