cowork-dash 0.1.9__tar.gz → 0.2.0__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.9 → cowork_dash-0.2.0}/.claude/settings.local.json +3 -1
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/CHANGELOG.md +26 -0
- cowork_dash-0.2.0/Dockerfile.test +23 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/PKG-INFO +1 -1
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/agent.py +32 -11
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/app.py +591 -67
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/assets/app.js +34 -0
- cowork_dash-0.2.0/cowork_dash/assets/styles.css +1160 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/cli.py +9 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/components.py +398 -55
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/config.py +12 -1
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/file_utils.py +43 -4
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/layout.py +2 -2
- cowork_dash-0.2.0/cowork_dash/sandbox.py +361 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/tools.py +640 -38
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/pyproject.toml +1 -1
- cowork_dash-0.2.0/tests/test_core.py +511 -0
- cowork_dash-0.2.0/tests/test_sandbox.py +252 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/uv.lock +1 -1
- cowork_dash-0.1.9/cowork_dash/assets/styles.css +0 -1069
- cowork_dash-0.1.9/tests/test_core.py +0 -219
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/.gitignore +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/LICENSE +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/MANIFEST.in +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/README.md +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/__init__.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/__main__.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/assets/favicon.ico +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/assets/favicon.svg +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/backends.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/canvas.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/cowork_dash/virtual_fs.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/docs/dark.png +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/docs/light.png +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/examples/example_agent.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/examples/python_api_example.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/templates/index.html +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/__init__.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/conftest.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/test_backends.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/test_canvas.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/test_file_utils.py +0 -0
- {cowork_dash-0.1.9 → cowork_dash-0.2.0}/tests/test_virtual_fs.py +0 -0
|
@@ -5,6 +5,31 @@ 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.2.0] - 2026-02-01
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **display_inline tool**: Rich inline content rendering for images, DataFrames, CSV, HTML, JSON, and PDF files
|
|
12
|
+
- **think_tool integration**: Agent reasoning is now visible in chat with collapsible thinking blocks
|
|
13
|
+
- **"Add to Canvas" button**: Display inline results can be added to canvas directly from chat
|
|
14
|
+
- **Sandboxed bash execution**: Virtual FS mode now supports safe bash commands using bubblewrap isolation (Linux only)
|
|
15
|
+
- **CSV/TSV file preview**: File modal now shows tabular data with pagination
|
|
16
|
+
- **Comprehensive test suite**: Added tests for CLI, run_app API, agent loading, config, and components
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **Redesigned UI**: Minimal professional styling with improved visual hierarchy
|
|
20
|
+
- **Loading indicator**: Replaced verbose "AGENT" + "Thinking" header with clean DMC dots loader
|
|
21
|
+
- **Tool call rendering**: Simplified with CSS classes for better consistency
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- **HITL interrupt handling**: Tool calls now correctly show status after human-in-the-loop approval
|
|
25
|
+
- **Duplicate tool calls**: Fixed issue where tool calls appeared twice after resuming from interrupt
|
|
26
|
+
- **Breadcrumb bar dark mode**: Fixed background color in dark theme
|
|
27
|
+
- **Expanded folders during execution**: Fixed folders showing "Loading..." during agent runs
|
|
28
|
+
|
|
29
|
+
### Platform
|
|
30
|
+
- **Virtual FS restricted to Linux**: `--virtual-fs` flag now only works on Linux (shows warning on other platforms)
|
|
31
|
+
- **CLI warning**: Added helpful message when `--virtual-fs` is used on non-Linux systems
|
|
32
|
+
|
|
8
33
|
## [0.1.9] - 2026-01-28
|
|
9
34
|
|
|
10
35
|
### Changed
|
|
@@ -146,6 +171,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
146
171
|
- Resizable split-pane interface
|
|
147
172
|
- Upload/download functionality for files
|
|
148
173
|
|
|
174
|
+
[0.2.0]: https://github.com/dkedar7/cowork-dash/compare/v0.1.9...v0.2.0
|
|
149
175
|
[0.1.9]: https://github.com/dkedar7/cowork-dash/compare/v0.1.8...v0.1.9
|
|
150
176
|
[0.1.8]: https://github.com/dkedar7/cowork-dash/compare/v0.1.7...v0.1.8
|
|
151
177
|
[0.1.7]: https://github.com/dkedar7/cowork-dash/compare/v0.1.6...v0.1.7
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Dockerfile for running virtual FS tests in Linux environment
|
|
2
|
+
FROM python:3.11-slim
|
|
3
|
+
|
|
4
|
+
# Install bubblewrap for sandboxing
|
|
5
|
+
RUN apt-get update && apt-get install -y \
|
|
6
|
+
bubblewrap \
|
|
7
|
+
git \
|
|
8
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
9
|
+
|
|
10
|
+
# Set working directory
|
|
11
|
+
WORKDIR /app
|
|
12
|
+
|
|
13
|
+
# Copy all project files
|
|
14
|
+
COPY pyproject.toml uv.lock README.md ./
|
|
15
|
+
COPY cowork_dash/ ./cowork_dash/
|
|
16
|
+
COPY tests/ ./tests/
|
|
17
|
+
|
|
18
|
+
# Install uv and dependencies
|
|
19
|
+
RUN pip install uv && \
|
|
20
|
+
uv sync --frozen
|
|
21
|
+
|
|
22
|
+
# Default command: run sandbox tests
|
|
23
|
+
CMD ["uv", "run", "pytest", "tests/test_sandbox.py", "-v"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cowork-dash
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
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
|
|
@@ -7,22 +7,24 @@ from langgraph.checkpoint.memory import InMemorySaver
|
|
|
7
7
|
from cowork_dash.tools import (
|
|
8
8
|
add_to_canvas,
|
|
9
9
|
bash,
|
|
10
|
-
clear_notebook_canvas_items,
|
|
11
10
|
create_cell,
|
|
12
11
|
delete_cell,
|
|
13
12
|
execute_all_cells,
|
|
14
13
|
execute_cell,
|
|
15
|
-
get_notebook_canvas_items,
|
|
16
14
|
get_script,
|
|
17
15
|
get_variables,
|
|
18
16
|
insert_cell,
|
|
19
17
|
modify_cell,
|
|
20
18
|
reset_notebook,
|
|
19
|
+
display_inline,
|
|
20
|
+
think_tool
|
|
21
21
|
)
|
|
22
22
|
|
|
23
23
|
SYSTEM_PROMPT = """You are a helpful AI assistant with access to a filesystem workspace and a Python code execution environment.
|
|
24
24
|
You have access to a canvas, which is a markdown file located at `.canvas/canvas.md` in the workspace. This allows you to sketch out ideas, document your work, and present results to the user.
|
|
25
25
|
|
|
26
|
+
ALWAYS use think_tool to reason through user requests, irrespective of complexity. Use it regularly. Human sees your thought process.
|
|
27
|
+
|
|
26
28
|
## Capabilities
|
|
27
29
|
|
|
28
30
|
### Filesystem
|
|
@@ -57,15 +59,27 @@ You have tools to write and execute Python code interactively, similar to a Jupy
|
|
|
57
59
|
- Captures stdout, stderr, and return values
|
|
58
60
|
- Shows detailed error tracebacks when code fails
|
|
59
61
|
|
|
62
|
+
### Displaying Results Inline
|
|
63
|
+
- `display_inline(content, title=None, display_type=None)` - Display content inline in the chat
|
|
64
|
+
- Use for: **file paths** to images, DataFrames, CSV files, HTML, JSON, PDF
|
|
65
|
+
- **For matplotlib figures**: Save to file first, then display the file path:
|
|
66
|
+
1. In a cell: `fig.savefig('chart.png', bbox_inches='tight')`
|
|
67
|
+
2. Then call: `display_inline("chart.png", title="My Chart")`
|
|
68
|
+
- Example: `display_inline("results.csv", title="Sales Data")`
|
|
69
|
+
|
|
60
70
|
### Canvas Visualization
|
|
61
|
-
- `add_to_canvas(content)` -
|
|
62
|
-
- Inside notebook cells, `add_to_canvas()`
|
|
63
|
-
- `
|
|
64
|
-
-
|
|
71
|
+
- `add_to_canvas(content)` - Add content to the canvas panel (persistent note-taking area)
|
|
72
|
+
- Inside notebook cells, `add_to_canvas()` handles matplotlib figures directly
|
|
73
|
+
- For matplotlib in cells: `add_to_canvas(fig)` works (auto-converts to image)
|
|
74
|
+
- Canvas items are saved to `.canvas/` directory
|
|
75
|
+
|
|
76
|
+
**When to use `display_inline` vs `add_to_canvas`:**
|
|
77
|
+
- `display_inline`: For showing **saved files** (images, CSV, JSON) inline in chat
|
|
78
|
+
- `add_to_canvas`: Inside notebook cells for **figure objects** (handles conversion)
|
|
65
79
|
|
|
66
80
|
**Important:** When creating charts in notebook cells:
|
|
67
|
-
1. Create the figure
|
|
68
|
-
2. The execution result will
|
|
81
|
+
1. Create the figure and call `add_to_canvas(fig)` in the same cell
|
|
82
|
+
2. The execution result will show `canvas_items` with what was added
|
|
69
83
|
3. Charts are automatically saved to the `.canvas/` directory
|
|
70
84
|
|
|
71
85
|
## Workflow Guidelines
|
|
@@ -87,10 +101,17 @@ Work iteratively like a human using Jupyter:
|
|
|
87
101
|
|
|
88
102
|
### General
|
|
89
103
|
1. ALWAYS use write_todos to track your progress and next steps
|
|
90
|
-
2. ALWAYS think_tool to reason through reqests, irrespective of complexity
|
|
104
|
+
2. ALWAYS use think_tool to reason through reqests, irrespective of complexity. Use it regularly. Human sees your thought process.
|
|
91
105
|
3. Be proactive in exploring the filesystem when relevant
|
|
92
106
|
4. Provide clear, helpful responses
|
|
93
107
|
|
|
108
|
+
CRITICAL WORKFLOW REQUIREMENT:
|
|
109
|
+
1. FIRST ACTION: Always call think_tool before any other tool or response
|
|
110
|
+
2. Use it to reason through the user's request
|
|
111
|
+
3. Then proceed with other tools/actions
|
|
112
|
+
|
|
113
|
+
This applies to EVERY user message, regardless of complexity.
|
|
114
|
+
|
|
94
115
|
The workspace is your sandbox - feel free to create files, organize content, and help users manage their projects."""
|
|
95
116
|
|
|
96
117
|
# Get workspace root from environment variable or default to current directory
|
|
@@ -110,8 +131,8 @@ AGENT_TOOLS = [
|
|
|
110
131
|
get_script,
|
|
111
132
|
get_variables,
|
|
112
133
|
reset_notebook,
|
|
113
|
-
|
|
114
|
-
|
|
134
|
+
display_inline,
|
|
135
|
+
think_tool
|
|
115
136
|
]
|
|
116
137
|
|
|
117
138
|
# Global agent for physical filesystem mode
|