systemlink-cli 1.13.17__tar.gz → 1.13.20__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.13.17 → systemlink_cli-1.13.20}/PKG-INFO +1 -1
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/pyproject.toml +1 -2
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/_version.py +1 -1
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/skill_click.py +11 -138
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/webapp_click.py +8 -11
- systemlink_cli-1.13.17/slcli/skills/nipkg-file-package/SKILL.md +0 -587
- systemlink_cli-1.13.17/slcli/skills/slcli/SKILL.md +0 -300
- systemlink_cli-1.13.17/slcli/skills/slcli/references/analysis-recipes.md +0 -474
- systemlink_cli-1.13.17/slcli/skills/slcli/references/commands.md +0 -850
- systemlink_cli-1.13.17/slcli/skills/slcli/references/datasheet-workflow.md +0 -510
- systemlink_cli-1.13.17/slcli/skills/slcli/references/filtering.md +0 -236
- systemlink_cli-1.13.17/slcli/skills/slcli/references/routine-examples.md +0 -186
- systemlink_cli-1.13.17/slcli/skills/slcli/references/troubleshooting.md +0 -75
- systemlink_cli-1.13.17/slcli/skills/systemlink-job-debugging/SKILL.md +0 -325
- systemlink_cli-1.13.17/slcli/skills/systemlink-notebook/SKILL.md +0 -507
- systemlink_cli-1.13.17/slcli/skills/systemlink-notebook/references/interfaces.md +0 -185
- systemlink_cli-1.13.17/slcli/skills/systemlink-notebook/references/notebook-patterns.md +0 -318
- systemlink_cli-1.13.17/slcli/skills/systemlink-python-test/SKILL.md +0 -547
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/SKILL.md +0 -241
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/angular-ui-packages.md +0 -154
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/deployment.md +0 -142
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/layout-patterns.md +0 -98
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -422
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -192
- systemlink_cli-1.13.17/slcli/skills/systemlink-webapp/references/troubleshooting.md +0 -110
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/LICENSE +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/dff-editor/index.html +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/__init__.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/__main__.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/config.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/config_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/dataframe_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/example_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/file_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/function_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/main.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/mcp_reachability.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/platform.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/profiles.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/rich_output.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/spec_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/state_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/system_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/system_query_utils.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/user_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/utils.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.13.17 → systemlink_cli-1.13.20}/slcli/workspace_utils.py +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.13.
|
|
3
|
+
version = "1.13.20"
|
|
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" }]
|
|
7
7
|
include = [
|
|
8
8
|
{ path = "dff-editor/index.html", format = ["wheel", "sdist"] },
|
|
9
9
|
{ path = "dff-editor/editor.js", format = ["wheel", "sdist"] },
|
|
10
|
-
"slcli/skills/**/*",
|
|
11
10
|
]
|
|
12
11
|
|
|
13
12
|
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"""Agent Skills install command for slcli."""
|
|
2
2
|
|
|
3
|
-
import shutil
|
|
4
3
|
import sys
|
|
5
4
|
from pathlib import Path
|
|
6
5
|
from typing import Any, Dict, List, Optional, Tuple
|
|
7
6
|
|
|
8
7
|
import click
|
|
9
|
-
import questionary
|
|
10
8
|
|
|
11
9
|
from .utils import ExitCodes
|
|
12
10
|
|
|
13
11
|
SKILL_NAME = "slcli"
|
|
12
|
+
TEMPORARILY_UNAVAILABLE_MESSAGE = (
|
|
13
|
+
"AI skills are currently unavailable and cannot be installed right now."
|
|
14
|
+
)
|
|
14
15
|
_FALLBACK_SKILL_CHOICES = [
|
|
15
16
|
"nipkg-file-package",
|
|
16
17
|
"slcli",
|
|
@@ -122,43 +123,9 @@ def install_skills_to_directory(
|
|
|
122
123
|
skill_names: Optional[List[str]] = None,
|
|
123
124
|
subdir: str = PROJECT_SKILLS_SUBDIR,
|
|
124
125
|
) -> int:
|
|
125
|
-
"""
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
The default location (``.agents/skills/``) is the universal convention
|
|
129
|
-
recognized by multiple AI clients.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
directory: Project root to install into.
|
|
133
|
-
skill_names: Skills to install. Defaults to all available skills.
|
|
134
|
-
subdir: Relative subdirectory for skills. Defaults to ``.agents/skills``.
|
|
135
|
-
|
|
136
|
-
Returns:
|
|
137
|
-
Number of skills successfully installed.
|
|
138
|
-
"""
|
|
139
|
-
if skill_names is None:
|
|
140
|
-
skill_names = list(SKILL_CHOICES)
|
|
141
|
-
|
|
142
|
-
try:
|
|
143
|
-
skills_dir = _find_bundled_skills_dir()
|
|
144
|
-
except FileNotFoundError:
|
|
145
|
-
return 0
|
|
146
|
-
|
|
147
|
-
dest_parent = directory / subdir
|
|
148
|
-
installed = 0
|
|
149
|
-
|
|
150
|
-
for name in skill_names:
|
|
151
|
-
source = skills_dir / name
|
|
152
|
-
if not source.exists():
|
|
153
|
-
continue
|
|
154
|
-
dest = dest_parent / name
|
|
155
|
-
dest_parent.mkdir(parents=True, exist_ok=True)
|
|
156
|
-
if dest.exists():
|
|
157
|
-
shutil.rmtree(dest)
|
|
158
|
-
shutil.copytree(source, dest)
|
|
159
|
-
installed += 1
|
|
160
|
-
|
|
161
|
-
return installed
|
|
126
|
+
"""Return 0 because bundled skill installation is temporarily disabled."""
|
|
127
|
+
del directory, skill_names, subdir
|
|
128
|
+
return 0
|
|
162
129
|
|
|
163
130
|
|
|
164
131
|
def _resolve_destinations(clients: List[str], scope: str) -> List[Path]:
|
|
@@ -200,7 +167,7 @@ def register_skill_commands(cli: Any) -> None:
|
|
|
200
167
|
|
|
201
168
|
@cli.group()
|
|
202
169
|
def skill() -> None:
|
|
203
|
-
"""
|
|
170
|
+
"""Check the current status of AI assistant skills."""
|
|
204
171
|
|
|
205
172
|
@skill.command(name="install")
|
|
206
173
|
@click.option(
|
|
@@ -234,101 +201,7 @@ def register_skill_commands(cli: Any) -> None:
|
|
|
234
201
|
def install_skill(
|
|
235
202
|
skill: Optional[str], client: Optional[str], scope: Optional[str], force: bool
|
|
236
203
|
) -> None:
|
|
237
|
-
"""
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
Supported clients and their skill locations:
|
|
242
|
-
|
|
243
|
-
\b
|
|
244
|
-
agents personal: ~/.agents/skills/ project: .agents/skills/
|
|
245
|
-
(most agents)
|
|
246
|
-
claude personal: ~/.claude/skills/ project: .claude/skills/
|
|
247
|
-
|
|
248
|
-
When options are omitted you will be prompted interactively.
|
|
249
|
-
"""
|
|
250
|
-
# ── interactive prompts when options not supplied ─────────────────────
|
|
251
|
-
if skill is None:
|
|
252
|
-
skill = questionary.select(
|
|
253
|
-
"Which skill to install?",
|
|
254
|
-
choices=SKILL_CHOICES + ["all"],
|
|
255
|
-
default="all",
|
|
256
|
-
).ask()
|
|
257
|
-
if skill is None:
|
|
258
|
-
raise click.Abort()
|
|
259
|
-
|
|
260
|
-
if client is None:
|
|
261
|
-
client = questionary.select(
|
|
262
|
-
"Install for which AI client?",
|
|
263
|
-
choices=[
|
|
264
|
-
questionary.Choice("most agents", value="agents"),
|
|
265
|
-
questionary.Choice("claude", value="claude"),
|
|
266
|
-
questionary.Choice("all clients", value="all"),
|
|
267
|
-
],
|
|
268
|
-
default="agents",
|
|
269
|
-
).ask()
|
|
270
|
-
if client is None:
|
|
271
|
-
raise click.Abort()
|
|
272
|
-
|
|
273
|
-
if scope is None:
|
|
274
|
-
scope = questionary.select(
|
|
275
|
-
"Install scope?",
|
|
276
|
-
choices=["personal", "project", "both"],
|
|
277
|
-
default="personal",
|
|
278
|
-
).ask()
|
|
279
|
-
if scope is None:
|
|
280
|
-
raise click.Abort()
|
|
281
|
-
|
|
282
|
-
# ── resolve skill and client lists ────────────────────────────────────
|
|
283
|
-
skill_names: List[str] = SKILL_CHOICES if skill == "all" else [skill]
|
|
284
|
-
clients: List[str] = CLIENT_CHOICES if client == "all" else [client]
|
|
285
|
-
|
|
286
|
-
# ── locate source ─────────────────────────────────────────────────────
|
|
287
|
-
try:
|
|
288
|
-
skills_dir = _find_bundled_skills_dir()
|
|
289
|
-
except FileNotFoundError as exc:
|
|
290
|
-
click.echo(f"✗ {exc}", err=True)
|
|
291
|
-
sys.exit(ExitCodes.GENERAL_ERROR)
|
|
292
|
-
|
|
293
|
-
destinations = _resolve_destinations(clients, scope)
|
|
294
|
-
|
|
295
|
-
installed_any = False
|
|
296
|
-
errors = 0
|
|
297
|
-
|
|
298
|
-
for skill_name in skill_names:
|
|
299
|
-
source = skills_dir / skill_name
|
|
300
|
-
if not source.exists():
|
|
301
|
-
click.echo(
|
|
302
|
-
f"✗ Skill '{skill_name}' not found in bundled skills directory.", err=True
|
|
303
|
-
)
|
|
304
|
-
errors += 1
|
|
305
|
-
continue
|
|
306
|
-
|
|
307
|
-
for dest_parent in destinations:
|
|
308
|
-
dest = dest_parent / skill_name
|
|
309
|
-
|
|
310
|
-
if dest.exists() and not force:
|
|
311
|
-
confirm = questionary.confirm(
|
|
312
|
-
f"Skill already installed at {dest}. Overwrite?",
|
|
313
|
-
default=False,
|
|
314
|
-
).ask()
|
|
315
|
-
if not confirm:
|
|
316
|
-
click.echo(f" Skipped {dest}")
|
|
317
|
-
continue
|
|
318
|
-
|
|
319
|
-
try:
|
|
320
|
-
dest_parent.mkdir(parents=True, exist_ok=True)
|
|
321
|
-
if dest.exists():
|
|
322
|
-
shutil.rmtree(dest)
|
|
323
|
-
shutil.copytree(source, dest)
|
|
324
|
-
click.echo(f"✓ Installed {skill_name} skill → {dest}")
|
|
325
|
-
installed_any = True
|
|
326
|
-
except OSError as exc:
|
|
327
|
-
click.echo(f"✗ Failed to install to {dest}: {exc}", err=True)
|
|
328
|
-
errors += 1
|
|
329
|
-
|
|
330
|
-
if not installed_any and errors == 0:
|
|
331
|
-
click.echo("No skill locations were updated.")
|
|
332
|
-
|
|
333
|
-
if errors:
|
|
334
|
-
sys.exit(ExitCodes.GENERAL_ERROR)
|
|
204
|
+
"""Report that skill installation is currently unavailable."""
|
|
205
|
+
del skill, client, scope, force
|
|
206
|
+
click.echo(f"✗ {TEMPORARILY_UNAVAILABLE_MESSAGE}", err=True)
|
|
207
|
+
sys.exit(ExitCodes.GENERAL_ERROR)
|
|
@@ -20,7 +20,7 @@ import questionary
|
|
|
20
20
|
import requests
|
|
21
21
|
|
|
22
22
|
from .cli_utils import validate_output_format
|
|
23
|
-
from .skill_click import
|
|
23
|
+
from .skill_click import TEMPORARILY_UNAVAILABLE_MESSAGE
|
|
24
24
|
from .universal_handlers import UniversalResponseHandler
|
|
25
25
|
from .utils import (
|
|
26
26
|
ExitCodes,
|
|
@@ -719,9 +719,9 @@ def _render_angular_prompts_md(directory: Path) -> str:
|
|
|
719
719
|
return f"""# SystemLink WebApp - AI Prompts
|
|
720
720
|
|
|
721
721
|
This project was initialized with `slcli webapp init`.
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
722
|
+
AI skills for this workflow are currently unavailable, so this starter keeps
|
|
723
|
+
the prompts inline in this repository for now instead of relying on bundled
|
|
724
|
+
`systemlink-webapp` and `slcli` skills.
|
|
725
725
|
|
|
726
726
|
## Starter Prompt
|
|
727
727
|
|
|
@@ -793,14 +793,15 @@ This directory was initialized with `slcli webapp init`.
|
|
|
793
793
|
|
|
794
794
|
`slcli` owns the SystemLink-specific starter layer for this workflow:
|
|
795
795
|
|
|
796
|
-
- bundled AI skills in `.agents/skills/`
|
|
797
796
|
- ready-made prompts in [PROMPTS.md](PROMPTS.md)
|
|
798
797
|
- deployment guidance for `slcli webapp publish`
|
|
799
798
|
- Plugin Manager packaging config scaffolding via `slcli webapp manifest init`
|
|
800
799
|
|
|
801
800
|
Angular CLI remains the source of truth for the Angular workspace itself. That
|
|
802
801
|
keeps the generated project aligned with current Angular defaults while the
|
|
803
|
-
|
|
802
|
+
starter files enforce the SystemLink-specific best practices.
|
|
803
|
+
|
|
804
|
+
AI skills are currently unavailable and are not installed into this project.
|
|
804
805
|
|
|
805
806
|
## Bootstrap the Angular workspace
|
|
806
807
|
|
|
@@ -870,15 +871,11 @@ def _init_angular_template(directory: Path, force: bool) -> None:
|
|
|
870
871
|
prompts_file.write_text(_render_angular_prompts_md(directory), encoding="utf-8")
|
|
871
872
|
start_here_file.write_text(_render_angular_start_here_md(directory), encoding="utf-8")
|
|
872
873
|
|
|
873
|
-
# Auto-install AI skills into the project directory
|
|
874
|
-
installed = install_skills_to_directory(directory)
|
|
875
|
-
skill_msg = f"{installed} skill(s) installed" if installed else "skills not found"
|
|
876
|
-
|
|
877
874
|
format_success(
|
|
878
875
|
"Scaffolded SystemLink Angular starter",
|
|
879
876
|
{
|
|
880
877
|
"Directory": str(directory),
|
|
881
|
-
"Skills":
|
|
878
|
+
"Skills": TEMPORARILY_UNAVAILABLE_MESSAGE,
|
|
882
879
|
"Next steps": (
|
|
883
880
|
"1. cd " + str(directory) + "\n"
|
|
884
881
|
" 2. Open START_HERE.md and PROMPTS.md\n"
|