systemlink-cli 1.29.1__tar.gz → 1.29.3__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.29.1 → systemlink_cli-1.29.3}/PKG-INFO +1 -1
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/pyproject.toml +1 -1
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/_version.py +1 -1
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/config_click.py +11 -3
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/platform.py +5 -2
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/SKILL.md +1 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/evals.json +275 -1
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/evals.schema.json +3 -2
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/analysis-recipes.md +75 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/commands.md +12 -0
- systemlink_cli-1.29.3/slcli/skills/slcli/references/domain-concepts.md +106 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/filtering.md +37 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/eval_manifest.py +6 -2
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/grade_eval_response.py +24 -1
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/tsconfig.json +2 -3
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/LICENSE +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/dff-editor/index.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/__init__.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/__main__.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/alarm_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/config.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/dataframe_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/example_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-1/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-1/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-2/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-2/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/leakage-current-results.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/overvoltage-results.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/product-xyz-compliance-report.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/product-xyz-specification.csv +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/demo-data-3/thermal-response-results.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/file_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/function_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/main.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/mcp_reachability.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/mcp_skills.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/pkce.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/profiles.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/rich_output.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skill_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/COPILOT_BATCH_RUN_PROMPT.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/files/spec-import/battery-specs.csv +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/files/webapp-package/icon.svg +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/files/webapp-package/nipkg.config.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/files/webapp-package/webapp-content/index.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/evals/trigger_evals.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/example-authoring.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/import-specs.min.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/job-debugging/overview.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/nipkg/overview.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/notebook/interfaces.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/notebook/notebook-patterns.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/notebook/overview.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/python-test/overview.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/routine-examples.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/troubleshooting.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/angular-ui-packages.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/deployment.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/layout-patterns.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/nimble-angular.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/overview.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/systemlink-services.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/webapp/troubleshooting.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/benchmark_iteration.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/compare_iteration.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/grade_iteration.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/prepare_eval_prompts.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/prepare_eval_workspace.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/render_eval_review.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/scripts/spec_import_helper.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/spec_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/state_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/system_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/system_query_utils.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/systemlink-logo.svg +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/user_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/utils.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/version_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_bootstrap.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/.gitignore +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/angular.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/package.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/scripts/filter-sbom.js +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/app-routing.module.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/app.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/app.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/app.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/app.module.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/state/app-view-state.service.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/systemlink-context.service.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/theme-sync.service.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/webapp-home-data.service.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/app/shared/states/view-state.model.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/assets/README.md +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/index.html +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/main.ts +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/src/styles.scss +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/webapp_templates/angular/blank/tsconfig.app.json +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/workspace_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.29.
|
|
3
|
+
version = "1.29.3"
|
|
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" }]
|
|
@@ -179,7 +179,10 @@ def _trust_certificate_if_requested(
|
|
|
179
179
|
|
|
180
180
|
try:
|
|
181
181
|
save_managed_certificate(certificate)
|
|
182
|
-
|
|
182
|
+
if auth_scheme == "bearer":
|
|
183
|
+
retry_status = check_web_server_auth(url, credential, auth_scheme=auth_scheme)
|
|
184
|
+
else:
|
|
185
|
+
retry_status = check_service_status(url, credential, auth_scheme=auth_scheme)
|
|
183
186
|
except (OSError, ValueError) as exc:
|
|
184
187
|
_exit_with_validation_error(
|
|
185
188
|
f"Could not save the trusted certificate: {exc}. Profile was not saved.",
|
|
@@ -303,10 +306,10 @@ def _add_profile_impl(
|
|
|
303
306
|
|
|
304
307
|
assert isinstance(api_key, str)
|
|
305
308
|
|
|
306
|
-
# PKCE
|
|
309
|
+
# Validate PKCE against the Web Server identity route; API-key login retains API probes.
|
|
307
310
|
click.echo("Checking server connectivity and services...")
|
|
308
311
|
if auth_mode == "pkce":
|
|
309
|
-
status =
|
|
312
|
+
status = check_web_server_auth(web_url, api_key, auth_scheme="bearer")
|
|
310
313
|
else:
|
|
311
314
|
status = check_service_status(url, api_key)
|
|
312
315
|
|
|
@@ -321,6 +324,11 @@ def _add_profile_impl(
|
|
|
321
324
|
)
|
|
322
325
|
|
|
323
326
|
platform = status["platform"]
|
|
327
|
+
if auth_mode == "pkce":
|
|
328
|
+
platform_status = check_service_status(web_url, api_key, auth_scheme="bearer")
|
|
329
|
+
detected_platform = platform_status.get("platform")
|
|
330
|
+
if detected_platform in (PLATFORM_SLE, PLATFORM_SLS):
|
|
331
|
+
platform = detected_platform
|
|
324
332
|
services = status.get("services", {})
|
|
325
333
|
|
|
326
334
|
if not status["server_reachable"]:
|
|
@@ -200,6 +200,7 @@ def get_platform() -> str:
|
|
|
200
200
|
):
|
|
201
201
|
pass
|
|
202
202
|
|
|
203
|
+
# Priority 3: Stored platform from keyring config (legacy fallback)
|
|
203
204
|
cfg = _get_keyring_config()
|
|
204
205
|
if cfg:
|
|
205
206
|
platform = str(cfg.get("platform", "")).upper()
|
|
@@ -438,7 +439,7 @@ def _get_service_status_snapshot(force_refresh: bool = False) -> Optional[Dict[s
|
|
|
438
439
|
|
|
439
440
|
_, api_url, credential, auth_scheme = api_context
|
|
440
441
|
if auth_scheme == "bearer":
|
|
441
|
-
status =
|
|
442
|
+
status = check_web_server_auth(api_url, credential, auth_scheme)
|
|
442
443
|
else:
|
|
443
444
|
status = check_service_status(api_url, credential)
|
|
444
445
|
_save_service_status_snapshot(api_context, status)
|
|
@@ -945,7 +946,9 @@ def get_platform_info(skip_health: bool = False) -> Dict[str, Any]:
|
|
|
945
946
|
server_reachable = status["server_reachable"]
|
|
946
947
|
auth_valid = status["auth_valid"]
|
|
947
948
|
services = status["services"]
|
|
948
|
-
|
|
949
|
+
detected_platform = status.get("platform", PLATFORM_UNKNOWN)
|
|
950
|
+
if detected_platform != PLATFORM_UNKNOWN:
|
|
951
|
+
platform = detected_platform
|
|
949
952
|
file_query_endpoint = status.get("file_query_endpoint")
|
|
950
953
|
elasticsearch_available = status.get("elasticsearch_available")
|
|
951
954
|
system_query_endpoint = status.get("system_query_endpoint")
|
|
@@ -36,6 +36,7 @@ Load only what the current task needs.
|
|
|
36
36
|
| Datasheet-to-spec workflow | [datasheet-workflow.md](./references/datasheet-workflow.md) | Importing specifications from PDF, CSV, or structured text |
|
|
37
37
|
| Minimal spec import payload | [import-specs.min.json](./references/import-specs.min.json) | Need a bundled create-compatible starter payload or conditions |
|
|
38
38
|
| Spec import helper | [spec_import_helper.py](./scripts/spec_import_helper.py) | Scaffold or validate a datasheet spec import payload |
|
|
39
|
+
| Domain concepts | [domain-concepts.md](./references/domain-concepts.md) | Interpreting resource terminology, relationships, identifiers, status intent, or availability |
|
|
39
40
|
| Filtering guide | [filtering.md](./references/filtering.md) | Advanced filters, LINQ syntax, and query composition |
|
|
40
41
|
| Analysis recipes | [analysis-recipes.md](./references/analysis-recipes.md) | Multi-step analysis workflows and reporting patterns |
|
|
41
42
|
| Troubleshooting | [troubleshooting.md](./references/troubleshooting.md) | SSL, workspace IDs, encoding, or scripting pitfalls |
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"skill_name": "slcli",
|
|
4
4
|
"recommended_suites": {
|
|
5
5
|
"gating": [1, 4, 5, 7, 10],
|
|
6
|
-
"regression": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
|
|
6
|
+
"regression": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
|
|
7
7
|
},
|
|
8
8
|
"evals": [
|
|
9
9
|
{
|
|
@@ -637,6 +637,280 @@
|
|
|
637
637
|
]
|
|
638
638
|
}
|
|
639
639
|
]
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"id": 12,
|
|
643
|
+
"tags": ["regression", "testmonitor", "status-intent"],
|
|
644
|
+
"prompt": "Show me failed SystemLink tests from the last seven days. Treat every terminal failure outcome as a failure.",
|
|
645
|
+
"expected_output": "Uses one parameterized testmonitor query covering FAILED, ERRORED, and TERMINATED, constrained to results started during the last seven days without matching unrelated statuses.",
|
|
646
|
+
"files": [],
|
|
647
|
+
"expectations": [
|
|
648
|
+
"Uses the testmonitor result list command",
|
|
649
|
+
"Expands broad failure intent to FAILED, ERRORED, and TERMINATED",
|
|
650
|
+
"Uses substitutions rather than interpolating status values",
|
|
651
|
+
"Adds a parameterized startedAt lower bound for the last seven days",
|
|
652
|
+
"Does not implement failure as everything other than PASSED"
|
|
653
|
+
],
|
|
654
|
+
"grading_rules": [
|
|
655
|
+
{
|
|
656
|
+
"text": "Queries test results",
|
|
657
|
+
"critical": true,
|
|
658
|
+
"positive_control": "slcli testmonitor result list --format json",
|
|
659
|
+
"negative_control": "slcli testmonitor product list --format json",
|
|
660
|
+
"scope": "command",
|
|
661
|
+
"mode": "any_of",
|
|
662
|
+
"patterns": [
|
|
663
|
+
"slcli\\s+testmonitor\\s+result\\s+list"
|
|
664
|
+
]
|
|
665
|
+
},
|
|
666
|
+
{
|
|
667
|
+
"text": "Includes all terminal failure statuses",
|
|
668
|
+
"critical": true,
|
|
669
|
+
"positive_control": "slcli testmonitor result list --filter 'status.statusType == @0 or status.statusType == @1 or status.statusType == @2' --substitution FAILED --substitution ERRORED --substitution TERMINATED",
|
|
670
|
+
"negative_control": "slcli testmonitor result list --status FAILED",
|
|
671
|
+
"scope": "command",
|
|
672
|
+
"mode": "all_of",
|
|
673
|
+
"patterns": [
|
|
674
|
+
"--substitution\\s+FAILED",
|
|
675
|
+
"--substitution\\s+ERRORED",
|
|
676
|
+
"--substitution\\s+TERMINATED",
|
|
677
|
+
"--filter\\s+[^\\n]*status\\.statusType\\s*==\\s*@0",
|
|
678
|
+
"--filter\\s+[^\\n]*status\\.statusType\\s*==\\s*@1",
|
|
679
|
+
"--filter\\s+[^\\n]*status\\.statusType\\s*==\\s*@2"
|
|
680
|
+
]
|
|
681
|
+
},
|
|
682
|
+
{
|
|
683
|
+
"text": "Avoids not-passed filtering",
|
|
684
|
+
"critical": true,
|
|
685
|
+
"positive_control": "slcli testmonitor result list --filter 'status.statusType == @0' --substitution FAILED",
|
|
686
|
+
"negative_control": "slcli testmonitor result list --filter 'status.statusType != @0' --substitution PASSED",
|
|
687
|
+
"scope": "command",
|
|
688
|
+
"mode": "none_of",
|
|
689
|
+
"patterns": [
|
|
690
|
+
"status\\.statusType\\s*!=",
|
|
691
|
+
"NOT\\s+PASSED"
|
|
692
|
+
]
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
"text": "Constrains results to the last seven days",
|
|
696
|
+
"critical": true,
|
|
697
|
+
"positive_control": "slcli testmonitor result list --filter '(status.statusType == @0 or status.statusType == @1 or status.statusType == @2) and startedAt >= @3' --substitution FAILED --substitution ERRORED --substitution TERMINATED --substitution 2026-09-10T00:00:00Z",
|
|
698
|
+
"negative_control": "slcli testmonitor result list --filter 'status.statusType == @0 or status.statusType == @1 or status.statusType == @2' --substitution FAILED --substitution ERRORED --substitution TERMINATED",
|
|
699
|
+
"scope": "command",
|
|
700
|
+
"mode": "all_of",
|
|
701
|
+
"validator": "last_n_days",
|
|
702
|
+
"days": 7,
|
|
703
|
+
"control_reference_date": "2026-09-17",
|
|
704
|
+
"patterns": [
|
|
705
|
+
"startedAt\\s*>=\\s*@\\d+",
|
|
706
|
+
"--substitution\\s+\\d{4}-\\d{2}-\\d{2}T00:00:00Z"
|
|
707
|
+
]
|
|
708
|
+
}
|
|
709
|
+
]
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"id": 13,
|
|
713
|
+
"tags": ["regression", "packages", "routing"],
|
|
714
|
+
"prompt": "Show the commands to check packages available in feed FEED-1, packages installed on system SYS-1, and packages declared by desired state STATE-1.",
|
|
715
|
+
"expected_output": "Routes repository availability, observed installation, and desired-state membership to three distinct slcli command surfaces.",
|
|
716
|
+
"files": [],
|
|
717
|
+
"expectations": [
|
|
718
|
+
"Uses feed package list for available packages",
|
|
719
|
+
"Uses system details with installed packages for observed installation",
|
|
720
|
+
"Uses state details for desired packages",
|
|
721
|
+
"Does not imply that any one package view proves another"
|
|
722
|
+
],
|
|
723
|
+
"grading_rules": [
|
|
724
|
+
{
|
|
725
|
+
"text": "Queries available feed packages",
|
|
726
|
+
"critical": true,
|
|
727
|
+
"positive_control": "slcli feed package list --feed-id FEED-1 --format json",
|
|
728
|
+
"negative_control": "slcli feed list --format json",
|
|
729
|
+
"scope": "command",
|
|
730
|
+
"mode": "all_of",
|
|
731
|
+
"patterns": [
|
|
732
|
+
"slcli\\s+feed\\s+package\\s+list",
|
|
733
|
+
"--feed-id\\s+FEED-1"
|
|
734
|
+
]
|
|
735
|
+
},
|
|
736
|
+
{
|
|
737
|
+
"text": "Queries installed system packages",
|
|
738
|
+
"critical": true,
|
|
739
|
+
"positive_control": "slcli system get SYS-1 --include-packages --format json",
|
|
740
|
+
"negative_control": "slcli system get SYS-1 --format json",
|
|
741
|
+
"scope": "command",
|
|
742
|
+
"mode": "all_of",
|
|
743
|
+
"patterns": [
|
|
744
|
+
"slcli\\s+system\\s+get\\s+SYS-1",
|
|
745
|
+
"--include-packages"
|
|
746
|
+
]
|
|
747
|
+
},
|
|
748
|
+
{
|
|
749
|
+
"text": "Queries desired-state packages",
|
|
750
|
+
"critical": true,
|
|
751
|
+
"positive_control": "slcli state get STATE-1 --format json",
|
|
752
|
+
"negative_control": "slcli state list --format json",
|
|
753
|
+
"scope": "command",
|
|
754
|
+
"mode": "any_of",
|
|
755
|
+
"patterns": [
|
|
756
|
+
"slcli\\s+state\\s+get\\s+STATE-1"
|
|
757
|
+
]
|
|
758
|
+
},
|
|
759
|
+
{
|
|
760
|
+
"text": "Keeps package views independent",
|
|
761
|
+
"critical": true,
|
|
762
|
+
"positive_control": "slcli feed package list --feed-id FEED-1 --format json\nslcli system get SYS-1 --include-packages --format json\nslcli state get STATE-1 --format json\nThese are independent facts; do not infer one from another.",
|
|
763
|
+
"negative_control": "slcli feed package list --feed-id FEED-1 --format json\nslcli system get SYS-1 --include-packages --format json\nslcli state get STATE-1 --format json",
|
|
764
|
+
"scope": "response",
|
|
765
|
+
"mode": "all_of",
|
|
766
|
+
"patterns": [
|
|
767
|
+
"independent facts",
|
|
768
|
+
"do not infer"
|
|
769
|
+
]
|
|
770
|
+
}
|
|
771
|
+
]
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
"id": 14,
|
|
775
|
+
"tags": ["regression", "systems", "health"],
|
|
776
|
+
"prompt": "Check the current health of SystemLink system SYS-1, including current health signals and active alarm instances.",
|
|
777
|
+
"expected_output": "Combines system state, active alarm instances, and current CPU, memory, and disk health-tag values without inventing thresholds or claiming that an empty instance query means no alarm rule is configured.",
|
|
778
|
+
"files": [],
|
|
779
|
+
"expectations": [
|
|
780
|
+
"Retrieves system details and active alarm instances",
|
|
781
|
+
"Reads the three standard current health tags",
|
|
782
|
+
"Treats missing or stale evidence as an incomplete health conclusion",
|
|
783
|
+
"Does not invent utilization thresholds"
|
|
784
|
+
],
|
|
785
|
+
"grading_rules": [
|
|
786
|
+
{
|
|
787
|
+
"text": "Includes system and alarm state",
|
|
788
|
+
"critical": true,
|
|
789
|
+
"positive_control": "slcli system get SYS-1 --include-alarms --format json",
|
|
790
|
+
"negative_control": "slcli system get SYS-1 --format json",
|
|
791
|
+
"scope": "command",
|
|
792
|
+
"mode": "all_of",
|
|
793
|
+
"patterns": [
|
|
794
|
+
"slcli\\s+system\\s+get\\s+SYS-1",
|
|
795
|
+
"--include-(?:alarms|all)"
|
|
796
|
+
]
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"text": "Reads CPU, memory, and disk health tags",
|
|
800
|
+
"critical": true,
|
|
801
|
+
"positive_control": "slcli tag get-value SYS-1.Health.CPU.MeanUsePercentage\nslcli tag get-value SYS-1.Health.Memory.UsePercentage\nslcli tag get-value SYS-1.Health.Disk.UsePercentage",
|
|
802
|
+
"negative_control": "slcli tag get-value SYS-1.Health.CPU.MeanUsePercentage",
|
|
803
|
+
"scope": "commands",
|
|
804
|
+
"mode": "all_of",
|
|
805
|
+
"patterns": [
|
|
806
|
+
"SYS-1\\.Health\\.CPU\\.MeanUsePercentage",
|
|
807
|
+
"SYS-1\\.Health\\.Memory\\.UsePercentage",
|
|
808
|
+
"SYS-1\\.Health\\.Disk\\.UsePercentage"
|
|
809
|
+
]
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
"text": "Treats incomplete evidence as inconclusive",
|
|
813
|
+
"critical": true,
|
|
814
|
+
"positive_control": "slcli system get SYS-1 --include-alarms --format json\nslcli tag get-value SYS-1.Health.CPU.MeanUsePercentage\nMissing or stale evidence makes the health conclusion incomplete.",
|
|
815
|
+
"negative_control": "slcli system get SYS-1 --include-alarms --format json\nslcli tag get-value SYS-1.Health.CPU.MeanUsePercentage",
|
|
816
|
+
"scope": "response",
|
|
817
|
+
"mode": "any_of",
|
|
818
|
+
"patterns": [
|
|
819
|
+
"(?:missing|stale).{0,80}(?:incomplete|insufficient|cannot|can't|not definitive)"
|
|
820
|
+
]
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"text": "Does not invent utilization thresholds",
|
|
824
|
+
"critical": true,
|
|
825
|
+
"positive_control": "slcli system get SYS-1 --include-alarms --format json\nslcli tag get-value SYS-1.Health.CPU.MeanUsePercentage",
|
|
826
|
+
"negative_control": "slcli system get SYS-1 --include-alarms --format json\nCPU above 80% means the system is unhealthy.",
|
|
827
|
+
"scope": "response",
|
|
828
|
+
"mode": "none_of",
|
|
829
|
+
"patterns": [
|
|
830
|
+
"(?:cpu|memory|disk|utilization|usage).{0,50}(?:above|below|greater than|less than|[<>]\\s*\\d+%?)"
|
|
831
|
+
]
|
|
832
|
+
}
|
|
833
|
+
]
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"id": 15,
|
|
837
|
+
"tags": ["regression", "files", "relationships"],
|
|
838
|
+
"prompt": "Find files attached to SystemLink system SYS-1 in workspace WORKSPACE-1. SYS-1 is the exact system ID.",
|
|
839
|
+
"expected_output": "Lists files in the resolved workspace and filters the system-reference property locally rather than treating the system ID as a file ID.",
|
|
840
|
+
"files": [],
|
|
841
|
+
"expectations": [
|
|
842
|
+
"Uses the file list command with the resolved workspace",
|
|
843
|
+
"Filters properties.minionId with the supplied system ID",
|
|
844
|
+
"Does not use SYS-1 as a file ID"
|
|
845
|
+
],
|
|
846
|
+
"grading_rules": [
|
|
847
|
+
{
|
|
848
|
+
"text": "Queries the system file-reference property",
|
|
849
|
+
"critical": true,
|
|
850
|
+
"positive_control": "slcli file list --workspace WORKSPACE-1 --take 1000 --format json | jq --arg system_id SYS-1 '[.[] | select(.properties.minionId == $system_id)]'",
|
|
851
|
+
"negative_control": "slcli file list --workspace WORKSPACE-1 --id-filter SYS-1 --format json",
|
|
852
|
+
"scope": "response",
|
|
853
|
+
"mode": "all_of",
|
|
854
|
+
"patterns": [
|
|
855
|
+
"slcli\\s+file\\s+list",
|
|
856
|
+
"--workspace\\s+WORKSPACE-1",
|
|
857
|
+
"properties\\.minionId[^\\n]*system_id"
|
|
858
|
+
]
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"text": "Does not treat the system ID as a file ID",
|
|
862
|
+
"critical": true,
|
|
863
|
+
"positive_control": "select(.properties.minionId == $system_id)",
|
|
864
|
+
"negative_control": "select(.id == $system_id)",
|
|
865
|
+
"scope": "response",
|
|
866
|
+
"mode": "none_of",
|
|
867
|
+
"patterns": [
|
|
868
|
+
"select\\(\\.id\\s*=="
|
|
869
|
+
]
|
|
870
|
+
}
|
|
871
|
+
]
|
|
872
|
+
},
|
|
873
|
+
{
|
|
874
|
+
"id": 16,
|
|
875
|
+
"tags": ["regression", "assets", "instrument-intent"],
|
|
876
|
+
"prompt": "Show me all connected DMM instruments in SystemLink.",
|
|
877
|
+
"expected_output": "Uses the connected asset inventory query as a 40xx candidate search, then verifies that returned model names contain a standalone 40xx family before presenting them as DMMs.",
|
|
878
|
+
"files": [],
|
|
879
|
+
"expectations": [
|
|
880
|
+
"Uses the asset list command",
|
|
881
|
+
"Maps DMM to the 40xx model family",
|
|
882
|
+
"Limits results to connected assets",
|
|
883
|
+
"Verifies the returned model names match the standalone 40xx family"
|
|
884
|
+
],
|
|
885
|
+
"grading_rules": [
|
|
886
|
+
{
|
|
887
|
+
"text": "Queries connected assets",
|
|
888
|
+
"critical": true,
|
|
889
|
+
"positive_control": "slcli asset list --model 40 --connected --format json",
|
|
890
|
+
"negative_control": "slcli system list --has-package DAQmx --format json",
|
|
891
|
+
"scope": "command",
|
|
892
|
+
"mode": "all_of",
|
|
893
|
+
"patterns": [
|
|
894
|
+
"slcli\\s+asset\\s+list",
|
|
895
|
+
"--connected"
|
|
896
|
+
]
|
|
897
|
+
},
|
|
898
|
+
{
|
|
899
|
+
"text": "Maps DMM to the 40xx model family",
|
|
900
|
+
"critical": true,
|
|
901
|
+
"positive_control": "slcli asset list --model 40 --connected --format json | jq '[.[] | select(.modelName | test(\"(^|[^0-9])40[0-9]{2}([^0-9]|$)\"))]'",
|
|
902
|
+
"negative_control": "slcli asset list --model DMM --connected",
|
|
903
|
+
"scope": "response",
|
|
904
|
+
"mode": "all_of",
|
|
905
|
+
"patterns": [
|
|
906
|
+
"--model\\s+40",
|
|
907
|
+
"jq\\s+",
|
|
908
|
+
"test\\(\\\"",
|
|
909
|
+
"40\\[0-9\\]\\{2\\}",
|
|
910
|
+
"\\[\\^0-9\\]"
|
|
911
|
+
]
|
|
912
|
+
}
|
|
913
|
+
]
|
|
640
914
|
}
|
|
641
915
|
]
|
|
642
916
|
}
|
|
@@ -37,8 +37,9 @@
|
|
|
37
37
|
"critical": {"type": "boolean"},
|
|
38
38
|
"positive_control": {"type": "string", "minLength": 1},
|
|
39
39
|
"negative_control": {"type": "string", "minLength": 1},
|
|
40
|
-
"scope": {"enum": ["response", "command"]},
|
|
41
|
-
"validator": {"enum": ["previous_calendar_month"]},
|
|
40
|
+
"scope": {"enum": ["response", "command", "commands"]},
|
|
41
|
+
"validator": {"enum": ["previous_calendar_month", "last_n_days"]},
|
|
42
|
+
"days": {"type": "integer", "minimum": 1},
|
|
42
43
|
"control_reference_date": {"type": "string", "format": "date"},
|
|
43
44
|
"mode": {"enum": ["all_of", "any_of", "none_of"]},
|
|
44
45
|
"patterns": {"type": "array", "minItems": 1, "items": {"type": "string"}}
|
{systemlink_cli-1.29.1 → systemlink_cli-1.29.3}/slcli/skills/slcli/references/analysis-recipes.md
RENAMED
|
@@ -17,6 +17,7 @@ Each recipe maps to a real-world scenario and shows the exact commands needed.
|
|
|
17
17
|
- [Recipe 9: Product family workload distribution](#recipe-9-product-family-workload-distribution)
|
|
18
18
|
- [Recipe 10: Environmental condition failure patterns](#recipe-10-environmental-condition-failure-patterns)
|
|
19
19
|
- [Recipe 11: Create and schedule a work item on a specific fixture/slot and system](#recipe-11-create-and-schedule-a-work-item-on-a-specific-fixtureslot-and-system)
|
|
20
|
+
- [Recipe 12: Find files attached to a resource](#recipe-12-find-files-attached-to-a-resource)
|
|
20
21
|
- [Product discovery and overview](#product-discovery-and-overview)
|
|
21
22
|
- [General tips](#general-tips)
|
|
22
23
|
|
|
@@ -260,6 +261,15 @@ slcli system get <SYSTEM_ID> --include-all -t 5 --workitem-days 60
|
|
|
260
261
|
# Machine-readable JSON — all sections embedded
|
|
261
262
|
slcli system get <SYSTEM_ID> --include-all -f json
|
|
262
263
|
|
|
264
|
+
# Read the three current health signals. Tag paths use the system/minion ID.
|
|
265
|
+
# Use the workspace resolved for this system, not only the active profile workspace.
|
|
266
|
+
slcli tag get-value '<SYSTEM_ID>.Health.CPU.MeanUsePercentage' \
|
|
267
|
+
--workspace "$WORKSPACE_ID" -f json
|
|
268
|
+
slcli tag get-value '<SYSTEM_ID>.Health.Memory.UsePercentage' \
|
|
269
|
+
--workspace "$WORKSPACE_ID" -f json
|
|
270
|
+
slcli tag get-value '<SYSTEM_ID>.Health.Disk.UsePercentage' \
|
|
271
|
+
--workspace "$WORKSPACE_ID" -f json
|
|
272
|
+
|
|
263
273
|
# Extract just the active alarms
|
|
264
274
|
slcli system get <SYSTEM_ID> --include-alarms -f json | jq '._alarms.items'
|
|
265
275
|
|
|
@@ -287,6 +297,13 @@ slcli system list --state CONNECTED -f json --take 200 | \
|
|
|
287
297
|
> If a service is unavailable, `"error"` contains the error message and the
|
|
288
298
|
> other sections still render normally.
|
|
289
299
|
|
|
300
|
+
Report connection state, the three values and their timestamps, and active alarm
|
|
301
|
+
instances together. `--include-alarms` does not enumerate configured alarm
|
|
302
|
+
rules, so an empty instance query does not prove that no rule is configured.
|
|
303
|
+
Missing or stale metrics make the health conclusion incomplete. Report raw
|
|
304
|
+
values and active alarm instances; do not invent CPU, memory, or disk
|
|
305
|
+
thresholds.
|
|
306
|
+
|
|
290
307
|
---
|
|
291
308
|
|
|
292
309
|
## Recipe 5: Product yield analysis
|
|
@@ -561,6 +578,64 @@ slcli workitem schedule wi-12345 \
|
|
|
561
578
|
|
|
562
579
|
---
|
|
563
580
|
|
|
581
|
+
## Recipe 12: Find files attached to a resource
|
|
582
|
+
|
|
583
|
+
**Question:** Which files are attached to this system, asset, product, work
|
|
584
|
+
item, or test result?
|
|
585
|
+
|
|
586
|
+
First resolve one canonical resource. File associations then follow one of two
|
|
587
|
+
directions.
|
|
588
|
+
|
|
589
|
+
Resolve the resource's workspace first and retain it as `WORKSPACE_ID` for every
|
|
590
|
+
file command below.
|
|
591
|
+
|
|
592
|
+
**The file references the resource:**
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
# Systems use a property containing the system/minion ID. List the workspace
|
|
596
|
+
# and apply the property filter locally so the workflow also works when the
|
|
597
|
+
# search-files endpoint is unavailable.
|
|
598
|
+
slcli file list --workspace "$WORKSPACE_ID" --take 1000 --format json | \
|
|
599
|
+
jq --arg system_id "<SYSTEM_ID>" \
|
|
600
|
+
'[.[] | select(.properties.minionId == $system_id)]'
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
**The resource contains file IDs:**
|
|
604
|
+
|
|
605
|
+
```bash
|
|
606
|
+
# Retrieve the resource and retain its fileIds field.
|
|
607
|
+
slcli asset get <ASSET_ID> --format json
|
|
608
|
+
slcli testmonitor product get <PRODUCT_ID> --format json
|
|
609
|
+
slcli testmonitor result get <RESULT_ID> --format json
|
|
610
|
+
slcli workitem get <WORK_ITEM_ID> --format json
|
|
611
|
+
|
|
612
|
+
# Query the returned IDs together with the portable ID filter.
|
|
613
|
+
slcli file list \
|
|
614
|
+
--workspace "$WORKSPACE_ID" \
|
|
615
|
+
--id-filter "<FILE_ID_1>,<FILE_ID_2>" \
|
|
616
|
+
--format json
|
|
617
|
+
```
|
|
618
|
+
|
|
619
|
+
Some work items also have files whose properties contain the work-item ID.
|
|
620
|
+
Combine both association directions when the resource data exposes template
|
|
621
|
+
file IDs:
|
|
622
|
+
|
|
623
|
+
```bash
|
|
624
|
+
slcli file list --workspace "$WORKSPACE_ID" --take 1000 --format json | \
|
|
625
|
+
jq --arg work_item_id "<WORK_ITEM_ID>" \
|
|
626
|
+
--arg template_file_id "<TEMPLATE_FILE_ID>" \
|
|
627
|
+
'[.[] | select(
|
|
628
|
+
.properties.workItemId == $work_item_id or .id == $template_file_id
|
|
629
|
+
)]'
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
An empty `fileIds` field proves only that the resource does not reference files
|
|
633
|
+
in that direction. Never substitute the resource ID where a file ID is
|
|
634
|
+
required. Increase the bounded workspace listing when the workspace contains
|
|
635
|
+
more than 1000 files.
|
|
636
|
+
|
|
637
|
+
---
|
|
638
|
+
|
|
564
639
|
## General tips
|
|
565
640
|
|
|
566
641
|
- **Start with `--summary`** to understand data shape before fetching raw records.
|
|
@@ -341,6 +341,9 @@ slcli state list [OPTIONS]
|
|
|
341
341
|
# Get state details
|
|
342
342
|
slcli state get <STATE_ID> [-f json]
|
|
343
343
|
|
|
344
|
+
# `state list` is for discovery metadata. Use `state get` to inspect the full
|
|
345
|
+
# desired configuration, including packages, feeds, and system image details.
|
|
346
|
+
|
|
344
347
|
# Create or update a package/feed-defined state
|
|
345
348
|
slcli state create --name TEXT --distribution CHOICE --architecture CHOICE [OPTIONS]
|
|
346
349
|
--workspace, -w TEXT
|
|
@@ -748,6 +751,15 @@ slcli auth template delete <TEMPLATE_ID>
|
|
|
748
751
|
Manage package repository feeds used to install software on test systems.
|
|
749
752
|
Supports Windows (.nipkg) and NI Linux RT (.ipk/.deb).
|
|
750
753
|
|
|
754
|
+
Choose the package view that matches the user's intent:
|
|
755
|
+
|
|
756
|
+
- Available from a repository: `slcli feed package list --feed-id <FEED_ID>`
|
|
757
|
+
- Installed on one managed system: `slcli system get <SYSTEM_ID> --include-packages`
|
|
758
|
+
- Declared in a desired configuration: `slcli state get <STATE_ID>`
|
|
759
|
+
|
|
760
|
+
Feed availability, observed installation, and desired-state membership are
|
|
761
|
+
independent facts. Do not infer one from another.
|
|
762
|
+
|
|
751
763
|
```bash
|
|
752
764
|
slcli feed list [-w WORKSPACE] [-t INT] [-f json]
|
|
753
765
|
slcli feed get --id FEED_ID [-f json]
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# SystemLink Domain Concepts
|
|
2
|
+
|
|
3
|
+
Use these concepts to translate user language into the correct resource and
|
|
4
|
+
identifier before choosing commands. Consult the command and filtering
|
|
5
|
+
references for supported syntax.
|
|
6
|
+
|
|
7
|
+
## Resource identity and scope
|
|
8
|
+
|
|
9
|
+
- A workspace is a data-isolation boundary. Every resource belongs to one
|
|
10
|
+
workspace. Resolve workspace names to IDs before scripted workflows.
|
|
11
|
+
- Resource IDs are not display names. Resolve names, aliases, part numbers,
|
|
12
|
+
serial numbers, or email addresses before passing an ID to another command.
|
|
13
|
+
- A system is a managed physical or virtual target. Systems Management owns
|
|
14
|
+
connection, operating-system, package, and remote-management data.
|
|
15
|
+
- An asset is physical inventory such as an instrument, fixture, controller,
|
|
16
|
+
or device under test. Asset Management owns the instruments assigned to a
|
|
17
|
+
system.
|
|
18
|
+
|
|
19
|
+
## Assets and systems
|
|
20
|
+
|
|
21
|
+
- In hardware questions, treat "asset", "device", and "instrument" as asset
|
|
22
|
+
inventory. Treat DMM and device aliases as asset classes. Treat DAQmx as
|
|
23
|
+
software/package data, including when the user asks about its installation,
|
|
24
|
+
capabilities, or version.
|
|
25
|
+
- Asset types are `GENERIC`, `DEVICE_UNDER_TEST`, `FIXTURE`, and `SYSTEM`.
|
|
26
|
+
Fixtures are also called slots in scheduling workflows. A DUT or UUT is a
|
|
27
|
+
`DEVICE_UNDER_TEST` asset associated with a product part number.
|
|
28
|
+
- An asset can be directly located in a physical location or in a system by
|
|
29
|
+
slot. Its system reference is the system's minion ID, not its alias.
|
|
30
|
+
- "Connected asset" means the asset is present and its owning system is
|
|
31
|
+
connected. Connection does not prove that the asset or system is available
|
|
32
|
+
for scheduling.
|
|
33
|
+
|
|
34
|
+
Common NI instrument model families:
|
|
35
|
+
|
|
36
|
+
| User intent | Model families |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| DMM or digital multimeter | standalone 40xx family |
|
|
39
|
+
| SMU or power supply | 41xx |
|
|
40
|
+
| Oscilloscope or scope | 51xx, 59xx |
|
|
41
|
+
| Waveform, signal, or function generator | 54xx |
|
|
42
|
+
| Switch | 25xx, 27xx |
|
|
43
|
+
| Analog-input DAQ | 43xx, 44xx |
|
|
44
|
+
| Multifunction DAQ | 60xx, 63xx |
|
|
45
|
+
| Digital I/O | 65xx |
|
|
46
|
+
|
|
47
|
+
NI model names commonly contain a hyphen before the family, such as
|
|
48
|
+
`NI PXIe-5422`. Prefer the `asset list --model` convenience filter; use an
|
|
49
|
+
Asset API expression only when the convenience filter cannot express the
|
|
50
|
+
request. Because `--model` is a contains match, use it as a candidate
|
|
51
|
+
prefilter for a model family and verify the returned names before treating
|
|
52
|
+
every result as that instrument class. For example, keep only model names
|
|
53
|
+
containing a standalone 40xx family when answering an all-DMM query:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
slcli asset list --model 40 --connected --format json | \
|
|
57
|
+
jq '[.[] | select(.modelName | test("(^|[^0-9])40[0-9]{2}([^0-9]|$)"))]'
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Test data
|
|
61
|
+
|
|
62
|
+
- A product represents the item being tested and is identified by part number.
|
|
63
|
+
- A specification defines expected limits or a functional expectation for a
|
|
64
|
+
product. A test result records one execution. Test steps contain the
|
|
65
|
+
measurements and nested sequences for that execution.
|
|
66
|
+
- Query result summaries before retrieving steps unless a result ID is already
|
|
67
|
+
known. Inspect steps to explain why one result passed or failed.
|
|
68
|
+
- "Failed tests" includes `FAILED`, `ERRORED`, and `TERMINATED` unless the user
|
|
69
|
+
names a narrower status. It does not automatically include `TIMEDOUT`,
|
|
70
|
+
`SKIPPED`, `CUSTOM`, or active states.
|
|
71
|
+
|
|
72
|
+
## Alarms and tags
|
|
73
|
+
|
|
74
|
+
- An alarm instance proves that a monitored condition triggered; an empty
|
|
75
|
+
instance query does not prove that no alarm rule is configured.
|
|
76
|
+
- An alarm becomes inactive only after it is cleared and acknowledged. Cleared
|
|
77
|
+
alarms have severity `-1`; higher nonnegative severity is more severe.
|
|
78
|
+
- System health requires connection state, current health-tag values, and alarm
|
|
79
|
+
state together. Missing or stale evidence prevents a definitive healthy
|
|
80
|
+
conclusion.
|
|
81
|
+
- System tag paths begin with the minion ID. Common health paths end in
|
|
82
|
+
`.Health.CPU.MeanUsePercentage`, `.Health.Memory.UsePercentage`, and
|
|
83
|
+
`.Health.Disk.UsePercentage`.
|
|
84
|
+
|
|
85
|
+
## Work items and users
|
|
86
|
+
|
|
87
|
+
- A work item describes test or maintenance work, assignment, schedule, target
|
|
88
|
+
product, and reserved resources. Use the `slcli workitem` command group for
|
|
89
|
+
work-item discovery, creation, scheduling, and lifecycle operations.
|
|
90
|
+
- "Free" means no scheduled work item overlaps the requested interval. It does
|
|
91
|
+
not mean connected, present, or unlocked.
|
|
92
|
+
- Fields such as `assignedTo`, `requestedBy`, `createdBy`, and `updatedBy`
|
|
93
|
+
contain user IDs. Resolve a supplied name, email, or login before filtering
|
|
94
|
+
or assigning work.
|
|
95
|
+
|
|
96
|
+
## Files
|
|
97
|
+
|
|
98
|
+
Files are separate resources. Associations use either direction:
|
|
99
|
+
|
|
100
|
+
- A resource can store file IDs, such as `fileIds` on assets, products, and
|
|
101
|
+
test results. Retrieve the resource first, then query those file IDs.
|
|
102
|
+
- A file can reference its owner through properties, such as
|
|
103
|
+
`properties.minionId` for a system.
|
|
104
|
+
|
|
105
|
+
Never use a resource ID as a file ID unless the resource data explicitly
|
|
106
|
+
contains that same value as a file reference.
|