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.
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/PKG-INFO +1 -1
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/pyproject.toml +1 -1
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/_version.py +1 -1
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skill_click.py +4 -3
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/SKILL.md +16 -8
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/SKILL.md +46 -4
- systemlink_cli-1.5.0/slcli/skills/systemlink-webapp/references/layout-patterns.md +71 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/webapp_click.py +528 -120
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/LICENSE +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/dff-editor/index.html +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/__init__.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/__main__.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/config.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/config_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/file_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/function_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/main.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/platform.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/profiles.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/slcli/references/filtering.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/system_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/user_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/utils.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.4.7 → systemlink_cli-1.5.0}/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.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" }]
|
|
@@ -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
|
|
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
|
|
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`). `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
|
|
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:
|
|
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.
|