systemlink-cli 1.4.7__tar.gz → 1.5.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.
Files changed (75) hide show
  1. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/PKG-INFO +1 -1
  2. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/pyproject.toml +1 -1
  3. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skill_click.py +4 -3
  5. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/SKILL.md +16 -8
  6. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/SKILL.md +46 -4
  7. systemlink_cli-1.5.0/slcli/skills/systemlink-webapp/references/layout-patterns.md +71 -0
  8. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/webapp_click.py +528 -120
  9. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/LICENSE +0 -0
  10. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/dff-editor/editor.js +0 -0
  11. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/dff-editor/index.html +0 -0
  12. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/__init__.py +0 -0
  13. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/__main__.py +0 -0
  14. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/asset_click.py +0 -0
  15. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/cli_formatters.py +0 -0
  16. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/cli_utils.py +0 -0
  17. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/comment_click.py +0 -0
  18. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/completion_click.py +0 -0
  19. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/config.py +0 -0
  20. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/config_click.py +0 -0
  21. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/dff_click.py +0 -0
  22. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/dff_decorators.py +0 -0
  23. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_click.py +0 -0
  24. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_loader.py +0 -0
  25. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_provisioner.py +0 -0
  26. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/README.md +0 -0
  27. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/_schema/schema-v1.0.json +0 -0
  28. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-complete-workflow/README.md +0 -0
  29. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
  30. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-test-plans/README.md +0 -0
  31. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-test-plans/config.yaml +0 -0
  32. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  33. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  34. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  35. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  36. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  37. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  38. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  39. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  40. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  41. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  42. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/feed_click.py +0 -0
  43. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/file_click.py +0 -0
  44. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/function_click.py +0 -0
  45. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/function_templates.py +0 -0
  46. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/main.py +0 -0
  47. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/mcp_click.py +0 -0
  48. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/mcp_server.py +0 -0
  49. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/notebook_click.py +0 -0
  50. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/platform.py +0 -0
  51. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/policy_click.py +0 -0
  52. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/policy_utils.py +0 -0
  53. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/profiles.py +0 -0
  54. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/response_handlers.py +0 -0
  55. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/routine_click.py +0 -0
  56. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  57. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/references/filtering.md +0 -0
  58. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
  59. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
  60. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
  61. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/ssl_trust.py +0 -0
  62. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/system_click.py +0 -0
  63. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/table_utils.py +0 -0
  64. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/tag_click.py +0 -0
  65. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/templates_click.py +0 -0
  66. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/testmonitor_click.py +0 -0
  67. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/universal_handlers.py +0 -0
  68. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/user_click.py +0 -0
  69. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/utils.py +0 -0
  70. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/web_editor.py +0 -0
  71. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workflow_preview.py +0 -0
  72. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workflows_click.py +0 -0
  73. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workitem_click.py +0 -0
  74. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workspace_click.py +0 -0
  75. {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workspace_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systemlink-cli
3
- Version: 1.4.7
3
+ Version: 1.5.0
4
4
  Summary: SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates.
5
5
  License-File: LICENSE
6
6
  Author: Fred Visser
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "systemlink-cli"
3
- version = "1.4.7"
3
+ version = "1.5.0"
4
4
  description = "SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates."
5
5
  authors = ["Fred Visser <fred.visser@emerson.com>"]
6
6
  packages = [{ include = "slcli" }]
@@ -1,4 +1,4 @@
1
1
  """Version information for slcli."""
2
2
 
3
3
  # This file is auto-generated. Do not edit manually.
4
- __version__ = "1.4.7"
4
+ __version__ = "1.5.0"
@@ -183,9 +183,9 @@ def register_skill_commands(cli: Any) -> None:
183
183
  @click.option(
184
184
  "--client",
185
185
  "-c",
186
- type=click.Choice(CLIENT_CHOICES, case_sensitive=False),
186
+ type=click.Choice(CLIENT_CHOICES + ["all"], case_sensitive=False),
187
187
  default=None,
188
- help="AI client to install for (agents [most agents] or claude).",
188
+ help="AI client to install for (agents [most agents], claude, or all).",
189
189
  )
190
190
  @click.option(
191
191
  "--scope",
@@ -233,6 +233,7 @@ def register_skill_commands(cli: Any) -> None:
233
233
  choices=[
234
234
  questionary.Choice("most agents", value="agents"),
235
235
  questionary.Choice("claude", value="claude"),
236
+ questionary.Choice("all clients", value="all"),
236
237
  ],
237
238
  default="agents",
238
239
  ).ask()
@@ -250,7 +251,7 @@ def register_skill_commands(cli: Any) -> None:
250
251
 
251
252
  # ── resolve skill and client lists ────────────────────────────────────
252
253
  skill_names: List[str] = SKILL_CHOICES if skill == "all" else [skill]
253
- clients: List[str] = [client]
254
+ clients: List[str] = CLIENT_CHOICES if client == "all" else [client]
254
255
 
255
256
  # ── locate source ─────────────────────────────────────────────────────
256
257
  try:
@@ -665,34 +665,42 @@ slcli workitem create \
665
665
  Scaffold, package, and publish custom web applications to SystemLink.
666
666
 
667
667
  ```bash
668
- slcli webapp init [--template html|angular] [--directory DIR] # Scaffold a new project
669
- slcli webapp pack [--directory DIR] [-o OUTPUT_FILE] # Package webapp into a .zip
668
+ slcli webapp init <DIRECTORY> # Scaffold the Angular starter
669
+ slcli webapp manifest init <DIRECTORY> [OPTIONS] # Create manifest.json + nipkg.config.json
670
+ slcli webapp pack [FOLDER] [--config FILE] [-o OUTPUT_FILE] # Package a webapp into a .nipkg
670
671
  slcli webapp list [-w WORKSPACE] [-t INT] [-f json]
671
672
  slcli webapp get <WEBAPP_ID> [-f json]
672
- slcli webapp publish --file PATH [--workspace NAME] # Upload and publish a webapp
673
+ slcli webapp publish PATH [--workspace NAME] # Upload and publish a webapp
673
674
  slcli webapp delete <WEBAPP_ID>
674
675
  slcli webapp open <WEBAPP_ID> # Open webapp URL in browser
675
676
  ```
676
677
 
677
- Templates:
678
- - `html` (default) minimal index.html
679
- - `angular` Nimble Angular project with `PROMPTS.md`, `README.md`, and bundled AI skills installed into `.agents/skills/`
678
+ `webapp init` creates the SystemLink Angular starter, not a generic HTML app. The starter installs
679
+ project-scoped skills into `.agents/skills/` and creates `PROMPTS.md` plus `START_HERE.md` so an
680
+ AI assistant can bootstrap the Angular workspace in place with the same Nimble/SystemLink
681
+ conventions described by the `systemlink-webapp` skill.
682
+
683
+ `webapp manifest init` writes `manifest.json` and `nipkg.config.json` using the Plugin Manager
684
+ field names (`section`, `maintainer`, `homepage`, `xbPlugin`, `slPluginManagerTags`,
685
+ `slPluginManagerMinServerVersion`). `webapp pack --config ...` consumes that metadata and writes
686
+ the matching control-file fields into the generated `.nipkg`.
680
687
 
681
688
  ### skill — AI skill installation
682
689
 
683
690
  Install bundled skills for supported AI clients.
684
691
 
685
692
  ```bash
686
- slcli skill install --skill [slcli|systemlink-webapp|all] --client [agents|claude] --scope [personal|project|both]
693
+ slcli skill install --skill [slcli|systemlink-webapp|all] --client [agents|claude|all] --scope [personal|project|both]
687
694
  ```
688
695
 
689
696
  Client paths:
690
697
  - `agents` — personal: `~/.agents/skills/`, project: `.agents/skills/` (most agents)
691
698
  - `claude` — personal: `~/.claude/skills/`, project: `.claude/skills/`
699
+ - `all` — install to both the `agents` and `claude` locations for the selected scope
692
700
 
693
701
  Notes:
694
702
  - `agents` is the default client in interactive mode.
695
- - `webapp init --template angular` installs project-scoped skills into `.agents/skills/` by default.
703
+ - `webapp init` installs project-scoped skills into `.agents/skills/` by default.
696
704
 
697
705
  ### example — Built-in example resource provisioning
698
706
 
@@ -19,6 +19,14 @@ SystemLink webapps are Angular Single-Page Applications built with the Nimble de
19
19
  connected to SystemLink REST APIs, and deployed via `slcli webapp publish`. This skill captures
20
20
  every gotcha learned from building and deploying real apps.
21
21
 
22
+ If the user is starting from scratch, prefer `slcli webapp init <app-dir>` first.
23
+ That command lays down the SystemLink starter layer (`.agents/skills/`, `PROMPTS.md`, and
24
+ `START_HERE.md`) while Angular CLI remains responsible for generating the Angular workspace.
25
+
26
+ When the user wants to package the app for Plugin Manager submission, prefer
27
+ `slcli webapp manifest init <app-dir> ...` to generate `manifest.json` and `nipkg.config.json`
28
+ with the current Plugin Manager field names, then use `slcli webapp pack --config ...`.
29
+
22
30
  ---
23
31
 
24
32
  ## Step 1: Understand what the user needs
@@ -34,15 +42,49 @@ You do NOT need to ask about Angular version or Nimble versions — always use A
34
42
 
35
43
  ---
36
44
 
37
- ## Step 2: Scaffold the Angular project
45
+ ## Step 2: Bootstrap the Angular workspace
46
+
47
+ When the project was created with `slcli webapp init`, generate Angular in the existing starter
48
+ directory so the starter files and bundled skills remain at the project root.
38
49
 
39
50
  ```bash
40
- npx -y @angular/cli@20 new <app-name> --routing --style=scss --skip-git --no-standalone
41
- cd <app-name>
51
+ npx -y @angular/cli@20 new <app-name> --directory . --routing --style=scss --skip-git --no-standalone --defaults --force
42
52
  npm install @ni/nimble-angular
43
53
  ```
44
54
 
45
- > Use `--no-standalone` to generate an NgModule-based app. SystemLink webapps work best with NgModule because it makes it easy to register all Nimble modules in one place.
55
+ > Use `--no-standalone` to generate an NgModule-based app. SystemLink webapps work best with
56
+ > NgModule because it makes it easy to register all Nimble modules in one place.
57
+
58
+ If the user has not run `slcli webapp init` yet and they want a new SystemLink webapp, tell them
59
+ to do that first unless they explicitly want a manual setup.
60
+
61
+ ### Starter shell expectations
62
+
63
+ Before building feature-specific pages, establish a reusable shell that is aligned with other
64
+ SystemLink apps:
65
+
66
+ - Root `nimble-theme-provider` that mirrors the host shell theme
67
+ - Responsive page header with title, summary text, and an action area
68
+ - Shared loading, error, and empty states instead of one-off page-specific handling
69
+ - Route-backed top-level navigation only when the app truly has multiple views
70
+ - Reusable API helpers and service-layer code rather than fetch logic embedded in templates
71
+
72
+ Use Nimble layout tokens and spacing rules consistently across the shell and feature pages:
73
+
74
+ - Prefer Nimble spacing tokens over ad-hoc pixel values: `smallPadding` for tight inline gaps,
75
+ `mediumPadding` for default control spacing, `standardPadding` for section padding, and
76
+ `largePadding` between major content regions.
77
+ - Stack controls vertically with a column layout, `mediumPadding` gap, and `standardPadding`
78
+ around the control group.
79
+ - Use `mediumPadding` or `standardPadding` gaps for side-by-side controls; prefer CSS grid for
80
+ aligned multi-column layouts.
81
+ - Inside accordion panels, keep a column layout with `mediumPadding` gaps and
82
+ `standardPadding` bottom padding.
83
+ - Treat `controlHeight` (32px), `controlSlimHeight` (24px), and `labelHeight` (16px) as the
84
+ baseline sizing tokens for controls and labels.
85
+ - Separate major sections with `largePadding` and subsections with `standardPadding`.
86
+
87
+ See [references/layout-patterns.md](references/layout-patterns.md) for the detailed layout guide.
46
88
 
47
89
  ---
48
90
 
@@ -0,0 +1,71 @@
1
+ # Layout Patterns
2
+
3
+ Guidance for spacing between controls vertically and horizontally within Nimble-based
4
+ SystemLink webapps.
5
+
6
+ ## Spacing tokens
7
+
8
+ Use Nimble design tokens for consistent spacing between controls.
9
+
10
+ | Token | Value | Usage |
11
+ | ----------------- | ----- | ------------------------------------------------------ |
12
+ | `smallPadding` | 4px | Tight spacing for icon margins and inline element gaps |
13
+ | `mediumPadding` | 8px | Default spacing between stacked controls |
14
+ | `standardPadding` | 16px | Section padding and content block margin |
15
+ | `largePadding` | 24px | Separation between major layout sections |
16
+
17
+ ## Control heights
18
+
19
+ | Token | Value | Usage |
20
+ | ------------------- | ----- | ------------------------------- |
21
+ | `controlHeight` | 32px | Standard height for controls |
22
+ | `controlSlimHeight` | 24px | Compact control variants |
23
+ | `labelHeight` | 16px | Height of labels above controls |
24
+
25
+ ## Vertical stacking
26
+
27
+ When stacking controls vertically, such as text fields, number fields, and checkboxes:
28
+
29
+ - Use `mediumPadding` (8px) as the gap between controls in a flex column.
30
+ - Use `standardPadding` (16px) for content padding around the group.
31
+ - Labels above controls add `labelHeight` (16px) to the effective row height.
32
+
33
+ ```html
34
+ <div
35
+ style="display: flex; flex-direction: column; gap: var(--ni-nimble-medium-padding);"
36
+ >
37
+ <nimble-text-field>Label 1</nimble-text-field>
38
+ <nimble-text-field>Label 2</nimble-text-field>
39
+ </div>
40
+ ```
41
+
42
+ ## Horizontal layout
43
+
44
+ When placing controls side by side:
45
+
46
+ - Use `mediumPadding` (8px) or `standardPadding` (16px) as the gap.
47
+ - Prefer CSS grid with equal columns for aligned layouts.
48
+
49
+ ```html
50
+ <div
51
+ style="display: grid; grid-template-columns: 1fr 1fr; gap: var(--ni-nimble-medium-padding);"
52
+ >
53
+ <nimble-checkbox>Option A</nimble-checkbox>
54
+ <nimble-checkbox>Option B</nimble-checkbox>
55
+ </div>
56
+ ```
57
+
58
+ ## Accordion content
59
+
60
+ Inside accordion item content panels:
61
+
62
+ - Use `flex-direction: column` with `mediumPadding` (8px) gap between controls.
63
+ - Indent content by the icon width plus padding so it aligns with the header text.
64
+ - Use `standardPadding` (16px) for bottom padding before the next section.
65
+
66
+ ## Section spacing
67
+
68
+ Between major sections or groups of controls:
69
+
70
+ - Use `largePadding` (24px) between distinct content areas.
71
+ - Use `standardPadding` (16px) for subsections within a group.