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.
Files changed (44) hide show
  1. orange3_canvasagent-0.1.2/LICENSE +22 -0
  2. orange3_canvasagent-0.1.2/MANIFEST.in +10 -0
  3. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/PKG-INFO +85 -0
  4. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/SOURCES.txt +42 -0
  5. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/dependency_links.txt +1 -0
  6. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/entry_points.txt +2 -0
  7. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/requires.txt +12 -0
  8. orange3_canvasagent-0.1.2/Orange3_CanvasAgent.egg-info/top_level.txt +1 -0
  9. orange3_canvasagent-0.1.2/PKG-INFO +85 -0
  10. orange3_canvasagent-0.1.2/README.md +54 -0
  11. orange3_canvasagent-0.1.2/TUTORIAL.md +147 -0
  12. orange3_canvasagent-0.1.2/docs/installer-user-guide.md +48 -0
  13. orange3_canvasagent-0.1.2/docs/release-checklist.md +58 -0
  14. orange3_canvasagent-0.1.2/installer/CanvasAgentSetup.spec +43 -0
  15. orange3_canvasagent-0.1.2/installer/__init__.py +2 -0
  16. orange3_canvasagent-0.1.2/installer/__main__.py +5 -0
  17. orange3_canvasagent-0.1.2/installer/core.py +258 -0
  18. orange3_canvasagent-0.1.2/installer/gui.py +132 -0
  19. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/__init__.py +5 -0
  20. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/backend.py +35 -0
  21. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/canvas.py +202 -0
  22. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/codex_backend.py +120 -0
  23. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/commit.py +53 -0
  24. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/icons/agent.svg +8 -0
  25. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/oauth.py +46 -0
  26. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/schema.py +233 -0
  27. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/setup_status.py +96 -0
  28. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/widgets/OWCanvasAgent.py +421 -0
  29. orange3_canvasagent-0.1.2/orangecontrib/canvasagent/widgets/__init__.py +11 -0
  30. orange3_canvasagent-0.1.2/pyproject.toml +54 -0
  31. orange3_canvasagent-0.1.2/scripts/build-installer.ps1 +14 -0
  32. orange3_canvasagent-0.1.2/scripts/build-wheel.ps1 +12 -0
  33. orange3_canvasagent-0.1.2/setup.cfg +4 -0
  34. orange3_canvasagent-0.1.2/tests/__init__.py +1 -0
  35. orange3_canvasagent-0.1.2/tests/fakes.py +99 -0
  36. orange3_canvasagent-0.1.2/tests/test_backend.py +61 -0
  37. orange3_canvasagent-0.1.2/tests/test_canvas_executor.py +76 -0
  38. orange3_canvasagent-0.1.2/tests/test_commit.py +34 -0
  39. orange3_canvasagent-0.1.2/tests/test_installer_detection.py +58 -0
  40. orange3_canvasagent-0.1.2/tests/test_packaging.py +57 -0
  41. orange3_canvasagent-0.1.2/tests/test_rich_widget_ui.py +38 -0
  42. orange3_canvasagent-0.1.2/tests/test_schema.py +59 -0
  43. orange3_canvasagent-0.1.2/tests/test_setup_status.py +45 -0
  44. 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,2 @@
1
+ [orange.widgets]
2
+ Canvas Agent = orangecontrib.canvasagent.widgets
@@ -0,0 +1,12 @@
1
+ Orange3<3.41,>=3.40
2
+ PyQt5<6,>=5.15
3
+ keyring>=25
4
+
5
+ [dev]
6
+ build>=1.2
7
+ pyinstaller>=6.0
8
+
9
+ [llm]
10
+ litellm!=1.82.7,!=1.82.8,<1.84,>=1.83.14
11
+
12
+ [test]
@@ -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
+ )
@@ -0,0 +1,2 @@
1
+ """Windows installer support for Orange3-CanvasAgent."""
2
+
@@ -0,0 +1,5 @@
1
+ from installer.gui import main
2
+
3
+ if __name__ == "__main__":
4
+ main()
5
+