@vention/vention-skills 0.10.28 → 0.10.30
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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/vention-design/SKILL.md +1 -1
- package/skills/vention-machine-logic/SKILL.md +15 -5
- package/skills/vention-machine-logic-hmi/SKILL.md +1 -1
- package/skills/vention-machine-logic-hmi/examples/indexing-station-hmi/customui/package.json +3 -3
- package/skills/vention-machine-logic-hmi/examples/indexing-station-hmi/requirements.txt +3 -3
- package/skills/vention-monitoring/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vention skills
|
|
2
2
|
|
|
3
|
-
Version 0.10.
|
|
3
|
+
Version 0.10.30. Skills for coding agents that work with Vention machines, packaged as one plugin, `vention`, in the `vention-skills` marketplace.
|
|
4
4
|
|
|
5
5
|
| Skill | What it does |
|
|
6
6
|
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vention/vention-skills",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.30",
|
|
4
4
|
"description": "Vention skills for coding agents: write MachineLogic applications, build machine designs, and diagnose deployed machines.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "vention",
|
|
4
|
-
"version": "0.10.
|
|
4
|
+
"version": "0.10.30",
|
|
5
5
|
"description": "Vention skills for coding agents: write MachineLogic applications, build machine designs, and diagnose deployed machines.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Vention"
|
|
@@ -3,7 +3,7 @@ name: vention-design
|
|
|
3
3
|
description: Create, build and edit Vention machine designs and design graphs for agentic layout. Use when the user wants to start a new design, lay out an automation cell, add or reposition components in a Vention design, generate a machine layout from a description, add or place a floor plan image under a design, list a design's versions, or inspect an existing design graph. Trigger on MachineBuilder designs, design graphs, assembly graphs, extrusions, actuators, robot mounting, cell footprints, floor plans, or a machine-builder URL.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.10.
|
|
6
|
+
version: "0.10.30"
|
|
7
7
|
author: Vention
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -3,7 +3,7 @@ name: vention-machine-logic
|
|
|
3
3
|
description: Write, edit, validate, and deploy MachineLogic Python applications for Vention machines with the machine-logic-sdk and the Vention CLI. Load it before writing or changing any Python that talks to a Vention machine, however short, since device names and version-specific SDK calls come from here. Use to program a Vention machine or MachineMotion controller, drive actuators, conveyors, robots, pneumatics, or digital I/O, change an existing application, build a state machine, debug from logs, or pull, push, or link with the Vention CLI (vention or vn). Trigger on MachineLogic, machine-logic-sdk, MachineMotion, MachineBuilder applications, the Vention CLI, or a directory holding .machine-code-app-directory-info.json. Printing what the machine or robot holds now (positions, taught targets, calibration, I/O) is a program: files on disk hold only as-designed values. Not for explaining an existing machine or its configuration in words when no program is asked for, nor for Python that never touches the machine.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.10.
|
|
6
|
+
version: "0.10.30"
|
|
7
7
|
machine-logic-sdk: ">=3.0,<4"
|
|
8
8
|
author: Vention
|
|
9
9
|
---
|
|
@@ -75,9 +75,9 @@ It reads `requirements.txt` for `vention-state-machine`, `vention-storage`, and
|
|
|
75
75
|
|
|
76
76
|
## The shape of an application
|
|
77
77
|
|
|
78
|
-
Write the code to `main.py` before you answer, every time the user asks for a program, a script or a readout — even a one-off, even a read-only one. Code that only appears in the reply cannot be type-checked, pushed, or run.
|
|
78
|
+
Write the code to `main.py` before you answer, every time the user asks for a program, a script or a readout — even a one-off, even a read-only one. Code that only appears in the reply cannot be type-checked, pushed, or run. Before you answer, check the code you wrote against each behaviour the request states (starting position, button behaviour, counts, speeds, stop behaviour) and implement every one. When you leave one out on purpose, because a safety rule below forbids it or only the user knows a value, the reply names it, says why, and says what would let you add it. A value neither the request nor the configuration gives goes in a named constant the reply lists as the user's to fill in.
|
|
79
79
|
|
|
80
|
-
`main.py` is the entry point named in `project.json`. Resolve devices once from the configuration, keep speeds in named constants at the top, and make the shutdown path unconditional.
|
|
80
|
+
`main.py` is the entry point named in `project.json`. Resolve devices once from the configuration, keep speeds in named constants at the top, and make the shutdown path unconditional. It covers every way out: put anything after the device lookups that can fail (homing, scene lookups, loading a recipe) inside the `try`. In the `finally`, tell workers to issue no further commands, stop motion, join any worker still inside a device call with a timeout, then switch outputs off, so a late write cannot undo them. Give each step its own `try`/`except` so one failure does not skip the rest.
|
|
81
81
|
|
|
82
82
|
```python
|
|
83
83
|
from machinelogic import Machine, MotionProfile, VentionException
|
|
@@ -147,11 +147,19 @@ print(f"cycle {cycle} took {elapsed:.1f} s") # the work that was worth not b
|
|
|
147
147
|
robot.wait_for_motion_completion() # robots take no arguments
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
|
|
150
|
+
`move_continuous_async` is the exception to all of it: it has no target to arrive at, so it ends at `stop()`, never at a wait. When something has to be serviced mid-travel, such as the position, a Stop, or a deadline, run the wait on a worker (`asyncio.to_thread` in an asyncio application) and loop until it returns. Never loop on `state.move_in_progress` instead: it can read False before the move has begun, so the loop ends before the axis arrives. The SDK retries a wait past its timeout and can raise a `requests` error rather than a `VentionException`, and a wait cut short by `stop()` may raise too: once you have stopped the device, treat that as the stop, not a fault.
|
|
151
|
+
```python
|
|
152
|
+
axis.move_relative_async(250.0, profile) # send the move before its wait starts
|
|
153
|
+
arrival = ThreadPoolExecutor(max_workers=1).submit(axis.wait_for_move_completion, 20) # concurrent.futures
|
|
154
|
+
while not arrival.done(): # ends on arrival, however early the loop starts
|
|
155
|
+
print(axis.state.position)
|
|
156
|
+
time.sleep(0.1)
|
|
157
|
+
arrival.result() # re-raises what the wait raised
|
|
158
|
+
```
|
|
151
159
|
|
|
152
160
|
## Reacting to an input edge
|
|
153
161
|
|
|
154
|
-
Polling can straddle a pulse that opens and closes between two reads. `on_state_change` fires on every
|
|
162
|
+
Polling can straddle a pulse that opens and closes between two reads. `on_state_change` fires on every update the controller sends, repeats included, on a background thread, so the process has to stay alive for the edges to land in:
|
|
155
163
|
|
|
156
164
|
```python
|
|
157
165
|
from machinelogic.ivention.idigital_input import IDigitalInput
|
|
@@ -162,6 +170,8 @@ def on_edge(value: bool, digital_input: IDigitalInput) -> None:
|
|
|
162
170
|
part_present.on_state_change(on_edge)
|
|
163
171
|
```
|
|
164
172
|
|
|
173
|
+
When the request wants a Stop or Hold to act at once, it covers a press during a long move or a dwell, which a check between steps misses. Set a `threading.Event` from its `on_state_change` callback (`loop.call_soon_threadsafe(event.set)` in an asyncio application); the mid-travel loop above calls `stop()` on the moving device when it is set, and a dwell is `if stop_requested.wait(dwell_s):`, not `time.sleep(dwell_s)`. Register the callback before reading the input's current level, and start the motion only after that read finds it clear: a press between the read and the registration is lost, and registering fires nothing, so a button already held gives no edge and any state the callback keeps starts from that read. Whether an edge that lands while the cycle is busy or held counts is the request's to say: when every edge counts, latch it (a counter, a queue) rather than dropping it; when the request arms the input only at some point in the cycle, ignore edges before that point. When Stop must be followed by a fresh Start, discard any Start pressed before it so an old press cannot restart the cycle. A repeat is not an edge: keep the last value seen and count a rising edge only when it changes from False to True. Homing is motion too: check a held Stop or Hold before it, and where one must interrupt it, on SDK 3.2.0 and later use `home_async()` and the wait above so `stop()` can end it. Right before each command that starts motion, read the interlock's and the Hold's current level (`state.value`) rather than a flag your callback set: a queued event may not have run yet.
|
|
174
|
+
|
|
165
175
|
## Doing several things at once
|
|
166
176
|
|
|
167
177
|
A plain sequence stays a plain synchronous script. When two or more things have to happen at the same time (two conveyors, a counter beside a cycle, a cycle that also listens for MQTT), run each as a task on one asyncio loop. The SDK has no coroutines: an `_async` method only sends the command and returns, and the waits block. Keep every blocking call off the loop, or it stalls every other task for as long as it blocks.
|
|
@@ -3,7 +3,7 @@ name: vention-machine-logic-hmi
|
|
|
3
3
|
description: Build or edit the custom operator HMI of a MachineLogic application, the React touch screen in customui/ that runs in MachineBuilder and on the MachineMotion pendant, wired to the application's Python process through vention-communication. Use when the user asks for an operator screen, a custom HMI or UI, a touch panel, start and stop buttons, live machine state on screen, or recipes an operator picks, for a Vention machine or inside a directory holding .machine-code-app-directory-info.json. Uses @vention/machine-ui, @vention/machine-apps-components and @vention/machine-logic-ui-sdk. Do not use for the no-code HMI Builder, or for the Python motion logic alone (that is vention-machine-logic).
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.10.
|
|
6
|
+
version: "0.10.30"
|
|
7
7
|
author: Vention
|
|
8
8
|
---
|
|
9
9
|
|
package/skills/vention-machine-logic-hmi/examples/indexing-station-hmi/customui/package.json
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"@emotion/styled": "11.14.1",
|
|
16
16
|
"@mui/material": "5.16.7",
|
|
17
17
|
"@tabler/icons-react": "3.44.0",
|
|
18
|
-
"@vention/machine-apps-components": "1.30.
|
|
19
|
-
"@vention/machine-logic-ui-sdk": "0.47.
|
|
20
|
-
"@vention/machine-ui": "6.7.
|
|
18
|
+
"@vention/machine-apps-components": "1.30.26",
|
|
19
|
+
"@vention/machine-logic-ui-sdk": "0.47.5",
|
|
20
|
+
"@vention/machine-ui": "6.7.1",
|
|
21
21
|
"react": "17.0.2",
|
|
22
22
|
"react-dom": "17.0.2",
|
|
23
23
|
"react-router-dom": "6.30.3",
|
|
@@ -3,7 +3,7 @@ name: vention-monitoring
|
|
|
3
3
|
description: Diagnose deployed Vention machines from controller state, history, health, and activity data. Use when the user reports a machine that is down, faulted, offline, slow, or underperforming, asks why a cycle time regressed, wants to interpret MachineMotion event data or drive and brake status, asks about OEE or uptime, or wants to know which machine in a fleet needs attention. Trigger on a MachineMotion serial number plus any complaint.
|
|
4
4
|
license: MIT
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.10.
|
|
6
|
+
version: "0.10.30"
|
|
7
7
|
author: Vention
|
|
8
8
|
---
|
|
9
9
|
|