systemlink-cli 1.3.1__tar.gz → 1.4.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.3.1 → systemlink_cli-1.4.0}/PKG-INFO +1 -1
  2. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/pyproject.toml +1 -1
  3. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skill_click.py +63 -13
  5. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/slcli/SKILL.md +17 -1
  6. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/webapp_click.py +48 -66
  7. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/LICENSE +0 -0
  8. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/dff-editor/README.md +0 -0
  9. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/dff-editor/editor.js +0 -0
  10. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/dff-editor/index.html +0 -0
  11. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/__init__.py +0 -0
  12. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/__main__.py +0 -0
  13. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/asset_click.py +0 -0
  14. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/cli_formatters.py +0 -0
  15. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/cli_utils.py +0 -0
  16. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/comment_click.py +0 -0
  17. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/completion_click.py +0 -0
  18. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/config.py +0 -0
  19. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/config_click.py +0 -0
  20. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/dff_click.py +0 -0
  21. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/dff_decorators.py +0 -0
  22. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/example_click.py +0 -0
  23. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/example_loader.py +0 -0
  24. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/example_provisioner.py +0 -0
  25. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/README.md +0 -0
  26. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/_schema/schema-v1.0.json +0 -0
  27. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/demo-complete-workflow/README.md +0 -0
  28. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
  29. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/demo-test-plans/README.md +0 -0
  30. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/demo-test-plans/config.yaml +0 -0
  31. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  32. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  33. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  34. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  35. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  36. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  37. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  38. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  39. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  40. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  41. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/feed_click.py +0 -0
  42. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/file_click.py +0 -0
  43. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/function_click.py +0 -0
  44. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/function_templates.py +0 -0
  45. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/main.py +0 -0
  46. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/mcp_click.py +0 -0
  47. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/mcp_server.py +0 -0
  48. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/notebook_click.py +0 -0
  49. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/platform.py +0 -0
  50. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/policy_click.py +0 -0
  51. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/policy_utils.py +0 -0
  52. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/profiles.py +0 -0
  53. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/response_handlers.py +0 -0
  54. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/routine_click.py +0 -0
  55. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  56. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/slcli/references/filtering.md +0 -0
  57. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
  58. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
  59. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
  60. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
  61. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/ssl_trust.py +0 -0
  62. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/system_click.py +0 -0
  63. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/table_utils.py +0 -0
  64. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/tag_click.py +0 -0
  65. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/templates_click.py +0 -0
  66. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/testmonitor_click.py +0 -0
  67. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/universal_handlers.py +0 -0
  68. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/user_click.py +0 -0
  69. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/utils.py +0 -0
  70. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/web_editor.py +0 -0
  71. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/workflow_preview.py +0 -0
  72. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/workflows_click.py +0 -0
  73. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/workitem_click.py +0 -0
  74. {systemlink_cli-1.3.1 → systemlink_cli-1.4.0}/slcli/workspace_click.py +0 -0
  75. {systemlink_cli-1.3.1 → systemlink_cli-1.4.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.3.1
3
+ Version: 1.4.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.3.1"
3
+ version = "1.4.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.3.1"
4
+ __version__ = "1.4.0"
@@ -13,12 +13,11 @@ from .utils import ExitCodes
13
13
  SKILL_NAME = "slcli"
14
14
  SKILL_CHOICES = ["slcli", "systemlink-webapp"]
15
15
 
16
- # Mapping of client name (personal skills dir, project subdir relative to repo root)
16
+ # Mapping of client name -> (personal skills dir, project subdir relative to repo root)
17
17
  # personal dir uses Path.home() so it's always resolved at call time via _personal_dir().
18
18
  _CLIENT_TABLE: Dict[str, Tuple[str, str]] = {
19
- "copilot": ("~/.copilot/skills", ".github/skills"),
19
+ "agents": ("~/.agents/skills", ".agents/skills"),
20
20
  "claude": ("~/.claude/skills", ".claude/skills"),
21
- "codex": ("~/.agents/skills", ".agents/skills"),
22
21
  }
23
22
 
24
23
  CLIENT_CHOICES = list(_CLIENT_TABLE.keys())
@@ -84,6 +83,54 @@ def _find_bundled_skills_dir() -> Path:
84
83
  )
85
84
 
86
85
 
86
+ # Universal project-scoped skills directory (client-agnostic)
87
+ PROJECT_SKILLS_SUBDIR = ".agents/skills"
88
+
89
+
90
+ def install_skills_to_directory(
91
+ directory: Path,
92
+ skill_names: Optional[List[str]] = None,
93
+ subdir: str = PROJECT_SKILLS_SUBDIR,
94
+ ) -> int:
95
+ """Install bundled skills into a project directory.
96
+
97
+ Copies skill folders into a skills subdirectory within *directory*.
98
+ The default location (``.agents/skills/``) is the universal convention
99
+ recognized by multiple AI clients.
100
+
101
+ Args:
102
+ directory: Project root to install into.
103
+ skill_names: Skills to install. Defaults to all available skills.
104
+ subdir: Relative subdirectory for skills. Defaults to ``.agents/skills``.
105
+
106
+ Returns:
107
+ Number of skills successfully installed.
108
+ """
109
+ if skill_names is None:
110
+ skill_names = list(SKILL_CHOICES)
111
+
112
+ try:
113
+ skills_dir = _find_bundled_skills_dir()
114
+ except FileNotFoundError:
115
+ return 0
116
+
117
+ dest_parent = directory / subdir
118
+ installed = 0
119
+
120
+ for name in skill_names:
121
+ source = skills_dir / name
122
+ if not source.exists():
123
+ continue
124
+ dest = dest_parent / name
125
+ dest_parent.mkdir(parents=True, exist_ok=True)
126
+ if dest.exists():
127
+ shutil.rmtree(dest)
128
+ shutil.copytree(source, dest)
129
+ installed += 1
130
+
131
+ return installed
132
+
133
+
87
134
  def _resolve_destinations(clients: List[str], scope: str) -> List[Path]:
88
135
  """Build the list of destination skill parent directories.
89
136
 
@@ -123,7 +170,7 @@ def register_skill_commands(cli: Any) -> None:
123
170
 
124
171
  @cli.group()
125
172
  def skill() -> None:
126
- """Manage AI agent skills for Copilot, Claude, and Codex."""
173
+ """Manage AI agent skills for most agents and Claude."""
127
174
 
128
175
  @skill.command(name="install")
129
176
  @click.option(
@@ -136,9 +183,9 @@ def register_skill_commands(cli: Any) -> None:
136
183
  @click.option(
137
184
  "--client",
138
185
  "-c",
139
- type=click.Choice(CLIENT_CHOICES + ["all"], case_sensitive=False),
186
+ type=click.Choice(CLIENT_CHOICES, case_sensitive=False),
140
187
  default=None,
141
- help="AI client to install for (copilot, claude, codex, or all).",
188
+ help="AI client to install for (agents [most agents] or claude).",
142
189
  )
143
190
  @click.option(
144
191
  "--scope",
@@ -163,10 +210,10 @@ def register_skill_commands(cli: Any) -> None:
163
210
  Available skills: slcli, systemlink-webapp.
164
211
  Supported clients and their skill locations:
165
212
 
166
- \b
167
- copilot personal: ~/.copilot/skills/ project: .github/skills/
168
- claude personal: ~/.claude/skills/ project: .claude/skills/
169
- codex personal: ~/.agents/skills/ project: .agents/skills/
213
+ \b
214
+ agents personal: ~/.agents/skills/ project: .agents/skills/
215
+ (most agents)
216
+ claude personal: ~/.claude/skills/ project: .claude/skills/
170
217
 
171
218
  When options are omitted you will be prompted interactively.
172
219
  """
@@ -183,8 +230,11 @@ def register_skill_commands(cli: Any) -> None:
183
230
  if client is None:
184
231
  client = questionary.select(
185
232
  "Install for which AI client?",
186
- choices=CLIENT_CHOICES + ["all"],
187
- default="all",
233
+ choices=[
234
+ questionary.Choice("most agents", value="agents"),
235
+ questionary.Choice("claude", value="claude"),
236
+ ],
237
+ default="agents",
188
238
  ).ask()
189
239
  if client is None:
190
240
  raise click.Abort()
@@ -200,7 +250,7 @@ def register_skill_commands(cli: Any) -> None:
200
250
 
201
251
  # ── resolve skill and client lists ────────────────────────────────────
202
252
  skill_names: List[str] = SKILL_CHOICES if skill == "all" else [skill]
203
- clients: List[str] = CLIENT_CHOICES if client == "all" else [client]
253
+ clients: List[str] = [client]
204
254
 
205
255
  # ── locate source ─────────────────────────────────────────────────────
206
256
  try:
@@ -676,7 +676,23 @@ slcli webapp open <WEBAPP_ID> # Open webapp URL in br
676
676
 
677
677
  Templates:
678
678
  - `html` (default) — minimal index.html
679
- - `angular` — Nimble Angular project with PROMPTS.md (AI-ready prompts) and README.md
679
+ - `angular` — Nimble Angular project with `PROMPTS.md`, `README.md`, and bundled AI skills installed into `.agents/skills/`
680
+
681
+ ### skill — AI skill installation
682
+
683
+ Install bundled skills for supported AI clients.
684
+
685
+ ```bash
686
+ slcli skill install --skill [slcli|systemlink-webapp|all] --client [agents|claude] --scope [personal|project|both]
687
+ ```
688
+
689
+ Client paths:
690
+ - `agents` — personal: `~/.agents/skills/`, project: `.agents/skills/` (most agents)
691
+ - `claude` — personal: `~/.claude/skills/`, project: `.claude/skills/`
692
+
693
+ Notes:
694
+ - `agents` is the default client in interactive mode.
695
+ - `webapp init --template angular` installs project-scoped skills into `.agents/skills/` by default.
680
696
 
681
697
  ### example — Built-in example resource provisioning
682
698
 
@@ -17,6 +17,7 @@ import questionary
17
17
  import requests
18
18
 
19
19
  from .cli_utils import validate_output_format
20
+ from .skill_click import install_skills_to_directory
20
21
  from .universal_handlers import UniversalResponseHandler
21
22
  from .utils import (
22
23
  ExitCodes,
@@ -277,63 +278,59 @@ _ANGULAR_PROMPTS_MD = """\
277
278
  # SystemLink WebApp — AI Prompts
278
279
 
279
280
  This project was scaffolded with `slcli webapp init --template angular`.
281
+ The **systemlink-webapp** skill has been installed into this project so
282
+ your AI assistant already knows how to build Nimble Angular apps for
283
+ SystemLink — including component choices, API patterns, routing, theming,
284
+ and deployment. Just describe what you want.
280
285
 
281
- The **systemlink-webapp** skill teaches your AI assistant how to build
282
- Nimble Angular applications for SystemLink. Install it first:
286
+ ## Getting Started
283
287
 
284
- ```bash
285
- slcli skill install --client all
286
- ```
288
+ Open this project in your editor and describe your app:
289
+
290
+ > "I need a web dashboard for monitoring our production test systems.
291
+ > It should show which systems are online, recent test results, and
292
+ > any assets due for calibration."
287
293
 
288
- ## Getting Started Prompts
294
+ Your AI assistant will create the Angular project, install the right
295
+ packages, and build the pages for you.
289
296
 
290
- Copy-paste these into your AI assistant to build out the project:
297
+ ## Example Prompts
291
298
 
292
- ### 1. Create a basic dashboard layout
299
+ Describe your goals the skill handles the technical details.
293
300
 
294
- > "Set up the AppModule with NimbleModule imports, a nimble-theme-provider
295
- > with automatic theme detection, and a nimble-anchor-tabs layout with
296
- > Overview and Settings tabs. Use hash routing."
301
+ ### Fleet monitoring
297
302
 
298
- ### 2. Add a systems overview page
303
+ > "Build a dashboard that shows all connected systems with their
304
+ > status, operating system, and last check-in time. Highlight any
305
+ > systems that have been offline for more than 24 hours."
299
306
 
300
- > "Create a SystemsComponent that uses the Systems Management TypeScript
301
- > client to fetch connected systems and display them in a nimble-table
302
- > with columns for alias, state, OS, and last-updated timestamp.
303
- > Add a nimble-spinner while loading."
307
+ ### Test results review
304
308
 
305
- ### 3. Add a test results page
309
+ > "Create a page where I can browse recent test results, filter by
310
+ > status (passed, failed, running) and program name, and see a
311
+ > summary of failure rates."
306
312
 
307
- > "Create a TestResultsComponent that uses the Test Monitor TypeScript
308
- > client to list recent test results in a nimble-table. Add
309
- > nimble-select filters for status (Passed/Failed/Running) and
310
- > program name. Show a nimble-banner when there are failures."
313
+ ### Asset & calibration tracking
311
314
 
312
- ### 4. Add an asset calibration tracker
315
+ > "Show all tracked assets grouped by calibration status. I want to
316
+ > see which assets are due soon, which are overdue, and be able to
317
+ > click on an asset to see its full details."
313
318
 
314
- > "Create a CalibrationComponent that uses the Asset Management
315
- > TypeScript client to show assets grouped by calibration status.
316
- > Use nimble-card components for each status category with counts.
317
- > Add a nimble-drawer that shows asset details when clicked."
319
+ ### Production KPIs
318
320
 
319
- ### 5. Build and deploy
321
+ > "Build a dashboard with key metrics: first-pass yield, test
322
+ > throughput per hour, and a trend chart of failures over the last
323
+ > 30 days."
320
324
 
321
- > "Build the project for production and deploy it to SystemLink
322
- > using slcli webapp publish."
325
+ ### Build and deploy
326
+
327
+ > "Build the project for production and deploy it to SystemLink."
323
328
 
324
329
  ## Reference
325
330
 
326
331
  - [Nimble Angular components](https://nimble.ni.dev/)
327
332
  - [SystemLink TypeScript clients](https://www.npmjs.com/package/@ni/systemlink-clients-ts)
328
333
  - [slcli webapp commands](https://ni-kismet.github.io/systemlink-cli/commands.html#webapp)
329
-
330
- ## Build & Deploy
331
-
332
- ```bash
333
- ng build --configuration production
334
- slcli webapp publish dist/<project-name>/browser/ \\
335
- --name "My Dashboard" --workspace Default
336
- ```
337
334
  """
338
335
 
339
336
  _ANGULAR_README_MD = """\
@@ -345,39 +342,23 @@ A Nimble Angular web application for SystemLink, scaffolded with
345
342
  ## Prerequisites
346
343
 
347
344
  - [Node.js](https://nodejs.org/) 18+ and npm
348
- - [Angular CLI](https://angular.dev/tools/cli) (`npm install -g @angular/cli`)
349
- - [slcli](https://ni-kismet.github.io/systemlink-cli/) with AI skills installed
345
+ - [slcli](https://ni-kismet.github.io/systemlink-cli/)
350
346
 
351
- ## Quick Start
347
+ ## Getting Started
352
348
 
353
- ```bash
354
- # Install dependencies
355
- npm install
349
+ Open this directory in your editor and ask your AI assistant to create
350
+ the project — see [PROMPTS.md](PROMPTS.md) for ready-made prompts.
356
351
 
357
- # Start development server
358
- ng serve --open
359
-
360
- # Build for production
361
- ng build --configuration production
362
- ```
352
+ The AI skills for SystemLink webapp development are already installed
353
+ in this project directory.
363
354
 
364
355
  ## Deploy to SystemLink
365
356
 
366
357
  ```bash
358
+ ng build --configuration production
367
359
  slcli webapp publish dist/<project-name>/browser/ \\
368
360
  --name "My Dashboard" --workspace Default
369
361
  ```
370
-
371
- ## AI-Assisted Development
372
-
373
- See [PROMPTS.md](PROMPTS.md) for example prompts to give your AI assistant.
374
- Install the systemlink-webapp skill first:
375
-
376
- ```bash
377
- slcli skill install --client all
378
- ```
379
-
380
- Then ask your assistant to build features using the prompts in PROMPTS.md.
381
362
  """
382
363
 
383
364
 
@@ -404,18 +385,19 @@ def _init_angular_template(directory: Path, force: bool) -> None:
404
385
  prompts_file.write_text(_ANGULAR_PROMPTS_MD, encoding="utf-8")
405
386
  readme_file.write_text(_ANGULAR_README_MD, encoding="utf-8")
406
387
 
388
+ # Auto-install AI skills into the project directory
389
+ installed = install_skills_to_directory(directory)
390
+ skill_msg = f"{installed} skill(s) installed" if installed else "skills not found"
391
+
407
392
  format_success(
408
393
  "Scaffolded Nimble Angular project",
409
394
  {
410
395
  "Directory": str(directory),
396
+ "Skills": skill_msg,
411
397
  "Next steps": (
412
398
  "1. cd " + str(directory) + "\n"
413
- " 2. ng new <app-name> --no-standalone\n"
414
- " 3. cd <app-name>\n"
415
- " 4. npm install @ni/nimble-angular "
416
- "@ni/systemlink-clients-ts\n"
417
- " 5. Install AI skills: slcli skill install --client all\n"
418
- " 6. Open PROMPTS.md and start building with AI"
399
+ " 2. Open in your editor and ask AI to create the app\n"
400
+ " 3. See PROMPTS.md for example prompts"
419
401
  ),
420
402
  },
421
403
  )
File without changes