systemlink-cli 1.4.8__tar.gz → 1.5.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.
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/PKG-INFO +1 -1
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/pyproject.toml +1 -1
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/_version.py +1 -1
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/slcli/SKILL.md +15 -7
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/systemlink-webapp/SKILL.md +46 -4
- systemlink_cli-1.5.1/slcli/skills/systemlink-webapp/references/layout-patterns.md +71 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/webapp_click.py +634 -124
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/LICENSE +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/dff-editor/index.html +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/__init__.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/__main__.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/config.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/config_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/example_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/file_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/function_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/main.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/platform.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/profiles.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skill_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/slcli/references/filtering.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/system_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/user_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/utils.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.4.8 → systemlink_cli-1.5.1}/slcli/workspace_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.
|
|
3
|
+
version = "1.5.1"
|
|
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" }]
|
|
@@ -665,18 +665,26 @@ slcli workitem create \
|
|
|
665
665
|
Scaffold, package, and publish custom web applications to SystemLink.
|
|
666
666
|
|
|
667
667
|
```bash
|
|
668
|
-
slcli webapp init
|
|
669
|
-
slcli webapp
|
|
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
|
|
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
|
-
|
|
678
|
-
- `
|
|
679
|
-
|
|
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`, `iconFile`). `webapp pack --config ...` consumes that
|
|
686
|
+
metadata, carries the icon into the package, and writes the matching control-file fields into the
|
|
687
|
+
generated `.nipkg`.
|
|
680
688
|
|
|
681
689
|
### skill — AI skill installation
|
|
682
690
|
|
|
@@ -693,7 +701,7 @@ Client paths:
|
|
|
693
701
|
|
|
694
702
|
Notes:
|
|
695
703
|
- `agents` is the default client in interactive mode.
|
|
696
|
-
- `webapp init
|
|
704
|
+
- `webapp init` installs project-scoped skills into `.agents/skills/` by default.
|
|
697
705
|
|
|
698
706
|
### example — Built-in example resource provisioning
|
|
699
707
|
|
|
@@ -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:
|
|
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
|
|
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.
|