systemlink-cli 1.29.3__tar.gz → 1.29.4__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 (177) hide show
  1. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/PKG-INFO +1 -1
  2. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/pyproject.toml +1 -1
  3. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/config_click.py +9 -1
  5. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/platform.py +72 -20
  6. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/LICENSE +0 -0
  7. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/dff-editor/editor.js +0 -0
  8. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/dff-editor/index.html +0 -0
  9. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/__init__.py +0 -0
  10. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/__main__.py +0 -0
  11. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/alarm_click.py +0 -0
  12. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/asset_click.py +0 -0
  13. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/cli_formatters.py +0 -0
  14. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/cli_utils.py +0 -0
  15. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/comment_click.py +0 -0
  16. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/completion_click.py +0 -0
  17. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/config.py +0 -0
  18. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/dataframe_click.py +0 -0
  19. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/dff_click.py +0 -0
  20. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/dff_decorators.py +0 -0
  21. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/example_click.py +0 -0
  22. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/example_loader.py +0 -0
  23. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/example_provisioner.py +0 -0
  24. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/README.md +0 -0
  25. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/_schema/schema-v1.0.json +0 -0
  26. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-1/README.md +0 -0
  27. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-1/config.yaml +0 -0
  28. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-2/README.md +0 -0
  29. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-2/config.yaml +0 -0
  30. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/config.yaml +0 -0
  31. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/leakage-current-results.json +0 -0
  32. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/overvoltage-results.json +0 -0
  33. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/product-xyz-compliance-report.json +0 -0
  34. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/product-xyz-specification.csv +0 -0
  35. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/demo-data-3/thermal-response-results.json +0 -0
  36. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  37. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  38. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  39. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  40. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  41. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  42. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  43. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  44. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  45. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  46. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/feed_click.py +0 -0
  47. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/file_click.py +0 -0
  48. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/function_click.py +0 -0
  49. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/function_templates.py +0 -0
  50. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/main.py +0 -0
  51. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/mcp_click.py +0 -0
  52. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/mcp_reachability.py +0 -0
  53. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/mcp_server.py +0 -0
  54. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/mcp_skills.py +0 -0
  55. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/notebook_click.py +0 -0
  56. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/pkce.py +0 -0
  57. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/policy_click.py +0 -0
  58. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/policy_utils.py +0 -0
  59. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/profiles.py +0 -0
  60. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/response_handlers.py +0 -0
  61. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/rich_output.py +0 -0
  62. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/routine_click.py +0 -0
  63. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skill_click.py +0 -0
  64. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/SKILL.md +0 -0
  65. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/COPILOT_BATCH_RUN_PROMPT.md +0 -0
  66. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/README.md +0 -0
  67. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/evals.json +0 -0
  68. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/evals.schema.json +0 -0
  69. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/files/spec-import/battery-specs.csv +0 -0
  70. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/files/webapp-package/icon.svg +0 -0
  71. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/files/webapp-package/nipkg.config.json +0 -0
  72. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/files/webapp-package/webapp-content/index.html +0 -0
  73. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/evals/trigger_evals.json +0 -0
  74. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  75. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/commands.md +0 -0
  76. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
  77. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/domain-concepts.md +0 -0
  78. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/example-authoring.md +0 -0
  79. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/filtering.md +0 -0
  80. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/import-specs.min.json +0 -0
  81. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/job-debugging/overview.md +0 -0
  82. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/nipkg/overview.md +0 -0
  83. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/notebook/interfaces.md +0 -0
  84. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/notebook/notebook-patterns.md +0 -0
  85. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/notebook/overview.md +0 -0
  86. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/python-test/overview.md +0 -0
  87. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/routine-examples.md +0 -0
  88. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/troubleshooting.md +0 -0
  89. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/angular-ui-packages.md +0 -0
  90. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/deployment.md +0 -0
  91. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/layout-patterns.md +0 -0
  92. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/nimble-angular.md +0 -0
  93. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/overview.md +0 -0
  94. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/systemlink-services.md +0 -0
  95. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/references/webapp/troubleshooting.md +0 -0
  96. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/benchmark_iteration.py +0 -0
  97. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/compare_iteration.py +0 -0
  98. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/eval_manifest.py +0 -0
  99. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/grade_eval_response.py +0 -0
  100. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/grade_iteration.py +0 -0
  101. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/prepare_eval_prompts.py +0 -0
  102. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/prepare_eval_workspace.py +0 -0
  103. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/render_eval_review.py +0 -0
  104. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/skills/slcli/scripts/spec_import_helper.py +0 -0
  105. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/spec_click.py +0 -0
  106. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/ssl_trust.py +0 -0
  107. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/state_click.py +0 -0
  108. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/system_click.py +0 -0
  109. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/system_query_utils.py +0 -0
  110. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/systemlink-logo.svg +0 -0
  111. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/table_utils.py +0 -0
  112. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/tag_click.py +0 -0
  113. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/templates_click.py +0 -0
  114. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/testmonitor_click.py +0 -0
  115. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/universal_handlers.py +0 -0
  116. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/user_click.py +0 -0
  117. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/utils.py +0 -0
  118. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/version_click.py +0 -0
  119. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/web_editor.py +0 -0
  120. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_bootstrap.py +0 -0
  121. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_click.py +0 -0
  122. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/.gitignore +0 -0
  123. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/README.md +0 -0
  124. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/angular.json +0 -0
  125. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/package.json +0 -0
  126. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/scripts/filter-sbom.js +0 -0
  127. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/app-routing.module.ts +0 -0
  128. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/app.component.html +0 -0
  129. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/app.component.scss +0 -0
  130. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/app.component.ts +0 -0
  131. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/app.module.ts +0 -0
  132. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.html +0 -0
  133. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.scss +0 -0
  134. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.ts +0 -0
  135. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/state/app-view-state.service.ts +0 -0
  136. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/systemlink-context.service.ts +0 -0
  137. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/theme-sync.service.ts +0 -0
  138. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/webapp-home-data.service.ts +0 -0
  139. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.html +0 -0
  140. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.scss +0 -0
  141. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.ts +0 -0
  142. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.html +0 -0
  143. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.scss +0 -0
  144. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.ts +0 -0
  145. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.html +0 -0
  146. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.scss +0 -0
  147. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.ts +0 -0
  148. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.html +0 -0
  149. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.scss +0 -0
  150. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.ts +0 -0
  151. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.html +0 -0
  152. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.scss +0 -0
  153. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.ts +0 -0
  154. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.html +0 -0
  155. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.scss +0 -0
  156. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.ts +0 -0
  157. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.html +0 -0
  158. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.scss +0 -0
  159. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.ts +0 -0
  160. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.html +0 -0
  161. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.scss +0 -0
  162. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.ts +0 -0
  163. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.html +0 -0
  164. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.scss +0 -0
  165. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.ts +0 -0
  166. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/app/shared/states/view-state.model.ts +0 -0
  167. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/assets/README.md +0 -0
  168. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/index.html +0 -0
  169. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/main.ts +0 -0
  170. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/src/styles.scss +0 -0
  171. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/tsconfig.app.json +0 -0
  172. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/webapp_templates/angular/blank/tsconfig.json +0 -0
  173. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/workflow_preview.py +0 -0
  174. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/workflows_click.py +0 -0
  175. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/workitem_click.py +0 -0
  176. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/workspace_click.py +0 -0
  177. {systemlink_cli-1.29.3 → systemlink_cli-1.29.4}/slcli/workspace_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systemlink-cli
3
- Version: 1.29.3
3
+ Version: 1.29.4
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.29.3"
3
+ version = "1.29.4"
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.29.3"
4
+ __version__ = "1.29.4"
@@ -109,6 +109,11 @@ def _all_service_probes_unauthorized(services: dict[str, str]) -> bool:
109
109
  return bool(services) and all(status == "unauthorized" for status in services.values())
110
110
 
111
111
 
112
+ def _any_service_probes_unauthorized(services: dict[str, str]) -> bool:
113
+ """Return True if any recorded service probe failed with authorization."""
114
+ return bool(services) and any(status == "unauthorized" for status in services.values())
115
+
116
+
112
117
  def _normalize_fingerprint(fingerprint: str) -> str:
113
118
  """Normalize a SHA-256 certificate fingerprint supplied by a user."""
114
119
  normalized = fingerprint.replace(":", "").replace(" ", "").strip().upper()
@@ -338,7 +343,10 @@ def _add_profile_impl(
338
343
  ExitCodes.NETWORK_ERROR,
339
344
  )
340
345
 
341
- if status["auth_valid"] is False and _all_service_probes_unauthorized(services):
346
+ if status["auth_valid"] is False and (
347
+ _all_service_probes_unauthorized(services)
348
+ or (_any_service_probes_unauthorized(services) and platform == PLATFORM_SLS)
349
+ ):
342
350
  auth_failure_message = (
343
351
  "PKCE bearer token validation failed. The server responded, but the token was not authorized. "
344
352
  if auth_mode == "pkce"
@@ -88,6 +88,7 @@ FILE_QUERY_LINQ_PATH = "/nifile/v1/service-groups/Default/query-files-linq"
88
88
  SYSTEM_SEARCH_PATH = "/nisysmgmt/v1/materialized/search-systems"
89
89
  SYSTEM_QUERY_PATH = "/nisysmgmt/v1/query-systems"
90
90
  WEB_SERVER_AUTH_PATH = "/niauth/v1/auth"
91
+ SLS_PLATFORM_PROBE_PATH = "/nitagrule/"
91
92
 
92
93
  SLE_ONLY_SERVICE_NAMES = (
93
94
  "Dynamic Form Fields",
@@ -97,17 +98,22 @@ SLE_ONLY_SERVICE_NAMES = (
97
98
  )
98
99
 
99
100
 
100
- def _detect_platform_from_services(services: Dict[str, str]) -> str:
101
- """Infer the platform from SLE-only service probes.
101
+ def _detect_platform_from_services(
102
+ services: Dict[str, str], sls_platform_status: Optional[str] = None
103
+ ) -> str:
104
+ """Infer the platform from positive platform capability probes.
102
105
 
103
106
  Args:
104
107
  services: Mapping of service display name to probe status.
105
108
 
106
109
  Returns:
107
110
  PLATFORM_SLE when any SLE-only service is reachable or explicitly
108
- unauthorized, PLATFORM_SLS when all SLE-only services are missing,
111
+ unauthorized, PLATFORM_SLS when the SLS-only platform probe succeeds,
109
112
  otherwise PLATFORM_UNKNOWN.
110
113
  """
114
+ if sls_platform_status == "ok":
115
+ return PLATFORM_SLS
116
+
111
117
  sle_statuses = [services.get(name) for name in SLE_ONLY_SERVICE_NAMES if name in services]
112
118
  if not sle_statuses:
113
119
  return PLATFORM_UNKNOWN
@@ -115,12 +121,47 @@ def _detect_platform_from_services(services: Dict[str, str]) -> str:
115
121
  if any(status in ("ok", "unauthorized") for status in sle_statuses):
116
122
  return PLATFORM_SLE
117
123
 
118
- if all(status == "not_found" for status in sle_statuses):
119
- return PLATFORM_SLS
120
-
121
124
  return PLATFORM_UNKNOWN
122
125
 
123
126
 
127
+ def _is_valid_sls_platform_probe(response: requests.Response) -> bool:
128
+ """Return whether a Tag Rule Engine response identifies an SLS instance."""
129
+ try:
130
+ payload = response.json()
131
+ except ValueError:
132
+ return False
133
+
134
+ return isinstance(payload, dict) and (
135
+ isinstance(payload.get("v1"), dict) and "version" in payload
136
+ )
137
+
138
+
139
+ def _probe_sls_platform(api_url: str, credential: str, auth_scheme: str = "api-key") -> str:
140
+ """Probe the unauthenticated Tag Rule Engine versioning endpoint."""
141
+ headers = get_auth_headers(credential, auth_scheme, "application/json")
142
+ ssl_verify = get_ssl_verify(api_url)
143
+
144
+ try:
145
+ response = requests.get(
146
+ f"{api_url}{SLS_PLATFORM_PROBE_PATH}",
147
+ headers=headers,
148
+ verify=ssl_verify,
149
+ timeout=10,
150
+ )
151
+ except requests.exceptions.SSLError:
152
+ return "certificate_error"
153
+ except requests.RequestException:
154
+ return "unreachable"
155
+
156
+ if response.status_code == 200:
157
+ return "ok" if _is_valid_sls_platform_probe(response) else "error"
158
+ if response.status_code in (401, 403):
159
+ return "unauthorized"
160
+ if response.status_code in (404, 501):
161
+ return "not_found"
162
+ return "error"
163
+
164
+
124
165
  def _get_keyring_config() -> Dict[str, Any]:
125
166
  """Attempt to read a single JSON config entry from keyring.
126
167
 
@@ -784,8 +825,6 @@ def _check_service_status(
784
825
 
785
826
  services: Dict[str, str] = {}
786
827
  any_responded = False
787
- any_authorized = False
788
- all_unauthorized = True
789
828
  certificate_error = False
790
829
 
791
830
  for display_name, method, url_path in SERVICE_CHECKS:
@@ -810,26 +849,39 @@ def _check_service_status(
810
849
 
811
850
  if resp.status_code in (200, 400):
812
851
  services[display_name] = "ok"
813
- any_authorized = True
814
- all_unauthorized = False
815
852
  elif resp.status_code == 401:
816
853
  services[display_name] = "unauthorized"
817
854
  elif resp.status_code == 403:
818
855
  services[display_name] = "unauthorized"
819
856
  elif resp.status_code == 404:
820
857
  services[display_name] = "not_found"
821
- all_unauthorized = False
822
858
  else:
823
859
  services[display_name] = "error"
824
- all_unauthorized = False
825
860
  except requests.exceptions.SSLError:
826
861
  services[display_name] = "certificate_error"
827
862
  certificate_error = True
828
863
  except requests.RequestException:
829
864
  services[display_name] = "unreachable"
830
865
 
866
+ sls_platform_status = _probe_sls_platform(api_url, credential, auth_scheme)
867
+ certificate_error = certificate_error or sls_platform_status == "certificate_error"
868
+
831
869
  # Determine overall status
832
870
  if not any_responded:
871
+ if sls_platform_status not in ("unreachable", "certificate_error"):
872
+ return {
873
+ "server_reachable": True,
874
+ "auth_valid": None,
875
+ "services": services,
876
+ "certificate_error": certificate_error,
877
+ "certificate": None,
878
+ "file_query_endpoint": None,
879
+ "elasticsearch_available": None,
880
+ "system_query_endpoint": None,
881
+ "materialized_search_available": None,
882
+ "platform": _detect_platform_from_services(services, sls_platform_status),
883
+ }
884
+
833
885
  certificate_details: Optional[Dict[str, Any]] = None
834
886
  if certificate_error:
835
887
  try:
@@ -851,20 +903,20 @@ def _check_service_status(
851
903
  "platform": PLATFORM_UNREACHABLE,
852
904
  }
853
905
 
854
- # Determine auth status: valid if any service accepted the key
855
- # If all responding services returned 401/403, the key is invalid
856
- auth_valid = any_authorized if any_responded else None
857
- if all_unauthorized and any_responded:
858
- auth_valid = False
859
-
860
- # Determine platform from multiple SLE-only service responses.
861
- platform = _detect_platform_from_services(services)
906
+ # Determine platform from positive capability probes.
907
+ platform = _detect_platform_from_services(services, sls_platform_status)
908
+ initial_auth_valid = any(status == "ok" for status in services.values())
862
909
 
863
910
  file_capability = get_file_query_capability(api_url, credential, auth_scheme)
864
911
  services["File"] = file_capability["status"]
865
912
  system_capability = get_system_query_capability(api_url, credential, auth_scheme)
866
913
  services["Systems"] = system_capability["status"]
867
914
 
915
+ # Recompute auth after capability probes add their final service statuses.
916
+ auth_valid = initial_auth_valid or any(
917
+ status in ("ok", "fallback") for status in services.values()
918
+ )
919
+
868
920
  return {
869
921
  "server_reachable": True,
870
922
  "auth_valid": auth_valid,
File without changes