vortex-cli 5.0.0__tar.gz → 6.0.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.
- {vortex_cli-5.0.0/vortex_cli.egg-info → vortex_cli-6.0.0}/PKG-INFO +123 -5
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/README.md +122 -4
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/pyproject.toml +1 -1
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/cli.py +270 -19
- vortex_cli-6.0.0/vortex/commands/agenda.py +163 -0
- vortex_cli-6.0.0/vortex/commands/clean.py +213 -0
- vortex_cli-6.0.0/vortex/commands/clone.py +606 -0
- vortex_cli-6.0.0/vortex/commands/config.py +127 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/db.py +103 -3
- vortex_cli-6.0.0/vortex/commands/delete.py +127 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/execute.py +33 -1
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/list.py +84 -9
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/log.py +35 -4
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/new.py +27 -0
- vortex_cli-6.0.0/vortex/commands/pull.py +398 -0
- vortex_cli-6.0.0/vortex/commands/push.py +132 -0
- vortex_cli-6.0.0/vortex/commands/render.py +77 -0
- vortex_cli-6.0.0/vortex/commands/status.py +86 -0
- vortex_cli-6.0.0/vortex/commands/undo.py +144 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/watch.py +79 -3
- vortex_cli-6.0.0/vortex/gateway.py +795 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/main.py +68 -3
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/models.py +199 -2
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/soap.py +59 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/templates/agent/AGENTS.md +43 -9
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/templates/agent/skills/puakma-design-elements/SKILL.md +23 -8
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/templates/agent/skills/puakma-overview/SKILL.md +23 -13
- vortex_cli-6.0.0/vortex/templates/agent/skills/vortex-workflow/SKILL.md +258 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/util.py +10 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/workspace.py +144 -14
- {vortex_cli-5.0.0 → vortex_cli-6.0.0/vortex_cli.egg-info}/PKG-INFO +123 -5
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex_cli.egg-info/SOURCES.txt +7 -0
- vortex_cli-5.0.0/vortex/commands/clean.py +0 -58
- vortex_cli-5.0.0/vortex/commands/clone.py +0 -319
- vortex_cli-5.0.0/vortex/commands/config.py +0 -67
- vortex_cli-5.0.0/vortex/commands/delete.py +0 -83
- vortex_cli-5.0.0/vortex/templates/agent/skills/vortex-workflow/SKILL.md +0 -148
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/LICENSE +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/setup.cfg +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/__init__.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/__main__.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/colour.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/__init__.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/agent.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/code.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/compile.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/copy.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/docs.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/export.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/find.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/grep.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/import_.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/libs.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/schema.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/commands/use.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/constants.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/docs/Blackbook v2.md +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/docs/Blackbook.pdf +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/docs/index.html +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/docs/marked.min.js +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/lib/puakma-6.0.40.jar +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/libs.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/logging.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/spinner.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/templates/agent/skills/puakma-database/SKILL.md +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/templates/agent/vortex.code-snippets +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex/webdesign.py +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex_cli.egg-info/dependency_links.txt +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex_cli.egg-info/entry_points.txt +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex_cli.egg-info/requires.txt +0 -0
- {vortex_cli-5.0.0 → vortex_cli-6.0.0}/vortex_cli.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vortex_cli
|
|
3
|
-
Version:
|
|
3
|
+
Version: 6.0.0
|
|
4
4
|
Summary: Vortex CLI
|
|
5
5
|
Author-email: Jordan Amos <jordan.amos@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -95,16 +95,35 @@ While it is possible to use without it, this software has been purposefully desi
|
|
|
95
95
|
[server1] ; This can be called whatever you want and can be referenced using the '--server' flag
|
|
96
96
|
host = example.com
|
|
97
97
|
port = 8080 ; we can overwrite the DEFAULT value
|
|
98
|
-
puakma_db_conn_id = 13
|
|
99
98
|
username = myuser ; Optional - Prompted at runtime if not provided
|
|
100
99
|
password = mypassword ; Optional - Prompted at runtime if not provided
|
|
101
100
|
; Optional
|
|
101
|
+
puakma_db_conn_id = 13 ; Optional - discovered from the server when omitted
|
|
102
|
+
backend = soap ; 'soap' (default) or 'gateway' - see The Agent Gateway below
|
|
103
|
+
gateway_path = vortex/gateway.pma ; only used when backend = gateway
|
|
102
104
|
clone_with_resources = html,css,js ; resources with these extensions are always cloned - 'clone --get-resources' still clones ALL resources
|
|
103
105
|
lib_path = ; optional extra jars to add to the classpath (the server's own jars are downloaded automatically - see 'vortex libs')
|
|
106
|
+
workspace_folders = ~/dev/shared,notes ; extra folders to mount in the generated .code-workspace files. Relative paths resolve against the workspace root. Under [DEFAULT] they are added to every workspace; here they apply to this server's workspace (and the global one)
|
|
104
107
|
java_home = /usr/lib/jvm/java-17-openjdk-amd64/ ; The local path to the JRE to use. Should be the same version running on your server
|
|
105
108
|
java_environment_name = JavaSE-17 ; Java Execution Environment name https://docs.osgi.org/reference/eenames.html
|
|
106
109
|
```
|
|
107
110
|
|
|
111
|
+
## Upgrading to 6.0
|
|
112
|
+
|
|
113
|
+
6.0 is additive - **the default behaviour is unchanged**. Every server keeps using the SOAP
|
|
114
|
+
designer path unless you opt it in.
|
|
115
|
+
|
|
116
|
+
- **New optional backend: the agent gateway.** Set `backend = gateway` on a server definition
|
|
117
|
+
to route supported operations through the `vortex/gateway` Puakma application instead of
|
|
118
|
+
SOAPDesigner. The default is `backend = soap`, which never contacts the gateway at all - so
|
|
119
|
+
servers without it installed are unaffected. See [The Agent Gateway](#the-agent-gateway).
|
|
120
|
+
- **New commands**: `status`, `agenda`, `push`, `pull`, `render` and `undo`. `agenda`, `pull`,
|
|
121
|
+
`render` and `undo` require `backend = gateway`; `status` and `push` fall back to the
|
|
122
|
+
existing paths.
|
|
123
|
+
- **`puakma_db_conn_id` is now optional.** When omitted it is discovered from the server on
|
|
124
|
+
both backends. Existing configs that set it explicitly keep working.
|
|
125
|
+
- **`vortex list` gains Version and Last Modified columns** when run against a gateway server.
|
|
126
|
+
|
|
108
127
|
## Upgrading to 5.0
|
|
109
128
|
|
|
110
129
|
5.0 changes some defaults you may rely on:
|
|
@@ -131,11 +150,23 @@ For a full list of commands see `--help`.
|
|
|
131
150
|
- `code`: Open the workspace in Visual Studio Code (`-s <server>` opens that server's own workspace with exactly its jars on the Java classpath).
|
|
132
151
|
- `use`: Set the default server so you don't need to pass `--server` on every command. e.g. `vortex use production`
|
|
133
152
|
- `list` (or `ls`): List Puakma Applications on the server or cloned locally. (`ls` is an alias for `vortex list --local`)
|
|
134
|
-
- `clone`: Clone Puakma Applications and their design objects into the workspace. Apps can be referenced by ID (`vortex clone 13`), by TemplateName (`vortex clone bettrackr_app`), or by group/name (`vortex clone bettrackr/app`) - all optionally server-qualified (`dev:13`, `dev:bettrackr/app`).
|
|
153
|
+
- `clone`: Clone Puakma Applications and their design objects into the workspace. Apps can be referenced by ID (`vortex clone 13`), by TemplateName (`vortex clone bettrackr_app`), or by group/name (`vortex clone bettrackr/app`). A bare application group clones **every** application in it (`vortex clone BetTrackr`) - all optionally server-qualified (`dev:13`, `dev:bettrackr/app`, `dev:BetTrackr`). See [Cloning a whole group](#cloning-a-whole-group).
|
|
135
154
|
- `watch`: Watch the workspace for changes to Design Objects and automatically upload them to the server each app was cloned from. Watches all servers at once unless `--server` is given.
|
|
136
155
|
- `clean`: Delete the locally cloned Puakma Application directories in the workspace.
|
|
137
|
-
|
|
156
|
+
Takes optional `APP_ID`s to clean just those clones (all of the server's, if none are
|
|
157
|
+
given). Refuses to delete a clone holding local changes the server doesn't have -
|
|
158
|
+
naming each file - unless `--force` is given. Verifying that asks the server for its
|
|
159
|
+
design element hashes, so a non-forced `clean` needs a reachable `backend=gateway`
|
|
160
|
+
server; a clone it can't verify is refused, not silently deleted (`--force` needs no
|
|
161
|
+
network).
|
|
162
|
+
- `config`: View and manage configuration. `--check-gateway` reports the agent gateway negotiation and which gateway roles your identity holds.
|
|
138
163
|
- `log`: View the server log.
|
|
164
|
+
- `status`: Show the server status - via the agent gateway when available, otherwise the raw console `status` output.
|
|
165
|
+
- `agenda`: List every scheduled action with its decoded schedule, last and next run, and whether it is overdue (read-only, gateway only).
|
|
166
|
+
- `push`: Upload local design files (source, compiled classes, pages, resources) to the server without a watch session - journaled and deploy-confirmed when routed via the gateway.
|
|
167
|
+
- `pull`: Refresh cloned applications in place via the gateway's incremental sync - only elements changed since the last sync are downloaded. Refuses to overwrite locally modified files without `--force`.
|
|
168
|
+
- `render`: Render a PAGE server-side as your identity and print it (or `--out FILE`) - see a change without a browser login (gateway only).
|
|
169
|
+
- `undo`: The server-side undo journal. No arguments lists journal entries; with an entry id it dry-runs a restore, and `--confirm` writes the journaled version back (gateway only).
|
|
139
170
|
- `find`: Find Design Objects of cloned applications by name.
|
|
140
171
|
- `grep`: Search the contents of cloned Design Objects using a Regular Expression.
|
|
141
172
|
- `new`: Create new Design Objects, Applications, or Keywords. Use `--update <ID>` to update instead. Run without flags to launch an interactive wizard.
|
|
@@ -149,6 +180,31 @@ For a full list of commands see `--help`.
|
|
|
149
180
|
- `docs`: Open the Tornado Server Blackbook.
|
|
150
181
|
- `execute`: Execute a command on the server.
|
|
151
182
|
|
|
183
|
+
### Cloning a whole group
|
|
184
|
+
|
|
185
|
+
`vortex clone` takes an ID, a TemplateName, an application group, or `group/name`:
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
vortex clone 13 # by ID
|
|
189
|
+
vortex clone bettrackr_app # by TemplateName
|
|
190
|
+
vortex clone bettrackr/app # by group/name
|
|
191
|
+
vortex clone BetTrackr # every application in the BetTrackr group
|
|
192
|
+
vortex clone dev:BetTrackr # ... on the 'dev' server
|
|
193
|
+
vortex clone --group BetTrackr # explicitly a group, never a TemplateName
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Groups are matched the way `vortex list --group` matches them - a
|
|
197
|
+
case-insensitive substring - except that an exact (case-insensitive) group name
|
|
198
|
+
always wins, so cloning `BetTrackr` never drags in `BetTrackrLegacy`. If a
|
|
199
|
+
partial name still spans several groups, vortex stops and lists them rather
|
|
200
|
+
than cloning the lot.
|
|
201
|
+
|
|
202
|
+
A bare word is looked up as **both** a TemplateName and a group. In the rare
|
|
203
|
+
case that it is genuinely both, vortex refuses to guess: use `--group NAME` for
|
|
204
|
+
the group, or the ID / `group/name` for the single application. Every flag
|
|
205
|
+
(`--reclone`, `--get-resources`, `--open-urls`, `--timeout`, `--server`) applies
|
|
206
|
+
to group clones as it does to single apps.
|
|
207
|
+
|
|
152
208
|
### Working with Multiple Servers
|
|
153
209
|
|
|
154
210
|
Each section in `servers.ini` defines a server (hosts must be unique across
|
|
@@ -172,7 +228,9 @@ apps from several servers at the same time:
|
|
|
172
228
|
watcher doesn't know about). Finer-grained commands that alter design
|
|
173
229
|
elements (`delete`, `copy`, `new`, `compile --upload`) lock
|
|
174
230
|
per-application: they are refused for apps a watch is watching and run
|
|
175
|
-
concurrently otherwise.
|
|
231
|
+
concurrently otherwise. `push` and `pull` lock the same way - per
|
|
232
|
+
application, never workspace-wide - so they can run against one app while
|
|
233
|
+
a watch holds others.
|
|
176
234
|
- In VS Code, app folders are listed in per-server blocks (`dev: group/app`,
|
|
177
235
|
...) with the server's jars on the Java classpath (see them in the Java
|
|
178
236
|
Projects view). vscode-java's classpath settings are
|
|
@@ -215,6 +273,59 @@ hard to change by accident:
|
|
|
215
273
|
- `vortex watch` skips protected servers unless `--include-protected` is
|
|
216
274
|
given, so saving a file can never hot-deploy to production by accident.
|
|
217
275
|
|
|
276
|
+
### The Agent Gateway
|
|
277
|
+
|
|
278
|
+
The **agent gateway** is a JSON API served by the Puakma server itself - a companion Puakma
|
|
279
|
+
application (`vortex/gateway`) that you deploy to a server. Where SOAPDesigner is a transport,
|
|
280
|
+
the gateway is a transport *plus* the guarantees only server-side code can enforce:
|
|
281
|
+
|
|
282
|
+
- **Role-gated operations** - every endpoint requires one declared application role, checked on
|
|
283
|
+
the server. Roles are rows in *that server's* copy of the app, so a grant on dev confers
|
|
284
|
+
nothing on prod.
|
|
285
|
+
- **An undo journal** - destructive design writes snapshot the element first (bytes, metadata,
|
|
286
|
+
design params). `vortex undo` lists those snapshots and restores any of them; deleted
|
|
287
|
+
elements are recreatable.
|
|
288
|
+
- **Dry-run by default** - `undo`, element deletes, single-statement DML and whole-server
|
|
289
|
+
refresh do nothing without an explicit confirmation.
|
|
290
|
+
- **Deploy confirmation** - writes reply with the sizes and hashes of what is really on the
|
|
291
|
+
server now.
|
|
292
|
+
- **Database guardrails** - the Puakma system database is unreachable through it, and DDL is
|
|
293
|
+
never executed, only generated as text.
|
|
294
|
+
|
|
295
|
+
Opt in per server:
|
|
296
|
+
|
|
297
|
+
```ini
|
|
298
|
+
[dev]
|
|
299
|
+
host = dev.example.com
|
|
300
|
+
backend = gateway ; default is 'soap', which never contacts the gateway
|
|
301
|
+
; gateway_path = vortex/gateway.pma (this is the default)
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
With `backend = gateway`, `watch`/`push` uploads, `delete`, `log`, `status`, `db`, `execute`
|
|
305
|
+
and the journal commands route through it, and `agenda`, `pull`, `render` and `undo` become
|
|
306
|
+
available. Check what you are talking to and what you may do:
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
vortex config --check-gateway -s dev
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**There is no fallback in either direction, by design.** A gateway refusal (for example, your
|
|
313
|
+
identity lacks the required role) is reported as an error - vortex never quietly retries the
|
|
314
|
+
same operation over SOAP, because that would let anyone with SOAP access bypass every role,
|
|
315
|
+
journal and guardrail above. Likewise `backend = soap` never contacts the gateway. The one
|
|
316
|
+
deliberate exception is the gateway application's *own* deployments, which always use SOAP so
|
|
317
|
+
that a broken gateway deploy never needs the gateway to fix itself.
|
|
318
|
+
|
|
319
|
+
The gateway application is **not bundled with this CLI** - deploy it to a server with
|
|
320
|
+
`vortex export` / `vortex import`, then run its `Setup` scheduled action. It ships its own
|
|
321
|
+
`API.md`, `README.md` and `DECISIONS.md` as DOCUMENTATION design elements, so once installed
|
|
322
|
+
the running server documents its own endpoints, roles and setup steps.
|
|
323
|
+
|
|
324
|
+
> **Note:** the gateway's roles are only a real boundary for an identity whose *sole* route to
|
|
325
|
+
> the server is the gateway. Any identity that can reach `system/webdesign` or deploy code can
|
|
326
|
+
> grant itself any role. Keep webdesign access for operators; agent identities should not have
|
|
327
|
+
> it.
|
|
328
|
+
|
|
218
329
|
### Interactive Wizards
|
|
219
330
|
|
|
220
331
|
Run `vortex new object` or `vortex new app` without any flags to launch a step-by-step wizard:
|
|
@@ -320,5 +431,12 @@ and the vortex workflow, and a `vortex.code-snippets` file with common Puakma Ja
|
|
|
320
431
|
snippets. Existing files are never overwritten, so they are safe to customise. These files are
|
|
321
432
|
also generated automatically on `vortex --init` and before `vortex code` opens the workspace.
|
|
322
433
|
|
|
434
|
+
The guidance is backend-aware: on a `backend = gateway` server the skills teach the explicit
|
|
435
|
+
`vortex compile` + `vortex push` deploy loop (journaled, `undo`-recoverable, no workspace lock),
|
|
436
|
+
and the `vortex watch` save-to-deploy loop is scoped to `backend = soap`. Because existing files
|
|
437
|
+
are never overwritten, workspaces generated before 6.0.0 keep their old watch-centric copies -
|
|
438
|
+
delete a file (or the `.claude/skills` directory) and re-run `vortex agent` to pick up the
|
|
439
|
+
current version.
|
|
440
|
+
|
|
323
441
|
Workspaces created before AGENTS.md existed keep their full `CLAUDE.md` (existing files are
|
|
324
442
|
never touched); the new `AGENTS.md` is simply added alongside it.
|
|
@@ -51,16 +51,35 @@ While it is possible to use without it, this software has been purposefully desi
|
|
|
51
51
|
[server1] ; This can be called whatever you want and can be referenced using the '--server' flag
|
|
52
52
|
host = example.com
|
|
53
53
|
port = 8080 ; we can overwrite the DEFAULT value
|
|
54
|
-
puakma_db_conn_id = 13
|
|
55
54
|
username = myuser ; Optional - Prompted at runtime if not provided
|
|
56
55
|
password = mypassword ; Optional - Prompted at runtime if not provided
|
|
57
56
|
; Optional
|
|
57
|
+
puakma_db_conn_id = 13 ; Optional - discovered from the server when omitted
|
|
58
|
+
backend = soap ; 'soap' (default) or 'gateway' - see The Agent Gateway below
|
|
59
|
+
gateway_path = vortex/gateway.pma ; only used when backend = gateway
|
|
58
60
|
clone_with_resources = html,css,js ; resources with these extensions are always cloned - 'clone --get-resources' still clones ALL resources
|
|
59
61
|
lib_path = ; optional extra jars to add to the classpath (the server's own jars are downloaded automatically - see 'vortex libs')
|
|
62
|
+
workspace_folders = ~/dev/shared,notes ; extra folders to mount in the generated .code-workspace files. Relative paths resolve against the workspace root. Under [DEFAULT] they are added to every workspace; here they apply to this server's workspace (and the global one)
|
|
60
63
|
java_home = /usr/lib/jvm/java-17-openjdk-amd64/ ; The local path to the JRE to use. Should be the same version running on your server
|
|
61
64
|
java_environment_name = JavaSE-17 ; Java Execution Environment name https://docs.osgi.org/reference/eenames.html
|
|
62
65
|
```
|
|
63
66
|
|
|
67
|
+
## Upgrading to 6.0
|
|
68
|
+
|
|
69
|
+
6.0 is additive - **the default behaviour is unchanged**. Every server keeps using the SOAP
|
|
70
|
+
designer path unless you opt it in.
|
|
71
|
+
|
|
72
|
+
- **New optional backend: the agent gateway.** Set `backend = gateway` on a server definition
|
|
73
|
+
to route supported operations through the `vortex/gateway` Puakma application instead of
|
|
74
|
+
SOAPDesigner. The default is `backend = soap`, which never contacts the gateway at all - so
|
|
75
|
+
servers without it installed are unaffected. See [The Agent Gateway](#the-agent-gateway).
|
|
76
|
+
- **New commands**: `status`, `agenda`, `push`, `pull`, `render` and `undo`. `agenda`, `pull`,
|
|
77
|
+
`render` and `undo` require `backend = gateway`; `status` and `push` fall back to the
|
|
78
|
+
existing paths.
|
|
79
|
+
- **`puakma_db_conn_id` is now optional.** When omitted it is discovered from the server on
|
|
80
|
+
both backends. Existing configs that set it explicitly keep working.
|
|
81
|
+
- **`vortex list` gains Version and Last Modified columns** when run against a gateway server.
|
|
82
|
+
|
|
64
83
|
## Upgrading to 5.0
|
|
65
84
|
|
|
66
85
|
5.0 changes some defaults you may rely on:
|
|
@@ -87,11 +106,23 @@ For a full list of commands see `--help`.
|
|
|
87
106
|
- `code`: Open the workspace in Visual Studio Code (`-s <server>` opens that server's own workspace with exactly its jars on the Java classpath).
|
|
88
107
|
- `use`: Set the default server so you don't need to pass `--server` on every command. e.g. `vortex use production`
|
|
89
108
|
- `list` (or `ls`): List Puakma Applications on the server or cloned locally. (`ls` is an alias for `vortex list --local`)
|
|
90
|
-
- `clone`: Clone Puakma Applications and their design objects into the workspace. Apps can be referenced by ID (`vortex clone 13`), by TemplateName (`vortex clone bettrackr_app`), or by group/name (`vortex clone bettrackr/app`) - all optionally server-qualified (`dev:13`, `dev:bettrackr/app`).
|
|
109
|
+
- `clone`: Clone Puakma Applications and their design objects into the workspace. Apps can be referenced by ID (`vortex clone 13`), by TemplateName (`vortex clone bettrackr_app`), or by group/name (`vortex clone bettrackr/app`). A bare application group clones **every** application in it (`vortex clone BetTrackr`) - all optionally server-qualified (`dev:13`, `dev:bettrackr/app`, `dev:BetTrackr`). See [Cloning a whole group](#cloning-a-whole-group).
|
|
91
110
|
- `watch`: Watch the workspace for changes to Design Objects and automatically upload them to the server each app was cloned from. Watches all servers at once unless `--server` is given.
|
|
92
111
|
- `clean`: Delete the locally cloned Puakma Application directories in the workspace.
|
|
93
|
-
|
|
112
|
+
Takes optional `APP_ID`s to clean just those clones (all of the server's, if none are
|
|
113
|
+
given). Refuses to delete a clone holding local changes the server doesn't have -
|
|
114
|
+
naming each file - unless `--force` is given. Verifying that asks the server for its
|
|
115
|
+
design element hashes, so a non-forced `clean` needs a reachable `backend=gateway`
|
|
116
|
+
server; a clone it can't verify is refused, not silently deleted (`--force` needs no
|
|
117
|
+
network).
|
|
118
|
+
- `config`: View and manage configuration. `--check-gateway` reports the agent gateway negotiation and which gateway roles your identity holds.
|
|
94
119
|
- `log`: View the server log.
|
|
120
|
+
- `status`: Show the server status - via the agent gateway when available, otherwise the raw console `status` output.
|
|
121
|
+
- `agenda`: List every scheduled action with its decoded schedule, last and next run, and whether it is overdue (read-only, gateway only).
|
|
122
|
+
- `push`: Upload local design files (source, compiled classes, pages, resources) to the server without a watch session - journaled and deploy-confirmed when routed via the gateway.
|
|
123
|
+
- `pull`: Refresh cloned applications in place via the gateway's incremental sync - only elements changed since the last sync are downloaded. Refuses to overwrite locally modified files without `--force`.
|
|
124
|
+
- `render`: Render a PAGE server-side as your identity and print it (or `--out FILE`) - see a change without a browser login (gateway only).
|
|
125
|
+
- `undo`: The server-side undo journal. No arguments lists journal entries; with an entry id it dry-runs a restore, and `--confirm` writes the journaled version back (gateway only).
|
|
95
126
|
- `find`: Find Design Objects of cloned applications by name.
|
|
96
127
|
- `grep`: Search the contents of cloned Design Objects using a Regular Expression.
|
|
97
128
|
- `new`: Create new Design Objects, Applications, or Keywords. Use `--update <ID>` to update instead. Run without flags to launch an interactive wizard.
|
|
@@ -105,6 +136,31 @@ For a full list of commands see `--help`.
|
|
|
105
136
|
- `docs`: Open the Tornado Server Blackbook.
|
|
106
137
|
- `execute`: Execute a command on the server.
|
|
107
138
|
|
|
139
|
+
### Cloning a whole group
|
|
140
|
+
|
|
141
|
+
`vortex clone` takes an ID, a TemplateName, an application group, or `group/name`:
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
vortex clone 13 # by ID
|
|
145
|
+
vortex clone bettrackr_app # by TemplateName
|
|
146
|
+
vortex clone bettrackr/app # by group/name
|
|
147
|
+
vortex clone BetTrackr # every application in the BetTrackr group
|
|
148
|
+
vortex clone dev:BetTrackr # ... on the 'dev' server
|
|
149
|
+
vortex clone --group BetTrackr # explicitly a group, never a TemplateName
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Groups are matched the way `vortex list --group` matches them - a
|
|
153
|
+
case-insensitive substring - except that an exact (case-insensitive) group name
|
|
154
|
+
always wins, so cloning `BetTrackr` never drags in `BetTrackrLegacy`. If a
|
|
155
|
+
partial name still spans several groups, vortex stops and lists them rather
|
|
156
|
+
than cloning the lot.
|
|
157
|
+
|
|
158
|
+
A bare word is looked up as **both** a TemplateName and a group. In the rare
|
|
159
|
+
case that it is genuinely both, vortex refuses to guess: use `--group NAME` for
|
|
160
|
+
the group, or the ID / `group/name` for the single application. Every flag
|
|
161
|
+
(`--reclone`, `--get-resources`, `--open-urls`, `--timeout`, `--server`) applies
|
|
162
|
+
to group clones as it does to single apps.
|
|
163
|
+
|
|
108
164
|
### Working with Multiple Servers
|
|
109
165
|
|
|
110
166
|
Each section in `servers.ini` defines a server (hosts must be unique across
|
|
@@ -128,7 +184,9 @@ apps from several servers at the same time:
|
|
|
128
184
|
watcher doesn't know about). Finer-grained commands that alter design
|
|
129
185
|
elements (`delete`, `copy`, `new`, `compile --upload`) lock
|
|
130
186
|
per-application: they are refused for apps a watch is watching and run
|
|
131
|
-
concurrently otherwise.
|
|
187
|
+
concurrently otherwise. `push` and `pull` lock the same way - per
|
|
188
|
+
application, never workspace-wide - so they can run against one app while
|
|
189
|
+
a watch holds others.
|
|
132
190
|
- In VS Code, app folders are listed in per-server blocks (`dev: group/app`,
|
|
133
191
|
...) with the server's jars on the Java classpath (see them in the Java
|
|
134
192
|
Projects view). vscode-java's classpath settings are
|
|
@@ -171,6 +229,59 @@ hard to change by accident:
|
|
|
171
229
|
- `vortex watch` skips protected servers unless `--include-protected` is
|
|
172
230
|
given, so saving a file can never hot-deploy to production by accident.
|
|
173
231
|
|
|
232
|
+
### The Agent Gateway
|
|
233
|
+
|
|
234
|
+
The **agent gateway** is a JSON API served by the Puakma server itself - a companion Puakma
|
|
235
|
+
application (`vortex/gateway`) that you deploy to a server. Where SOAPDesigner is a transport,
|
|
236
|
+
the gateway is a transport *plus* the guarantees only server-side code can enforce:
|
|
237
|
+
|
|
238
|
+
- **Role-gated operations** - every endpoint requires one declared application role, checked on
|
|
239
|
+
the server. Roles are rows in *that server's* copy of the app, so a grant on dev confers
|
|
240
|
+
nothing on prod.
|
|
241
|
+
- **An undo journal** - destructive design writes snapshot the element first (bytes, metadata,
|
|
242
|
+
design params). `vortex undo` lists those snapshots and restores any of them; deleted
|
|
243
|
+
elements are recreatable.
|
|
244
|
+
- **Dry-run by default** - `undo`, element deletes, single-statement DML and whole-server
|
|
245
|
+
refresh do nothing without an explicit confirmation.
|
|
246
|
+
- **Deploy confirmation** - writes reply with the sizes and hashes of what is really on the
|
|
247
|
+
server now.
|
|
248
|
+
- **Database guardrails** - the Puakma system database is unreachable through it, and DDL is
|
|
249
|
+
never executed, only generated as text.
|
|
250
|
+
|
|
251
|
+
Opt in per server:
|
|
252
|
+
|
|
253
|
+
```ini
|
|
254
|
+
[dev]
|
|
255
|
+
host = dev.example.com
|
|
256
|
+
backend = gateway ; default is 'soap', which never contacts the gateway
|
|
257
|
+
; gateway_path = vortex/gateway.pma (this is the default)
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
With `backend = gateway`, `watch`/`push` uploads, `delete`, `log`, `status`, `db`, `execute`
|
|
261
|
+
and the journal commands route through it, and `agenda`, `pull`, `render` and `undo` become
|
|
262
|
+
available. Check what you are talking to and what you may do:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
vortex config --check-gateway -s dev
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**There is no fallback in either direction, by design.** A gateway refusal (for example, your
|
|
269
|
+
identity lacks the required role) is reported as an error - vortex never quietly retries the
|
|
270
|
+
same operation over SOAP, because that would let anyone with SOAP access bypass every role,
|
|
271
|
+
journal and guardrail above. Likewise `backend = soap` never contacts the gateway. The one
|
|
272
|
+
deliberate exception is the gateway application's *own* deployments, which always use SOAP so
|
|
273
|
+
that a broken gateway deploy never needs the gateway to fix itself.
|
|
274
|
+
|
|
275
|
+
The gateway application is **not bundled with this CLI** - deploy it to a server with
|
|
276
|
+
`vortex export` / `vortex import`, then run its `Setup` scheduled action. It ships its own
|
|
277
|
+
`API.md`, `README.md` and `DECISIONS.md` as DOCUMENTATION design elements, so once installed
|
|
278
|
+
the running server documents its own endpoints, roles and setup steps.
|
|
279
|
+
|
|
280
|
+
> **Note:** the gateway's roles are only a real boundary for an identity whose *sole* route to
|
|
281
|
+
> the server is the gateway. Any identity that can reach `system/webdesign` or deploy code can
|
|
282
|
+
> grant itself any role. Keep webdesign access for operators; agent identities should not have
|
|
283
|
+
> it.
|
|
284
|
+
|
|
174
285
|
### Interactive Wizards
|
|
175
286
|
|
|
176
287
|
Run `vortex new object` or `vortex new app` without any flags to launch a step-by-step wizard:
|
|
@@ -276,5 +387,12 @@ and the vortex workflow, and a `vortex.code-snippets` file with common Puakma Ja
|
|
|
276
387
|
snippets. Existing files are never overwritten, so they are safe to customise. These files are
|
|
277
388
|
also generated automatically on `vortex --init` and before `vortex code` opens the workspace.
|
|
278
389
|
|
|
390
|
+
The guidance is backend-aware: on a `backend = gateway` server the skills teach the explicit
|
|
391
|
+
`vortex compile` + `vortex push` deploy loop (journaled, `undo`-recoverable, no workspace lock),
|
|
392
|
+
and the `vortex watch` save-to-deploy loop is scoped to `backend = soap`. Because existing files
|
|
393
|
+
are never overwritten, workspaces generated before 6.0.0 keep their old watch-centric copies -
|
|
394
|
+
delete a file (or the `.claude/skills` directory) and re-run `vortex agent` to pick up the
|
|
395
|
+
current version.
|
|
396
|
+
|
|
279
397
|
Workspaces created before AGENTS.md existed keep their full `CLAUDE.md` (existing files are
|
|
280
398
|
never touched); the new `AGENTS.md` is simply added alongside it.
|