cowork-dash 0.1.8__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.
Files changed (43) hide show
  1. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/.claude/settings.local.json +3 -1
  2. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/CHANGELOG.md +32 -0
  3. cowork_dash-0.2.0/Dockerfile.test +23 -0
  4. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/PKG-INFO +1 -1
  5. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/agent.py +32 -11
  6. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/app.py +888 -81
  7. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/assets/app.js +34 -0
  8. cowork_dash-0.2.0/cowork_dash/assets/styles.css +1160 -0
  9. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/canvas.py +8 -0
  10. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/cli.py +9 -0
  11. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/components.py +398 -55
  12. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/config.py +12 -1
  13. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/file_utils.py +65 -9
  14. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/layout.py +2 -2
  15. cowork_dash-0.2.0/cowork_dash/sandbox.py +361 -0
  16. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/tools.py +734 -79
  17. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/pyproject.toml +1 -1
  18. cowork_dash-0.2.0/tests/test_core.py +511 -0
  19. cowork_dash-0.2.0/tests/test_sandbox.py +252 -0
  20. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/uv.lock +1 -1
  21. cowork_dash-0.1.8/cowork_dash/assets/styles.css +0 -1069
  22. cowork_dash-0.1.8/tests/test_core.py +0 -219
  23. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/.gitignore +0 -0
  24. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/LICENSE +0 -0
  25. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/MANIFEST.in +0 -0
  26. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/README.md +0 -0
  27. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/__init__.py +0 -0
  28. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/__main__.py +0 -0
  29. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/assets/favicon.ico +0 -0
  30. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/assets/favicon.svg +0 -0
  31. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/backends.py +0 -0
  32. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/cowork_dash/virtual_fs.py +0 -0
  33. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/docs/dark.png +0 -0
  34. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/docs/light.png +0 -0
  35. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/examples/example_agent.py +0 -0
  36. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/examples/python_api_example.py +0 -0
  37. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/templates/index.html +0 -0
  38. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/__init__.py +0 -0
  39. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/conftest.py +0 -0
  40. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/test_backends.py +0 -0
  41. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/test_canvas.py +0 -0
  42. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/test_file_utils.py +0 -0
  43. {cowork_dash-0.1.8 → cowork_dash-0.2.0}/tests/test_virtual_fs.py +0 -0
@@ -18,7 +18,9 @@
18
18
  "Bash(uv run python:*)",
19
19
  "Bash(uv run ruff check:*)",
20
20
  "Bash(uv run pytest:*)",
21
- "Bash(uv add:*)"
21
+ "Bash(uv add:*)",
22
+ "Bash(source:*)",
23
+ "Bash(pytest:*)"
22
24
  ],
23
25
  "deny": [],
24
26
  "ask": []
@@ -5,6 +5,36 @@ 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
+
33
+ ## [0.1.9] - 2026-01-28
34
+
35
+ ### Changed
36
+ - Updated lock file version reference
37
+
8
38
  ## [0.1.8] - 2026-01-27
9
39
 
10
40
  ### Fixed
@@ -141,6 +171,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
141
171
  - Resizable split-pane interface
142
172
  - Upload/download functionality for files
143
173
 
174
+ [0.2.0]: https://github.com/dkedar7/cowork-dash/compare/v0.1.9...v0.2.0
175
+ [0.1.9]: https://github.com/dkedar7/cowork-dash/compare/v0.1.8...v0.1.9
144
176
  [0.1.8]: https://github.com/dkedar7/cowork-dash/compare/v0.1.7...v0.1.8
145
177
  [0.1.7]: https://github.com/dkedar7/cowork-dash/compare/v0.1.6...v0.1.7
146
178
  [0.1.6]: https://github.com/dkedar7/cowork-dash/compare/v0.1.5...v0.1.6
@@ -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.1.8
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)` - Display DataFrames, charts, images, or markdown for the user (use as a tool directly)
62
- - Inside notebook cells, `add_to_canvas()` is also available - call it in your code to add visualizations
63
- - `get_notebook_canvas_items()` - Retrieve canvas items generated by executed cells
64
- - `clear_notebook_canvas_items()` - Clear collected canvas items
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 in a cell and call `add_to_canvas(fig)` within the same cell
68
- 2. The execution result will include `canvas_items` showing what was added
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
- get_notebook_canvas_items,
114
- clear_notebook_canvas_items,
134
+ display_inline,
135
+ think_tool
115
136
  ]
116
137
 
117
138
  # Global agent for physical filesystem mode