cowork-dash 0.1.2__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.
@@ -0,0 +1,16 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(tree:*)",
5
+ "Bash(find:*)",
6
+ "Bash(xargs:*)",
7
+ "Bash(python3:*)",
8
+ "Bash(cat:*)",
9
+ "Bash(gh pr view:*)",
10
+ "Bash(gh pr create:*)",
11
+ "Bash(pip show:*)"
12
+ ],
13
+ "deny": [],
14
+ "ask": []
15
+ }
16
+ }
@@ -0,0 +1,224 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ #uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ #poetry.lock
109
+ #poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ #pdm.lock
116
+ #pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ #pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # SageMath parsed files
135
+ *.sage.py
136
+
137
+ # Environments
138
+ .env
139
+ .envrc
140
+ .venv
141
+ env/
142
+ venv/
143
+ ENV/
144
+ env.bak/
145
+ venv.bak/
146
+
147
+ # Spyder project settings
148
+ .spyderproject
149
+ .spyproject
150
+
151
+ # Rope project settings
152
+ .ropeproject
153
+
154
+ # mkdocs documentation
155
+ /site
156
+
157
+ # mypy
158
+ .mypy_cache/
159
+ .dmypy.json
160
+ dmypy.json
161
+
162
+ # Pyre type checker
163
+ .pyre/
164
+
165
+ # pytype static type analyzer
166
+ .pytype/
167
+
168
+ # Cython debug symbols
169
+ cython_debug/
170
+
171
+ # PyCharm
172
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
173
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
174
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
175
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
176
+ #.idea/
177
+
178
+ # Abstra
179
+ # Abstra is an AI-powered process automation framework.
180
+ # Ignore directories containing user credentials, local state, and settings.
181
+ # Learn more at https://abstra.io/docs
182
+ .abstra/
183
+
184
+ # Visual Studio Code
185
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
186
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
187
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
188
+ # you could uncomment the following to ignore the entire vscode folder
189
+ # .vscode/
190
+
191
+ # Ruff stuff:
192
+ .ruff_cache/
193
+
194
+ # PyPI configuration file
195
+ .pypirc
196
+
197
+ # Cursor
198
+ # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
199
+ # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
200
+ # refer to https://docs.cursor.com/context/ignore-files
201
+ .cursorignore
202
+ .cursorindexingignore
203
+
204
+ # Marimo
205
+ marimo/_static/
206
+ marimo/_lsp/
207
+ __marimo__/
208
+
209
+ # Node modules
210
+ **/node_modules/
211
+ **/lib/
212
+ tsconfig.tsbuildinfo
213
+ *.tsbuildinfo
214
+
215
+ # Development/test files
216
+ # my_agent.py
217
+
218
+ # JupyterLab extension build outputs (already handled by Python packaging)
219
+ *.bundled.js
220
+ jupyter_deepagents/labextension
221
+ .yarn/
222
+
223
+ # Canvas directory
224
+ .canvas*/
@@ -0,0 +1,79 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.2] - 2026-01-19
9
+
10
+ ### Added
11
+ - Auto-scroll chat messages to bottom when new content is added
12
+ - SVG favicon support with custom logo
13
+ - Response time display for agent messages (e.g., "23s" or "1m 43s")
14
+ - Persistent todos in chat history (todos now stick like tool calls)
15
+ - dash-iconify as a required dependency
16
+
17
+ ### Changed
18
+ - Eliminated index.html template - all styles now in styles.css
19
+ - Simplified app configuration with inline index string for favicon only
20
+ - Improved todo rendering to support list format from agent output
21
+ - Default agent spec now points to package's agent.py
22
+
23
+ ### Fixed
24
+ - Terminal and refresh button icons not visible (switched to mdi icons)
25
+ - dangerously_allow_html incorrectly passed to html.Div instead of dcc.Markdown
26
+ - Todo items not rendering (format_todos now handles both list and dict formats)
27
+
28
+ ### UI/UX
29
+ - Added Google Fonts import directly in CSS
30
+ - Consolidated all animations and styles in styles.css
31
+ - Dark mode support for all new components
32
+
33
+ ## [0.1.1] - 2025-11-29
34
+
35
+ ### Added
36
+ - Environment variable configuration support for all settings with `DEEPAGENT_*` prefix
37
+ - Configuration priority system: CLI args > Environment variables > config.py defaults
38
+ - Enhanced Python API: `run_app()` now accepts agent instance as first parameter
39
+ - Comprehensive test suite with 15 core functionality tests (CLI, Python API, agent loading)
40
+ - `uvx` compatibility for running without installation
41
+ - Python API examples demonstrating three usage patterns
42
+ - Environment variable `DEEPAGENT_WORKSPACE_ROOT` automatically set for agents
43
+
44
+ ### Changed
45
+ - **BREAKING**: `run_app()` signature updated - `agent_instance` is now the first parameter (optional)
46
+ - README reduced by 56% for better clarity while maintaining all essential information
47
+ - Configuration documentation enhanced with clear priority hierarchy
48
+ - Agent priority in `run_app()`: agent_spec > agent_instance > config file
49
+ - Made all configuration settings clearly marked as optional in documentation
50
+
51
+ ### Fixed
52
+ - Path conversion issue in config.py when using environment variables
53
+ - Test suite patch targets for proper CLI testing
54
+
55
+ ### Documentation
56
+ - Added comprehensive environment variables documentation
57
+ - Added `uvx` installation and usage examples
58
+ - Updated Python API examples to show new agent instance pattern
59
+ - Clarified configuration priority in all documentation
60
+ - Added example agent setup with DeepAgents integration
61
+
62
+ ## [0.1.0] - 2025-11-26
63
+
64
+ ### Added
65
+ - Initial release
66
+ - AI Agent Chat with real-time streaming
67
+ - File Browser with interactive file tree and lazy loading
68
+ - Canvas for visualizing DataFrames, Plotly/Matplotlib charts, Mermaid diagrams, images
69
+ - Flexible configuration via config.py
70
+ - CLI interface with `cowork-dash` command
71
+ - Python API with `run_app()` function
72
+ - Support for custom agents via agent specification
73
+ - Manual mode (file browser only, no agent)
74
+ - Resizable split-pane interface
75
+ - Upload/download functionality for files
76
+
77
+ [0.1.2]: https://github.com/dkedar7/cowork-dash/compare/v0.1.1...v0.1.2
78
+ [0.1.1]: https://github.com/dkedar7/cowork-dash/compare/v0.1.0...v0.1.1
79
+ [0.1.0]: https://github.com/dkedar7/cowork-dash/releases/tag/v0.1.0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Kedar Dabhadkar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,13 @@
1
+ include README.md
2
+ include LICENSE
3
+ include pyproject.toml
4
+
5
+ # Include package data
6
+ recursive-include cowork_dash/assets *
7
+ recursive-include cowork_dash/templates *
8
+ include cowork_dash/config.py
9
+
10
+ # Exclude unnecessary files
11
+ global-exclude __pycache__
12
+ global-exclude *.py[co]
13
+ global-exclude .DS_Store
@@ -0,0 +1,238 @@
1
+ Metadata-Version: 2.4
2
+ Name: cowork-dash
3
+ Version: 0.1.2
4
+ Summary: AI Agent Web Interface with Filesystem and Canvas Visualization
5
+ Project-URL: Homepage, https://github.com/dkedar7/cowork-dash
6
+ Project-URL: Documentation, https://github.com/dkedar7/cowork-dash/blob/main/README.md
7
+ Project-URL: Repository, https://github.com/dkedar7/cowork-dash
8
+ Project-URL: Bug Tracker, https://github.com/dkedar7/cowork-dash/issues
9
+ Author-email: Kedar Dabhadkar <kdabhadk@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: agent,ai,cowork,dash,dashboard,plotly,visualization
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
22
+ Classifier: Topic :: Software Development :: User Interfaces
23
+ Requires-Python: >=3.11
24
+ Requires-Dist: dash-iconify>=0.1.2
25
+ Requires-Dist: dash-mantine-components>=0.14.0
26
+ Requires-Dist: dash>=2.0.0
27
+ Requires-Dist: deepagents>=0.1.0
28
+ Requires-Dist: matplotlib>=3.5.0
29
+ Requires-Dist: pandas>=1.3.0
30
+ Requires-Dist: pillow>=9.0.0
31
+ Requires-Dist: plotly>=5.0.0
32
+ Requires-Dist: python-dotenv>=0.19.0
33
+ Provides-Extra: all
34
+ Requires-Dist: black>=22.0.0; extra == 'all'
35
+ Requires-Dist: flake8>=4.0.0; extra == 'all'
36
+ Requires-Dist: ipython>=8.0.0; extra == 'all'
37
+ Requires-Dist: mypy>=0.950; extra == 'all'
38
+ Requires-Dist: pytest-cov>=3.0.0; extra == 'all'
39
+ Requires-Dist: pytest>=7.0.0; extra == 'all'
40
+ Provides-Extra: dev
41
+ Requires-Dist: black>=22.0.0; extra == 'dev'
42
+ Requires-Dist: flake8>=4.0.0; extra == 'dev'
43
+ Requires-Dist: mypy>=0.950; extra == 'dev'
44
+ Requires-Dist: pytest-cov>=3.0.0; extra == 'dev'
45
+ Requires-Dist: pytest>=7.0.0; extra == 'dev'
46
+ Provides-Extra: ipython
47
+ Requires-Dist: ipython>=8.0.0; extra == 'ipython'
48
+ Description-Content-Type: text/markdown
49
+
50
+ # Cowork Dash
51
+
52
+ A web interface for AI agent interactions with filesystem workspace, canvas visualization, and real-time streaming.
53
+
54
+ ## Features
55
+
56
+ - **AI Agent Chat**: Real-time streaming with thinking process and task progress
57
+ - **File Browser**: Interactive file tree with lazy loading
58
+ - **Canvas**: Visualize DataFrames, Plotly/Matplotlib charts, Mermaid diagrams, images
59
+ - **Flexible Configuration**: Environment variables, CLI args, or config file
60
+
61
+ ## Quick Start
62
+
63
+ ### Installation
64
+
65
+ ```bash
66
+ # Install via pip (includes DeepAgents)
67
+ pip install cowork-dash
68
+
69
+ # Or run directly with uvx (no installation needed)
70
+ export ANTHROPIC_API_KEY="your_anthropic_api_key"
71
+ uvx cowork-dash run --workspace ~/my-workspace
72
+ ```
73
+
74
+ ### Run
75
+ After setting up your agent (optional), run the app.
76
+ You can also use the default agent by setting ANTHROPIC_API_KEY environment variable.
77
+
78
+ ```bash
79
+ # Run with defaults (current directory as workspace, no agent)
80
+ export ANTHROPIC_API_KEY="your_anthropic_api_key"
81
+ cowork-dash run
82
+
83
+ # Run with workspace
84
+ cowork-dash run --workspace ~/my-workspace
85
+
86
+ # Run with custom agent (optional)
87
+ cowork-dash run --agent my_agent.py:agent
88
+
89
+ # Using uvx (one-off execution)
90
+ uvx cowork-dash run --workspace ~/my-workspace --port 8080
91
+ ```
92
+
93
+ Open browser to `http://localhost:8050`
94
+
95
+ ## Configuration
96
+
97
+ ### Priority (highest to lowest)
98
+
99
+ 1. **CLI Arguments** - `--workspace`, `--port`, etc.
100
+ 2. **Environment Variables** - `DEEPAGENT_*`
101
+ 3. **Config File** - `config.py` defaults
102
+
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
+ ### CLI Options (all optional)
118
+
119
+ ```bash
120
+ cowork-dash run [OPTIONS]
121
+
122
+ --workspace PATH Workspace directory (default: current directory)
123
+ --agent PATH:OBJECT Agent spec (default: none, manual mode)
124
+ --port PORT Server port (default: 8050)
125
+ --host HOST Server host (default: localhost)
126
+ --debug Enable debug mode
127
+ --title TITLE App title (default: "Cowork Dash")
128
+ --subtitle TEXT App subtitle (default: "AI-Powered Workspace")
129
+ ```
130
+
131
+ ### Python API
132
+
133
+ ```python
134
+ from cowork_dash import run_app
135
+
136
+ # Option 1: Pass agent instance directly (recommended)
137
+ from my_agent import MyAgent
138
+ agent = MyAgent()
139
+ run_app(agent, workspace="~/my-workspace")
140
+
141
+ # Option 2: Use agent spec
142
+ run_app(agent_spec="my_agent.py:agent", workspace="~/my-workspace")
143
+
144
+ # Option 3: Manual mode (no agent)
145
+ run_app(workspace="~/my-workspace", port=8080, debug=True)
146
+ ```
147
+
148
+ ## Agent Integration
149
+
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
+ ### Agent Specification
166
+
167
+ Load agents using `path:object` format:
168
+
169
+ ```bash
170
+ # Load from Python file
171
+ cowork-dash run --agent agent.py:my_agent
172
+
173
+ # Absolute path
174
+ cowork-dash run --agent /path/to/agent.py:agent_instance
175
+ ```
176
+
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
+ ### Example Agent Setup
185
+
186
+ ```python
187
+ # my_agent.py
188
+ import os
189
+ from deepagents import create_deep_agent
190
+ from deepagents.backends.filesystem import FileSystemBackend
191
+
192
+ backend = FileSystemBackend(root=os.getenv('DEEPAGENT_WORKSPACE_ROOT', './'))
193
+ my_agent = create_deep_agent(..., backend=backend)
194
+ ```
195
+
196
+ Then run: `cowork-dash run --agent my_agent.py:my_agent`
197
+
198
+ ## Canvas
199
+
200
+ The canvas displays agent-created visualizations:
201
+
202
+ - **DataFrames**: HTML tables
203
+ - **Charts**: Plotly, Matplotlib
204
+ - **Images**: PNG, JPG, etc.
205
+ - **Diagrams**: Mermaid (flowcharts, sequence diagrams)
206
+ - **Markdown**: Text and notes
207
+
208
+ Content auto-saves to `canvas.md` and can be exported or cleared.
209
+
210
+ ## Development
211
+
212
+ ```bash
213
+ # Install from source
214
+ git clone https://github.com/dkedar7/cowork-dash.git
215
+ cd cowork-dash
216
+ pip install -e ".[dev]"
217
+
218
+ # Run tests
219
+ pytest
220
+
221
+ # Build package
222
+ python -m build
223
+ ```
224
+
225
+ ## Requirements
226
+
227
+ - Python 3.11+
228
+ - Dash 2.0+
229
+ - dash-mantine-components
230
+ - pandas, plotly, matplotlib, Pillow
231
+ - python-dotenv
232
+ - deepagents
233
+
234
+ ## Links
235
+
236
+ - **PyPI**: https://pypi.org/project/cowork-dash/
237
+ - **GitHub**: https://github.com/dkedar7/cowork-dash
238
+ - **Issues**: https://github.com/dkedar7/cowork-dash/issues