solwyn-cli 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/PKG-INFO +25 -8
  2. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/README.md +24 -7
  3. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/caller-owned-spend.md +45 -2
  4. solwyn_cli-0.3.0/docs/commands/README.md +36 -0
  5. solwyn_cli-0.3.0/docs/commands/account.mdx +59 -0
  6. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/alerts.mdx +34 -1
  7. solwyn_cli-0.3.0/docs/commands/audit.mdx +45 -0
  8. solwyn_cli-0.3.0/docs/commands/budget.mdx +20 -0
  9. solwyn_cli-0.3.0/docs/commands/channels.mdx +177 -0
  10. solwyn_cli-0.3.0/docs/commands/config.mdx +89 -0
  11. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/costs.mdx +37 -7
  12. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/forecast.mdx +3 -3
  13. solwyn_cli-0.3.0/docs/commands/init.mdx +44 -0
  14. solwyn_cli-0.3.0/docs/commands/invite.mdx +58 -0
  15. solwyn_cli-0.3.0/docs/commands/keys.mdx +105 -0
  16. solwyn_cli-0.3.0/docs/commands/login.mdx +59 -0
  17. solwyn_cli-0.3.0/docs/commands/notifications.mdx +103 -0
  18. solwyn_cli-0.3.0/docs/commands/plan.mdx +110 -0
  19. solwyn_cli-0.3.0/docs/commands/projects.mdx +134 -0
  20. solwyn_cli-0.3.0/docs/commands/providers.mdx +76 -0
  21. solwyn_cli-0.3.0/docs/commands/runs.mdx +132 -0
  22. solwyn_cli-0.3.0/docs/commands/tags.mdx +112 -0
  23. solwyn_cli-0.3.0/docs/commands/team.mdx +59 -0
  24. solwyn_cli-0.3.0/docs/commands/webhooks.mdx +137 -0
  25. solwyn_cli-0.3.0/docs/commands/whoami.mdx +34 -0
  26. solwyn_cli-0.3.0/docs/core-followups.md +160 -0
  27. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/mcp-profiles.md +112 -7
  28. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/mcp-quickstart.md +38 -9
  29. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/mcp-release.md +14 -11
  30. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/registry/server.draft.json +2 -2
  31. solwyn_cli-0.3.0/docs/scripting.mdx +112 -0
  32. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/python/client.py +53 -11
  33. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/client.test.ts +51 -1
  34. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/client.ts +22 -1
  35. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/pyproject.toml +1 -1
  36. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/mcp_wheel_smoke.py +3 -1
  37. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/validate_mcp_registry.py +7 -2
  38. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_doctor_ipc.py +5 -2
  39. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_operation.py +1 -0
  40. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_vendor/wire.py +3 -0
  41. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/auth.py +17 -0
  42. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/client.py +157 -22
  43. solwyn_cli-0.3.0/src/solwyn_cli/commands/_account_reads.py +52 -0
  44. solwyn_cli-0.3.0/src/solwyn_cli/commands/_alert_models.py +60 -0
  45. solwyn_cli-0.3.0/src/solwyn_cli/commands/_alert_reads.py +215 -0
  46. solwyn_cli-0.3.0/src/solwyn_cli/commands/_billing.py +103 -0
  47. solwyn_cli-0.3.0/src/solwyn_cli/commands/_confirmation.py +65 -0
  48. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_cost_advice_models.py +2 -2
  49. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_cost_filters.py +8 -0
  50. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_cost_models.py +1 -1
  51. solwyn_cli-0.3.0/src/solwyn_cli/commands/_cost_reads.py +139 -0
  52. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_entitlement.py +60 -6
  53. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_notifications_common.py +1 -1
  54. solwyn_cli-0.3.0/src/solwyn_cli/commands/_pagination.py +44 -0
  55. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_record.py +28 -6
  56. solwyn_cli-0.3.0/src/solwyn_cli/commands/_team.py +365 -0
  57. solwyn_cli-0.3.0/src/solwyn_cli/commands/account.py +246 -0
  58. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/alerts.py +140 -65
  59. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/attest.py +2 -1
  60. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/audit.py +48 -28
  61. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/budget.py +73 -9
  62. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/budget_rules.py +70 -6
  63. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/channels.py +23 -4
  64. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/cost_analysis.py +15 -12
  65. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/cost_pricing.py +14 -23
  66. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/costs.py +50 -11
  67. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/doctor.py +1 -1
  68. solwyn_cli-0.3.0/src/solwyn_cli/commands/invite.py +365 -0
  69. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/keys.py +38 -3
  70. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/login.py +7 -1
  71. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/mcp.py +1 -1
  72. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/notifications.py +1 -1
  73. solwyn_cli-0.3.0/src/solwyn_cli/commands/plan.py +764 -0
  74. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/providers.py +1 -0
  75. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/record.py +20 -3
  76. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/runs.py +39 -11
  77. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/tags.py +38 -9
  78. solwyn_cli-0.3.0/src/solwyn_cli/commands/team.py +365 -0
  79. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/webhooks.py +29 -6
  80. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/whoami.py +38 -22
  81. solwyn_cli-0.3.0/src/solwyn_cli/errors.py +322 -0
  82. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/main.py +6 -2
  83. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/mcp/parameters.py +43 -2
  84. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/mcp/server.py +878 -30
  85. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/spec/openapi_snapshot.json +1160 -299
  86. solwyn_cli-0.3.0/tests/contract/alert_read_query_parameters.json +88 -0
  87. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/cli_contract.json +1523 -138
  88. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/fixtures/mcp_installed_legacy.py +47 -3
  89. solwyn_cli-0.3.0/tests/fixtures/team-prior-declarations.json +37 -0
  90. solwyn_cli-0.3.0/tests/golden/account-phone-json.json +1 -0
  91. solwyn_cli-0.3.0/tests/golden/account-recover.json +1 -0
  92. solwyn_cli-0.3.0/tests/golden/account-rename-table.txt +8 -0
  93. solwyn_cli-0.3.0/tests/golden/account-rename.json +1 -0
  94. solwyn_cli-0.3.0/tests/golden/alerts-activity-json.json +1 -0
  95. solwyn_cli-0.3.0/tests/golden/alerts-pending-json.json +1 -0
  96. solwyn_cli-0.3.0/tests/golden/budget-uncounted-json.json +1 -0
  97. solwyn_cli-0.3.0/tests/golden/costs-baseline-table.txt +2 -0
  98. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/doctor-jwt.json +1 -1
  99. solwyn_cli-0.3.0/tests/golden/doctor-mcp-key.json +1 -0
  100. solwyn_cli-0.3.0/tests/golden/invite-accept-table.txt +5 -0
  101. solwyn_cli-0.3.0/tests/golden/invite-accept.json +1 -0
  102. solwyn_cli-0.3.0/tests/golden/invite-show-table.txt +5 -0
  103. solwyn_cli-0.3.0/tests/golden/invite-show.json +1 -0
  104. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/mcp-tools.json +9406 -1151
  105. solwyn_cli-0.3.0/tests/golden/plan-cancel.json +1 -0
  106. solwyn_cli-0.3.0/tests/golden/plan-catalog-json.json +1 -0
  107. solwyn_cli-0.3.0/tests/golden/plan-discard.json +1 -0
  108. solwyn_cli-0.3.0/tests/golden/plan-free-table.txt +34 -0
  109. solwyn_cli-0.3.0/tests/golden/plan-pending-dismiss.json +1 -0
  110. solwyn_cli-0.3.0/tests/golden/plan-portal.json +1 -0
  111. solwyn_cli-0.3.0/tests/golden/plan-preview.json +1 -0
  112. solwyn_cli-0.3.0/tests/golden/plan-resume.json +1 -0
  113. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/plan-team-table.txt +5 -0
  114. solwyn_cli-0.3.0/tests/golden/plan-team.json +1 -0
  115. solwyn_cli-0.3.0/tests/golden/plan-upgrade.json +1 -0
  116. solwyn_cli-0.3.0/tests/golden/runs-stop-not-stoppable-json-stderr.txt +2 -0
  117. solwyn_cli-0.3.0/tests/golden/runs-stop-not-stoppable-table.txt +2 -0
  118. solwyn_cli-0.3.0/tests/golden/team-invite-resend-table.txt +7 -0
  119. solwyn_cli-0.3.0/tests/golden/team-invite-resend.json +1 -0
  120. solwyn_cli-0.3.0/tests/golden/team-invite-revoke-table.txt +6 -0
  121. solwyn_cli-0.3.0/tests/golden/team-invite-revoke.json +1 -0
  122. solwyn_cli-0.3.0/tests/golden/team-invite-send-table.txt +8 -0
  123. solwyn_cli-0.3.0/tests/golden/team-invite-send.json +1 -0
  124. solwyn_cli-0.3.0/tests/golden/team-invites-table.txt +3 -0
  125. solwyn_cli-0.3.0/tests/golden/team-invites.json +1 -0
  126. solwyn_cli-0.3.0/tests/golden/team-leave-table.txt +7 -0
  127. solwyn_cli-0.3.0/tests/golden/team-leave.json +1 -0
  128. solwyn_cli-0.3.0/tests/golden/team-members-table.txt +2 -0
  129. solwyn_cli-0.3.0/tests/golden/team-members.json +1 -0
  130. solwyn_cli-0.3.0/tests/golden/team-remove-table.txt +6 -0
  131. solwyn_cli-0.3.0/tests/golden/team-remove.json +1 -0
  132. solwyn_cli-0.3.0/tests/golden/team-role-table.txt +6 -0
  133. solwyn_cli-0.3.0/tests/golden/team-role.json +1 -0
  134. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/whoami-jwt-table.txt +1 -0
  135. solwyn_cli-0.3.0/tests/golden/whoami-jwt.json +1 -0
  136. solwyn_cli-0.3.0/tests/golden/whoami-production-json.json +1 -0
  137. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/whoami-production-table.txt +1 -0
  138. solwyn_cli-0.3.0/tests/help_options.py +21 -0
  139. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/mcp_legacy_probe.py +52 -3
  140. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_alert_query_contract.py +54 -0
  141. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_attest_contract.py +42 -0
  142. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_attribution_commands.py +8 -4
  143. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_audit_command.py +17 -2
  144. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_auth_commands.py +11 -0
  145. solwyn_cli-0.3.0/tests/test_billing_errors_preview.py +520 -0
  146. solwyn_cli-0.3.0/tests/test_billing_lifecycle.py +414 -0
  147. solwyn_cli-0.3.0/tests/test_billing_status_contract.py +75 -0
  148. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_batch.py +39 -4
  149. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_check_command.py +6 -0
  150. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_ci_packaging_smoke.py +1 -1
  151. solwyn_cli-0.3.0/tests/test_cli_all_pages.py +295 -0
  152. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_client.py +3 -3
  153. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_stream.py +33 -2
  154. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_costs_command.py +4 -0
  155. solwyn_cli-0.3.0/tests/test_destructive_confirmation.py +439 -0
  156. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_doctor_command.py +41 -0
  157. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_help_snapshots.py +209 -15
  158. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_keys_command.py +45 -27
  159. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_adoption.py +115 -0
  160. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_boundary.py +2 -2
  161. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_bounded_results.py +67 -7
  162. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_cancellation_stdio.py +1 -1
  163. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_catalog.py +104 -19
  164. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_conformance.py +106 -7
  165. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_diagnostics.py +1 -1
  166. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_doctor_process.py +1 -1
  167. solwyn_cli-0.3.0/tests/test_mcp_local_read_guidance.py +113 -0
  168. solwyn_cli-0.3.0/tests/test_mcp_read_gaps.py +858 -0
  169. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_registry.py +46 -1
  170. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_server.py +20 -0
  171. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_wheel_runner.py +8 -2
  172. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_notifications_commands.py +12 -5
  173. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_notifications_review_regressions.py +6 -6
  174. solwyn_cli-0.3.0/tests/test_plan_command.py +411 -0
  175. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_providers_command.py +2 -1
  176. solwyn_cli-0.3.0/tests/test_read_gaps.py +596 -0
  177. solwyn_cli-0.3.0/tests/test_reliability.py +693 -0
  178. solwyn_cli-0.3.0/tests/test_reliability_review.py +244 -0
  179. solwyn_cli-0.3.0/tests/test_reliability_round2.py +450 -0
  180. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_request_drift.py +74 -0
  181. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_response_subset.py +162 -5
  182. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_run_attribution_integration.py +18 -6
  183. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_runs_command.py +11 -3
  184. solwyn_cli-0.3.0/tests/test_simulation_rejections.py +178 -0
  185. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_smoke.py +1 -1
  186. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_tags_commands.py +4 -2
  187. solwyn_cli-0.3.0/tests/test_team_account.py +1302 -0
  188. solwyn_cli-0.3.0/tests/test_team_mcp.py +173 -0
  189. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_vendor_wire.py +20 -0
  190. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_webhooks_command.py +41 -24
  191. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/uv.lock +1 -1
  192. solwyn_cli-0.2.0/docs/core-followups.md +0 -120
  193. solwyn_cli-0.2.0/docs/scripting.mdx +0 -24
  194. solwyn_cli-0.2.0/src/solwyn_cli/commands/account.py +0 -55
  195. solwyn_cli-0.2.0/src/solwyn_cli/commands/plan.py +0 -162
  196. solwyn_cli-0.2.0/src/solwyn_cli/errors.py +0 -151
  197. solwyn_cli-0.2.0/tests/golden/costs-baseline-table.txt +0 -2
  198. solwyn_cli-0.2.0/tests/golden/doctor-mcp-key.json +0 -1
  199. solwyn_cli-0.2.0/tests/golden/plan-team.json +0 -1
  200. solwyn_cli-0.2.0/tests/golden/runs-stop-not-stoppable-table.txt +0 -1
  201. solwyn_cli-0.2.0/tests/golden/whoami-jwt.json +0 -1
  202. solwyn_cli-0.2.0/tests/golden/whoami-production-json.json +0 -1
  203. solwyn_cli-0.2.0/tests/test_plan_command.py +0 -192
  204. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  205. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  206. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/.github/workflows/ci.yml +0 -0
  207. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/.github/workflows/publish.yml +0 -0
  208. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/.gitignore +0 -0
  209. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/CONTRIBUTING.md +0 -0
  210. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/LICENSE +0 -0
  211. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/Makefile +0 -0
  212. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/SECURITY.md +0 -0
  213. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/attest.mdx +0 -0
  214. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/overview.mdx +0 -0
  215. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/commands/status.mdx +0 -0
  216. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/mcp-bounded-work.md +0 -0
  217. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/mcp-diagnostics.md +0 -0
  218. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/media-confirmation.md +0 -0
  219. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/registry/server.schema.2025-12-11.json +0 -0
  220. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/registry/server.schema.2025-12-11.sha256 +0 -0
  221. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/docs/staging-smoke.md +0 -0
  222. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/python/pyproject.toml +0 -0
  223. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/python/uv.lock +0 -0
  224. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/.gitignore +0 -0
  225. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/package-lock.json +0 -0
  226. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/package.json +0 -0
  227. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/examples/mcp/typescript/tsconfig.json +0 -0
  228. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/budget-plane-cli-smoke.py +0 -0
  229. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/budget-plane-mcp-smoke.py +0 -0
  230. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/budget_plane_smoke.py +0 -0
  231. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/generate_contract.py +0 -0
  232. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/inspect_wheel.py +0 -0
  233. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/locks/mcp-legacy.in +0 -0
  234. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/locks/mcp-legacy.txt +0 -0
  235. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/scripts/sync_spec.py +0 -0
  236. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/__init__.py +0 -0
  237. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_doctor_helper.py +0 -0
  238. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_doctor_pipe.py +0 -0
  239. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_doctor_process.py +0 -0
  240. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_mcp_launch.py +0 -0
  241. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_vendor/__init__.py +0 -0
  242. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_vendor/batch.py +0 -0
  243. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_vendor/notification_wire.py +0 -0
  244. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/_vendor/validation.py +0 -0
  245. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/artifacts/__init__.py +0 -0
  246. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/artifacts/_atomic.py +0 -0
  247. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/__init__.py +0 -0
  248. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_shared.py +0 -0
  249. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/_tags.py +0 -0
  250. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/agent_context.py +0 -0
  251. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/config.py +0 -0
  252. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/forecast.py +0 -0
  253. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/init.py +0 -0
  254. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/mcp_config.py +0 -0
  255. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/mcp_doctor.py +0 -0
  256. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/overview.py +0 -0
  257. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/projects.py +0 -0
  258. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/commands/status.py +0 -0
  259. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/config.py +0 -0
  260. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/exit_codes.py +0 -0
  261. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/help.py +0 -0
  262. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/mcp/__init__.py +0 -0
  263. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/mcp/declarations.py +0 -0
  264. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/output.py +0 -0
  265. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/runtime.py +0 -0
  266. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/src/solwyn_cli/spec/__init__.py +0 -0
  267. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/__init__.py +0 -0
  268. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/account_cost_query_parameters.json +0 -0
  269. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/alert_query_parameters.json +0 -0
  270. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/builder.py +0 -0
  271. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/contract/cost_query_parameters.json +0 -0
  272. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/fixtures/mcp_doctor_server.py +0 -0
  273. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/fixtures/mcp_doctor_telemetry.py +0 -0
  274. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/fixtures/mcp_doctor_wheel_smoke.py +0 -0
  275. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/__init__.py +0 -0
  276. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-clear-json.json +0 -0
  277. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-clear-table.txt +0 -0
  278. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-set-json.json +0 -0
  279. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-set-table.txt +0 -0
  280. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-show-json.json +0 -0
  281. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/account-alert-email-show-table.txt +0 -0
  282. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/agent-context.txt +0 -0
  283. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-delete-json.json +0 -0
  284. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-delete-table.txt +0 -0
  285. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-preview-json.json +0 -0
  286. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-preview-table.txt +0 -0
  287. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-set-json.json +0 -0
  288. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-set-table.txt +0 -0
  289. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-show-json.json +0 -0
  290. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-show-table.txt +0 -0
  291. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-snooze-json.json +0 -0
  292. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-snooze-table.txt +0 -0
  293. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-unsnooze-json.json +0 -0
  294. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-account-unsnooze-table.txt +0 -0
  295. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-list-json.json +0 -0
  296. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-list-table.txt +0 -0
  297. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-show-json.json +0 -0
  298. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/alerts-show-table.txt +0 -0
  299. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/attest-account-csv.txt +0 -0
  300. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/attest-project-json.json +0 -0
  301. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/audit-json.json +0 -0
  302. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/audit-table.txt +0 -0
  303. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-allow-json.json +0 -0
  304. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-allow-table.txt +0 -0
  305. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-allowed.json +0 -0
  306. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-allowed.table +0 -0
  307. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-denied.json +0 -0
  308. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-denied.table +0 -0
  309. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-mixed.json +0 -0
  310. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-mixed.table +0 -0
  311. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-partial.json +0 -0
  312. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-partial.table +0 -0
  313. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-stopped.json +0 -0
  314. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-stopped.table +0 -0
  315. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-unknown.json +0 -0
  316. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-batch-unknown.table +0 -0
  317. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-deny-json.json +0 -0
  318. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-deny-table.txt +0 -0
  319. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-fail-open-json.json +0 -0
  320. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-fail-open-table.txt +0 -0
  321. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-read-only-key-json.json +0 -0
  322. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-read-only-key-table.txt +0 -0
  323. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-run-stopped-json.json +0 -0
  324. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-run-stopped-table.txt +0 -0
  325. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-tag-deny-json.json +0 -0
  326. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-check-tag-deny-table.txt +0 -0
  327. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-expired-json.json +0 -0
  328. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-expired-table.txt +0 -0
  329. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-missing-reservation-json.json +0 -0
  330. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-missing-reservation-table.txt +0 -0
  331. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-success-json.json +0 -0
  332. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-confirm-success-table.txt +0 -0
  333. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-restore-defaults-json.json +0 -0
  334. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-restore-defaults-table.txt +0 -0
  335. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-budget_threshold-json.json +0 -0
  336. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-budget_threshold-table.txt +0 -0
  337. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-daily_anomaly-json.json +0 -0
  338. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-daily_anomaly-table.txt +0 -0
  339. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-forecast_overrun-json.json +0 -0
  340. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-forecast_overrun-table.txt +0 -0
  341. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-runaway_run-json.json +0 -0
  342. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-runaway_run-table.txt +0 -0
  343. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-scoped_budget-json.json +0 -0
  344. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-scoped_budget-table.txt +0 -0
  345. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-unit_cost_anomaly-json.json +0 -0
  346. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-add-unit_cost_anomaly-table.txt +0 -0
  347. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-pause-json.json +0 -0
  348. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-pause-table.txt +0 -0
  349. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-preview-json.json +0 -0
  350. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-preview-table.txt +0 -0
  351. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-remove-json.json +0 -0
  352. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-remove-table.txt +0 -0
  353. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-resume-json.json +0 -0
  354. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-resume-table.txt +0 -0
  355. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-snooze-json.json +0 -0
  356. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-snooze-table.txt +0 -0
  357. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-unsnooze-json.json +0 -0
  358. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rule-unsnooze-table.txt +0 -0
  359. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rules-list-json.json +0 -0
  360. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-rules-list-table.txt +0 -0
  361. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-set-json.json +0 -0
  362. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-set-table.txt +0 -0
  363. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-status-json.json +0 -0
  364. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-status-rules-json.json +0 -0
  365. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-status-rules-table.txt +0 -0
  366. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-status-table.txt +0 -0
  367. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-threshold-snooze-json.json +0 -0
  368. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-threshold-snooze-table.txt +0 -0
  369. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-threshold-unsnooze-json.json +0 -0
  370. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/budget-threshold-unsnooze-table.txt +0 -0
  371. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-create-json.json +0 -0
  372. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-create-table.txt +0 -0
  373. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-delete-json.json +0 -0
  374. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-delete-table.txt +0 -0
  375. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-list-json.json +0 -0
  376. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-list-table.txt +0 -0
  377. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-show-json.json +0 -0
  378. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-show-table.txt +0 -0
  379. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-test-json.json +0 -0
  380. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-test-table.txt +0 -0
  381. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-update-json.json +0 -0
  382. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/channels-update-table.txt +0 -0
  383. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-account-json.json +0 -0
  384. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-account-table.txt +0 -0
  385. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-account-withheld-json.json +0 -0
  386. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-account-withheld-table.txt +0 -0
  387. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-agent_run-json.json +0 -0
  388. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-agent_run-table.txt +0 -0
  389. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-baseline-json.json +0 -0
  390. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-day-json.json +0 -0
  391. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-day-table.txt +0 -0
  392. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-drift-json.json +0 -0
  393. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-drift-table.txt +0 -0
  394. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-events-continuation-stderr.txt +0 -0
  395. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-events-json.json +0 -0
  396. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-events-table.txt +0 -0
  397. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-failover_reason-json.json +0 -0
  398. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-failover_reason-table.txt +0 -0
  399. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-model-json.json +0 -0
  400. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-model-table.txt +0 -0
  401. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-priced-models-json.json +0 -0
  402. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-priced-models-table.txt +0 -0
  403. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-provider-json.json +0 -0
  404. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-provider-table.txt +0 -0
  405. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-provider_region-json.json +0 -0
  406. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-provider_region-table.txt +0 -0
  407. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-service_tier-json.json +0 -0
  408. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-service_tier-table.txt +0 -0
  409. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-simulation-json.json +0 -0
  410. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-simulation-table.txt +0 -0
  411. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-status-json.json +0 -0
  412. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-status-table.txt +0 -0
  413. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-tag-customer-json.json +0 -0
  414. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-tag-customer-table.txt +0 -0
  415. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-total-json.json +0 -0
  416. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-total-table.txt +0 -0
  417. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-truncated-json.json +0 -0
  418. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-truncated-table.txt +0 -0
  419. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-unit-economics-json.json +0 -0
  420. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/costs-unit-economics-table.txt +0 -0
  421. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/doctor-degraded-table.txt +0 -0
  422. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/email-not-verified.json +0 -0
  423. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/error.json +0 -0
  424. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/forecast-table.txt +0 -0
  425. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/forecast.json +0 -0
  426. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/harness.py +0 -0
  427. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/human-error.txt +0 -0
  428. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/init-json.json +0 -0
  429. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/init-table.txt +0 -0
  430. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-environment-key-refusal-json.json +0 -0
  431. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-environment-key-refusal-table.txt +0 -0
  432. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-keyring-key-refusal-json.json +0 -0
  433. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-keyring-key-refusal-table.txt +0 -0
  434. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-not-found-json.json +0 -0
  435. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-not-found-table.txt +0 -0
  436. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-revoke-json.json +0 -0
  437. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-revoke-table.txt +0 -0
  438. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-rotate-json.json +0 -0
  439. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-rotate-table.txt +0 -0
  440. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-show-json.json +0 -0
  441. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/keys-show-table.txt +0 -0
  442. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/login-jwt-table.txt +0 -0
  443. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/login-jwt.json +0 -0
  444. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/login-key-table.txt +0 -0
  445. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/login-key.json +0 -0
  446. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/logout-table.txt +0 -0
  447. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/logout.json +0 -0
  448. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/mcp-config.json +0 -0
  449. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-set-json.json +0 -0
  450. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-set-table.txt +0 -0
  451. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-show-json.json +0 -0
  452. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-show-table.txt +0 -0
  453. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-test-json.json +0 -0
  454. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/notifications-test-table.txt +0 -0
  455. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/overview-json.json +0 -0
  456. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/overview-paid-json.json +0 -0
  457. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/overview-table.txt +0 -0
  458. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-create-display-json.json +0 -0
  459. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-create-display-table.txt +0 -0
  460. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-create-stored-json.json +0 -0
  461. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-create-stored-table.txt +0 -0
  462. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-delete-json.json +0 -0
  463. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-delete-table.txt +0 -0
  464. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-environment-key-refusal-json.json +0 -0
  465. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-environment-key-refusal-table.txt +0 -0
  466. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-jwt-json.json +0 -0
  467. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-jwt-table.txt +0 -0
  468. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-keyring-key-refusal-json.json +0 -0
  469. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-list-keyring-key-refusal-table.txt +0 -0
  470. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-rename-json.json +0 -0
  471. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-rename-table.txt +0 -0
  472. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-show-jwt-json.json +0 -0
  473. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-show-jwt-table.txt +0 -0
  474. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-show-key-json.json +0 -0
  475. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/projects-show-key-table.txt +0 -0
  476. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/providers-failovers-table.txt +0 -0
  477. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/providers-failovers.json +0 -0
  478. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/providers-untracked-table.txt +0 -0
  479. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/providers-untracked.json +0 -0
  480. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-batch-json.json +0 -0
  481. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-batch-table.txt +0 -0
  482. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-dedup-json.json +0 -0
  483. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-dedup-table.txt +0 -0
  484. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-legacy-json.json +0 -0
  485. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-legacy-table.txt +0 -0
  486. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-rejection-json.json +0 -0
  487. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-rejection-table.txt +0 -0
  488. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-single-json.json +0 -0
  489. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/record-single-table.txt +0 -0
  490. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-list-jwt-json.json +0 -0
  491. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-list-key-table.txt +0 -0
  492. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-show-json.json +0 -0
  493. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-show-table.txt +0 -0
  494. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-stop-json.json +0 -0
  495. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-stop-key-refusal-json.json +0 -0
  496. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-stop-key-refusal-table.txt +0 -0
  497. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-stop-not-stoppable-json.json +0 -0
  498. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/runs-stop-table.txt +0 -0
  499. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status-flags-table.txt +0 -0
  500. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status-flags.json +0 -0
  501. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status-jwt-savings-json.json +0 -0
  502. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status-jwt-savings-table.txt +0 -0
  503. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status-table.txt +0 -0
  504. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/status.json +0 -0
  505. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/success.json +0 -0
  506. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/table-no-color.txt +0 -0
  507. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/table-non-tty.txt +0 -0
  508. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/table-tty.txt +0 -0
  509. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-list-json.json +0 -0
  510. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-list-table.txt +0 -0
  511. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-retire-json.json +0 -0
  512. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-retire-table.txt +0 -0
  513. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-values-json.json +0 -0
  514. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/tags-values-table.txt +0 -0
  515. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-create-json.json +0 -0
  516. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-create-table.txt +0 -0
  517. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-delete-json.json +0 -0
  518. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-delete-table.txt +0 -0
  519. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-list-json.json +0 -0
  520. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-list-table.txt +0 -0
  521. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-rotate-json.json +0 -0
  522. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/webhooks-rotate-table.txt +0 -0
  523. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/whoami-key-table.txt +0 -0
  524. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/golden/whoami-key.json +0 -0
  525. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/mcp_batch_fixtures.py +0 -0
  526. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_agent_artifacts.py +0 -0
  527. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_alerts_command.py +0 -0
  528. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_atomic_rename.py +0 -0
  529. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_attest_command.py +0 -0
  530. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_attest_models.py +0 -0
  531. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_auth.py +0 -0
  532. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_batch_journal_contract.py +0 -0
  533. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_cli_smoke.py +0 -0
  534. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_command.py +0 -0
  535. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_confirm_command.py +0 -0
  536. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_mcp_smoke.py +0 -0
  537. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_rules_command.py +0 -0
  538. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_budget_set_command.py +0 -0
  539. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_config.py +0 -0
  540. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_config_command.py +0 -0
  541. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_contract_snapshot.py +0 -0
  542. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_advice_command.py +0 -0
  543. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_advice_contract.py +0 -0
  544. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_advice_registration.py +0 -0
  545. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_filters.py +0 -0
  546. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_cost_query_contract.py +0 -0
  547. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_entitlement.py +0 -0
  548. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_errors.py +0 -0
  549. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_exit_codes.py +0 -0
  550. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_forecast_command.py +0 -0
  551. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_foundation.py +0 -0
  552. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_init_command.py +0 -0
  553. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_batch_recovery.py +0 -0
  554. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_doctor_pipe.py +0 -0
  555. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_operation.py +0 -0
  556. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_pagination.py +0 -0
  557. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_protocol_privacy.py +0 -0
  558. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_sdk_migration.py +0 -0
  559. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_mcp_transport_lifecycle.py +0 -0
  560. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_media_confirmation.py +0 -0
  561. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_output.py +0 -0
  562. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_output_discipline.py +0 -0
  563. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_overview_command.py +0 -0
  564. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_projects_command.py +0 -0
  565. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_record_helpers.py +0 -0
  566. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_runtime.py +0 -0
  567. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_shared_command_auth.py +0 -0
  568. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_snapshot_age.py +0 -0
  569. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_status_command.py +0 -0
  570. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_vendor_sync.py +0 -0
  571. {solwyn_cli-0.2.0 → solwyn_cli-0.3.0}/tests/test_vendor_validation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: solwyn-cli
3
- Version: 0.2.0
3
+ Version: 0.3.0
4
4
  Summary: Command-line client for Solwyn
5
5
  Author-email: Solwyn <hello@solwyn.ai>
6
6
  License-Expression: Apache-2.0
@@ -21,17 +21,22 @@ Description-Content-Type: text/markdown
21
21
 
22
22
  Work with Solwyn from the command line: enforce and attribute LLM spend for calls the Solwyn SDK does not instrument, inspect budgets, costs, and provider health, and recover from leaked or expired project keys — from your terminal, your scripts, or your coding agent.
23
23
 
24
- > **Status:** pre-release. This repository is private while the first release is prepared, and the package is not yet published to PyPI.
24
+ This README describes solwyn-cli 0.3.0. The package is distributed on PyPI as `solwyn-cli`;
25
+ run `solwyn --version` to see which version you have installed, and use `solwyn --help`
26
+ and MCP discovery to inspect its exact surface.
25
27
 
26
28
  ## Installation
27
29
 
28
- Until the first release, install from a local checkout:
30
+ Install the published package with uv:
29
31
 
30
32
  ```console
31
- uv tool install .
33
+ uv tool install solwyn-cli
32
34
  solwyn --version
33
35
  ```
34
36
 
37
+ Or use `pipx install solwyn-cli`. For development or unreleased commands, install
38
+ from an authorized checkout with `uv tool install .`.
39
+
35
40
  Requires Python 3.11 or newer. The package installs two identical executables: `solwyn` and `solwyn-cli` (an alias matching the package name).
36
41
 
37
42
  ## Getting started
@@ -53,11 +58,19 @@ Calls made through the Solwyn Python SDK are enforced and attributed automatical
53
58
  `solwyn mcp` serves read, guardrail, and attribution tools to any MCP client over local stdio, resolving configuration and credentials fresh on every call. Standard MCP capability and schema discovery exposes the exact tools and input/output shapes in the running version. `solwyn agent-context` prints a compact SDK 0.6 capability contract suitable for pasting into an agent's context, and `solwyn init --agents` writes the equivalent guidance into the repository.
54
59
 
55
60
  ```console
56
- solwyn --project proj_0123456789abcdef01234567 mcp --profile read # 13 read tools
57
- solwyn --project proj_0123456789abcdef01234567 mcp # default guardrails profile, all 17 tools
61
+ solwyn --project proj_0123456789abcdef01234567 mcp --profile read # 33 read tools
62
+ solwyn --project proj_0123456789abcdef01234567 mcp # default guardrails profile, all 37 tools
58
63
  solwyn doctor --mcp # verify the wiring
59
64
  ```
60
65
 
66
+ Customer reads include account-wide alert activity and open deliveries, last firing,
67
+ advisory unpriced outage traffic, plan catalog/status/change preview, identity/email verification,
68
+ phone/SMS prerequisites, team roster/invitations, cost analysis/simulation, provider visibility and audit.
69
+ The 33 reads appear in both profiles; billing/team/member writes remain CLI-only.
70
+ See [alerts](docs/commands/alerts.mdx), [budget](docs/commands/budget.mdx),
71
+ [plan](docs/commands/plan.mdx), [account](docs/commands/account.mdx),
72
+ [team](docs/commands/team.mdx) and [invitation acceptance](docs/commands/invite.mdx).
73
+
61
74
  Start with the [MCP quickstart](docs/mcp-quickstart.md). Profiles are fixed at launch and never grant permissions; see [MCP profiles and tool contracts](docs/mcp-profiles.md) and the [agent integration guide](https://docs.solwyn.ai/docs/cli/agents).
62
75
 
63
76
  ### Gate CI on budget
@@ -100,11 +113,15 @@ Every command's `--help` states its exit codes, authentication requirements, and
100
113
  | Agents | `mcp`, `mcp-config`, `agent-context` |
101
114
  | Administration | `budget rules` / `rule` / `threshold`, `alerts`, `channels`, `notifications`, `webhooks`, `keys`, `projects`, `account`, `tags`, `audit`, `attest`, `plan`, `config` |
102
115
 
103
- The administration group is for operators and is needed rarely. The full reference for every command lives in the [CLI docs](https://docs.solwyn.ai/docs/cli).
116
+ Account management includes subscription preview, change, cancellation/resume,
117
+ scheduled-change discard, hosted checkout/portal links and pending-intent dismissal.
118
+ Billing writes require owner JWT and confirmation or `--yes`; preview is a JWT
119
+ read at any role. See the [plan reference](docs/commands/plan.mdx). The [in-repo command reference](docs/commands/README.md) describes this checkout.
120
+ The published guide lives in the [CLI docs](https://docs.solwyn.ai/docs/cli).
104
121
 
105
122
  ## Scripting
106
123
 
107
- All commands support `--json` for schema-bearing JSON output (each payload names its schema, e.g. `solwyn.costs.v1`), and exit codes are stable and documented per command: `0` success, `2` usage, with distinct codes for API, auth, budget-denial, and not-found failures. Global flags select the project (`--project`), API base URL (`--api-url`), and output format, and go before the subcommand.
124
+ API and setup commands support global `--json` for schema-bearing JSON output (each payload names its schema, e.g. `solwyn.costs.v1`), and exit codes are stable and documented per command: `0` success, `2` usage, with distinct codes for API, auth, budget-denial, and not-found failures. The local `config` commands emit plain text. Global flags select the project (`--project`), API base URL (`--api-url`), and output format, and go before the subcommand.
108
125
 
109
126
  ## Trust posture
110
127
 
@@ -2,17 +2,22 @@
2
2
 
3
3
  Work with Solwyn from the command line: enforce and attribute LLM spend for calls the Solwyn SDK does not instrument, inspect budgets, costs, and provider health, and recover from leaked or expired project keys — from your terminal, your scripts, or your coding agent.
4
4
 
5
- > **Status:** pre-release. This repository is private while the first release is prepared, and the package is not yet published to PyPI.
5
+ This README describes solwyn-cli 0.3.0. The package is distributed on PyPI as `solwyn-cli`;
6
+ run `solwyn --version` to see which version you have installed, and use `solwyn --help`
7
+ and MCP discovery to inspect its exact surface.
6
8
 
7
9
  ## Installation
8
10
 
9
- Until the first release, install from a local checkout:
11
+ Install the published package with uv:
10
12
 
11
13
  ```console
12
- uv tool install .
14
+ uv tool install solwyn-cli
13
15
  solwyn --version
14
16
  ```
15
17
 
18
+ Or use `pipx install solwyn-cli`. For development or unreleased commands, install
19
+ from an authorized checkout with `uv tool install .`.
20
+
16
21
  Requires Python 3.11 or newer. The package installs two identical executables: `solwyn` and `solwyn-cli` (an alias matching the package name).
17
22
 
18
23
  ## Getting started
@@ -34,11 +39,19 @@ Calls made through the Solwyn Python SDK are enforced and attributed automatical
34
39
  `solwyn mcp` serves read, guardrail, and attribution tools to any MCP client over local stdio, resolving configuration and credentials fresh on every call. Standard MCP capability and schema discovery exposes the exact tools and input/output shapes in the running version. `solwyn agent-context` prints a compact SDK 0.6 capability contract suitable for pasting into an agent's context, and `solwyn init --agents` writes the equivalent guidance into the repository.
35
40
 
36
41
  ```console
37
- solwyn --project proj_0123456789abcdef01234567 mcp --profile read # 13 read tools
38
- solwyn --project proj_0123456789abcdef01234567 mcp # default guardrails profile, all 17 tools
42
+ solwyn --project proj_0123456789abcdef01234567 mcp --profile read # 33 read tools
43
+ solwyn --project proj_0123456789abcdef01234567 mcp # default guardrails profile, all 37 tools
39
44
  solwyn doctor --mcp # verify the wiring
40
45
  ```
41
46
 
47
+ Customer reads include account-wide alert activity and open deliveries, last firing,
48
+ advisory unpriced outage traffic, plan catalog/status/change preview, identity/email verification,
49
+ phone/SMS prerequisites, team roster/invitations, cost analysis/simulation, provider visibility and audit.
50
+ The 33 reads appear in both profiles; billing/team/member writes remain CLI-only.
51
+ See [alerts](docs/commands/alerts.mdx), [budget](docs/commands/budget.mdx),
52
+ [plan](docs/commands/plan.mdx), [account](docs/commands/account.mdx),
53
+ [team](docs/commands/team.mdx) and [invitation acceptance](docs/commands/invite.mdx).
54
+
42
55
  Start with the [MCP quickstart](docs/mcp-quickstart.md). Profiles are fixed at launch and never grant permissions; see [MCP profiles and tool contracts](docs/mcp-profiles.md) and the [agent integration guide](https://docs.solwyn.ai/docs/cli/agents).
43
56
 
44
57
  ### Gate CI on budget
@@ -81,11 +94,15 @@ Every command's `--help` states its exit codes, authentication requirements, and
81
94
  | Agents | `mcp`, `mcp-config`, `agent-context` |
82
95
  | Administration | `budget rules` / `rule` / `threshold`, `alerts`, `channels`, `notifications`, `webhooks`, `keys`, `projects`, `account`, `tags`, `audit`, `attest`, `plan`, `config` |
83
96
 
84
- The administration group is for operators and is needed rarely. The full reference for every command lives in the [CLI docs](https://docs.solwyn.ai/docs/cli).
97
+ Account management includes subscription preview, change, cancellation/resume,
98
+ scheduled-change discard, hosted checkout/portal links and pending-intent dismissal.
99
+ Billing writes require owner JWT and confirmation or `--yes`; preview is a JWT
100
+ read at any role. See the [plan reference](docs/commands/plan.mdx). The [in-repo command reference](docs/commands/README.md) describes this checkout.
101
+ The published guide lives in the [CLI docs](https://docs.solwyn.ai/docs/cli).
85
102
 
86
103
  ## Scripting
87
104
 
88
- All commands support `--json` for schema-bearing JSON output (each payload names its schema, e.g. `solwyn.costs.v1`), and exit codes are stable and documented per command: `0` success, `2` usage, with distinct codes for API, auth, budget-denial, and not-found failures. Global flags select the project (`--project`), API base URL (`--api-url`), and output format, and go before the subcommand.
105
+ API and setup commands support global `--json` for schema-bearing JSON output (each payload names its schema, e.g. `solwyn.costs.v1`), and exit codes are stable and documented per command: `0` success, `2` usage, with distinct codes for API, auth, budget-denial, and not-found failures. The local `config` commands emit plain text. Global flags select the project (`--project`), API base URL (`--api-url`), and output format, and go before the subcommand.
89
106
 
90
107
  ## Trust posture
91
108
 
@@ -27,6 +27,36 @@ replays succeed, while rejections and legacy timestamp collisions exit 1. On an
27
27
  or partial write, retain the returned `call_ids` in input order before retrying; the
28
28
  result has `status=failed` and preserves the dispositions already received.
29
29
 
30
+ Core's explicitly unaccepted ingest capacity responses use one of three fixed
31
+ `detail` strings with `Retry-After: 1`: `Budget admission is busy; retry shortly`,
32
+ `Account tag registry is busy; retry the batch.`, or
33
+ `Accounting maintenance is in progress; retry the batch.` These prove that
34
+ individual attempt recorded nothing. The client retries ingest once when any
35
+ `Retry-After` is present, sharing the existing 429 retry budget and 10-second
36
+ wait cap; this replay policy does not itself prove absence.
37
+ If a recognized rejection remains, `record` exits 1 with a retry hint and
38
+ `status=not_recorded` only when no earlier chunk completed and every attempt
39
+ for the failed chunk is provably nonaccepting. Recognized rejections and Core's
40
+ pre-ingest 429/401 responses meet that boundary. An earlier potentially accepted
41
+ attempt stays uncertain even if the final retry is a recognized rejection;
42
+ JWT refresh cannot erase that uncertainty or replenish the shared retry allowance.
43
+ A valid 202 with complete canonical dispositions resolves the call normally.
44
+ A partial multi-chunk invocation retains `status=failed` and all known
45
+ dispositions; the recognized
46
+ rejection proves only the failed chunk was unaccepted if its earlier attempts
47
+ also meet that boundary. A generic/proxy 503, a missing or different header,
48
+ or a transport failure remains uncertain:
49
+ CLI retains `status=failed` and MCP reports `recording=unknown`. Always retry
50
+ attribution with the original `call_ids` and attempt indices.
51
+
52
+ Budget and quota periods use Core's server receive time (`received_at`), while
53
+ cost analytics use the stored event `timestamp`. A backdated `record --batch`
54
+ event counts against the budget and quota period in which Core receives it,
55
+ but appears on its original day in `costs` if that timestamp is within Core's
56
+ accepted clock bounds. Core clamps excessive future skew and, when a past
57
+ horizon is configured, older timestamps; retention can also hide old analytics.
58
+ Backdating records does not move spend out of the current budget period.
59
+
30
60
  Repeat `--tag key=value` to override environment tags. Keys and values preserve
31
61
  whitespace and case; empty values and equals signs in values are legal, commas in
32
62
  flag values are not. Tags allow at most 10 keys, keys of 1–64 characters, and values
@@ -63,8 +93,21 @@ either a nullable `result`, or `error_code` and `error_message`. Unknown models
63
93
  per-item errors. All allowed exits 0, any denial exits 4, and errors without a denial
64
94
  exit 1. A request-level 404 or 503 fails the chunk. If an earlier chunk completed,
65
95
  its results and reservation IDs remain in output, alongside `failed_chunk_start`
66
- and `total_checks`; later chunks were not submitted. Reservation state inside a
67
- 503-failed chunk is unknown. Do not replay completed checks or assume rollback.
96
+ and `total_checks`; later chunks were not submitted. Every legacy batch 503
97
+ leaves reservation state within the failed chunk unknown, including
98
+ `Budget admission is busy; retry shortly` with `Retry-After: 1`. Core uses that
99
+ same response both before admission and after the legacy loop has committed
100
+ earlier item reservations, so the response cannot distinguish those cases.
101
+ This uncertainty applies even to the first chunk. Do not replay completed
102
+ checks, assume rollback, or blindly resubmit the failed chunk. The CLI does not
103
+ automatically replay budget checks.
104
+
105
+ For single `/budgets/check` and durable `/budgets/check/batches`, that fixed
106
+ busy detail proves no reservation was made by the request; retrying admission
107
+ in a moment is safe. This is a reservation guarantee: single checks can already
108
+ have folded advisory `uncounted_calls`/`uncounted_tokens` before lock contention.
109
+ A retry can overcount this advisory upper-bound telemetry. Preserve caller
110
+ values; the hint does not promise an absence of all side effects.
68
111
  The MCP `budget_check_batch` tool submits at most 32 checks to Core’s durable
69
112
  journal with a caller-retained UUIDv7. Recovery uses GET only; explicit denial
70
113
  attribution retry preserves its exact event. See [bounded MCP work and recovery](mcp-bounded-work.md)
@@ -0,0 +1,36 @@
1
+ # Command reference
2
+
3
+ These references describe solwyn-cli 0.3.0. Earlier releases, including 0.2.0, lack many of
4
+ these commands; use installed `--help` and MCP discovery for an installed version's exact surface.
5
+ Global selection/output flags precede commands. Core authorizes every request.
6
+
7
+ - [Account and identity, rename and recovery](account.mdx)
8
+ - [Alerts](alerts.mdx)
9
+ - [Attest](attest.mdx)
10
+ - [Account audit trail](audit.mdx)
11
+ - [Budget](budget.mdx)
12
+ - [Notification channels](channels.mdx)
13
+ - [Local configuration](config.mdx)
14
+ - [Costs](costs.mdx)
15
+ - [Forecast](forecast.mdx)
16
+ - [Repository setup](init.mdx)
17
+ - [Invitation preview and acceptance](invite.mdx)
18
+ - [Project keys](keys.mdx)
19
+ - [Login and logout](login.mdx)
20
+ - [Project notifications](notifications.mdx)
21
+ - [Overview](overview.mdx)
22
+ - [Plan](plan.mdx)
23
+ - [Projects](projects.mdx)
24
+ - [Provider visibility](providers.mdx)
25
+ - [Agent runs](runs.mdx)
26
+ - [Status](status.mdx)
27
+ - [Tags](tags.mdx)
28
+ - [Team members and invitations](team.mdx)
29
+ - [Webhooks](webhooks.mdx)
30
+ - [Identity](whoami.mdx)
31
+
32
+ For account settings, see [account rename](account.mdx#rename-the-current-account).
33
+ After membership removal, see [personal-account recovery](account.mdx#recover-a-personal-account).
34
+
35
+ For caller-owned spend, see [the metering reference](../caller-owned-spend.md).
36
+ For MCP, see [the quickstart](../mcp-quickstart.md).
@@ -0,0 +1,59 @@
1
+ # Account and identity reads
2
+
3
+ ```sh
4
+ solwyn whoami
5
+ solwyn --json whoami
6
+ solwyn account phone show
7
+ solwyn --json account phone show
8
+ ```
9
+
10
+ JWT `whoami` shows email verification along with user/account identity, role,
11
+ seats and projects (`solwyn.whoami.v1`). Its strict identity parser adopts
12
+ `email_verified`, first name and marketing email subscription state. Project keys
13
+ return local authentication and selected-project context without inventing a user
14
+ or verified email, and never reveal raw key material. MCP provides `get_whoami`.
15
+
16
+ `account phone show` (`solwyn.account.phone.v1`) requires JWT and reads the current
17
+ user's state: none, pending, verified or verified_with_pending_change; verified
18
+ and pending numbers, verification/resend timestamps, and SMS consent/disclosure
19
+ state. Verified phone and SMS consent are prerequisites for SMS notifications.
20
+ Absent timestamps remain null. Verification and consent changes stay in the
21
+ dashboard. MCP provides `get_account_phone` in both profiles. Account recovery
22
+ remains CLI-only.
23
+
24
+ ## Rename the current account
25
+
26
+ ```sh
27
+ solwyn account rename "New account name"
28
+ solwyn --json account rename "New account name" --yes
29
+ ```
30
+
31
+ Rename requires owner JWT. It reads the current account and displays its ID,
32
+ old/new names and invitation-email effects before confirmation or `--yes`.
33
+ Non-TTY use without `--yes` exits 2 before reading credentials or HTTP.
34
+ The PATCH sends only `display_name`; `alert_email_override` remains untouched.
35
+ Use the existing `account alert-email show|set|clear` commands to manage that
36
+ independent preference.
37
+
38
+ Core normalizes display names, rejects controls/bidi/zero-width characters and
39
+ limits them to 120 characters. Invalid input uses fixed errors without reflecting
40
+ validation values. `solwyn.account.rename.v1` returns the complete strict account
41
+ response: ID, display name, tier, alert-email override, seat limit/usage and your
42
+ role. Rename remains CLI-only. Inspect account state before deliberately retrying
43
+ an uncertain write; see [team management](team.mdx).
44
+
45
+ ## Recover a personal account
46
+
47
+ ```sh
48
+ solwyn account recover
49
+ solwyn --json account recover
50
+ ```
51
+
52
+ `account recover` requires JWT but does not require an active membership. It
53
+ idempotently creates a personal account after membership removal, or returns
54
+ the existing account when one is active. The POST goes to
55
+ `/api/v1/accounts/me/personal`; `solwyn.account.recover.v1` returns `account_id`.
56
+ The command stays CLI-only. A project key masking login must be unselected;
57
+ there is no credential fallback. Exit codes are 0 success, 1 API/invalid response,
58
+ 2 usage and 3 auth. Core maps a missing user to 401, so there is no not-found
59
+ exit for this route.
@@ -40,4 +40,37 @@ Account configuration uses `solwyn.alerts.account.v1`. Any account member with J
40
40
 
41
41
  A definite 401 rejection may refresh JWT once; a definite 429 rejection uses the client's bounded rate-limit retry. Mutations are never replayed after 503 or transport failures. If a mutation's outcome is uncertain, inspect `alerts account show` before deciding whether to retry. Role failures exit 3 and point to `whoami`; key authentication failures point to login. Upgrade errors preserve Core's message, allowed values when present, and safe dashboard path. No checkout URL is opened.
42
42
 
43
- The default MCP surface adds only `list_alert_events`, with project/account selection, window and rule filters, cursor/all-pages options, and local failed-only filtering. It exposes the same typed history and receipt fields. Account configuration mutation tools are not registered.
43
+ The MCP surface includes `list_alert_events`, with project/account selection, window and rule filters, cursor/all-pages options, and local failed-only filtering. It exposes the same typed history and receipt fields. Account configuration mutation tools are not registered.
44
+
45
+
46
+ ```sh
47
+ solwyn alerts activity --range 7d --event-type fired --all
48
+ solwyn alerts activity --cursor CURSOR
49
+ solwyn alerts pending --all
50
+ solwyn --json alerts pending --fail-if-open
51
+ solwyn budget rules list --with-last-fired
52
+ solwyn alerts account show --with-last-fired
53
+ ```
54
+
55
+ Activity is the JWT-only feed across **all projects plus account scope**, unlike
56
+ `alerts list --account`. It supports range 7d/30d/90d (default 30d), event type
57
+ fired/snoozed/unsnoozed/paused/resumed, cursor and all-pages options. Pending reads
58
+ operationally open deliveries without a retention window, with full receipt legs,
59
+ attempt counts and next retry timestamps. Default listing exits 0; `--fail-if-open`
60
+ prints data first then exits 1 with `open_alert_deliveries` and local retry guidance
61
+ when the listed data contains open deliveries. Use `--all` for a complete health
62
+ check. These outputs use `solwyn.alerts.activity.v1` and `solwyn.alerts.pending.v1`.
63
+
64
+ Last firing is opt-in and requires JWT, including project rules. Selectors come
65
+ from the fetched rules, are chunked at 100, and match thresholds by percent so
66
+ budget-limit edits preserve history. Budget output maps rule keys to firing events
67
+ or null; account output includes last firing and latest lifecycle event, merging
68
+ current account-ID and legacy `account_spend` history by timestamp and event ID.
69
+ Core's
70
+ default 30d window and plan retention apply; null does not prove a rule never
71
+ fired. Without the flag there is no extra request. MCP exposes
72
+ `list_alert_activity`, `list_open_alert_deliveries`, `get_account_alert` and the
73
+ same option on `list_budget_rules`; latest-events POST is a read. No alert
74
+ mutations are exposed. MCP pagination remains bounded, with first unread cursor
75
+ preserved on errors; CLI `--all` fails without printing a false complete result
76
+ if a later page cannot be read.
@@ -0,0 +1,45 @@
1
+ ---
2
+ title: Account audit trail
3
+ ---
4
+
5
+ Read account-wide audit events with JWT; no selected project is required.
6
+ `--range` accepts 7d, 30d (default), 90d or 365d. `--action` matches an exact
7
+ string, not a prefix or wildcard. `--all` follows remaining cursor pages and can
8
+ start from `--cursor`; without it the command returns a single page.
9
+
10
+ ```sh
11
+ solwyn --json audit --range 30d --all
12
+ solwyn audit --action billing.plan_changed
13
+ ```
14
+
15
+ Audit records include account, team, project, key, billing, channel and phone/
16
+ consent actions. Rule add/remove is not audited; only `budget.updated` is in this trail.
17
+ The trail does not include each rule's firing. Use `alerts list --rule-type` for that event history.
18
+
19
+ Global `--project`, `--api-url` and output flags precede the command.
20
+ Use `--json` for the schema named below unless the command emits plain text.
21
+
22
+ ## `solwyn audit`
23
+
24
+ List account audit events newest first.
25
+
26
+ ```console
27
+ Usage: solwyn audit [OPTIONS]
28
+ ```
29
+
30
+ | Argument or option | Meaning | Default |
31
+ | --- | --- | --- |
32
+ | `--range` | `Audit window. (Choice(['7d', '30d', '90d', '365d']))` | `30d` |
33
+ | `--action` | `Exact audit action to match. (STRING)` | `None` |
34
+ | `--cursor` | `Opaque cursor from the preceding page. (STRING)` | `None` |
35
+ | `--all` | `Follow cursors until all remaining events are read. (BOOL)` | `False` |
36
+
37
+ ```text
38
+ Endpoint: GET /api/v1/account/audit-events
39
+ Auth: JWT
40
+ Exit codes: 0 success; 1 generic/API; 2 usage; 3 auth
41
+ JSON schema: solwyn.audit.v1
42
+ Actions are exact-match strings; use --all to follow every returned cursor.
43
+ Known actions: account.created, account.updated, team.member_removed, team.member_role_changed, team.invitation_created, team.invitation_revoked, project.created, project.updated, project.archived, budget.defaults_restored, budget.updated, api_key.rotated, api_key.deleted, agent_run.stopped, billing.plan_intent_deleted, billing.plan_changed, billing.cancel_scheduled, billing.cancel_undone, billing.plan_change_discarded, notification_channel.created, notification_channel.updated, notification_channel.deleted, account_phone.verified, account_phone.deleted, consent.sms_alerts_changed, upserted.
44
+ Rule add/remove is not audited; only budget.updated is in this trail. Use alerts list --rule-type for per-rule lifecycle events.
45
+ ```
@@ -0,0 +1,20 @@
1
+ # Budget advisory traffic
2
+
3
+ ```sh
4
+ solwyn --project PROJECT budget uncounted
5
+ solwyn --json --project PROJECT budget uncounted
6
+ ```
7
+
8
+ `budget uncounted` reads the separate project resource using JWT or a project key,
9
+ with `solwyn.budget.uncounted.v1`. Calls and tokens are cumulative advisory
10
+ **unpriced upper bounds**, possibly overcounted by at-least-once reporting; they
11
+ are never priced spend, current usage or authoritative billing totals.
12
+ `last_reported_at` is null if the project has never reported. A proven zero is
13
+ zero. A 503 leaves the tally unknown with retry guidance, never a zero tally or
14
+ proof that no traffic occurred. Eligible GETs retain the shared bounded
15
+ Retry-After policy. Existing budget/status reads do not depend on this endpoint.
16
+ MCP provides `budget_uncounted` in both profiles.
17
+
18
+ `budget rules list --with-last-fired` requires JWT and maps every fetched rule to
19
+ its latest retained fired event or null, preserving percent matching after edits.
20
+ See [alerts](alerts.mdx) for last-firing and pagination semantics.
@@ -0,0 +1,177 @@
1
+ ---
2
+ title: Notification channels
3
+ ---
4
+
5
+ Channels belong to the account. Reads require JWT; create/update/test/delete require owner JWT. Integrations
6
+ require Production or above. Supported types are Slack, PagerDuty, Teams,
7
+ Discord and Telegram. Secret input comes from stdin or `SOLWYN_CHANNEL_SECRET`,
8
+ never secret arguments. `--config-stdin` reads a type-specific JSON object.
9
+ List/show responses mask integration secrets.
10
+
11
+ ```sh
12
+ solwyn channels list
13
+ solwyn channels show CHANNEL_ID
14
+ ```
15
+
16
+ Create/update require the type's documented configuration. Slack supports a
17
+ webhook or bot token plus destination; PagerDuty uses a routing key;
18
+ Teams/Discord use webhooks; Telegram uses bot token plus chat id. Test sends a
19
+ real delivery; delete removes the channel and its project notification and
20
+ budget-rule routing references throughout the authenticated account. Delete
21
+ shows the channel identifier and account scope before interactive confirmation
22
+ or `--yes`. Non-TTY without `--yes` exits 2 (`confirmation_required`) before
23
+ credentials or HTTP; decline, EOF or Ctrl-C exits 2 (`confirmation_declined`)
24
+ without mutation. Effects, prompt and echo use sanitized stderr; stdout keeps
25
+ the existing success schema.
26
+
27
+ ```sh
28
+ solwyn channels delete CHANNEL_ID --yes
29
+ ```
30
+
31
+ Global `--project`, `--api-url` and output flags precede the command.
32
+ Use `--json` for the schema named below unless the command emits plain text.
33
+
34
+ ## `solwyn channels`
35
+
36
+ Manage reusable account notification channels.
37
+
38
+ ```console
39
+ Usage: solwyn channels [OPTIONS] COMMAND [ARGS]...
40
+ ```
41
+
42
+ ```text
43
+ Endpoint: composite router for channels subcommands
44
+ Auth: varies by subcommand
45
+ Exit codes: 0 success; 2 usage
46
+ JSON schema: varies by subcommand
47
+ ```
48
+
49
+ ## `solwyn channels create`
50
+
51
+ Create an owner-managed channel using stdin or environment credentials.
52
+
53
+ ```console
54
+ Usage: solwyn channels create [OPTIONS]
55
+ ```
56
+
57
+ | Argument or option | Meaning | Default |
58
+ | --- | --- | --- |
59
+ | `--type` | ` (Choice(['slack', 'pagerduty', 'teams', 'discord', 'telegram']); required)` | `None` |
60
+ | `--name` | ` (STRING; required)` | `None` |
61
+ | `--secret-stdin` | ` (BOOL)` | `False` |
62
+ | `--config-stdin` | `Read the type-specific config JSON object from stdin, including any optional secrets. (BOOL)` | `False` |
63
+ | `--secret-field` | `Secret field name only; defaults to the type's primary secret. (STRING)` | `None` |
64
+ | `--channel` | `Slack destination ID for bot-token mode. (STRING)` | `None` |
65
+ | `--chat-id` | `Telegram destination ID. (STRING)` | `None` |
66
+
67
+ ```text
68
+ Endpoint: POST /api/v1/account/notification-channels
69
+ Auth: JWT; owner for mutations
70
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage; 3 auth; 5 not found
71
+ JSON schema: solwyn.channels.v1
72
+ Secrets only through --secret-stdin, --config-stdin JSON, or SOLWYN_CHANNEL_SECRET; never command arguments.
73
+ Slack requires webhook_url or bot_token + channel; PagerDuty routing_key; Teams/Discord webhook_url; Telegram bot_token + chat_id. All types require Production+.
74
+ ```
75
+
76
+ ## `solwyn channels delete`
77
+
78
+ Delete a channel and remove its project and rule routing references.
79
+
80
+ ```console
81
+ Usage: solwyn channels delete [OPTIONS] CHANNEL_ID
82
+ ```
83
+
84
+ | Argument or option | Meaning | Default |
85
+ | --- | --- | --- |
86
+ | `channel_id` | ` (STRING; required)` | `None` |
87
+ | `--yes` | `Acknowledge the displayed effects without prompting. (BOOL)` | `False` |
88
+
89
+ ```text
90
+ Endpoint: DELETE /api/v1/account/notification-channels/{channel_id}
91
+ Auth: JWT; owner for mutations
92
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage or confirmation; 3 auth; 5 not found
93
+ JSON schema: solwyn.channels.delete.v1
94
+ Effects are shown before interactive confirmation or --yes; non-TTY requires --yes.
95
+ Core removes the channel ID from project notification settings and every budget rule's channel_ids.
96
+ ```
97
+
98
+ ## `solwyn channels list`
99
+
100
+ List account channels with masked credentials.
101
+
102
+ ```console
103
+ Usage: solwyn channels list [OPTIONS]
104
+ ```
105
+
106
+ ```text
107
+ Endpoint: GET /api/v1/account/notification-channels
108
+ Auth: JWT
109
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage; 3 auth; 5 not found
110
+ JSON schema: solwyn.channels.list.v1
111
+ ```
112
+
113
+ ## `solwyn channels show`
114
+
115
+ Show a channel; secret fields retain only their final four characters.
116
+
117
+ ```console
118
+ Usage: solwyn channels show [OPTIONS] CHANNEL_ID
119
+ ```
120
+
121
+ | Argument or option | Meaning | Default |
122
+ | --- | --- | --- |
123
+ | `channel_id` | ` (STRING; required)` | `None` |
124
+
125
+ ```text
126
+ Endpoint: GET /api/v1/account/notification-channels/{channel_id}
127
+ Auth: JWT
128
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage; 3 auth; 5 not found
129
+ JSON schema: solwyn.channels.v1
130
+ ```
131
+
132
+ ## `solwyn channels test`
133
+
134
+ Send a test through a stored channel (owner only).
135
+
136
+ ```console
137
+ Usage: solwyn channels test [OPTIONS] CHANNEL_ID
138
+ ```
139
+
140
+ | Argument or option | Meaning | Default |
141
+ | --- | --- | --- |
142
+ | `channel_id` | ` (STRING; required)` | `None` |
143
+
144
+ ```text
145
+ Endpoint: POST /api/v1/account/notification-channels/{channel_id}/test
146
+ Auth: JWT; owner for mutations
147
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage; 3 auth; 5 not found
148
+ JSON schema: solwyn.channels.test.v1
149
+ Sends a real test using the channel's stored credentials. In-band success:false exits 1.
150
+ ```
151
+
152
+ ## `solwyn channels update`
153
+
154
+ Update selected fields; Core retains masked secret values on write-back.
155
+
156
+ ```console
157
+ Usage: solwyn channels update [OPTIONS] CHANNEL_ID
158
+ ```
159
+
160
+ | Argument or option | Meaning | Default |
161
+ | --- | --- | --- |
162
+ | `channel_id` | ` (STRING; required)` | `None` |
163
+ | `--name` | ` (STRING)` | `None` |
164
+ | `--secret-stdin` | ` (BOOL)` | `False` |
165
+ | `--config-stdin` | ` (BOOL)` | `False` |
166
+ | `--secret-field` | ` (STRING)` | `None` |
167
+ | `--channel` | ` (STRING)` | `None` |
168
+ | `--chat-id` | ` (STRING)` | `None` |
169
+
170
+ ```text
171
+ Endpoint: GET then PUT /api/v1/account/notification-channels/{channel_id}
172
+ Auth: JWT; owner for mutations
173
+ Exit codes: 0 success; 1 generic/API or delivery failure; 2 usage; 3 auth; 5 not found
174
+ JSON schema: solwyn.channels.v1
175
+ Secrets only through --secret-stdin, --config-stdin JSON, or SOLWYN_CHANNEL_SECRET; never command arguments.
176
+ Omitted values stay unchanged. Masked secrets retain stored credentials. JSON null clears individual config fields only if the channel remains usable. Type is immutable.
177
+ ```