aukeys-opscli 0.0.40__tar.gz → 0.0.41__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 (164) hide show
  1. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/PKG-INFO +1 -1
  2. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/PKG-INFO +1 -1
  3. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/manifest.json +5 -5
  4. aukeys_opscli-0.0.41/opscli/skills/templates/ops-feedback/SKILL.md +156 -0
  5. aukeys_opscli-0.0.41/opscli/skills/templates/ops-feedback/data/FEEDBACK_RULE.md +23 -0
  6. aukeys_opscli-0.0.41/opscli/skills/templates/ops-feedback/data/VERSION.json +5 -0
  7. aukeys_opscli-0.0.41/opscli/skills/templates/ops-feedback/references/cli.md +92 -0
  8. aukeys_opscli-0.0.41/opscli/skills/templates/ops-feedback/references/mcp.md +107 -0
  9. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/version.c +9 -9
  10. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/pyproject.toml +1 -1
  11. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/MANIFEST.in +0 -0
  12. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/README.md +0 -0
  13. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/SOURCES.txt +0 -0
  14. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/dependency_links.txt +0 -0
  15. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/entry_points.txt +0 -0
  16. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/requires.txt +0 -0
  17. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/aukeys_opscli.egg-info/top_level.txt +0 -0
  18. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/__init__.py +0 -0
  19. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/__init__.py +0 -0
  20. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/client.c +0 -0
  21. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/commands/__init__.py +0 -0
  22. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/domain/__init__.py +0 -0
  23. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/domain/exceptions.c +0 -0
  24. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/domain/models.c +0 -0
  25. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/exceptions.c +0 -0
  26. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/manager.c +0 -0
  27. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/models.c +0 -0
  28. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/parser.c +0 -0
  29. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/scraper.c +0 -0
  30. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/scraping/__init__.py +0 -0
  31. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/scraping/parser.c +0 -0
  32. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/scraping/scraper.c +0 -0
  33. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/services/__init__.py +0 -0
  34. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/services/manager.c +0 -0
  35. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/transport/__init__.py +0 -0
  36. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon/transport/client.c +0 -0
  37. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/__init__.py +0 -0
  38. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/commands/__init__.py +0 -0
  39. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/domain/__init__.py +0 -0
  40. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/domain/exceptions.c +0 -0
  41. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/domain/models.c +0 -0
  42. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/runtime/__init__.py +0 -0
  43. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/runtime/country_map.c +0 -0
  44. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/__init__.py +0 -0
  45. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/answer_report_formatter.c +0 -0
  46. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/browser.c +0 -0
  47. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/manager.c +0 -0
  48. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/parser.c +0 -0
  49. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/question_bank.c +0 -0
  50. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/services/replay.c +0 -0
  51. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/transport/__init__.py +0 -0
  52. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/amazon_rufus/transport/client.c +0 -0
  53. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/__init__.py +0 -0
  54. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/commands/__init__.py +0 -0
  55. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/config.c +0 -0
  56. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/core/__init__.py +0 -0
  57. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/core/device_flow.c +0 -0
  58. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/core/system_registry.c +0 -0
  59. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/core/token_manager.c +0 -0
  60. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/domain/__init__.py +0 -0
  61. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/domain/exceptions.c +0 -0
  62. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/exceptions.c +0 -0
  63. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/storage/__init__.py +0 -0
  64. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/storage/credential_store.c +0 -0
  65. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/auth/storage/crypto.c +0 -0
  66. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/config.c +0 -0
  67. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/__init__.py +0 -0
  68. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/client.c +0 -0
  69. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/commands/__init__.py +0 -0
  70. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/domain/__init__.py +0 -0
  71. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/domain/exceptions.c +0 -0
  72. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/domain/models.c +0 -0
  73. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/exceptions.c +0 -0
  74. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/manager.c +0 -0
  75. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/services/__init__.py +0 -0
  76. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/services/manager.c +0 -0
  77. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/transport/__init__.py +0 -0
  78. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/feedback/transport/client.c +0 -0
  79. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/__init__.py +0 -0
  80. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/auth_middleware.c +0 -0
  81. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/context.c +0 -0
  82. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/credential_cache.c +0 -0
  83. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/tools/__init__.py +0 -0
  84. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/mcp/user_store.c +0 -0
  85. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/__init__.py +0 -0
  86. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/client.c +0 -0
  87. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/commands/__init__.py +0 -0
  88. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/domain/__init__.py +0 -0
  89. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/domain/exceptions.c +0 -0
  90. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/domain/models.c +0 -0
  91. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/exceptions.c +0 -0
  92. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/manager.c +0 -0
  93. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/models.c +0 -0
  94. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/services/__init__.py +0 -0
  95. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/services/manager.c +0 -0
  96. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/transport/__init__.py +0 -0
  97. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/query/transport/client.c +0 -0
  98. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/__init__.py +0 -0
  99. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/commands/__init__.py +0 -0
  100. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/domain/__init__.py +0 -0
  101. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/domain/exceptions.c +0 -0
  102. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/domain/models.c +0 -0
  103. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/scraping/__init__.py +0 -0
  104. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/scraping/api_recorder.c +0 -0
  105. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/scraping/archiver.c +0 -0
  106. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/scraping/captcha.c +0 -0
  107. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/scraping/scraper.c +0 -0
  108. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/services/__init__.py +0 -0
  109. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/services/account_store.c +0 -0
  110. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/seller_sprite/services/manager.c +0 -0
  111. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/shared/__init__.py +0 -0
  112. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/shared/exceptions.c +0 -0
  113. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/shared/http.c +0 -0
  114. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/shared/logging.c +0 -0
  115. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/__init__.py +0 -0
  116. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/commands/__init__.py +0 -0
  117. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/detector.c +0 -0
  118. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/discovery/__init__.py +0 -0
  119. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/discovery/detector.c +0 -0
  120. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/domain/__init__.py +0 -0
  121. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/domain/exceptions.c +0 -0
  122. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/domain/models.c +0 -0
  123. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/exceptions.c +0 -0
  124. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/manager.c +0 -0
  125. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/models.c +0 -0
  126. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/packaging.c +0 -0
  127. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/services/__init__.py +0 -0
  128. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/services/manager.c +0 -0
  129. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/services/rule_injector.c +0 -0
  130. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/sync/__init__.py +0 -0
  131. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/sync/updater.c +0 -0
  132. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-auth/SKILL.md +0 -0
  133. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-auth/data/VERSION.json +0 -0
  134. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-auth/references/cli.md +0 -0
  135. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-auth/references/mcp.md +0 -0
  136. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/.gitignore +0 -0
  137. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/SKILL.md +0 -0
  138. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/data/VERSION.json +0 -0
  139. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/data/dataset_catalog.json +0 -0
  140. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/data/dataset_fields.csv +0 -0
  141. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/data/datasets.csv +0 -0
  142. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/data/query_metadata.json +0 -0
  143. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/references/cli.md +0 -0
  144. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/references/data-query-service-dev-guide.md +0 -0
  145. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/references/mcp.md +0 -0
  146. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/references/query-patterns.md +0 -0
  147. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/references/simple-query-guide.md +0 -0
  148. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/chart_analyze.py +0 -0
  149. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/chart_analyze_mcp.py +0 -0
  150. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/chart_map.py +0 -0
  151. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/chart_map_mcp.py +0 -0
  152. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/core.py +0 -0
  153. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/excel_export.py +0 -0
  154. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/excel_export_mcp.py +0 -0
  155. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/query.py +0 -0
  156. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/query_mcp.py +0 -0
  157. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/search.py +0 -0
  158. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/updater.py +0 -0
  159. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/templates/ops-dataset-query/scripts/updater_mcp.py +0 -0
  160. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/opscli/skills/updater.c +0 -0
  161. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/setup.cfg +0 -0
  162. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/setup.py +0 -0
  163. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/tests/test_session_sharing.py +0 -0
  164. {aukeys_opscli-0.0.40 → aukeys_opscli-0.0.41}/tests/test_version_consistency.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aukeys-opscli
3
- Version: 0.0.40
3
+ Version: 0.0.41
4
4
  Summary: Aukeys 运营 CLI 工具集
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aukeys-opscli
3
- Version: 0.0.40
3
+ Version: 0.0.41
4
4
  Summary: Aukeys 运营 CLI 工具集
5
5
  Requires-Python: >=3.10
6
6
  Description-Content-Type: text/markdown
@@ -56,12 +56,12 @@
56
56
  "reason": "现阶段保留的数据查询核心 Skill,直接发版和二进制发版均需要"
57
57
  },
58
58
  "ops-feedback": {
59
- "source": false,
60
- "wheel": false,
61
- "binary": false,
62
- "binary_full": false,
59
+ "source": true,
60
+ "wheel": true,
61
+ "binary": true,
62
+ "binary_full": true,
63
63
  "tier": "internal",
64
- "reason": "会注入工具侧规则,内部治理属性较强,暂不随公开产物发版"
64
+ "reason": "会注入工具侧规则,内部治理属性较强"
65
65
  },
66
66
  "ops-mcp": {
67
67
  "source": false,
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: ops-feedback
3
+ description: Use when submitting or querying Aukeys opscli feedback, or when an opscli CLI/MCP call fails unexpectedly and needs a structured execution summary.
4
+ ---
5
+
6
+ # ops-feedback
7
+
8
+ 用于保存用户反馈,特别是 Skill、CLI、MCP 工具调用失败后的结构化复盘。反馈会提交到 ops 后端,并保存到 `polaris_ops_metrics.dm_user_feedbacks`。
9
+
10
+ ---
11
+
12
+ ## 何时使用本 Skill
13
+
14
+ - 用户明确要求“提交反馈”“保存反馈”“记录问题”“反馈这次失败”
15
+ - Skill 执行后需要把本次过程沉淀为反馈
16
+ - 工具调用失败,需要记录具体调用参数、报错信息、原因和修复建议
17
+ - 需要按 `feedback_uuid` 查询已提交反馈
18
+
19
+ **特别注意**:当 AGENTS.md 【铁律】工具调用失败自动反馈 生效时,AI Agent 必须在工具调用失败后**立即自动调用**本 Skill,无需等待用户指示。
20
+
21
+ ---
22
+
23
+ ## 自动触发规则(Agent 工具调用失败后)
24
+
25
+ 当 AI Agent(Codex / Claude Code / OpenCode)调用 `opscli` CLI 命令或 `opscli` MCP Tool 失败时,**必须**按以下流程自动触发反馈提交:
26
+
27
+ ### 触发条件
28
+
29
+ 满足以下任一条件即触发:
30
+ - MCP Tool 返回 `{"success": false, ...}`
31
+ - MCP Tool 抛出未捕获异常
32
+ - CLI 命令返回非 0 退出码
33
+ - CLI 命令输出包含 `REMOTE_BUSINESS_ERROR`、`REMOTE_HTTP_ERROR`、`INVALID_PAYLOAD` 等错误码
34
+
35
+ ### 不触发的情况
36
+
37
+ - `auth_login_start`、`auth_login_poll` 等认证流程中的预期未授权状态
38
+ - `feedback_submit`、`feedback_detail`、`opscli feedback submit/detail` 自身失败,避免递归反馈
39
+ - 用户主动取消(`KeyboardInterrupt`)
40
+ - 同一失败在 5 分钟内已提交过反馈
41
+
42
+ ### 触发流程
43
+
44
+ 1. **检查错误响应中的 `feedback` 字段**:MCP `_err` 响应可能包含自动生成的 `feedback` 草案,优先以该草案为基底
45
+ 2. **计算本次失败指纹并去重**:使用 `{source}:{tool}:{error.code}:{error.message}:{关键参数JSON}` 作为同会话去重指纹;5 分钟内已提交过则复用上次 `feedback_uuid`,不重复提交
46
+ 3. **补充并校验必要字段**:
47
+ - `title`:简短描述失败,如 `"query_simple 字段不存在"`
48
+ - `content`:详细描述失败场景和现象
49
+ - `execution_summary.failed_calls[0].call_params`:实际传入的关键参数;没有参数也写 `{}`
50
+ - `execution_summary.failed_calls[0].reason`:基于上下文推断原因
51
+ - `execution_summary.failed_calls[0].fix_suggestion`:修复建议或下一步
52
+ 4. **调用反馈提交**:
53
+ - MCP 环境:`feedback_submit(feedback_type="bug", title="...", content="...", execution_summary={...})`
54
+ - CLI 环境:`opscli feedback submit --type bug --title "..." --content "..." --execution-summary-file summary.json`
55
+ 5. **返回 feedback_uuid 给用户**,并继续处理原任务
56
+
57
+ 如果反馈提交自身失败,只向用户说明反馈提交失败和原始错误,不要再次调用本 Skill 提交“反馈失败”的反馈。
58
+
59
+ ### 从错误响应构造 execution_summary
60
+
61
+ 如果错误响应中包含 `feedback` 草案,必须先补齐并校验其 `execution_summary` 后再提交。否则按以下模板构造:
62
+
63
+ ```json
64
+ {
65
+ "summary": "调用 {tool_name} 失败,自动提交反馈。",
66
+ "failed_calls": [
67
+ {
68
+ "tool": "MCP → {tool_name}({参数摘要})",
69
+ "call_params": {实际传入参数},
70
+ "error_message": "{error.code}: {error.message}",
71
+ "reason": "基于上下文推断的原因(不确定时标注'推测')",
72
+ "fix_suggestion": "已采用的修复方式或下一步建议"
73
+ }
74
+ ],
75
+ "successful_calls": [],
76
+ "final_resolution": "已提交反馈 {feedback_uuid},等待处理。"
77
+ }
78
+ ```
79
+
80
+ ---
81
+
82
+ ## 运行模式判断
83
+
84
+ 进入本 Skill 后,不要为模式判断额外运行检测脚本,直接按下面规则判断。
85
+
86
+ 优先级如下:
87
+
88
+ 1. 如果用户明确要求 CLI 或 MCP,直接遵循用户指定
89
+ 2. 原始失败来自 MCP Tool 时,优先使用 MCP,并读取 `references/mcp.md`
90
+ 3. 原始失败来自 CLI 命令时,优先使用 CLI,并读取 `references/cli.md`
91
+ 4. 本地终端可执行交付命令、当前就在 `opscli` 项目、需要验证 CLI 行为时,默认使用 CLI,并读取 `references/cli.md`
92
+ 5. 当前任务本身基于 MCP Tool 协作,或明显无法直接走本地 CLI 时,使用 MCP,并读取 `references/mcp.md`
93
+ 6. 首选通道提交失败时,只允许切换另一个通道重试一次;重试仍失败则停止,不再递归提交反馈
94
+ 7. CLI 与 MCP 都不可用时,提示用户先安装或配置 `aukeys-opscli`
95
+
96
+ ---
97
+
98
+ ## 提交前强制总结
99
+
100
+ 提交反馈前,必须整理 `execution_summary`。如果本次发生失败工具调用,`failed_calls` 必须逐条包含以下字段:
101
+
102
+ | 字段 | 要求 |
103
+ |------|------|
104
+ | `tool` | 具体工具或命令,例如 `Bash → opscli query simple --table-id 1 --json '...' --run --pretty` |
105
+ | `call_params` | 具体关键参数和值,不能只写“参数错误”;字段名、table_id、filters、metrics 等要展开 |
106
+ | `error_message` | 原始错误码和错误文本,例如 `REMOTE_BUSINESS_ERROR: 字段不存在: original_price` |
107
+ | `reason` | 基于 metadata、接口规则、上下文推断出的原因;不确定时必须标注“推测” |
108
+ | `fix_suggestion` | 已采用的修复方式,或下一步建议 |
109
+
110
+ 推荐结构:
111
+
112
+ ```json
113
+ {
114
+ "summary": "本次通过 ops-dataset-query 查询数据,simple 接口因字段识别失败,最终改用 build。",
115
+ "failed_calls": [
116
+ {
117
+ "tool": "Bash → opscli query simple --table-id 1 --json '...' --run --pretty",
118
+ "call_params": {
119
+ "table_id": 1,
120
+ "metrics": [
121
+ {
122
+ "field": "original_price",
123
+ "aggregation": "SUM",
124
+ "alias": "f_original_price"
125
+ }
126
+ ]
127
+ },
128
+ "error_message": "REMOTE_BUSINESS_ERROR: 字段不存在: original_price",
129
+ "reason": "简化接口的 field 参数传了 field_name,但服务端未能识别;metadata 中该字段完整 origin_name 是 ds_d35ac6f3910c.original_price。",
130
+ "fix_suggestion": "改用 opscli query build 的 --dimension/--metric 参数形式,由 CLI 自动完成字段映射。"
131
+ }
132
+ ],
133
+ "successful_calls": [],
134
+ "final_resolution": "已通过 build 查询完成任务。"
135
+ }
136
+ ```
137
+
138
+ 没有失败工具调用时,`failed_calls` 使用空数组,但仍要写 `summary` 和 `final_resolution`。
139
+
140
+ ---
141
+
142
+ ## 阅读入口
143
+
144
+ - CLI 模式:继续阅读 `references/cli.md`
145
+ - MCP 模式:继续阅读 `references/mcp.md`
146
+
147
+ ---
148
+
149
+ ## 使用原则
150
+
151
+ - 所有反馈提交必须走 `opscli feedback submit` 或 `feedback_submit`,禁止直接拼接后端 HTTP 请求
152
+ - 提交内容必须是结构化 JSON,不要只写一句自然语言描述
153
+ - 使用错误响应中的 `feedback` 草案时,必须删除 `_hint` 等非提交字段
154
+ - 失败复盘必须优先保留原始错误信息,再写分析和建议
155
+ - 不要在反馈中写入密码、Token、Cookie、私钥等敏感信息
156
+ - 附件只保存引用信息,不上传大文件
@@ -0,0 +1,23 @@
1
+ ## 【铁律】工具调用失败自动反馈
2
+
3
+ > 生效范围:所有在 opscli 项目中工作的 AI Agent 会话。
4
+
5
+ **规则**:任何 `opscli` CLI 命令或 MCP Tool 调用失败后,AI Agent **必须在同一会话中立即调用 `ops-feedback` Skill 提交结构化反馈**,不得跳过、不得等待用户明确指示、不得在回复中仅描述错误而不提交。
6
+
7
+ **执行顺序**:
8
+ 1. 工具调用返回 `success: false` 或抛出异常
9
+ 2. 立即读取并遵循 `ops-feedback` Skill
10
+ 3. 按 Skill 规范构造 `execution_summary`,重点提取:
11
+ - `tool`:具体工具或命令
12
+ - `call_params`:实际传入的关键参数
13
+ - `error_message`:原始错误码和错误文本
14
+ - `reason`:基于上下文推断的原因(不确定时标注"推测")
15
+ - `fix_suggestion`:已采用的修复方式或下一步建议
16
+ 4. 调用 `feedback_submit`(MCP 模式)或 `opscli feedback submit`(CLI 模式)
17
+ 5. 将 `feedback_uuid` 返回给用户,并继续处理原任务;若反馈提交自身失败,只报告该失败,不再递归提交反馈
18
+
19
+ **例外情况**(允许不提交反馈):
20
+ - 认证类错误(`auth_login_start`、`auth_login_poll` 等预期内的未授权状态)
21
+ - `feedback_submit`、`feedback_detail`、`opscli feedback submit/detail` 自身失败,避免递归反馈
22
+ - 用户主动取消的操作(`KeyboardInterrupt`)
23
+ - 同一失败在 5 分钟内已提交过反馈(按工具名、关键参数、错误码和错误信息去重)
@@ -0,0 +1,5 @@
1
+ {
2
+ "version": "v1.0.1",
3
+ "updated_at": "2026-05-08",
4
+ "notes": "优化 ops-feedback Skill:补充防递归反馈规则、草案字段校验、同会话去重说明,并移除注入规则中的本地配置链接。"
5
+ }
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: ops-feedback
3
+ cli-version: v1.0.0
4
+ description: 通过 opscli feedback 提交和查询结构化用户反馈
5
+ ---
6
+
7
+ # ops-feedback CLI
8
+
9
+ ## 提交反馈
10
+
11
+ 推荐使用文件方式,避免命令行 JSON 过长:
12
+
13
+ ```bash
14
+ opscli feedback submit --file feedback.json --pretty
15
+ ```
16
+
17
+ 完整 `feedback.json` 示例:
18
+
19
+ ```json
20
+ {
21
+ "source": "cli",
22
+ "feedback_type": "bug",
23
+ "severity": "medium",
24
+ "title": "ops-dataset-query simple 字段不存在",
25
+ "content": "使用 simple 查询时字段 original_price 无法识别,已改用 build 完成。",
26
+ "payload": {
27
+ "expected": "返回原价汇总",
28
+ "actual": "字段不存在"
29
+ },
30
+ "context": {
31
+ "skill_name": "ops-dataset-query",
32
+ "command_name": "opscli query simple",
33
+ "client_name": "opscli"
34
+ },
35
+ "execution_summary": {
36
+ "summary": "本次通过 ops-dataset-query 查询数据,simple 接口因字段识别失败,最终改用 build。",
37
+ "failed_calls": [
38
+ {
39
+ "tool": "Bash → opscli query simple --table-id 1 --json '...' --run --pretty",
40
+ "call_params": {
41
+ "table_id": 1,
42
+ "metrics": [
43
+ {
44
+ "field": "original_price",
45
+ "aggregation": "SUM",
46
+ "alias": "f_original_price"
47
+ }
48
+ ]
49
+ },
50
+ "error_message": "REMOTE_BUSINESS_ERROR: 字段不存在: original_price",
51
+ "reason": "简化接口的 field 参数传了 field_name,但服务端未能识别;metadata 中该字段完整 origin_name 是 ds_d35ac6f3910c.original_price。",
52
+ "fix_suggestion": "改用 opscli query build 的 --dimension/--metric 参数形式,由 CLI 自动完成字段映射。"
53
+ }
54
+ ],
55
+ "successful_calls": [],
56
+ "final_resolution": "已通过 build 查询完成任务。"
57
+ },
58
+ "attachments": []
59
+ }
60
+ ```
61
+
62
+ 也可以拆分提交:
63
+
64
+ ```bash
65
+ opscli feedback submit \
66
+ --type bug \
67
+ --severity medium \
68
+ --title "ops-dataset-query simple 字段不存在" \
69
+ --content "使用 simple 查询时字段 original_price 无法识别,已改用 build 完成。" \
70
+ --execution-summary-file summary.json \
71
+ --skill-name ops-dataset-query \
72
+ --command-name "opscli query simple" \
73
+ --pretty
74
+ ```
75
+
76
+ ## 查询反馈详情
77
+
78
+ ```bash
79
+ opscli feedback detail --uuid <feedback_uuid> --pretty
80
+ ```
81
+
82
+ ## 查看 Schema
83
+
84
+ ```bash
85
+ opscli feedback schema --pretty
86
+ ```
87
+
88
+ ## 注意事项
89
+
90
+ - 提交前先确认已经完成 `opscli auth login`
91
+ - `execution_summary.failed_calls[*].call_params` 必须保留具体字段和值
92
+ - 不要提交 Token、Cookie、密码等敏感信息
@@ -0,0 +1,107 @@
1
+ ---
2
+ name: ops-feedback
3
+ mcp-version: v1.0.0
4
+ description: 通过 MCP Tool 提交和查询结构化用户反馈
5
+ ---
6
+
7
+ # ops-feedback MCP
8
+
9
+ ## 自动触发(Agent 工具调用失败后)
10
+
11
+ 当 AI Agent 调用 MCP Tool 失败后,**必须**自动提交反馈。
12
+
13
+ ### 触发流程
14
+
15
+ 1. 检查错误响应中的 `feedback` 字段(由 `_err` 自动生成)
16
+ 2. 补充 `title`、`content`、`reason`、`fix_suggestion`,并确认 `call_params` 已保留
17
+ 3. 删除 `_hint` 等非提交字段
18
+ 4. 调用 `feedback_submit`
19
+ 5. 返回 `feedback_uuid` 并继续处理原任务
20
+
21
+ 不要对 `feedback_submit` / `feedback_detail` 自身失败继续自动提交反馈。
22
+
23
+ ### 示例:自动触发
24
+
25
+ ```python
26
+ # Tool 调用失败
27
+ result = query_simple(table_id=1, metrics=[...])
28
+ # result = {"success": false, "error": {...}, "feedback": {...}}
29
+
30
+ # 自动提取 feedback 草案并补充后提交
31
+ feedback = result["feedback"]
32
+ feedback.pop("_hint", None)
33
+ failed_call = feedback["execution_summary"]["failed_calls"][0]
34
+ failed_call["reason"] = "推测:字段名未匹配到服务端 metadata。"
35
+ failed_call["fix_suggestion"] = "改用 metadata 中的完整字段名,或先调用 query_metadata 校验字段。"
36
+ feedback_submit(
37
+ feedback_type=feedback["feedback_type"],
38
+ title="query_simple 字段不存在",
39
+ content="调用 query_simple 时服务端返回字段不存在错误",
40
+ execution_summary=feedback["execution_summary"],
41
+ )
42
+ ```
43
+
44
+ ---
45
+
46
+ ## 提交反馈
47
+
48
+ 使用 `feedback_submit`:
49
+
50
+ ```python
51
+ feedback_submit(
52
+ feedback_type="bug",
53
+ severity="medium",
54
+ title="ops-dataset-query simple 字段不存在",
55
+ content="使用 simple 查询时字段 original_price 无法识别,已改用 build 完成。",
56
+ source="mcp",
57
+ context={
58
+ "skill_name": "ops-dataset-query",
59
+ "mcp_tool_name": "query_simple",
60
+ "client_name": "opscli-mcp"
61
+ },
62
+ execution_summary={
63
+ "summary": "本次通过 ops-dataset-query 查询数据,simple 接口因字段识别失败,最终改用 build。",
64
+ "failed_calls": [
65
+ {
66
+ "tool": "MCP → query_simple(table_id=1, metrics=[...])",
67
+ "call_params": {
68
+ "table_id": 1,
69
+ "metrics": [
70
+ {
71
+ "field": "original_price",
72
+ "aggregation": "SUM",
73
+ "alias": "f_original_price"
74
+ }
75
+ ]
76
+ },
77
+ "error_message": "REMOTE_BUSINESS_ERROR: 字段不存在: original_price",
78
+ "reason": "简化接口的 field 参数传了 field_name,但服务端未能识别;metadata 中该字段完整 origin_name 是 ds_d35ac6f3910c.original_price。",
79
+ "fix_suggestion": "改用 opscli query build 的 --dimension/--metric 参数形式,由 CLI 自动完成字段映射。"
80
+ }
81
+ ],
82
+ "successful_calls": [],
83
+ "final_resolution": "已通过 build 查询完成任务。"
84
+ }
85
+ )
86
+ ```
87
+
88
+ ## 查询反馈详情
89
+
90
+ ```python
91
+ feedback_detail(feedback_uuid="<feedback_uuid>")
92
+ ```
93
+
94
+ ## 必填复盘字段
95
+
96
+ 失败调用必须保留:
97
+
98
+ - `tool`:具体工具或命令
99
+ - `call_params`:具体关键参数和值
100
+ - `error_message`:原始错误码和错误文本
101
+ - `reason`:原因;推测时明确标注
102
+ - `fix_suggestion`:修复建议或已采用方案
103
+
104
+ ## 注意事项
105
+
106
+ - 当前 MCP 工具会自动尝试读取本地 session,也支持显式传入 `session_id` 和 `jwt`
107
+ - 不要提交 Token、Cookie、密码等敏感信息
@@ -2282,7 +2282,7 @@ static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_stati
2282
2282
  #endif
2283
2283
  /* #### Code section: constant_name_defines ### */
2284
2284
  #define __pyx_kp_u_ __pyx_string_tab[0]
2285
- #define __pyx_kp_u_0_0_40_dev __pyx_string_tab[1]
2285
+ #define __pyx_kp_u_0_0_41_dev __pyx_string_tab[1]
2286
2286
  #define __pyx_kp_u__2 __pyx_string_tab[2]
2287
2287
  #define __pyx_kp_u_aukeys_opscli __pyx_string_tab[3]
2288
2288
  #define __pyx_kp_u_opscli_version_py __pyx_string_tab[4]
@@ -2939,7 +2939,7 @@ __Pyx_RefNannySetupContext("PyInit_version", 0);
2939
2939
  * from importlib.metadata import PackageNotFoundError, version
2940
2940
  *
2941
2941
  * PACKAGE_NAME = "aukeys-opscli" # <<<<<<<<<<<<<<
2942
- * FALLBACK_VERSION = "0.0.40-dev"
2942
+ * FALLBACK_VERSION = "0.0.41-dev"
2943
2943
  *
2944
2944
  */
2945
2945
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_PACKAGE_NAME, __pyx_mstate_global->__pyx_kp_u_aukeys_opscli) < (0)) __PYX_ERR(0, 10, __pyx_L1_error)
@@ -2947,11 +2947,11 @@ __Pyx_RefNannySetupContext("PyInit_version", 0);
2947
2947
  /* "opscli/version.py":11
2948
2948
  *
2949
2949
  * PACKAGE_NAME = "aukeys-opscli"
2950
- * FALLBACK_VERSION = "0.0.40-dev" # <<<<<<<<<<<<<<
2950
+ * FALLBACK_VERSION = "0.0.41-dev" # <<<<<<<<<<<<<<
2951
2951
  *
2952
2952
  *
2953
2953
  */
2954
- if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FALLBACK_VERSION, __pyx_mstate_global->__pyx_kp_u_0_0_40_dev) < (0)) __PYX_ERR(0, 11, __pyx_L1_error)
2954
+ if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FALLBACK_VERSION, __pyx_mstate_global->__pyx_kp_u_0_0_41_dev) < (0)) __PYX_ERR(0, 11, __pyx_L1_error)
2955
2955
 
2956
2956
  /* "opscli/version.py":14
2957
2957
  *
@@ -3043,16 +3043,16 @@ static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
3043
3043
  CYTHON_UNUSED_VAR(__pyx_mstate);
3044
3044
  {
3045
3045
  const struct { const unsigned int length: 5; } index[] = {{1},{10},{1},{13},{17},{16},{12},{20},{20},{18},{18},{8},{11},{18},{13},{5},{8},{10},{8},{14},{12},{6},{12},{10},{3},{8},{6},{7},{25}};
3046
- #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (311 bytes) */
3047
- const char* const cstring = "BZh91AY&SYI\001\220p\000\000\007\177\343FL\202\000\000\003\304\000\277\257\371\000\277\257\377\340\000@@\000@@@\0000\000\355Y\206\244\310\032A\264L\201\246\231\014\322\032\003M\030\323Pj\236\246\023jjbi\265=A\2404\000\000\003@jz\215S\323Q\243\324h\364\200\320\000\r\000\320\001\\\002\331Y\035t8\375\277\n,\347g\221\2462\\\2318\317M\023\005&\264\370f\346\373\324\016a5ls\235\363\240\374\270\371\"\230\317\254\201\036\310\232?\024gb\022[M\"\tB\320\2054\2547,\246z\365Nr]\273\351c\245\r\241\206\004\000ACm4\375\265_\204$sT\220\230\372\000)bC\307]\327Mr\002\026M\205zz\"<IT\006#\220W\0044\210\230i\025K\302\333\245Y\221ik\017A*\010\201P@(\256\034\202\267mHa\3017\346\322\232\002%bET\001\014\355\236`\2420\300\021\0318\352\264\365\005\020\214\345\021\255\026\327\312\026RX\344\224\204L\255\360\265\356]Q4c`\024\267\346\307\030\327\374]\311\024\341BA$\006A\300";
3048
- PyObject *data = __Pyx_DecompressString(cstring, 311, 2);
3046
+ #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (314 bytes) */
3047
+ const char* const cstring = "BZh91AY&SY3PY\360\000\000\007\177\343FL\202\000\000\003\344\000\277\257\371\000\277\257\377\340\000@@\000@@@\0000\000\355Y\206\250i\240A\264\324\311\240\320\304i\352\r\001\246\217F\232\203T\364\231\033SS\023M\251\352\r4\032\000\000\000\320\032\236\243T\364\322h\321\243\322\003@\000\032\001\240\002\251\013ml<\360t\326\3748\263\235\236D\202VR\211\267\321\306\251\302\221Z<6\227;\362\017\220OY\347<s\240\374\270\271\"\230\317\254y\036\310\232/\024fb\022[\n@\022\205\241\niXm\033\t\005\312\235\366\0237\326\244\250\316\031\226D@E\301\302\226\033Qu\347a\331u\234\217\346\001\246\2434\020\256\343\246\266\360\373\006\272\275F\210\221\211*\000\304r\n\300\206\221\003\r\"\251xZt\2532!,Y\347%=\010)\310\005\025\303\214V\335\211\0137\245\374\312\0238~E\244U8\010\231\223J\024F\026\003\361\023N\253NPQ\010\216A\024\017\333\203\212\027Ab\216B\020\256\267!\216l\024\306R\022\360\245\303\273\014$_\361w$S\205\t\0035\005\237\000";
3048
+ PyObject *data = __Pyx_DecompressString(cstring, 314, 2);
3049
3049
  if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
3050
3050
  const char* const bytes = __Pyx_PyBytes_AsString(data);
3051
3051
  #if !CYTHON_ASSUME_SAFE_MACROS
3052
3052
  if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
3053
3053
  #endif
3054
3054
  #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (253 bytes) */
3055
- const char* const cstring = "x\332=OMK\304@\014\365\240 (x\362g\354\330\203w\251\332\025q\255u\005\257!;\315.\303\316G;\223\251\333\177\340\261?\315\343\036\375)Ni1\220\344\361B\336KD&2q\233-j\352\3560\356\251\017\013\327\004\251\325To:\362A9+\232~\231\257V\367\371\303\013|\026\353\217\347\267\262J8\177*\240\314_\213\n\345\036wT:^\272h\353\302{\347\001\252\376\220\362QI\206\222\016\274\246-\206\336J\345\204t\336EV\226F\017K\240,\260GI\233\244\003\260\215V\002\354\210avW\246q\236\265\332\010C\21452\202\n\360/\242\230L\0000\230dR\030WGM#\262hR\237>\021\263\026@\033QO\023O\034}bB\262\232\230\204\352tf\324\0348}\300\024\030\240C\035)\314\373?'\327\303\373\357\351\331\361\374\352\373k\300\241=^\\\216\270\375\003M\341\200,";
3055
+ const char* const cstring = "x\332=OMK\303@\020\365\240 (x\362gt\255\340]\242\246\"\326\030[\360:L7\323\262t?\222\335\331\330\374\003\217\371i\036{\364\247\270!\301\201\231y\274a\336\233\021s1\027w\267\263\212\332{\214{\352\302\314\325Aj5\326\233\226|P\316\212\272[d\313\345C\366\370\n\237\371j\375\362^\224\tg\3179\024\331[^\242\334\343\216\n\307\013\027m\225{\357<@\331\035R>)\311P\320\201W\264\305\320Y\251\234\220\316\273\310\312\322\340a\t\224\005\366(i\223t\000\266\321J\200\0351L\356\312\324\316\263V\033a\210\261BFP\001\376E\024\223\t\000\006\223L\n\343\252\250i@\026M\352\343'b\322\002h\"\352q\342\211\243OLHV#\223P\225\316\214\232\003\247\017\230\002\003\264\250#\205i\377\347\344\272\377\370==;\236_}\177\365\3307\307\213\313\0017\177O%\200-";
3056
3056
  PyObject *data = __Pyx_DecompressString(cstring, 253, 1);
3057
3057
  if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
3058
3058
  const char* const bytes = __Pyx_PyBytes_AsString(data);
@@ -3060,7 +3060,7 @@ const char* const cstring = "x\332=OMK\304@\014\365\240 (x\362g\354\330\203w\251
3060
3060
  if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
3061
3061
  #endif
3062
3062
  #else /* compression: none (330 bytes) */
3063
- const char* const bytes = ".0.0.40-dev?aukeys-opscliopscli/version.pyFALLBACK_VERSIONPACKAGE_NAMEPackageNotFoundError__Pyx_PyDict_NextRefasyncio.coroutinescline_in_traceback__func__get_versionimportlib.metadata_is_coroutineitems__main____module____name__opscli.version__qualname__return__set_name__setdefaultstr__test__valuesversion\320\000\025\220Q\340\004\005\330\010\017\210w\220a\220q\330\013\014\330\010\017\210q";
3063
+ const char* const bytes = ".0.0.41-dev?aukeys-opscliopscli/version.pyFALLBACK_VERSIONPACKAGE_NAMEPackageNotFoundError__Pyx_PyDict_NextRefasyncio.coroutinescline_in_traceback__func__get_versionimportlib.metadata_is_coroutineitems__main____module____name__opscli.version__qualname__return__set_name__setdefaultstr__test__valuesversion\320\000\025\220Q\340\004\005\330\010\017\210w\220a\220q\330\013\014\330\010\017\210q";
3064
3064
  PyObject *data = NULL;
3065
3065
  CYTHON_UNUSED_VAR(__Pyx_DecompressString);
3066
3066
  #endif
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aukeys-opscli"
3
- version = "0.0.40"
3
+ version = "0.0.41"
4
4
  description = "Aukeys 运营 CLI 工具集"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
File without changes
File without changes
File without changes