vortex-cli 6.1.0__tar.gz → 6.2.1__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 (67) hide show
  1. {vortex_cli-6.1.0/vortex_cli.egg-info → vortex_cli-6.2.1}/PKG-INFO +4 -25
  2. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/README.md +0 -21
  3. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/pyproject.toml +9 -6
  4. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/cli.py +0 -11
  5. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/main.py +0 -7
  6. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/workspace.py +0 -47
  7. {vortex_cli-6.1.0 → vortex_cli-6.2.1/vortex_cli.egg-info}/PKG-INFO +4 -25
  8. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex_cli.egg-info/SOURCES.txt +0 -7
  9. vortex_cli-6.2.1/vortex_cli.egg-info/requires.txt +6 -0
  10. vortex_cli-6.1.0/vortex/commands/agent.py +0 -27
  11. vortex_cli-6.1.0/vortex/templates/agent/AGENTS.md +0 -100
  12. vortex_cli-6.1.0/vortex/templates/agent/skills/puakma-database/SKILL.md +0 -108
  13. vortex_cli-6.1.0/vortex/templates/agent/skills/puakma-design-elements/SKILL.md +0 -112
  14. vortex_cli-6.1.0/vortex/templates/agent/skills/puakma-overview/SKILL.md +0 -77
  15. vortex_cli-6.1.0/vortex/templates/agent/skills/vortex-workflow/SKILL.md +0 -262
  16. vortex_cli-6.1.0/vortex/templates/agent/vortex.code-snippets +0 -437
  17. vortex_cli-6.1.0/vortex_cli.egg-info/requires.txt +0 -6
  18. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/LICENSE +0 -0
  19. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/setup.cfg +0 -0
  20. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/__init__.py +0 -0
  21. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/__main__.py +0 -0
  22. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/colour.py +0 -0
  23. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/__init__.py +0 -0
  24. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/agenda.py +0 -0
  25. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/clean.py +0 -0
  26. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/clone.py +0 -0
  27. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/code.py +0 -0
  28. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/compile.py +0 -0
  29. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/config.py +0 -0
  30. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/copy.py +0 -0
  31. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/db.py +0 -0
  32. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/delete.py +0 -0
  33. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/docs.py +0 -0
  34. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/execute.py +0 -0
  35. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/export.py +0 -0
  36. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/find.py +0 -0
  37. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/grep.py +0 -0
  38. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/import_.py +0 -0
  39. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/libs.py +0 -0
  40. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/list.py +0 -0
  41. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/log.py +0 -0
  42. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/new.py +0 -0
  43. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/pull.py +0 -0
  44. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/push.py +0 -0
  45. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/render.py +0 -0
  46. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/schema.py +0 -0
  47. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/status.py +0 -0
  48. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/undo.py +0 -0
  49. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/use.py +0 -0
  50. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/commands/watch.py +0 -0
  51. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/constants.py +0 -0
  52. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/docs/Blackbook v2.md +0 -0
  53. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/docs/Blackbook.pdf +0 -0
  54. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/docs/index.html +0 -0
  55. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/docs/marked.min.js +0 -0
  56. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/gateway.py +0 -0
  57. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/lib/puakma-6.0.40.jar +0 -0
  58. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/libs.py +0 -0
  59. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/logging.py +0 -0
  60. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/models.py +0 -0
  61. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/soap.py +0 -0
  62. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/spinner.py +0 -0
  63. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/util.py +0 -0
  64. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex/webdesign.py +0 -0
  65. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex_cli.egg-info/dependency_links.txt +0 -0
  66. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/vortex_cli.egg-info/entry_points.txt +0 -0
  67. {vortex_cli-6.1.0 → vortex_cli-6.2.1}/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: 6.1.0
3
+ Version: 6.2.1
4
4
  Summary: Vortex CLI
5
5
  Author-email: Jordan Amos <jordan.amos@gmail.com>
6
6
  License: MIT License
@@ -35,9 +35,9 @@ Classifier: Programming Language :: Python :: 3 :: Only
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: httpx==0.24.1
39
- Requires-Dist: tabulate==0.9.0
40
- Requires-Dist: watchfiles==0.19.0
38
+ Requires-Dist: httpx>=0.27
39
+ Requires-Dist: tabulate>=0.9
40
+ Requires-Dist: watchfiles>=0.19
41
41
  Provides-Extra: keyring
42
42
  Requires-Dist: keyring; extra == "keyring"
43
43
  Dynamic: license-file
@@ -176,7 +176,6 @@ For a full list of commands see `--help`.
176
176
  - `schema`: Manage the Puakma data dictionary (PMATABLE/ATTRIBUTE): record table/column definitions and print the DDL to run by hand. Never executes DDL.
177
177
  - `compile` (or `build`): Compile an application's Java Design Objects into `zbin/` using the Eclipse compiler (ecj).
178
178
  - `libs`: Show or refresh the per-server Java library cache (each server's `puakma.jar` and shared libraries, downloaded from the server itself).
179
- - `agent`: Generate agent/editor support files (CLAUDE.md, Puakma skills, code snippets) in the workspace.
180
179
  - `docs`: Open the Tornado Server Blackbook.
181
180
  - `execute`: Execute a command on the server.
182
181
 
@@ -483,23 +482,3 @@ On a `backend = gateway` server the dictionary is reached through webdesign's vo
483
482
  the gateway's `dictionary` endpoint (`GatewayDBRead` to read, `GatewayDBWrite` to change).
484
483
  That API cannot record `--default` or `--position` (refused) nor the column half of `--ref`
485
484
  (warned) - see [SOAP-free on backend = gateway](#soap-free-on-backend--gateway).
486
-
487
- ### Agent Support Files
488
-
489
- `vortex agent` copies bundled support files into the workspace `.vscode` directory so they are
490
- included in the generated code-workspace: an `AGENTS.md` with Puakma ground rules for coding
491
- agents (including pointers to the bundled Blackbook v2 architecture reference), a `CLAUDE.md`
492
- that points Claude Code at `AGENTS.md`, a `.claude/skills/` library covering Puakma development
493
- and the vortex workflow, and a `vortex.code-snippets` file with common Puakma Java/HTML
494
- snippets. Existing files are never overwritten, so they are safe to customise. These files are
495
- also generated automatically on `vortex --init` and before `vortex code` opens the workspace.
496
-
497
- The guidance is backend-aware: on a `backend = gateway` server the skills teach the explicit
498
- `vortex compile` + `vortex push` deploy loop (journaled, `undo`-recoverable, no workspace lock),
499
- and the `vortex watch` save-to-deploy loop is scoped to `backend = soap`. Because existing files
500
- are never overwritten, workspaces generated before 6.0.0 keep their old watch-centric copies -
501
- delete a file (or the `.claude/skills` directory) and re-run `vortex agent` to pick up the
502
- current version.
503
-
504
- Workspaces created before AGENTS.md existed keep their full `CLAUDE.md` (existing files are
505
- never touched); the new `AGENTS.md` is simply added alongside it.
@@ -132,7 +132,6 @@ For a full list of commands see `--help`.
132
132
  - `schema`: Manage the Puakma data dictionary (PMATABLE/ATTRIBUTE): record table/column definitions and print the DDL to run by hand. Never executes DDL.
133
133
  - `compile` (or `build`): Compile an application's Java Design Objects into `zbin/` using the Eclipse compiler (ecj).
134
134
  - `libs`: Show or refresh the per-server Java library cache (each server's `puakma.jar` and shared libraries, downloaded from the server itself).
135
- - `agent`: Generate agent/editor support files (CLAUDE.md, Puakma skills, code snippets) in the workspace.
136
135
  - `docs`: Open the Tornado Server Blackbook.
137
136
  - `execute`: Execute a command on the server.
138
137
 
@@ -439,23 +438,3 @@ On a `backend = gateway` server the dictionary is reached through webdesign's vo
439
438
  the gateway's `dictionary` endpoint (`GatewayDBRead` to read, `GatewayDBWrite` to change).
440
439
  That API cannot record `--default` or `--position` (refused) nor the column half of `--ref`
441
440
  (warned) - see [SOAP-free on backend = gateway](#soap-free-on-backend--gateway).
442
-
443
- ### Agent Support Files
444
-
445
- `vortex agent` copies bundled support files into the workspace `.vscode` directory so they are
446
- included in the generated code-workspace: an `AGENTS.md` with Puakma ground rules for coding
447
- agents (including pointers to the bundled Blackbook v2 architecture reference), a `CLAUDE.md`
448
- that points Claude Code at `AGENTS.md`, a `.claude/skills/` library covering Puakma development
449
- and the vortex workflow, and a `vortex.code-snippets` file with common Puakma Java/HTML
450
- snippets. Existing files are never overwritten, so they are safe to customise. These files are
451
- also generated automatically on `vortex --init` and before `vortex code` opens the workspace.
452
-
453
- The guidance is backend-aware: on a `backend = gateway` server the skills teach the explicit
454
- `vortex compile` + `vortex push` deploy loop (journaled, `undo`-recoverable, no workspace lock),
455
- and the `vortex watch` save-to-deploy loop is scoped to `backend = soap`. Because existing files
456
- are never overwritten, workspaces generated before 6.0.0 keep their old watch-centric copies -
457
- delete a file (or the `.claude/skills` directory) and re-run `vortex agent` to pick up the
458
- current version.
459
-
460
- Workspaces created before AGENTS.md existed keep their full `CLAUDE.md` (existing files are
461
- never touched); the new `AGENTS.md` is simply added alongside it.
@@ -5,16 +5,21 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "vortex_cli"
8
- version = "6.1.0"
8
+ version = "6.2.1"
9
9
  description = "Vortex CLI"
10
10
  requires-python = ">=3.10"
11
11
  readme = { file = "README.md", content-type = "text/markdown" }
12
12
  license = { file = "LICENSE" }
13
13
  keywords = ["vortex", "cli", "puakma", "tornado"]
14
14
  dependencies = [
15
- "httpx==0.24.1",
16
- "tabulate==0.9.0",
17
- "watchfiles==0.19.0"
15
+ # httpx must stay >=0.27: 0.24.x pulls httpcore 0.17.x, whose
16
+ # _backends/anyio.py does `anyio.abc.ByteStream` at class-definition time.
17
+ # anyio 4.15.0 made `anyio.abc` a lazy submodule, so that import raises
18
+ # `AttributeError: module 'anyio' has no attribute 'abc'` and every vortex
19
+ # command dies before main() runs. Pinning anyio would only defer it.
20
+ "httpx>=0.27",
21
+ "tabulate>=0.9",
22
+ "watchfiles>=0.19"
18
23
  ]
19
24
  authors = [
20
25
  { name = "Jordan Amos", email = "jordan.amos@gmail.com" }
@@ -41,8 +46,6 @@ vortex = [
41
46
  "docs/Blackbook v2.md",
42
47
  "docs/index.html",
43
48
  "docs/marked.min.js",
44
- "templates/agent/*",
45
- "templates/agent/skills/*/*",
46
49
  ]
47
50
 
48
51
  [tool.mypy]
@@ -1199,17 +1199,6 @@ def add_compile_parser(command_parser: _SubParsersAction[ArgumentParser]) -> Non
1199
1199
  _add_server_option(compile_parser)
1200
1200
 
1201
1201
 
1202
- def add_agent_parser(command_parser: _SubParsersAction[ArgumentParser]) -> None:
1203
- command_parser.add_parser(
1204
- "agent",
1205
- help=(
1206
- "Generate agent/editor support files in the workspace "
1207
- "(AGENTS.md + CLAUDE.md pointer, Puakma skills, code snippets). "
1208
- "Existing files are never overwritten"
1209
- ),
1210
- )
1211
-
1212
-
1213
1202
  def add_execute_parser(command_parser: _SubParsersAction[ArgumentParser]) -> None:
1214
1203
  execute_parser = command_parser.add_parser(
1215
1204
  "execute",
@@ -14,7 +14,6 @@ from vortex import util
14
14
  from vortex.colour import Colour
15
15
  from vortex.commands.agenda import agenda
16
16
  from vortex.commands.agenda import server_config
17
- from vortex.commands.agent import agent
18
17
  from vortex.commands.clean import clean
19
18
  from vortex.commands.clone import clone
20
19
  from vortex.commands.code import code
@@ -248,7 +247,6 @@ def main(argv: Sequence[str] | None = None) -> int:
248
247
  cli.add_render_parser(command_parser)
249
248
  cli.add_watch_parser(command_parser)
250
249
  cli.add_docs_parser(command_parser)
251
- cli.add_agent_parser(command_parser)
252
250
  cli.add_compile_parser(command_parser)
253
251
  cli.add_schema_parser(command_parser)
254
252
  cli.add_execute_parser(command_parser)
@@ -291,12 +289,7 @@ def main(argv: Sequence[str] | None = None) -> int:
291
289
  code_parser.print_help()
292
290
  util.print_row_break()
293
291
  remaining_args.insert(0, "--help")
294
- # Ensure the agent/editor support files are mounted in the
295
- # code-workspace before VS Code opens (never overwrites)
296
- workspace.init_agent_files()
297
292
  return code(workspace, remaining_args, server_name)
298
- elif args.command == "agent":
299
- return agent(workspace)
300
293
  elif args.command == "docs":
301
294
  return docs(args.serve, args.port)
302
295
  elif args.command == "use":
@@ -186,8 +186,6 @@ class Workspace:
186
186
  if not self.code_workspace_file.exists():
187
187
  self.update_vscode_settings(reset=True)
188
188
 
189
- self.init_agent_files()
190
-
191
189
  logger.info(f"Initialised workspace {self.path}")
192
190
 
193
191
  @property
@@ -570,51 +568,6 @@ class Workspace:
570
568
  except (configparser.Error, ValueError) as e:
571
569
  _error(f"Error reading server from config: {str(e)}")
572
570
 
573
- # Claude Code reads CLAUDE.md rather than the agent-standard AGENTS.md.
574
- # A pointer file keeps both tool families on the same instructions
575
- CLAUDE_MD_POINTER = (
576
- "The workspace instructions for coding agents live in @AGENTS.md - "
577
- "follow that file.\n"
578
- )
579
-
580
- def init_agent_files(self) -> tuple[list[Path], list[Path]]:
581
- """
582
- Copies the bundled agent/editor support files into the .vscode
583
- directory: AGENTS.md (plus a CLAUDE.md pointing at it), the Puakma
584
- .claude/skills library, and the vortex.code-snippets file
585
- (folder-scoped, so VS Code picks it up via the .vscode workspace
586
- folder). Existing files are NEVER overwritten.
587
- Returns (written, skipped) paths.
588
- """
589
- template_dir = Path(__file__).parent / "templates" / "agent"
590
- written: list[Path] = []
591
- skipped: list[Path] = []
592
- for src in sorted(template_dir.rglob("*")):
593
- if not src.is_file():
594
- continue
595
- rel = src.relative_to(template_dir)
596
- if rel.parts[0] == "skills":
597
- dest = self.vscode_dir / ".claude" / rel
598
- elif src.suffix == ".code-snippets":
599
- dest = self.vscode_dir / rel
600
- else:
601
- dest = self.vscode_dir / rel
602
- if dest.exists():
603
- skipped.append(dest)
604
- continue
605
- dest.parent.mkdir(parents=True, exist_ok=True)
606
- shutil.copyfile(src, dest)
607
- written.append(dest)
608
-
609
- claude_md = self.vscode_dir / "CLAUDE.md"
610
- if claude_md.exists():
611
- skipped.append(claude_md)
612
- else:
613
- claude_md.parent.mkdir(parents=True, exist_ok=True)
614
- claude_md.write_text(self.CLAUDE_MD_POINTER)
615
- written.append(claude_md)
616
- return written, skipped
617
-
618
571
  @staticmethod
619
572
  def app_folder_name(app: PuakmaApplication) -> str:
620
573
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortex_cli
3
- Version: 6.1.0
3
+ Version: 6.2.1
4
4
  Summary: Vortex CLI
5
5
  Author-email: Jordan Amos <jordan.amos@gmail.com>
6
6
  License: MIT License
@@ -35,9 +35,9 @@ Classifier: Programming Language :: Python :: 3 :: Only
35
35
  Requires-Python: >=3.10
36
36
  Description-Content-Type: text/markdown
37
37
  License-File: LICENSE
38
- Requires-Dist: httpx==0.24.1
39
- Requires-Dist: tabulate==0.9.0
40
- Requires-Dist: watchfiles==0.19.0
38
+ Requires-Dist: httpx>=0.27
39
+ Requires-Dist: tabulate>=0.9
40
+ Requires-Dist: watchfiles>=0.19
41
41
  Provides-Extra: keyring
42
42
  Requires-Dist: keyring; extra == "keyring"
43
43
  Dynamic: license-file
@@ -176,7 +176,6 @@ For a full list of commands see `--help`.
176
176
  - `schema`: Manage the Puakma data dictionary (PMATABLE/ATTRIBUTE): record table/column definitions and print the DDL to run by hand. Never executes DDL.
177
177
  - `compile` (or `build`): Compile an application's Java Design Objects into `zbin/` using the Eclipse compiler (ecj).
178
178
  - `libs`: Show or refresh the per-server Java library cache (each server's `puakma.jar` and shared libraries, downloaded from the server itself).
179
- - `agent`: Generate agent/editor support files (CLAUDE.md, Puakma skills, code snippets) in the workspace.
180
179
  - `docs`: Open the Tornado Server Blackbook.
181
180
  - `execute`: Execute a command on the server.
182
181
 
@@ -483,23 +482,3 @@ On a `backend = gateway` server the dictionary is reached through webdesign's vo
483
482
  the gateway's `dictionary` endpoint (`GatewayDBRead` to read, `GatewayDBWrite` to change).
484
483
  That API cannot record `--default` or `--position` (refused) nor the column half of `--ref`
485
484
  (warned) - see [SOAP-free on backend = gateway](#soap-free-on-backend--gateway).
486
-
487
- ### Agent Support Files
488
-
489
- `vortex agent` copies bundled support files into the workspace `.vscode` directory so they are
490
- included in the generated code-workspace: an `AGENTS.md` with Puakma ground rules for coding
491
- agents (including pointers to the bundled Blackbook v2 architecture reference), a `CLAUDE.md`
492
- that points Claude Code at `AGENTS.md`, a `.claude/skills/` library covering Puakma development
493
- and the vortex workflow, and a `vortex.code-snippets` file with common Puakma Java/HTML
494
- snippets. Existing files are never overwritten, so they are safe to customise. These files are
495
- also generated automatically on `vortex --init` and before `vortex code` opens the workspace.
496
-
497
- The guidance is backend-aware: on a `backend = gateway` server the skills teach the explicit
498
- `vortex compile` + `vortex push` deploy loop (journaled, `undo`-recoverable, no workspace lock),
499
- and the `vortex watch` save-to-deploy loop is scoped to `backend = soap`. Because existing files
500
- are never overwritten, workspaces generated before 6.0.0 keep their old watch-centric copies -
501
- delete a file (or the `.claude/skills` directory) and re-run `vortex agent` to pick up the
502
- current version.
503
-
504
- Workspaces created before AGENTS.md existed keep their full `CLAUDE.md` (existing files are
505
- never touched); the new `AGENTS.md` is simply added alongside it.
@@ -18,7 +18,6 @@ vortex/webdesign.py
18
18
  vortex/workspace.py
19
19
  vortex/commands/__init__.py
20
20
  vortex/commands/agenda.py
21
- vortex/commands/agent.py
22
21
  vortex/commands/clean.py
23
22
  vortex/commands/clone.py
24
23
  vortex/commands/code.py
@@ -50,12 +49,6 @@ vortex/docs/Blackbook.pdf
50
49
  vortex/docs/index.html
51
50
  vortex/docs/marked.min.js
52
51
  vortex/lib/puakma-6.0.40.jar
53
- vortex/templates/agent/AGENTS.md
54
- vortex/templates/agent/vortex.code-snippets
55
- vortex/templates/agent/skills/puakma-database/SKILL.md
56
- vortex/templates/agent/skills/puakma-design-elements/SKILL.md
57
- vortex/templates/agent/skills/puakma-overview/SKILL.md
58
- vortex/templates/agent/skills/vortex-workflow/SKILL.md
59
52
  vortex_cli.egg-info/PKG-INFO
60
53
  vortex_cli.egg-info/SOURCES.txt
61
54
  vortex_cli.egg-info/dependency_links.txt
@@ -0,0 +1,6 @@
1
+ httpx>=0.27
2
+ tabulate>=0.9
3
+ watchfiles>=0.19
4
+
5
+ [keyring]
6
+ keyring
@@ -1,27 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import logging
4
-
5
- from vortex.workspace import Workspace
6
-
7
- logger = logging.getLogger("vortex")
8
-
9
-
10
- def agent(workspace: Workspace) -> int:
11
- """
12
- Generates the agent/editor support files (AGENTS.md with a CLAUDE.md
13
- pointer, Puakma skills, code snippets) in the workspace .vscode
14
- directory. Existing files are never overwritten.
15
- """
16
- written, skipped = workspace.init_agent_files()
17
- for path in written:
18
- logger.info(f"Created '{path}'")
19
- for path in skipped:
20
- logger.debug(f"Skipped existing '{path}'")
21
- if not written:
22
- logger.info(f"All {len(skipped)} agent file(s) already exist. Nothing to do.")
23
- else:
24
- logger.info(
25
- f"Created {len(written)} file(s), kept {len(skipped)} existing file(s)."
26
- )
27
- return 0
@@ -1,100 +0,0 @@
1
- # Puakma / vortex workspace
2
-
3
- This is a **vortex-cli workspace**: Puakma Tornado applications cloned from a live server into
4
- `$VORTEX_HOME` as `{host}/{group}/{app}/` folders, edited locally and synced back with the
5
- `vortex` CLI. There is **no git, no Maven/Gradle, no test framework** inside app folders - do not
6
- look for them and do not scaffold them.
7
-
8
- A skill library exists in `.claude/skills/`. **Load `puakma-overview` before doing anything
9
- else** - it explains the Puakma mental model and routes to the specialist skills
10
- (design elements, database, vortex workflow).
11
-
12
- **Check every cloned app for its own documentation.** An app's `DOCUMENTATION/` design folder may
13
- contain an `AGENTS.md`/`CLAUDE.md`, architecture notes, or run-books specific to that app - read
14
- them before editing that app. App-specific instructions override the general rules here.
15
-
16
- ## Non-negotiable rules
17
-
18
- 1. **The server executes compiled bytes, not source.** A saved `.java` changes nothing on the
19
- server until BOTH halves ship: the source, and the `.class` the local Java build produces in
20
- `zbin/`. Two deploy paths exist - `vortex push <APP_ID>`, which uploads both halves in one
21
- explicit step, and `vortex watch`, which uploads each on save. Which one applies depends on
22
- the server's backend (see "Deploying a change" below). If the local build fails, the server
23
- keeps running old bytecode with new source attached - silent drift. Wait for a clean build
24
- and the `Upload DATA ...: OK` line.
25
- 2. **No nested/inner/anonymous classes (and no lambdas) in design-element Java.** The server
26
- packages one class per design element; `Outer$Inner.class` never ships - it compiles locally
27
- and fails on the server. Use `Object[]` tuples or separate top-level SHARED_CODE classes.
28
- 3. **Deploying is a deliberate step - never assume a watcher is running.** On a gateway
29
- server nothing reaches the server until you run `vortex push`; a saved file is a local
30
- file. On a SOAP server where the user is running `vortex watch`, the opposite holds - every
31
- save while it runs IS a live deployment, across apps from ALL configured servers at once,
32
- routed to the server each app was cloned from (upload lines are prefixed `[server]`).
33
- Establish which situation you are in before editing, and confirm with the user before any
34
- deliberate deploy step.
35
- 4. **Never print credentials.** `config/servers.ini` may hold plaintext server passwords
36
- (they can also live in the OS keyring or env vars) and every `.pma` manifest is a pickle
37
- embedding DB connection credentials - never `cat` either, never paste their contents.
38
- 5. **Production safety.** NEVER run any vortex command against a production server without
39
- explicit user permission for that specific command - including read-only ones. Production
40
- definitions should carry `protected = true` in servers.ini: writes then require the server
41
- name typed back (`--yes` does not bypass it) and watch skips them unless
42
- `--include-protected` - treat that as a backstop, not permission. Prefer one-off
43
- `-s <prod-server>` over `vortex use <prod-server>` (which persists); treat any prod clone
44
- directory as read-only outside a deliberate, confirmed promotion.
45
- 6. **`vortex clean` and `vortex delete` have no undo.** There is no git to recover from.
46
-
47
- ## Deploying a change
48
-
49
- Check the server's backend before deploying - it decides which path works:
50
-
51
- ```bash
52
- vortex config --check-gateway -s <server>
53
- ```
54
-
55
- That reports the configured backend, the negotiation result, the resolved identity and which
56
- `Gateway*` roles it holds. `backend` is an explicit per-server setting with no auto mode: a
57
- gateway refusal or outage is an error, never a silent fallback to SOAP.
58
-
59
- - **`backend = gateway`** (the recommended setup): `vortex compile <APP_ID>` and require a clean
60
- build, then `vortex push <APP_ID>` - or `vortex push <APP_ID> -n <NAME>` for a single
61
- element.
62
- `vortex watch`'s upload path runs over SOAP/webdesign, which a least-privilege gateway
63
- identity has no access to, so watch cannot deploy on such a server.
64
- - **`backend = soap`**: the `vortex watch` save-to-deploy loop remains correct - start it,
65
- edit, and watch for the `Upload SOURCE ...: OK` / `Upload DATA ...: OK` pair.
66
-
67
- On a gateway server prefer `push` even for a privileged identity: it is explicit rather than
68
- incidental, journalled server-side so `vortex undo` can restore the previous version, ships
69
- source and compiled class together, and takes no workspace-wide lock - which is why the
70
- "stop `vortex watch` first" preamble attached to other commands does not apply to it.
71
-
72
- Full loop, refusals and the two paths that are still SOAP-only: `.claude/skills/vortex-workflow`.
73
-
74
- ## Quick reference
75
-
76
- - Deploy loops (push and watch), servers, creating elements, undo, prod promotion:
77
- `.claude/skills/vortex-workflow`
78
- - ACTION/PAGE/RESOURCE conventions and `<P@ ... @P>` merge tags: `.claude/skills/puakma-design-elements`
79
- - TableManager vs raw JDBC, SQL escaping, connection release: `.claude/skills/puakma-database`
80
- - Canonical code patterns: `.vscode/vortex.code-snippets` holds vetted scaffolds for
81
- Open/Save/AJAX/Scheduled actions, TableManager and JDBC access, JSON responses,
82
- logging, `<P@ ... @P>` page tags and AJAX JavaScript. When writing a new design
83
- element or unsure of the idiomatic shape, start from the matching snippet body
84
- (`pOpen`, `pSave`, `pAjax`, `pTMsave`, `pJDBC`, ...) instead of inventing a pattern.
85
- - Verify changes by tailing the server log: `vortex log -n 20 -k`
86
-
87
- ## Architecture reference: the Blackbook v2
88
-
89
- For server architecture, request lifecycle, the Puakma API surface, addins/tasks,
90
- security model and anything not covered by the skills, consult the **Tornado Server
91
- Blackbook v2** - it is the authoritative architecture reference and is bundled with
92
- vortex:
93
-
94
- - `docs/Blackbook v2.md` - markdown, readable/searchable directly (the `docs` folder
95
- is mounted in the code-workspace)
96
- - `vortex docs --serve` - serves it as a searchable local website
97
- - `vortex docs` - opens the original Blackbook PDF
98
-
99
- Prefer the Blackbook v2 markdown when answering architecture questions or designing
100
- non-trivial features rather than guessing from code alone.
@@ -1,108 +0,0 @@
1
- ---
2
- name: puakma-database
3
- description: Data access in Puakma apps - TableManager for writes, raw JDBC for reads, SQL string
4
- escaping, connection pool discipline, and the strict no-DDL rule. Use when writing or debugging
5
- SQL or JDBC in a design element, choosing between TableManager and raw JDBC, diagnosing a
6
- connection-pool leak or a server hang, or when asked to add a table/column/index.
7
- ---
8
-
9
- # Puakma database access
10
-
11
- Puakma apps use string-built SQL over server-pooled JDBC connections. There is no ORM, no
12
- migration framework, and typically no transactions - follow the app's existing patterns.
13
-
14
- ## STRICT RULES
15
-
16
- - **NEVER create, alter, or drop tables, columns, or indexes - no DDL, ever.** Not through
17
- `vortex db`, not through code, not through TableManager. Schema changes are designed as SQL,
18
- written into the app's changelog/run-book (check its `DOCUMENTATION/` folder), and run BY THE
19
- USER by hand. If a task needs a schema change, write the SQL for the user and stop.
20
- - **`vortex db` requires explicit user permission every time - no exceptions.** That includes
21
- `--list`, `--schema`, and read-only SELECTs. Ask, show the exact command and SQL, and wait
22
- for a clear yes before running it. `--update` (INSERT/UPDATE/DELETE) additionally requires
23
- approval per statement, and on servers marked `protected = true` vortex itself will demand
24
- the server name typed back - that backstop is not a substitute for asking.
25
- - **Writes from code go through `TableManager`** (`setField`/`insertRow`/`updateRow`), never raw
26
- `executeUpdate`. Reads may use raw JDBC.
27
- - **Raw JDBC must release everything in `finally`**: `Util.closeJDBC(rs)`,
28
- `Util.closeJDBC(stmt)`, `pSession.releaseDataConnection(cx)`. Connections are server-pooled;
29
- one missed release leaks a pooled connection per request until the whole server hangs. Never
30
- `return` before the `finally`.
31
- - **Escape every string; parse every number.** Use the app's SQL-escape helper (commonly an
32
- `escapeSQL` in a shared class - it doubles `'` but does not add the surrounding quotes) for
33
- any string that reaches SQL; parse numerics to `long`/`double` before concatenation.
34
- Unescaped concatenation is an injection.
35
- - **Don't add transactions** unless the app already uses them. Existing apps follow
36
- check-then-write and idempotent-upsert styles; imitate them.
37
- - **Never hardcode connection names or table names** when the app defines constants for them -
38
- look for `CONNECTION_NAME` / `TABLE_NAME` / `PK` style constants in SHARED_CODE.
39
-
40
- ## Pattern 1 - TableManager (single-row CRUD)
41
-
42
- `puakma.addin.http.document.TableManager` acquires and releases its own connection - no
43
- try/finally needed at call sites.
44
-
45
- ```java
46
- // Insert
47
- TableManager t = new TableManager(pSession, CONNECTION_NAME, "my_table");
48
- t.setField("name", sName); // strings are escaped by TableManager
49
- t.setField("created", new Date());
50
- if (t.insertRow("my_table_id")) {
51
- long lNewID = t.getLastInsertID();
52
- } else {
53
- pSession.getSystemContext().doError("Insert failed: " + t.getLastError(), this);
54
- }
55
-
56
- // Update - always scope user-owned rows by the owner id, even with a PK match
57
- t.setField("value", sValue);
58
- t.updateRow("WHERE my_table_id = " + lID + " AND user_id = " + lUserID);
59
-
60
- // Quick single-row read / form prefill
61
- TableManager tm = new TableManager(pSession, CONNECTION_NAME, "");
62
- tm.populateDocument("SELECT * FROM my_table WHERE my_table_id = " + lID);
63
- String s = tm.getFieldString("name");
64
- ```
65
-
66
- ## Pattern 2 - raw JDBC (reads, multi-row)
67
-
68
- ```java
69
- Connection cx = null;
70
- Statement stmt = null;
71
- ResultSet rs = null;
72
- try {
73
- cx = pSession.getDataConnection(CONNECTION_NAME);
74
- stmt = cx.createStatement();
75
- rs = stmt.executeQuery(sSQL);
76
- while (rs.next()) {
77
- // ...
78
- }
79
- } catch (Exception e) {
80
- pSystem.doError(e.toString(), this);
81
- } finally {
82
- Util.closeJDBC(rs);
83
- Util.closeJDBC(stmt);
84
- pSession.releaseDataConnection(cx);
85
- }
86
- ```
87
-
88
- ## Performance cautions
89
-
90
- - Avoid `LIKE '%...%'` scans on large tables in hot paths (request handlers, polling ajax) -
91
- they have caused production pool-starvation outages. Prefer indexed equality/prefix filters.
92
- - Avoid N+1 query loops in request handlers; batch with `IN (...)` or a join.
93
- - Every request handler shares one connection pool - a slow query under load stalls the server.
94
-
95
- ## Inspecting schema (read-only, ONLY with explicit user permission)
96
-
97
- - `vortex db <dbname> --list` - tables in a database.
98
- - `vortex db <dbname> --schema <table>` - columns, PKs, references.
99
- - `vortex db <conn-id> --sql "SELECT ..."` - vortex appends a LIMIT if the query has none.
100
-
101
- ## Planning schema changes: vortex schema (dictionary only, never DDL)
102
-
103
- `vortex schema <dbname> --add-table/--add-column/--update-column/--ddl ...` records
104
- design-time table/column definitions in Puakma's data dictionary (PMATABLE/ATTRIBUTE) and
105
- prints the matching DDL for the USER to run by hand - it never executes DDL itself, and
106
- `vortex db --schema` reads this dictionary, so keeping it current keeps schema inspection
107
- accurate. It still writes to the live server's system database, so like `vortex db` it
108
- requires explicit user permission every time.