Orange3-CanvasAgent 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.
- orange3_canvasagent-0.1.2/LICENSE +22 -0
- orange3_canvasagent-0.1.2/MANIFEST.in +10 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/PKG-INFO +85 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/SOURCES.txt +42 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/dependency_links.txt +1 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/entry_points.txt +2 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/requires.txt +12 -0
- orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/top_level.txt +1 -0
- orange3_canvasagent-0.1.2/PKG-INFO +85 -0
- orange3_canvasagent-0.1.2/README.md +54 -0
- orange3_canvasagent-0.1.2/TUTORIAL.md +147 -0
- orange3_canvasagent-0.1.2/docs/installer-user-guide.md +48 -0
- orange3_canvasagent-0.1.2/docs/release-checklist.md +58 -0
- orange3_canvasagent-0.1.2/installer/CanvasAgentSetup.spec +43 -0
- orange3_canvasagent-0.1.2/installer/__init__.py +2 -0
- orange3_canvasagent-0.1.2/installer/__main__.py +5 -0
- orange3_canvasagent-0.1.2/installer/core.py +258 -0
- orange3_canvasagent-0.1.2/installer/gui.py +132 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/__init__.py +5 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/backend.py +35 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/canvas.py +202 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/codex_backend.py +120 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/commit.py +53 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/icons/agent.svg +8 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/oauth.py +46 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/schema.py +233 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/setup_status.py +96 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/widgets/OWCanvasAgent.py +421 -0
- orange3_canvasagent-0.1.2/orangecontrib/canvasagent/widgets/__init__.py +11 -0
- orange3_canvasagent-0.1.2/pyproject.toml +54 -0
- orange3_canvasagent-0.1.2/scripts/build-installer.ps1 +14 -0
- orange3_canvasagent-0.1.2/scripts/build-wheel.ps1 +12 -0
- orange3_canvasagent-0.1.2/setup.cfg +4 -0
- orange3_canvasagent-0.1.2/tests/__init__.py +1 -0
- orange3_canvasagent-0.1.2/tests/fakes.py +99 -0
- orange3_canvasagent-0.1.2/tests/test_backend.py +61 -0
- orange3_canvasagent-0.1.2/tests/test_canvas_executor.py +76 -0
- orange3_canvasagent-0.1.2/tests/test_commit.py +34 -0
- orange3_canvasagent-0.1.2/tests/test_installer_detection.py +58 -0
- orange3_canvasagent-0.1.2/tests/test_packaging.py +57 -0
- orange3_canvasagent-0.1.2/tests/test_rich_widget_ui.py +38 -0
- orange3_canvasagent-0.1.2/tests/test_schema.py +59 -0
- orange3_canvasagent-0.1.2/tests/test_setup_status.py +45 -0
- orange3_canvasagent-0.1.2/tests/test_widget_import.py +40 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 pantagram1031
|
|
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.
|
|
22
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include README.md
|
|
3
|
+
include TUTORIAL.md
|
|
4
|
+
include pyproject.toml
|
|
5
|
+
recursive-include docs *.md
|
|
6
|
+
recursive-include installer *.py *.spec
|
|
7
|
+
recursive-include scripts *.ps1
|
|
8
|
+
recursive-include tests *.py
|
|
9
|
+
recursive-include orangecontrib *.py *.svg
|
|
10
|
+
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Orange3-CanvasAgent
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: An Orange3 canvas agent widget with reversible AI commits.
|
|
5
|
+
Author-email: pantagram1031 <pantagram1031@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/pantagram1031/orange3-canvasagent
|
|
8
|
+
Project-URL: Repository, https://github.com/pantagram1031/orange3-canvasagent
|
|
9
|
+
Project-URL: Issues, https://github.com/pantagram1031/orange3-canvasagent/issues
|
|
10
|
+
Keywords: orange3,codex,llm,canvas,agent,data-mining
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: Orange3<3.41,>=3.40
|
|
22
|
+
Requires-Dist: PyQt5<6,>=5.15
|
|
23
|
+
Requires-Dist: keyring>=25
|
|
24
|
+
Provides-Extra: llm
|
|
25
|
+
Requires-Dist: litellm!=1.82.7,!=1.82.8,<1.84,>=1.83.14; extra == "llm"
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
29
|
+
Requires-Dist: pyinstaller>=6.0; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# Orange3 Canvas Agent
|
|
33
|
+
|
|
34
|
+
`Orange3-CanvasAgent` adds an experimental Orange widget that can ask an agent
|
|
35
|
+
backend for structured canvas actions, apply them to the live scheme, and keep a
|
|
36
|
+
reversible checkpoint until the user accepts or reverts the AI commit.
|
|
37
|
+
|
|
38
|
+
The first backend targets the installed `codex` CLI and its ChatGPT/Codex login
|
|
39
|
+
flow. Direct API-key routing through LiteLLM is reserved for a later adapter.
|
|
40
|
+
|
|
41
|
+
## Install For Official Orange Users
|
|
42
|
+
|
|
43
|
+
Download `CanvasAgentSetup.exe` from the project release page, run it, choose
|
|
44
|
+
your Orange installation if it is not detected automatically, and click
|
|
45
|
+
**Install**. The installer places the add-on into Orange's Python environment
|
|
46
|
+
and opens Orange with widget discovery enabled.
|
|
47
|
+
|
|
48
|
+
After Orange opens, look for the **Canvas Agent** category and drag the widget
|
|
49
|
+
onto your workflow.
|
|
50
|
+
|
|
51
|
+
## Install For Coders
|
|
52
|
+
|
|
53
|
+
From PyPI:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python -m pip install Orange3-CanvasAgent
|
|
57
|
+
python -m Orange.canvas --force-discovery
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
From a local checkout:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
git clone https://github.com/pantagram1031/orange3-canvasagent.git
|
|
64
|
+
cd orange3-canvasagent
|
|
65
|
+
python -m pip install -e ".[dev]"
|
|
66
|
+
python -B -m unittest discover -v
|
|
67
|
+
python -m Orange.canvas --force-discovery
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Build The Installer
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
.\scripts\build-installer.ps1
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The generated installer is written to `dist\CanvasAgentSetup.exe`.
|
|
77
|
+
|
|
78
|
+
## What The Widget Does
|
|
79
|
+
|
|
80
|
+
- Shows a setup tab for Codex login and Orange readiness.
|
|
81
|
+
- Provides a chat tab for canvas requests.
|
|
82
|
+
- Shows a preview tab with the structured AI commit.
|
|
83
|
+
- Shows diagnostics for troubleshooting.
|
|
84
|
+
- Applies only whitelisted canvas actions, never arbitrary model-generated Python.
|
|
85
|
+
- Lets you keep or revert each AI commit.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
TUTORIAL.md
|
|
5
|
+
pyproject.toml
|
|
6
|
+
Orange3_CanvasAgent.egg-info/PKG-INFO
|
|
7
|
+
Orange3_CanvasAgent.egg-info/SOURCES.txt
|
|
8
|
+
Orange3_CanvasAgent.egg-info/dependency_links.txt
|
|
9
|
+
Orange3_CanvasAgent.egg-info/entry_points.txt
|
|
10
|
+
Orange3_CanvasAgent.egg-info/requires.txt
|
|
11
|
+
Orange3_CanvasAgent.egg-info/top_level.txt
|
|
12
|
+
docs/installer-user-guide.md
|
|
13
|
+
docs/release-checklist.md
|
|
14
|
+
installer/CanvasAgentSetup.spec
|
|
15
|
+
installer/__init__.py
|
|
16
|
+
installer/__main__.py
|
|
17
|
+
installer/core.py
|
|
18
|
+
installer/gui.py
|
|
19
|
+
orangecontrib/canvasagent/__init__.py
|
|
20
|
+
orangecontrib/canvasagent/backend.py
|
|
21
|
+
orangecontrib/canvasagent/canvas.py
|
|
22
|
+
orangecontrib/canvasagent/codex_backend.py
|
|
23
|
+
orangecontrib/canvasagent/commit.py
|
|
24
|
+
orangecontrib/canvasagent/oauth.py
|
|
25
|
+
orangecontrib/canvasagent/schema.py
|
|
26
|
+
orangecontrib/canvasagent/setup_status.py
|
|
27
|
+
orangecontrib/canvasagent/icons/agent.svg
|
|
28
|
+
orangecontrib/canvasagent/widgets/OWCanvasAgent.py
|
|
29
|
+
orangecontrib/canvasagent/widgets/__init__.py
|
|
30
|
+
scripts/build-installer.ps1
|
|
31
|
+
scripts/build-wheel.ps1
|
|
32
|
+
tests/__init__.py
|
|
33
|
+
tests/fakes.py
|
|
34
|
+
tests/test_backend.py
|
|
35
|
+
tests/test_canvas_executor.py
|
|
36
|
+
tests/test_commit.py
|
|
37
|
+
tests/test_installer_detection.py
|
|
38
|
+
tests/test_packaging.py
|
|
39
|
+
tests/test_rich_widget_ui.py
|
|
40
|
+
tests/test_schema.py
|
|
41
|
+
tests/test_setup_status.py
|
|
42
|
+
tests/test_widget_import.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
orangecontrib
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: Orange3-CanvasAgent
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: An Orange3 canvas agent widget with reversible AI commits.
|
|
5
|
+
Author-email: pantagram1031 <pantagram1031@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/pantagram1031/orange3-canvasagent
|
|
8
|
+
Project-URL: Repository, https://github.com/pantagram1031/orange3-canvasagent
|
|
9
|
+
Project-URL: Issues, https://github.com/pantagram1031/orange3-canvasagent/issues
|
|
10
|
+
Keywords: orange3,codex,llm,canvas,agent,data-mining
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: Orange3<3.41,>=3.40
|
|
22
|
+
Requires-Dist: PyQt5<6,>=5.15
|
|
23
|
+
Requires-Dist: keyring>=25
|
|
24
|
+
Provides-Extra: llm
|
|
25
|
+
Requires-Dist: litellm!=1.82.7,!=1.82.8,<1.84,>=1.83.14; extra == "llm"
|
|
26
|
+
Provides-Extra: test
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
29
|
+
Requires-Dist: pyinstaller>=6.0; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# Orange3 Canvas Agent
|
|
33
|
+
|
|
34
|
+
`Orange3-CanvasAgent` adds an experimental Orange widget that can ask an agent
|
|
35
|
+
backend for structured canvas actions, apply them to the live scheme, and keep a
|
|
36
|
+
reversible checkpoint until the user accepts or reverts the AI commit.
|
|
37
|
+
|
|
38
|
+
The first backend targets the installed `codex` CLI and its ChatGPT/Codex login
|
|
39
|
+
flow. Direct API-key routing through LiteLLM is reserved for a later adapter.
|
|
40
|
+
|
|
41
|
+
## Install For Official Orange Users
|
|
42
|
+
|
|
43
|
+
Download `CanvasAgentSetup.exe` from the project release page, run it, choose
|
|
44
|
+
your Orange installation if it is not detected automatically, and click
|
|
45
|
+
**Install**. The installer places the add-on into Orange's Python environment
|
|
46
|
+
and opens Orange with widget discovery enabled.
|
|
47
|
+
|
|
48
|
+
After Orange opens, look for the **Canvas Agent** category and drag the widget
|
|
49
|
+
onto your workflow.
|
|
50
|
+
|
|
51
|
+
## Install For Coders
|
|
52
|
+
|
|
53
|
+
From PyPI:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python -m pip install Orange3-CanvasAgent
|
|
57
|
+
python -m Orange.canvas --force-discovery
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
From a local checkout:
|
|
61
|
+
|
|
62
|
+
```powershell
|
|
63
|
+
git clone https://github.com/pantagram1031/orange3-canvasagent.git
|
|
64
|
+
cd orange3-canvasagent
|
|
65
|
+
python -m pip install -e ".[dev]"
|
|
66
|
+
python -B -m unittest discover -v
|
|
67
|
+
python -m Orange.canvas --force-discovery
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Build The Installer
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
.\scripts\build-installer.ps1
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The generated installer is written to `dist\CanvasAgentSetup.exe`.
|
|
77
|
+
|
|
78
|
+
## What The Widget Does
|
|
79
|
+
|
|
80
|
+
- Shows a setup tab for Codex login and Orange readiness.
|
|
81
|
+
- Provides a chat tab for canvas requests.
|
|
82
|
+
- Shows a preview tab with the structured AI commit.
|
|
83
|
+
- Shows diagnostics for troubleshooting.
|
|
84
|
+
- Applies only whitelisted canvas actions, never arbitrary model-generated Python.
|
|
85
|
+
- Lets you keep or revert each AI commit.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Orange3 Canvas Agent
|
|
2
|
+
|
|
3
|
+
`Orange3-CanvasAgent` adds an experimental Orange widget that can ask an agent
|
|
4
|
+
backend for structured canvas actions, apply them to the live scheme, and keep a
|
|
5
|
+
reversible checkpoint until the user accepts or reverts the AI commit.
|
|
6
|
+
|
|
7
|
+
The first backend targets the installed `codex` CLI and its ChatGPT/Codex login
|
|
8
|
+
flow. Direct API-key routing through LiteLLM is reserved for a later adapter.
|
|
9
|
+
|
|
10
|
+
## Install For Official Orange Users
|
|
11
|
+
|
|
12
|
+
Download `CanvasAgentSetup.exe` from the project release page, run it, choose
|
|
13
|
+
your Orange installation if it is not detected automatically, and click
|
|
14
|
+
**Install**. The installer places the add-on into Orange's Python environment
|
|
15
|
+
and opens Orange with widget discovery enabled.
|
|
16
|
+
|
|
17
|
+
After Orange opens, look for the **Canvas Agent** category and drag the widget
|
|
18
|
+
onto your workflow.
|
|
19
|
+
|
|
20
|
+
## Install For Coders
|
|
21
|
+
|
|
22
|
+
From PyPI:
|
|
23
|
+
|
|
24
|
+
```powershell
|
|
25
|
+
python -m pip install Orange3-CanvasAgent
|
|
26
|
+
python -m Orange.canvas --force-discovery
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
From a local checkout:
|
|
30
|
+
|
|
31
|
+
```powershell
|
|
32
|
+
git clone https://github.com/pantagram1031/orange3-canvasagent.git
|
|
33
|
+
cd orange3-canvasagent
|
|
34
|
+
python -m pip install -e ".[dev]"
|
|
35
|
+
python -B -m unittest discover -v
|
|
36
|
+
python -m Orange.canvas --force-discovery
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Build The Installer
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
.\scripts\build-installer.ps1
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The generated installer is written to `dist\CanvasAgentSetup.exe`.
|
|
46
|
+
|
|
47
|
+
## What The Widget Does
|
|
48
|
+
|
|
49
|
+
- Shows a setup tab for Codex login and Orange readiness.
|
|
50
|
+
- Provides a chat tab for canvas requests.
|
|
51
|
+
- Shows a preview tab with the structured AI commit.
|
|
52
|
+
- Shows diagnostics for troubleshooting.
|
|
53
|
+
- Applies only whitelisted canvas actions, never arbitrary model-generated Python.
|
|
54
|
+
- Lets you keep or revert each AI commit.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Orange3 Canvas Agent Tutorial
|
|
2
|
+
|
|
3
|
+
This add-on creates a new Orange widget named **Canvas Agent**. It asks an agent backend for structured canvas actions, applies those actions to the live Orange workflow, and keeps an AI commit checkpoint so you can either keep or revert the changes.
|
|
4
|
+
|
|
5
|
+
## Install For Existing Local Development
|
|
6
|
+
|
|
7
|
+
From this project directory:
|
|
8
|
+
|
|
9
|
+
```powershell
|
|
10
|
+
python -m pip install -e .
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Then launch Orange:
|
|
14
|
+
|
|
15
|
+
```powershell
|
|
16
|
+
python -m Orange.canvas --force-discovery
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Install For Official Orange Users
|
|
20
|
+
|
|
21
|
+
1. Download `CanvasAgentSetup.exe`.
|
|
22
|
+
2. Double-click it.
|
|
23
|
+
3. Select your Orange installation.
|
|
24
|
+
4. Click **Install**.
|
|
25
|
+
5. Let the installer open Orange.
|
|
26
|
+
6. Find **Canvas Agent** in the widget toolbox.
|
|
27
|
+
|
|
28
|
+
No coding or PowerShell is required for this path.
|
|
29
|
+
|
|
30
|
+
## Install For Experienced Coders
|
|
31
|
+
|
|
32
|
+
From PyPI:
|
|
33
|
+
|
|
34
|
+
```powershell
|
|
35
|
+
python -m pip install Orange3-CanvasAgent
|
|
36
|
+
python -m Orange.canvas --force-discovery
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
From GitHub:
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
git clone https://github.com/pantagram1031/orange3-canvasagent.git
|
|
43
|
+
cd orange3-canvasagent
|
|
44
|
+
python -m pip install -e ".[dev]"
|
|
45
|
+
python -B -m unittest discover -v
|
|
46
|
+
python -m Orange.canvas --force-discovery
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Use The Widget
|
|
50
|
+
|
|
51
|
+
1. Open Orange.
|
|
52
|
+
2. Find the **Canvas Agent** category in the widget toolbox.
|
|
53
|
+
3. Drag **Canvas Agent** onto the canvas.
|
|
54
|
+
4. Open the **Setup** tab.
|
|
55
|
+
5. Click **Check Setup**.
|
|
56
|
+
6. Click **Sign in** if Codex is not already authenticated.
|
|
57
|
+
7. Click **Test Agent**.
|
|
58
|
+
8. Open the **Chat** tab.
|
|
59
|
+
9. Type a canvas request, for example:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
Add a File widget and a Data Table widget, then connect them.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
10. Click **Send**.
|
|
66
|
+
11. Open the **Preview** tab.
|
|
67
|
+
12. Click **Keep Changes** to accept the AI commit, or **Revert AI Commit** to restore the previous canvas snapshot.
|
|
68
|
+
|
|
69
|
+
## The Four Tabs
|
|
70
|
+
|
|
71
|
+
- **Setup:** Codex readiness, Orange canvas readiness, sign-in flow, and first-run steps.
|
|
72
|
+
- **Chat:** Conversation transcript, command composer, and status log.
|
|
73
|
+
- **Preview:** Structured action preview, warnings, and keep/revert controls.
|
|
74
|
+
- **Diagnostics:** Codex and Orange discovery report for troubleshooting.
|
|
75
|
+
|
|
76
|
+
## How It Works
|
|
77
|
+
|
|
78
|
+
The widget never executes arbitrary Python returned by a model. Instead, the backend must return JSON matching the `CanvasPlan` schema:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"summary": "Create a simple data loading workflow",
|
|
83
|
+
"actions": [
|
|
84
|
+
{
|
|
85
|
+
"type": "add_widget",
|
|
86
|
+
"node_id": "file",
|
|
87
|
+
"qualified_name": "Orange.widgets.data.owfile.OWFile",
|
|
88
|
+
"title": "File",
|
|
89
|
+
"position": [10, 20]
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"type": "add_widget",
|
|
93
|
+
"node_id": "table",
|
|
94
|
+
"qualified_name": "Orange.widgets.data.owtable.OWDataTable",
|
|
95
|
+
"title": "Data Table",
|
|
96
|
+
"position": [220, 20]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": "connect",
|
|
100
|
+
"source_node_id": "file",
|
|
101
|
+
"sink_node_id": "table"
|
|
102
|
+
}
|
|
103
|
+
],
|
|
104
|
+
"warnings": []
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Supported v1 actions are:
|
|
109
|
+
|
|
110
|
+
- `add_widget`
|
|
111
|
+
- `connect`
|
|
112
|
+
- `rename_node`
|
|
113
|
+
- `move_node`
|
|
114
|
+
- `annotate`
|
|
115
|
+
|
|
116
|
+
Before applying a plan, the add-on serializes the current Orange scheme into an in-memory checkpoint. If an action fails, the checkpoint is restored automatically. If the actions succeed, the UI keeps the checkpoint until you choose **Keep Changes** or **Revert AI Commit**.
|
|
117
|
+
|
|
118
|
+
## Verify The Add-On
|
|
119
|
+
|
|
120
|
+
Run:
|
|
121
|
+
|
|
122
|
+
```powershell
|
|
123
|
+
$env:QT_QPA_PLATFORM='offscreen'
|
|
124
|
+
python -B -m unittest discover -v
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Expected result:
|
|
128
|
+
|
|
129
|
+
```text
|
|
130
|
+
Ran 21 tests
|
|
131
|
+
OK
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
You can also verify Orange discovery:
|
|
135
|
+
|
|
136
|
+
```powershell
|
|
137
|
+
python -B -u -m Orange.canvas --help
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
If Orange starts and the tests pass, the package is installed correctly.
|
|
141
|
+
|
|
142
|
+
## Current Limits
|
|
143
|
+
|
|
144
|
+
- The implemented backend is **Codex CLI**.
|
|
145
|
+
- The LiteLLM/OpenAI/Anthropic/Ollama adapter is reserved for a later version.
|
|
146
|
+
- The widget changes the canvas through whitelisted structured actions only.
|
|
147
|
+
- Real model quality depends on whether Codex returns valid widget qualified names that exist in your Orange installation.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Canvas Agent Installer User Guide
|
|
2
|
+
|
|
3
|
+
This guide is for people who installed Orange from the official Orange download
|
|
4
|
+
page and do not want to use a terminal.
|
|
5
|
+
|
|
6
|
+
## Install
|
|
7
|
+
|
|
8
|
+
1. Download `CanvasAgentSetup.exe`.
|
|
9
|
+
2. Double-click the file.
|
|
10
|
+
3. If Windows shows a security prompt, choose **More info** and then **Run anyway** only if you trust the file source.
|
|
11
|
+
4. The installer scans for Orange.
|
|
12
|
+
5. If Orange is listed, select it and click **Install**.
|
|
13
|
+
6. If Orange is not listed, click **Choose Folder...** and select the folder where Orange is installed.
|
|
14
|
+
7. Wait for the installer to finish.
|
|
15
|
+
8. Orange opens automatically.
|
|
16
|
+
|
|
17
|
+
## Find The Widget
|
|
18
|
+
|
|
19
|
+
1. In Orange, look at the widget toolbox.
|
|
20
|
+
2. Find the **Canvas Agent** category.
|
|
21
|
+
3. Drag **Canvas Agent** onto the canvas.
|
|
22
|
+
|
|
23
|
+
## First Run
|
|
24
|
+
|
|
25
|
+
1. Open the **Setup** tab.
|
|
26
|
+
2. Click **Check Setup**.
|
|
27
|
+
3. If Codex is missing, install Codex CLI and reopen Orange.
|
|
28
|
+
4. If Codex is signed out, click **Sign in**.
|
|
29
|
+
5. Click **Test Agent**.
|
|
30
|
+
6. Open the **Chat** tab.
|
|
31
|
+
|
|
32
|
+
## Example Prompt
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
Add a File widget and a Data Table widget, then connect them.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The agent will update the canvas and show the proposed AI commit. Use
|
|
39
|
+
**Keep Changes** to accept it or **Revert AI Commit** to undo it.
|
|
40
|
+
|
|
41
|
+
## Troubleshooting
|
|
42
|
+
|
|
43
|
+
- **No Orange install found:** Click **Choose Folder...** and select the folder containing Orange's `python.exe`.
|
|
44
|
+
- **Widget does not appear:** Start Orange once with widget discovery enabled. The installer does this automatically, but coders can run `python -m Orange.canvas --force-discovery`.
|
|
45
|
+
- **Codex is missing:** Install Codex CLI and make sure `codex --version` works in a terminal.
|
|
46
|
+
- **Codex is signed out:** Run `codex login` or use the widget's **Sign in** button.
|
|
47
|
+
- **Agent output failed:** Open the **Diagnostics** tab and copy the report.
|
|
48
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Release Checklist
|
|
2
|
+
|
|
3
|
+
## Local Verification
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
$env:QT_QPA_PLATFORM='offscreen'
|
|
7
|
+
python -B -m unittest discover -v
|
|
8
|
+
python -m Orange.canvas --help
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Build Python Distributions
|
|
12
|
+
|
|
13
|
+
```powershell
|
|
14
|
+
.\scripts\build-wheel.ps1
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Check that `dist` contains both a wheel and source distribution.
|
|
18
|
+
|
|
19
|
+
## Build Windows Installer
|
|
20
|
+
|
|
21
|
+
```powershell
|
|
22
|
+
.\scripts\build-installer.ps1
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Check that `dist\CanvasAgentSetup.exe` exists.
|
|
26
|
+
|
|
27
|
+
## Test Installer Manually
|
|
28
|
+
|
|
29
|
+
1. Use a Windows machine with official Orange installed.
|
|
30
|
+
2. Run `CanvasAgentSetup.exe`.
|
|
31
|
+
3. Confirm the installer detects Orange.
|
|
32
|
+
4. Install the add-on.
|
|
33
|
+
5. Confirm Orange opens.
|
|
34
|
+
6. Confirm **Canvas Agent** appears in the toolbox.
|
|
35
|
+
7. Drag it onto the canvas.
|
|
36
|
+
8. Send: `Add a File widget and a Data Table widget, then connect them.`
|
|
37
|
+
9. Test **Keep Changes** and **Revert AI Commit**.
|
|
38
|
+
|
|
39
|
+
## TestPyPI
|
|
40
|
+
|
|
41
|
+
1. Open the GitHub **Publish** workflow.
|
|
42
|
+
2. Run it manually with `target=testpypi`.
|
|
43
|
+
3. Install from TestPyPI in a clean environment.
|
|
44
|
+
|
|
45
|
+
```powershell
|
|
46
|
+
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ Orange3-CanvasAgent
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## PyPI
|
|
50
|
+
|
|
51
|
+
1. Create a GitHub release.
|
|
52
|
+
2. The publish workflow uploads to PyPI through trusted publishing.
|
|
53
|
+
3. Install in a clean environment:
|
|
54
|
+
|
|
55
|
+
```powershell
|
|
56
|
+
python -m pip install Orange3-CanvasAgent
|
|
57
|
+
```
|
|
58
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# -*- mode: python ; coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
installer_dir = Path(SPECPATH)
|
|
6
|
+
project_root = installer_dir.parent
|
|
7
|
+
dist_dir = project_root / "dist"
|
|
8
|
+
wheels = sorted(dist_dir.glob("*.whl"))
|
|
9
|
+
datas = [(str(wheels[-1]), ".")] if wheels else []
|
|
10
|
+
|
|
11
|
+
a = Analysis(
|
|
12
|
+
[str(installer_dir / "gui.py")],
|
|
13
|
+
pathex=[str(project_root)],
|
|
14
|
+
binaries=[],
|
|
15
|
+
datas=datas,
|
|
16
|
+
hiddenimports=[],
|
|
17
|
+
hookspath=[],
|
|
18
|
+
hooksconfig={},
|
|
19
|
+
runtime_hooks=[],
|
|
20
|
+
excludes=[],
|
|
21
|
+
noarchive=False,
|
|
22
|
+
)
|
|
23
|
+
pyz = PYZ(a.pure)
|
|
24
|
+
exe = EXE(
|
|
25
|
+
pyz,
|
|
26
|
+
a.scripts,
|
|
27
|
+
a.binaries,
|
|
28
|
+
a.datas,
|
|
29
|
+
[],
|
|
30
|
+
name="CanvasAgentSetup",
|
|
31
|
+
debug=False,
|
|
32
|
+
bootloader_ignore_signals=False,
|
|
33
|
+
strip=False,
|
|
34
|
+
upx=True,
|
|
35
|
+
upx_exclude=[],
|
|
36
|
+
runtime_tmpdir=None,
|
|
37
|
+
console=False,
|
|
38
|
+
disable_windowed_traceback=False,
|
|
39
|
+
argv_emulation=False,
|
|
40
|
+
target_arch=None,
|
|
41
|
+
codesign_identity=None,
|
|
42
|
+
entitlements_file=None,
|
|
43
|
+
)
|