systemlink-cli 1.27.7__tar.gz → 1.28.1__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 (175) hide show
  1. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/PKG-INFO +1 -1
  2. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/pyproject.toml +2 -1
  3. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/_version.py +1 -1
  4. systemlink_cli-1.28.1/slcli/skills/slcli/evals/COPILOT_BATCH_RUN_PROMPT.md +127 -0
  5. systemlink_cli-1.28.1/slcli/skills/slcli/evals/README.md +236 -0
  6. systemlink_cli-1.28.1/slcli/skills/slcli/evals/evals.json +642 -0
  7. systemlink_cli-1.28.1/slcli/skills/slcli/evals/evals.schema.json +53 -0
  8. systemlink_cli-1.28.1/slcli/skills/slcli/evals/files/spec-import/battery-specs.csv +4 -0
  9. systemlink_cli-1.28.1/slcli/skills/slcli/evals/files/webapp-package/icon.svg +4 -0
  10. systemlink_cli-1.28.1/slcli/skills/slcli/evals/files/webapp-package/nipkg.config.json +15 -0
  11. systemlink_cli-1.28.1/slcli/skills/slcli/evals/files/webapp-package/webapp-content/index.html +10 -0
  12. systemlink_cli-1.28.1/slcli/skills/slcli/evals/trigger_evals.json +34 -0
  13. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/benchmark_iteration.py +183 -0
  14. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/compare_iteration.py +350 -0
  15. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/eval_manifest.py +134 -0
  16. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/grade_eval_response.py +354 -0
  17. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/grade_iteration.py +283 -0
  18. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/prepare_eval_prompts.py +279 -0
  19. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/prepare_eval_workspace.py +523 -0
  20. systemlink_cli-1.28.1/slcli/skills/slcli/scripts/render_eval_review.py +82 -0
  21. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/LICENSE +0 -0
  22. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/dff-editor/editor.js +0 -0
  23. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/dff-editor/index.html +0 -0
  24. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/__init__.py +0 -0
  25. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/__main__.py +0 -0
  26. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/alarm_click.py +0 -0
  27. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/asset_click.py +0 -0
  28. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/cli_formatters.py +0 -0
  29. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/cli_utils.py +0 -0
  30. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/comment_click.py +0 -0
  31. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/completion_click.py +0 -0
  32. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/config.py +0 -0
  33. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/config_click.py +0 -0
  34. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/dataframe_click.py +0 -0
  35. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/dff_click.py +0 -0
  36. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/dff_decorators.py +0 -0
  37. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/example_click.py +0 -0
  38. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/example_loader.py +0 -0
  39. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/example_provisioner.py +0 -0
  40. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/README.md +0 -0
  41. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/_schema/schema-v1.0.json +0 -0
  42. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-1/README.md +0 -0
  43. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-1/config.yaml +0 -0
  44. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-2/README.md +0 -0
  45. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-2/config.yaml +0 -0
  46. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/config.yaml +0 -0
  47. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/leakage-current-results.json +0 -0
  48. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/overvoltage-results.json +0 -0
  49. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/product-xyz-compliance-report.json +0 -0
  50. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/product-xyz-specification.csv +0 -0
  51. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/demo-data-3/thermal-response-results.json +0 -0
  52. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  53. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  54. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  55. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  56. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  57. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  58. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  59. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  60. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  61. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  62. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/feed_click.py +0 -0
  63. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/file_click.py +0 -0
  64. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/function_click.py +0 -0
  65. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/function_templates.py +0 -0
  66. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/main.py +0 -0
  67. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/mcp_click.py +0 -0
  68. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/mcp_reachability.py +0 -0
  69. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/mcp_server.py +0 -0
  70. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/notebook_click.py +0 -0
  71. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/pkce.py +0 -0
  72. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/platform.py +0 -0
  73. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/policy_click.py +0 -0
  74. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/policy_utils.py +0 -0
  75. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/profiles.py +0 -0
  76. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/response_handlers.py +0 -0
  77. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/rich_output.py +0 -0
  78. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/routine_click.py +0 -0
  79. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skill_click.py +0 -0
  80. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/SKILL.md +0 -0
  81. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  82. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/commands.md +0 -0
  83. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
  84. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/example-authoring.md +0 -0
  85. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/filtering.md +0 -0
  86. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/import-specs.min.json +0 -0
  87. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/job-debugging/overview.md +0 -0
  88. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/nipkg/overview.md +0 -0
  89. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/notebook/interfaces.md +0 -0
  90. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/notebook/notebook-patterns.md +0 -0
  91. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/notebook/overview.md +0 -0
  92. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/python-test/overview.md +0 -0
  93. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/routine-examples.md +0 -0
  94. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/troubleshooting.md +0 -0
  95. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/angular-ui-packages.md +0 -0
  96. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/deployment.md +0 -0
  97. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/layout-patterns.md +0 -0
  98. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/nimble-angular.md +0 -0
  99. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/overview.md +0 -0
  100. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/systemlink-services.md +0 -0
  101. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/references/webapp/troubleshooting.md +0 -0
  102. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/skills/slcli/scripts/spec_import_helper.py +0 -0
  103. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/spec_click.py +0 -0
  104. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/ssl_trust.py +0 -0
  105. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/state_click.py +0 -0
  106. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/system_click.py +0 -0
  107. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/system_query_utils.py +0 -0
  108. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/systemlink-logo.svg +0 -0
  109. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/table_utils.py +0 -0
  110. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/tag_click.py +0 -0
  111. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/templates_click.py +0 -0
  112. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/testmonitor_click.py +0 -0
  113. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/universal_handlers.py +0 -0
  114. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/user_click.py +0 -0
  115. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/utils.py +0 -0
  116. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/version_click.py +0 -0
  117. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/web_editor.py +0 -0
  118. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_bootstrap.py +0 -0
  119. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_click.py +0 -0
  120. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/.gitignore +0 -0
  121. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/README.md +0 -0
  122. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/angular.json +0 -0
  123. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/package.json +0 -0
  124. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/scripts/filter-sbom.js +0 -0
  125. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/app-routing.module.ts +0 -0
  126. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/app.component.html +0 -0
  127. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/app.component.scss +0 -0
  128. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/app.component.ts +0 -0
  129. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/app.module.ts +0 -0
  130. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.html +0 -0
  131. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.scss +0 -0
  132. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.ts +0 -0
  133. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/state/app-view-state.service.ts +0 -0
  134. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/systemlink-context.service.ts +0 -0
  135. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/theme-sync.service.ts +0 -0
  136. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/webapp-home-data.service.ts +0 -0
  137. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.html +0 -0
  138. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.scss +0 -0
  139. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.ts +0 -0
  140. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.html +0 -0
  141. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.scss +0 -0
  142. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.ts +0 -0
  143. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.html +0 -0
  144. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.scss +0 -0
  145. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.ts +0 -0
  146. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.html +0 -0
  147. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.scss +0 -0
  148. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.ts +0 -0
  149. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.html +0 -0
  150. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.scss +0 -0
  151. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.ts +0 -0
  152. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.html +0 -0
  153. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.scss +0 -0
  154. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.ts +0 -0
  155. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.html +0 -0
  156. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.scss +0 -0
  157. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.ts +0 -0
  158. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.html +0 -0
  159. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.scss +0 -0
  160. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.ts +0 -0
  161. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.html +0 -0
  162. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.scss +0 -0
  163. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.ts +0 -0
  164. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/app/shared/states/view-state.model.ts +0 -0
  165. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/assets/README.md +0 -0
  166. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/index.html +0 -0
  167. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/main.ts +0 -0
  168. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/src/styles.scss +0 -0
  169. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/tsconfig.app.json +0 -0
  170. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/webapp_templates/angular/blank/tsconfig.json +0 -0
  171. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/workflow_preview.py +0 -0
  172. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/workflows_click.py +0 -0
  173. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/workitem_click.py +0 -0
  174. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/workspace_click.py +0 -0
  175. {systemlink_cli-1.27.7 → systemlink_cli-1.28.1}/slcli/workspace_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systemlink-cli
3
- Version: 1.27.7
3
+ Version: 1.28.1
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.27.7"
3
+ version = "1.28.1"
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" }]
@@ -68,6 +68,7 @@ pytest = ">=7.0"
68
68
  pytest-cov = ">=3.0"
69
69
  pytest-timeout = ">=2.1.0"
70
70
  pyinstaller = "^6.14.2"
71
+ jsonschema = ">=4.0"
71
72
 
72
73
  # Typed stubs for third-party libraries used by mypy in CI
73
74
  types-requests = "*"
@@ -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.27.7"
4
+ __version__ = "1.28.1"
@@ -0,0 +1,127 @@
1
+ # Copilot Batch Eval Prompt
2
+
3
+ Use this prompt in a single parent Copilot Chat session when you want Copilot
4
+ to run the entire prepared `gating` iteration, populate the `outputs/`
5
+ folders, grade the results, aggregate the benchmark, and regenerate the static
6
+ review page.
7
+
8
+ This is the recommended orchestration pattern because the repo scripts handle
9
+ workspace preparation, grading, aggregation, and review rendering, but they do
10
+ not execute the model runs themselves.
11
+
12
+ Important: the parent chat is shared context. Do not execute both
13
+ `with_skill` and `old_skill` runs directly in the same running thread of
14
+ conversation if you want a meaningful baseline. Use fresh stateless subagents
15
+ per run so the merge-base skill stays isolated from candidate context.
16
+
17
+ Also use a fail-fast budget per run. Do not let one struggling eval burn the
18
+ whole batch. A good default for the gating suite is a maximum of about 8 tool
19
+ calls or about 3 minutes of active work for a single run, whichever comes
20
+ first.
21
+
22
+ ## When to use this
23
+
24
+ - You already created an iteration workspace with `prepare_eval_workspace.py`
25
+ - You already generated per-run `executor_prompt.txt` files with
26
+ `prepare_eval_prompts.py`
27
+ - You want one parent Copilot chat to orchestrate all prepared gating evals end
28
+ to end
29
+
30
+ ## What this does
31
+
32
+ In one parent chat, Copilot should:
33
+
34
+ 1. Read `iteration_manifest.json`.
35
+ 2. Find every `executor_prompt.txt` under the iteration directory.
36
+ 3. For each prepared run directory:
37
+ - execute the prompt in a fresh stateless subagent
38
+
39
+ - load the candidate `slcli` skill from the run-specific candidate repo for `with_skill` runs
40
+ - load the merge-base `slcli` skill from the run-specific baseline repo for `old_skill` runs
41
+ - stop early when the per-run budget is exhausted and record the failure
42
+ - save the final answer to `outputs/response.txt`
43
+ - save the complete executor trace to `outputs/transcript.jsonl`
44
+ - save executor identity, configuration, and completion status to `outputs/run_metadata.json`
45
+ - save `total_tokens`, `duration_ms`, and derived `total_duration_seconds` from the subagent completion notification to the run's `timing.json`; do not estimate these values
46
+ - retry infrastructure failures once; after a second failure, set status to `infrastructure_error` and continue
47
+ - optionally save `outputs/notes.txt` for assumptions
48
+
49
+ 4. Run `benchmark_iteration.py`.
50
+ 5. Run `render_eval_review.py`.
51
+ 6. Summarize which runs were populated and where the review HTML was written.
52
+
53
+ ## Paste This Into Copilot Chat
54
+
55
+ ```text
56
+ Run the prepared gating eval iteration end to end.
57
+
58
+ Use one parent conversation only as the orchestrator. For each executor prompt,
59
+ spawn a fresh stateless subagent so the runs do not share prompt history.
60
+ For `with_skill`, load the skill path inside the run-specific candidate repo
61
+ named by the executor prompt instead of using the working checkout.
62
+ For `old_skill`, load the skill path inside the run-specific baseline repo named
63
+ by the executor prompt instead of using the candidate checkout. Use only the
64
+ neutral input paths named by the executor prompt for attached fixtures.
65
+ Run independent evals in parallel when possible, but keep concurrency modest:
66
+ typically 2 to 4 subagents at a time.
67
+
68
+ Iteration workspace:
69
+ <ITERATION_DIR>
70
+
71
+ Instructions:
72
+ 1. Read iteration_manifest.json in that workspace.
73
+ 2. Discover every executor_prompt.txt under the iteration directory.
74
+ 3. For each executor prompt:
75
+ - execute the task described in the prompt in a fresh stateless subagent
76
+ - use a maximum budget of about 8 tool calls or about 3 minutes of active work for that run, whichever comes first
77
+ - if the run does not converge inside that budget, stop, write the best grounded response you have to response.txt, and write notes.txt explaining the failure briefly
78
+ - save the final user-facing answer to the sibling outputs/response.txt path named in the prompt
79
+ - save the complete executor trace to the sibling outputs/transcript.jsonl path named in the prompt
80
+ - save optional outputs/notes.txt only if assumptions or caveats matter
81
+ - save outputs/run_metadata.json with executor_provider, exact executor_model, harness, configuration, and status
82
+ - when the subagent completion notification arrives, immediately save its total_tokens and duration_ms plus derived total_duration_seconds to the sibling timing.json named in the executor prompt
83
+ - use status `completed` only for a completed model run; retry an infrastructure failure once, then use `infrastructure_error` and preserve partial artifacts
84
+ 4. Do both configurations for every eval:
85
+ - with_skill
86
+ - old_skill
87
+ 5. After all outputs are populated, run:
88
+ - poetry run python -m slcli.skills.slcli.scripts.benchmark_iteration <ITERATION_DIR>
89
+ - poetry run python -m slcli.skills.slcli.scripts.render_eval_review <ITERATION_DIR>
90
+ 6. Report:
91
+ - which run directories were populated
92
+ - whether grading and benchmark generation succeeded
93
+ - where review.html was written
94
+
95
+ Execution rules:
96
+ - Use the existing executor_prompt.txt files as the source of truth for each run.
97
+ - Do not answer multiple eval runs in the parent chat context.
98
+ - Do not reuse a subagent across runs.
99
+ - Parallelize independent runs when useful, but keep concurrency to roughly 2 to 4 subagents at a time.
100
+ - For with_skill runs, the subagent must load only the candidate skill path named in the executor prompt.
101
+ - For old_skill runs, the subagent must load only the merge-base skill path named in the executor prompt.
102
+ - If a run exceeds its budget without a grounded answer, declare it failed quickly, persist the best grounded partial result plus a short note, and continue.
103
+ - Do not overwrite populated outputs unless the existing file is only a placeholder.
104
+ - Keep each response grounded in supported slcli commands and workflows.
105
+ - Save response artifacts only inside the specified outputs/ directories; save timing.json at the run path named in the executor prompt.
106
+ - If a single run fails, continue with the remaining runs and report the failure at the end.
107
+ ```
108
+
109
+ ## Notes
110
+
111
+ - You do not need a new top-level chat for every eval. One parent chat can
112
+ orchestrate the whole prepared gating suite if each run is delegated to a
113
+ fresh stateless subagent.
114
+ - Yes, the subagents can be parallelized because the prepared runs are
115
+ independent. Keep the batch size small so one bad run does not hide the rest.
116
+ - A plain single-thread conversation is not a clean `with_skill` versus
117
+ `old_skill` comparison because the parent chat shares context across
118
+ turns.
119
+ - You also do not need a repo script per eval. The intended split is:
120
+ - repo scripts prepare, grade, aggregate, and render
121
+ - Copilot orchestrates isolated subagent executions and writes the output
122
+ artifacts
123
+ - If you want broader coverage, swap the iteration path to a prepared
124
+ `regression` iteration.
125
+
126
+ Replace `<ITERATION_DIR>` with the prepared iteration path before using the
127
+ template.
@@ -0,0 +1,236 @@
1
+ # slcli Eval Workflow
2
+
3
+ This directory contains the eval corpus for the repo-local `slcli` skill.
4
+ Use the `gating` suite to compare a candidate skill with its merge-base version
5
+ after a skill edit. The default is three paired trials per configuration.
6
+
7
+ ## Gating Workflow
8
+
9
+ Run the following from the repository root.
10
+
11
+ ### 1. Run the single prompt
12
+
13
+ Use the repo prompt in Copilot Chat:
14
+
15
+ ```text
16
+ /eval-skill-gating
17
+ ```
18
+
19
+ Optional examples:
20
+
21
+ ```text
22
+ /eval-skill-gating iteration_dir="slcli/skills/slcli-workspace/iteration-4"
23
+ /eval-skill-gating max_parallel=2 max_tool_calls=6 max_minutes=2.5
24
+ ```
25
+
26
+ The prompt performs the full gating workflow:
27
+
28
+ - prepare or reuse a gating iteration
29
+ - generate executor prompts
30
+ - execute `with_skill` and `old_skill` runs via isolated subagents
31
+ - grade and aggregate the iteration
32
+ - apply the regression gate
33
+ - regenerate `review.html`
34
+
35
+ ### 2. What the prompt runs under the hood
36
+
37
+ If you need to run the flow manually, these are the underlying steps.
38
+
39
+ #### Prepare a fresh gating workspace
40
+
41
+ ```bash
42
+ poetry run python -m slcli.skills.slcli.scripts.prepare_eval_workspace --suite gating
43
+ ```
44
+
45
+ This prints a new iteration directory such as:
46
+
47
+ ```text
48
+ slcli/skills/slcli-workspace/iteration-1
49
+ ```
50
+
51
+ The iteration contains paired candidate and baseline repository templates from
52
+ the current candidate checkout. Only the `slcli` skill in the baseline template
53
+ is replaced with its version from the merge base of `origin/main` and `HEAD`.
54
+ Each trial receives its own copy of the appropriate template, so parallel runs
55
+ cannot modify another trial's repository. File-backed fixtures are copied into
56
+ a neutral `inputs/` directory for each run. Use
57
+ `--baseline-ref` when comparing against another branch. Use
58
+ `--baseline without_skill` only when measuring whether a new skill adds value;
59
+ that comparison is not a regression test. The legacy `--isolate-baseline` option
60
+ is accepted but no longer needed because both configurations are always isolated.
61
+
62
+ #### Generate executor prompts
63
+
64
+ ```bash
65
+ poetry run python -m slcli.skills.slcli.scripts.prepare_eval_prompts \
66
+ slcli/skills/slcli-workspace/iteration-1 \
67
+ --max-tool-calls 8 \
68
+ --max-minutes 3
69
+ ```
70
+
71
+ This writes one `executor_prompt.txt` per prepared run.
72
+
73
+ #### Execute the runs in Copilot
74
+
75
+ Use [COPILOT_BATCH_RUN_PROMPT.md](./COPILOT_BATCH_RUN_PROMPT.md) together with
76
+ the generated `executor_prompt.txt` files.
77
+
78
+ Recommended execution pattern:
79
+
80
+ 1. Use one parent chat as the orchestrator.
81
+ 2. Run each prepared eval in a fresh stateless subagent.
82
+ 3. Point `with_skill` runs at the run-specific candidate skill path in its prompt.
83
+ 4. Point `old_skill` runs at the run-specific baseline skill path in its prompt.
84
+ 5. Keep concurrency modest, usually 2 to 4 runs at a time.
85
+ 6. If a run exceeds its budget, save the best grounded `response.txt`, add a short `notes.txt`, and continue.
86
+
87
+ Each run saves response artifacts under its own `outputs/` directory and timing
88
+ metadata at the run root. Every run must write:
89
+
90
+ - `response.txt`: final user-facing response
91
+ - `transcript.jsonl`: complete executor trace for audit and diagnosis
92
+ - `run_metadata.json`: `executor_provider`, exact `executor_model`, `harness`,
93
+ `configuration`, and `status` (`completed` or `infrastructure_error`)
94
+ - `../timing.json`: `total_tokens` and `duration_ms` from the subagent completion
95
+ notification plus derived `total_duration_seconds`; these values must not be estimated
96
+
97
+ Candidate and baseline trials are incomparable when provider, model, or harness
98
+ metadata differs.
99
+
100
+ The gate treats a run as inconclusive when candidate/baseline hashes, the eval
101
+ manifest hash, executor prompt hash, run identity, classification, detailed
102
+ grading payload, or other recorded evidence differs from the preparation-time
103
+ provenance in the iteration manifest or `run_record.json`.
104
+
105
+ Retry an infrastructure failure once. If the retry also fails, preserve the
106
+ partial artifacts with `status: infrastructure_error`; the gate reports that
107
+ trial as inconclusive instead of scoring it as a skill failure.
108
+
109
+ ## Harness Invariants
110
+
111
+ - Every trial uses a fresh repository sandbox and a fresh stateless subagent.
112
+ - Candidate and baseline sandboxes begin from the same candidate repository;
113
+ only the baseline skill directory differs.
114
+ - Input fixtures live outside both skill trees and are identical for both arms.
115
+ - Each trial receives its own fixture copy so one executor cannot mutate another trial's input.
116
+ - The eval corpus and grading harness are excluded from both runtime skill snapshots so
117
+ executor agents cannot use the answer key while comparing candidate and baseline skills.
118
+ - Copied fixture hashes must match their preparation-time input manifest.
119
+ - Executor prompt hashes must match both the iteration manifest and live prompt files.
120
+ - Critical compound workflows must pass within one command invocation.
121
+ - Positive controls must use supported command paths and required arguments.
122
+ - Executor errors and provenance mismatches are inconclusive, never passing evidence.
123
+
124
+ #### Grade and aggregate the iteration
125
+
126
+ ```bash
127
+ poetry run python -m slcli.skills.slcli.scripts.benchmark_iteration --force \
128
+ slcli/skills/slcli-workspace/iteration-1
129
+ ```
130
+
131
+ This grades populated runs, writes `run_record.json` per trial, generates
132
+ `benchmark.json` plus `benchmark.md`, and applies the regression gate. It also
133
+ writes `regression.json` and `regression.md`.
134
+
135
+ The gate exits with:
136
+
137
+ - `0`: no detected regression
138
+ - `1`: regression detected
139
+ - `2`: inconclusive because runs or required metadata are missing or incompatible
140
+
141
+ The default gate fails when the baseline passes the critical rules in a
142
+ majority of trials and any paired candidate trial introduces a critical
143
+ failure. It also fails when mean assertion pass rate drops by more than five
144
+ percentage points.
145
+
146
+ #### Regenerate the review page
147
+
148
+ ```bash
149
+ poetry run python -m slcli.skills.slcli.scripts.render_eval_review \
150
+ slcli/skills/slcli-workspace/iteration-1
151
+ ```
152
+
153
+ This writes `review.html` in the iteration directory.
154
+
155
+ ## What Good Looks Like
156
+
157
+ - `with_skill` should be non-inferior to `old_skill` on the gating suite.
158
+ - Failures should point to missing skill behavior, not to ambiguous eval wording.
159
+ - If both configs pass easily, keep the case for regression coverage and add
160
+ harder cases to a separate capability suite.
161
+ - If both configs fail, tighten the prompt or grading rules before changing the skill.
162
+
163
+ ## Files in This Directory
164
+
165
+ - `evals.json`: prompts, fixtures, and grading rules
166
+ - `evals.schema.json`: machine-readable corpus contract
167
+ - `trigger_evals.json`: balanced should-trigger and should-not-trigger prompts
168
+ - `files/`: input fixtures for file-backed evals
169
+ - `../../../../.github/prompts/eval-skill-gating.prompt.md`: one-shot gating eval prompt
170
+ - `COPILOT_BATCH_RUN_PROMPT.md`: parent-chat orchestration prompt
171
+ - `../scripts/prepare_eval_workspace.py`: scaffolds an iteration directory
172
+ - `../scripts/prepare_eval_prompts.py`: writes executor prompts
173
+ - `../scripts/benchmark_iteration.py`: grades and aggregates a full iteration
174
+ - `../scripts/render_eval_review.py`: writes the static review page
175
+
176
+ ## Broader Coverage
177
+
178
+ Use `regression` with five trials before a release:
179
+
180
+ ```bash
181
+ poetry run python -m slcli.skills.slcli.scripts.prepare_eval_workspace \
182
+ --suite regression \
183
+ --runs-per-config 5
184
+ ```
185
+
186
+ ## Trigger Evaluation
187
+
188
+ Trigger evaluation is separate from task execution because task prompts inject
189
+ the skill explicitly. When the Claude CLI is available, run the repository's
190
+ trigger evaluator with balanced thresholds:
191
+
192
+ ```bash
193
+ python .github/skills/skill-creator/scripts/run_eval.py \
194
+ --eval-set slcli/skills/slcli/evals/trigger_evals.json \
195
+ --skill-path slcli/skills/slcli \
196
+ --runs-per-query 5 \
197
+ --trigger-threshold 0.8 \
198
+ --negative-trigger-threshold 0.2
199
+ ```
200
+
201
+ This is a local or scheduled check until the production Copilot harness exposes
202
+ skill-selection events through a non-interactive executor. Do not infer routing
203
+ from final-answer text.
204
+
205
+ ## CI Coverage
206
+
207
+ The existing CI workflow runs the deterministic manifest, grader, snapshot,
208
+ and comparator unit tests on every pull request. Model trials remain an
209
+ explicit developer workflow because this repository does not yet have a
210
+ credentialed non-interactive Copilot executor. Attach `benchmark.json`,
211
+ `regression.json`, `review.html`, run records, transcripts, and outputs to a PR
212
+ when reviewing a skill change.
213
+
214
+ ## What To Commit
215
+
216
+ Commit the eval harness and definitions:
217
+
218
+ - `slcli/skills/slcli/SKILL.md`
219
+ - `slcli/skills/slcli/evals/evals.json`
220
+ - `slcli/skills/slcli/evals/files/`
221
+ - `slcli/skills/slcli/evals/README.md`
222
+ - `slcli/skills/slcli/evals/COPILOT_BATCH_RUN_PROMPT.md`
223
+ - `slcli/skills/slcli/scripts/`
224
+ - `slcli/skills/slcli/.github/prompts/` or repo-level prompt files that drive the workflow
225
+
226
+ Do not usually commit run artifacts:
227
+
228
+ - `slcli/skills/slcli-workspace/`
229
+ - per-run `outputs/response.txt`
230
+ - per-run `grading.json`
231
+ - generated `benchmark.json` and `benchmark.md`
232
+ - generated `review.html`
233
+
234
+ Treat the checked-in files as the reproducible test harness and the workspace
235
+ artifacts as local experiment output unless you intentionally want to preserve a
236
+ specific benchmark snapshot for review or release documentation.