diff --git a/artifacts/real-host-acceptance/20260516_170421/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170421/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260516_170421/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170421/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/05-import.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/05-import.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/05-import.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517192934_openai_group_bound_closure/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260516_170725/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170725/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260516_170725/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170725/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260516_170725/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170725/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_061947_postfix/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_061947_postfix/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/05-import.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_062209_fixed/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_062209_fixed/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260516_171131/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_171131/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260516_171131/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_171131/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260516_170421/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_170421/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_062722_after_account_fix/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062722_after_account_fix/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/05-import.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_080506_post_fix/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_080506_post_fix/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517192934_openai_group_bound_closure/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_000418/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_000418/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_000418/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_000418/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/05-import.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_081533_post_decode_fix/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_000418/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_000418/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_000418/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_000418/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/05-import.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_082153_post_account_type_fix/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_061947_postfix/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_061947_postfix/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_061947_postfix/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_061947_postfix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/05-import.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_104007_subscription_after_fix/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062209_fixed/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260516_171131/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260516_171131/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_102113_subscription_probe/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_102113_subscription_probe/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/05-import.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_104113_subscription_skip_rollback/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_062722_after_account_fix/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062722_after_account_fix/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_062722_after_account_fix/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_062722_after_account_fix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/05-import.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_retest/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_retest/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_retest/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_080506_post_fix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/05-import.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_live_openai_subscription_retest/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_081533_post_decode_fix/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_081533_post_decode_fix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/05-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_group_balance_retest/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_openai_group_balance_retest/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/05-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_keep_scene/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_openai_keep_scene/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_102113_subscription_probe/01-create-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_102113_subscription_probe/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_102113_subscription_probe/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_102113_subscription_probe/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/05-import.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/05-import.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/05-import.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/07-access-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/11-rollback.json b/artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260517_openai_platform_fix_retest/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/05-import.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/08a-provider-resources.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/08a-provider-resources.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/08a-provider-resources.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/08a-provider-resources.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/11-rollback.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_self_service/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_self_service/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/05-import.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/08a-provider-resources.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/08a-provider-resources.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/08a-provider-resources.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/08a-provider-resources.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/11-rollback.json b/artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260518_reconcile_hostscope_subscription/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/01-self-import-initial.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/01-self-import-initial.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/01-self-import-initial.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/01-self-import-initial.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/02-self-access-preview-initial.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/02-self-access-preview-initial.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/02-self-access-preview-initial.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/02-self-access-preview-initial.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/03-self-access-status-initial.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/03-self-access-status-initial.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/03-self-access-status-initial.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/03-self-access-status-initial.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/04-self-after-balance.headers.txt b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/04-self-after-balance.headers.txt similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/04-self-after-balance.headers.txt rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/04-self-after-balance.headers.txt diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/05-self-after-balance.body.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/05-self-after-balance.body.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/05-self-after-balance.body.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/05-self-after-balance.body.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/06-subscription-after-assign.headers.txt b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/06-subscription-after-assign.headers.txt similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/06-subscription-after-assign.headers.txt rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/06-subscription-after-assign.headers.txt diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/07-subscription-after-assign.body.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/07-subscription-after-assign.body.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/07-subscription-after-assign.body.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/07-subscription-after-assign.body.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/08-subscription-group-state.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/08-subscription-group-state.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/08-subscription-group-state.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/09-user-summary.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/09-user-summary.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/09-user-summary.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/09-user-summary.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_matrix/README.md b/artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/README.md similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_matrix/README.md rename to artifacts/real-host-acceptance-archive/20260518_redeploy_matrix/README.md diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/05-import.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/11-rollback.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/05-import.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_redeploy_self_service_keep/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_redeploy_self_service_keep/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/05-import.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/11-rollback.json b/artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260518_self_service_reaccept_v6/11-rollback.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/01-create-host.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/01-create-host.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/02-probe-host.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/02-probe-host.json diff --git a/artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_reconcile_hostscope_subscription/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/03-install-pack.json diff --git a/artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_self_service_reaccept_v6/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/04-preview-import.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/05-import.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/05-import.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/05-import.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/06-access-preview.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/06-access-preview.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/07-access-status.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/07-access-status.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/07-access-status.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/08-provider-status.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/08-provider-status.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/09-reconcile.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/09-reconcile.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/10-batch-detail.json diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/11-rollback.json b/artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260518_subscription_reaccept_v6/11-rollback.json diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/01-create-host.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/01-create-host.json new file mode 100644 index 00000000..e375924a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/01-create-host.json @@ -0,0 +1 @@ +{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/02-probe-host.json new file mode 100644 index 00000000..a9131b7d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/02-probe-host.json @@ -0,0 +1 @@ +{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/03-install-pack.json similarity index 98% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/03-install-pack.json rename to artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/03-install-pack.json index 5df521c5..6a9dbdbb 100644 --- a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/03-install-pack.json +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/03-install-pack.json @@ -1 +1 @@ -{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.0"} +{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.1"} diff --git a/artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/20260518_subscription_reaccept_v6/04-preview-import.json rename to artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/04-preview-import.json diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05-import.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05-import.json new file mode 100644 index 00000000..6a81ffe5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"16","name":"OpenAI 中转默认渠道"},"gateway":{"ok":true,"status_code":200,"models":["claude-opus-4-5-20251101","claude-opus-4-6","claude-opus-4-7","claude-sonnet-4-6","claude-sonnet-4-5-20250929","claude-haiku-4-5-20251001"],"has_expected_model":false},"group":{"id":"24","name":"OpenAI 中转默认分组"},"plan":null,"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05a-batch-detail-pre-access.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05a-batch-detail-pre-access.json new file mode 100644 index 00000000..a9fe8b65 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/05a-batch-detail-pre-access.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":[\"claude-opus-4-5-20251101\",\"claude-opus-4-6\",\"claude-opus-4-7\",\"claude-sonnet-4-6\",\"claude-sonnet-4-5-20250929\",\"claude-haiku-4-5-20251001\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"passed","batch_id":1,"id":1,"key_fingerprint":"sha256:fbd0fe64bde9bf5e4fbc1b648540139ae34473dbdd07905a72b1e90970bddce5","probe_summary_json":"{\"account_id\":\"26\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"24","ResourceName":"OpenAI 中转默认分组"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"16","ResourceName":"OpenAI 中转默认渠道"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"26","ResourceName":"openai-zhongzhuan-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/06-access-preview.json new file mode 100644 index 00000000..84826377 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/06-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"openai-zhongzhuan","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/07-access-status.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/07-access-status.json new file mode 100644 index 00000000..8a39c4bb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/07-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":[\"claude-opus-4-5-20251101\",\"claude-opus-4-6\",\"claude-opus-4-7\",\"claude-sonnet-4-6\",\"claude-sonnet-4-5-20250929\",\"claude-haiku-4-5-20251001\"],\"ok\":true,\"status_code\":200}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"openai-zhongzhuan"} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/08-provider-status.json new file mode 100644 index 00000000..b907a02a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/08-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18080","host_id":"local-sub2api","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"OpenAI 中转兼容","platform":"openai","provider_id":"openai-zhongzhuan"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/09-reconcile.json new file mode 100644 index 00000000..cf0500f4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/09-reconcile.json @@ -0,0 +1 @@ +{"batch_id":1,"extra_count":0,"missing_count":0,"provider_id":"openai-zhongzhuan","status":"degraded","summary":{"access_rechecked":true,"access_status":"broken","extra_count":0,"host_version":"0.1.126","missing_count":0,"probe_failures":0}} diff --git a/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/10-batch-detail.json new file mode 100644 index 00000000..b75a5e34 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/10-batch-detail.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":[\"claude-opus-4-5-20251101\",\"claude-opus-4-6\",\"claude-opus-4-7\",\"claude-sonnet-4-6\",\"claude-sonnet-4-5-20250929\",\"claude-haiku-4-5-20251001\"],\"ok\":true,\"status_code\":200}"},{"ID":2,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":[\"claude-opus-4-5-20251101\",\"claude-opus-4-6\",\"claude-opus-4-7\",\"claude-sonnet-4-6\",\"claude-sonnet-4-5-20250929\",\"claude-haiku-4-5-20251001\"],\"ok\":true,\"reconcile_rerun\":true,\"status_code\":200}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"passed","batch_id":1,"id":1,"key_fingerprint":"sha256:fbd0fe64bde9bf5e4fbc1b648540139ae34473dbdd07905a72b1e90970bddce5","probe_summary_json":"{\"account_id\":\"26\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"reconcile_rerun\":true,\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"24","ResourceName":"OpenAI 中转默认分组"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"16","ResourceName":"OpenAI 中转默认渠道"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"26","ResourceName":"openai-zhongzhuan-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":1,"BatchID":1,"HostID":1,"ProviderID":3,"Status":"degraded","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":0,\"host_version\":\"0.1.126\",\"missing_count\":0,\"probe_failures\":0}"}]} diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/11-rollback.json b/artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/11-rollback.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/11-rollback.json rename to artifacts/real-host-acceptance-archive/20260519_self_service_reaccept_current/11-rollback.json diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..5439b2cf --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,8 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "10", + "subscription_user_key_prefix": "sk-177924928" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..6fcdc577 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-current","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..9bbb3844 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 400 Bad Request +Content-Type: application/json +Date: Wed, 20 May 2026 04:36:54 GMT +Content-Length: 346 + diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..657d71ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":0,"access_status":"","accounts_count":0,"batch_id":0,"batch_status":"","error":{"code":"bad_request","message":"stat pack path: stat /home/ubuntu/sub2api-cn-relay-manager/packs/openai-cn-pack: no such file or directory"},"gateway":{"ok":false,"status_code":0,"models":null,"has_expected_model":false},"provider_status":""} diff --git a/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_123648_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..1ca4c438 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "10", + "subscription_user_key_prefix": "sk-177924928", + "subscription_group_id": "3", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..6fcdc577 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-current","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..be1aa24c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 409 Conflict +Content-Type: application/json +Date: Wed, 20 May 2026 04:37:35 GMT +Content-Length: 439 + diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..9b18cc0e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":22,"batch_status":"partially_succeeded","error":{"code":"host_request_failed","message":"assign subscription for 10: sub2api POST /api/v1/admin/subscriptions/assign returned 500: {\"code\":500,\"message\":\"internal error\"}","upstream_status":500},"gateway":{"ok":false,"status_code":0,"models":null,"has_expected_model":false},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..f860d630 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":24,"BatchID":22,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":0}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":4,"id":22,"mode":"partial","pack_id":20,"provider_id":22},"items":[{"account_status":"failed","batch_id":22,"id":17,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"4\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":37,"BatchID":22,"HostID":4,"ResourceType":"group","HostResourceID":"3","ResourceName":"DeepSeek 默认分组"},{"ID":38,"BatchID":22,"HostID":4,"ResourceType":"channel","HostResourceID":"2","ResourceName":"DeepSeek 默认渠道"},{"ID":39,"BatchID":22,"HostID":4,"ResourceType":"plan","HostResourceID":"2","ResourceName":"DeepSeek 默认套餐"},{"ID":40,"BatchID":22,"HostID":4,"ResourceType":"account","HostResourceID":"4","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..f997b850 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 10; +UPDATE api_keys +SET group_id = 3, + updated_at = now() +WHERE key = 'sk-1779249289-aff42d5f'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 10, + 3, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..92b75f06 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:3ddf0deb625de5b22d76e6b788b6531852dff749d9915bf09f1b02cab5409e75 +balance_cache_key=billing:balance:10 +subscription_cache_key=billing:sub:10:3 +0 diff --git a/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_123726_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..663b5192 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18197", + "crm_host_base": "http://127.0.0.1:18197", + "provider_id": "deepseek", + "subscription_user_id": "3", + "subscription_user_key_prefix": "sk-ad165ebe2", + "subscription_group_id": "3", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..1bc11ba1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18197-verify","base_url":"http://127.0.0.1:18197","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..efcf2439 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 09:31:40 GMT +Content-Length: 478 + diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..f6e4a7a2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":24,"batch_status":"partially_succeeded","channel":{"id":"2","name":"DeepSeek 默认渠道"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed","deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"3","name":"DeepSeek 默认分组"},"plan":{"id":"2","name":"DeepSeek 默认套餐"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..af80b7c9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":26,"BatchID":24,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\",\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":5,"id":24,"mode":"partial","pack_id":20,"provider_id":22},"items":[{"account_status":"failed","batch_id":24,"id":19,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"10\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":45,"BatchID":24,"HostID":5,"ResourceType":"group","HostResourceID":"3","ResourceName":"DeepSeek 默认分组"},{"ID":46,"BatchID":24,"HostID":5,"ResourceType":"channel","HostResourceID":"2","ResourceName":"DeepSeek 默认渠道"},{"ID":47,"BatchID":24,"HostID":5,"ResourceType":"plan","HostResourceID":"2","ResourceName":"DeepSeek 默认套餐"},{"ID":48,"BatchID":24,"HostID":5,"ResourceType":"account","HostResourceID":"10","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..4fe18e3d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 3; +UPDATE api_keys +SET group_id = 3, + updated_at = now() +WHERE key = 'sk-ad165ebe20981ea0429bc8815e1a36a6df2a5a0c640374733a6c3acd8c528c50'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 3, + 3, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..662be130 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:27edcc4cecdab2ae8ccd0312e57bcb5b5d7016a44503511bf3d27c821aab1ed8 +balance_cache_key=billing:balance:3 +subscription_cache_key=billing:sub:3:3 +1 diff --git a/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_173133_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..0f9f74d5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18197", + "crm_host_base": "http://127.0.0.1:18197", + "provider_id": "deepseek", + "subscription_user_id": "9", + "subscription_user_key_prefix": "sk-177926970", + "subscription_group_id": "3", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..1bc11ba1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18197-verify","base_url":"http://127.0.0.1:18197","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..5c659221 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 09:35:08 GMT +Content-Length: 383 + diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..bf7a6c11 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":25,"batch_status":"partially_succeeded","channel":{"id":"2","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"3","name":"DeepSeek 默认分组"},"plan":{"id":"2","name":"DeepSeek 默认套餐"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..23f40ac3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":27,"BatchID":25,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":5,"id":25,"mode":"partial","pack_id":20,"provider_id":22},"items":[{"account_status":"failed","batch_id":25,"id":20,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"11\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":49,"BatchID":25,"HostID":5,"ResourceType":"account","HostResourceID":"11","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..babf1a3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 9; +UPDATE api_keys +SET group_id = 3, + updated_at = now() +WHERE key = 'sk-1779269705-69e45ceb'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 9, + 3, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..13a0edb3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:b2c2f28f0922d8abfb47ddb8cd4ae912e20859978d52798f1502ab58dadefa31 +balance_cache_key=billing:balance:9 +subscription_cache_key=billing:sub:9:3 +1 diff --git a/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_173501_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..c30a8109 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18197", + "crm_host_base": "http://127.0.0.1:18197", + "provider_id": "deepseek", + "subscription_user_id": "10", + "subscription_user_key_prefix": "sk-177926973", + "subscription_group_id": "3", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..1bc11ba1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18197-verify","base_url":"http://127.0.0.1:18197","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..167e2479 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 09:35:38 GMT +Content-Length: 383 + diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..e41dc808 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":26,"batch_status":"partially_succeeded","channel":{"id":"2","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"3","name":"DeepSeek 默认分组"},"plan":{"id":"2","name":"DeepSeek 默认套餐"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..85145a6c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":28,"BatchID":26,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":5,"id":26,"mode":"partial","pack_id":20,"provider_id":22},"items":[{"account_status":"failed","batch_id":26,"id":21,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"12\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":50,"BatchID":26,"HostID":5,"ResourceType":"account","HostResourceID":"12","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..5fbb1371 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 10; +UPDATE api_keys +SET group_id = 3, + updated_at = now() +WHERE key = 'sk-1779269734-70946ff5'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 10, + 3, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..a6aaf044 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:b8a4d3ecabea40cf2efc43803701c64af89d7feead7e551d36c0825f9d53da70 +balance_cache_key=billing:balance:10 +subscription_cache_key=billing:sub:10:3 +1 diff --git a/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_173530_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..d3b46da9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18092", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "11", + "subscription_user_key_prefix": "sk-177927376", + "subscription_group_id": "3", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..6fcdc577 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-current","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..1aadaf25 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 10:46:05 GMT +Content-Length: 383 + diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..b6f68c40 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":27,"batch_status":"partially_succeeded","channel":{"id":"2","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"3","name":"DeepSeek 默认分组"},"plan":{"id":"2","name":"DeepSeek 默认套餐"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..61df361e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":29,"BatchID":27,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":4,"id":27,"mode":"partial","pack_id":20,"provider_id":22},"items":[{"account_status":"failed","batch_id":27,"id":22,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"13\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":51,"BatchID":27,"HostID":4,"ResourceType":"account","HostResourceID":"13","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..4fec24cb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 11; +UPDATE api_keys +SET group_id = 3, + updated_at = now() +WHERE key = 'sk-1779273765-4506160a'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 11, + 3, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..8e010bef --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:90200e2c0a31643d02495da915a243a897d95d9eef59c97ed57ffbfa3c7b95c2 +balance_cache_key=billing:balance:11 +subscription_cache_key=billing:sub:11:3 +1 diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..947b8119 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 403 Forbidden +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: cddb0a63-3944-4ec9-9bfe-9ba7a27fe46b +Date: Wed, 20 May 2026 10:46:10 GMT +Content-Length: 179 + diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..31568cfd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"error":{"message":"API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.","type":"permission_error"},"type":"error"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..ea22c9f1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 403 Forbidden +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: ca6accb1-2947-4187-b9a9-d6bc9e75b6c6 +Date: Wed, 20 May 2026 10:46:12 GMT +Content-Length: 179 + diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..31568cfd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.","type":"permission_error"},"type":"error"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260520_184556_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..a31be2d1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18098", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "12", + "subscription_user_key_prefix": "sk-177927441", + "subscription_group_id": "5", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..6fcdc577 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-current","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..7e2a767e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 409 Conflict +Content-Type: application/json +Date: Wed, 20 May 2026 10:54:08 GMT +Content-Length: 400 + diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..136a1562 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","error":{"code":"host_request_failed","message":"ensure subscription access for 12: sub2api POST /api/v1/api-keys returned 404: 404 page not found","upstream_status":404},"gateway":{"ok":false,"status_code":0,"models":null,"has_expected_model":false},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..fbaccb5e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":0}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":1,"id":1,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"14\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"5","ResourceName":"DeepSeek 默认分组-subscription"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"4","ResourceName":"DeepSeek 默认渠道-subscription"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"plan","HostResourceID":"4","ResourceName":"DeepSeek 默认套餐-subscription"},{"ID":4,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"14","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..8569483f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 12; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779274419-531c5d92'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 12, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..518ba0e3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:ae88894c9ec2d6d0b84b361adfb3208991287236c0b042608aee84c622699165 +balance_cache_key=billing:balance:12 +subscription_cache_key=billing:sub:12:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..cb1eb34c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 5966d82e-659e-459b-9fe1-63e0ee2a0a97 +Date: Wed, 20 May 2026 10:54:12 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..c915d145 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 503 Service Unavailable +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: a53c638c-3d58-4884-bc19-4bf6f31aed0a +Date: Wed, 20 May 2026 10:54:15 GMT +Content-Length: 74 + diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6da31f0d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Service temporarily unavailable","type":"api_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..4ba6c5c9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-current","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":4,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..5647a2cf --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":0}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..2630ae1a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":false,"message":"access status broken does not satisfy mode subscription"} diff --git a/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..fbaccb5e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_185400_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":0}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":1,"id":1,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"14\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"5","ResourceName":"DeepSeek 默认分组-subscription"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"4","ResourceName":"DeepSeek 默认渠道-subscription"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"plan","HostResourceID":"4","ResourceName":"DeepSeek 默认套餐-subscription"},{"ID":4,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"14","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..71eb02cb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,8 @@ +{ + "crm_base": "http://127.0.0.1:18098", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "14", + "subscription_user_key_prefix": "sk-177927766" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..5153939a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-current", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..a5709bc3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 409 Conflict +Content-Type: application/json +Date: Wed, 20 May 2026 11:52:24 GMT +Content-Length: 400 + diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..de42bebe --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":2,"batch_status":"partially_succeeded","error":{"code":"host_request_failed","message":"ensure subscription access for 14: sub2api POST /api/v1/api-keys returned 404: 404 page not found","upstream_status":404},"gateway":{"ok":false,"status_code":0,"models":null,"has_expected_model":false},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..f4b74fa5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_195214_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":2,"BatchID":2,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":0}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":2,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":2,"id":2,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"15\",\"models\":[{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"},{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":5,"BatchID":2,"HostID":1,"ResourceType":"account","HostResourceID":"15","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..8bfb2ced --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "14", + "subscription_user_key_prefix": "sk-177927766", + "subscription_group_id": "5", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..56fce13d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..42f623af --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 12:35:47 GMT +Content-Length: 466 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..df664f06 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..9eac1a53 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":1,"id":1,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"16\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"5","ResourceName":"DeepSeek 默认分组-subscription"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"4","ResourceName":"DeepSeek 默认渠道-subscription"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"plan","HostResourceID":"4","ResourceName":"DeepSeek 默认套餐-subscription"},{"ID":4,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"16","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..4364b8c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 14; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779277662-506d01ae'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 14, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..d33e6a19 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:b854f2ce5c0b447aba8baf4a05e78eafbc1c2d9ea46d53ac28876e3e348367e5 +balance_cache_key=billing:balance:14 +subscription_cache_key=billing:sub:14:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..f3e7fd85 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 92c4e39e-f67c-4f91-891e-792c9033d2c8 +Date: Wed, 20 May 2026 12:35:54 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..fd5bf066 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 503 Service Unavailable +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: dec779c9-54e6-4141-8d7a-1fe600e97071 +Date: Wed, 20 May 2026 12:35:59 GMT +Content-Length: 74 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6da31f0d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Service temporarily unavailable","type":"api_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..839ba401 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":4,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..5bc00e8e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":1,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":1,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..9eac1a53 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203533_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":1,"id":1,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"16\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":1,"BatchID":1,"HostID":1,"ResourceType":"group","HostResourceID":"5","ResourceName":"DeepSeek 默认分组-subscription"},{"ID":2,"BatchID":1,"HostID":1,"ResourceType":"channel","HostResourceID":"4","ResourceName":"DeepSeek 默认渠道-subscription"},{"ID":3,"BatchID":1,"HostID":1,"ResourceType":"plan","HostResourceID":"4","ResourceName":"DeepSeek 默认套餐-subscription"},{"ID":4,"BatchID":1,"HostID":1,"ResourceType":"account","HostResourceID":"16","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..3e4507b6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "20", + "subscription_user_key_prefix": "sk-177928070", + "subscription_group_id": "5", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..366b718c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 12:38:33 GMT +Content-Length: 466 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..ceeb65b7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":2,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..ed715a92 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":2,"BatchID":2,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":2,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":2,"id":2,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"17\",\"models\":[{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"},{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":5,"BatchID":2,"HostID":1,"ResourceType":"account","HostResourceID":"17","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..d999ab8e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 20; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779280707-92fd4c49'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 20, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..0411da8f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:21cbba61ac355a2c0ff5c6e9a7dfe933783493d4b0aab338fabd28c32bf2b9e3 +balance_cache_key=billing:balance:20 +subscription_cache_key=billing:sub:20:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..b063c8f3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : {"id":5,"name":"DeepSeek 默认分组-subscription","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-20T18:54:06.21433+08:00","updated_at":"2026-05-20T18:54:06.21433+08:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":21,"user_id":20,"group_id":5,"starts_at":"2026-05-20T20:38:35.002744+08:00","expires_at":"2026-06-19T20:38:35.002744+08:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-20T20:38:35.002744+08:00","notes":"hermes remote subscription validation","created_at":"2026-05-20T20:38:35.002744+08:00","updated_at":"2026-05-20T20:38:35.002744+08:00","deleted_at":null}, "key" : {"id":17,"user_id":20,"key":"sk-1779280707-92fd4c49","name":"relay-sub-1779280707-92fd4c49-key","group_id":5,"status":"active","created_at":"2026-05-20T20:38:29.019042+08:00","updated_at":"2026-05-20T20:38:35.002744+08:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..79c65fa7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 55f1d237-1a05-471b-b15e-5138da0d795b +Date: Wed, 20 May 2026 12:38:39 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..00447b62 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 503 Service Unavailable +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 839487b5-4aef-47aa-a2cf-1527352d7c38 +Date: Wed, 20 May 2026 12:38:43 GMT +Content-Length: 74 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6da31f0d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Service temporarily unavailable","type":"api_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..6d2bcea8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":2,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..413beba4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":2,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":2,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..ed715a92 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203818_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":2,"BatchID":2,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":2,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":2,"id":2,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"17\",\"models\":[{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"},{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":5,"BatchID":2,"HostID":1,"ResourceType":"account","HostResourceID":"17","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..aeba98d4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "22", + "subscription_user_key_prefix": "sk-177928075", + "subscription_group_id": "6", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..e9806fa5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 12:39:25 GMT +Content-Length: 475 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..42f9114d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":3,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..d9f559e6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":3,"BatchID":3,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":3,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":3,"id":3,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"18\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":6,"BatchID":3,"HostID":1,"ResourceType":"group","HostResourceID":"6","ResourceName":"MiniMax 默认分组-subscription"},{"ID":7,"BatchID":3,"HostID":1,"ResourceType":"channel","HostResourceID":"5","ResourceName":"MiniMax 默认渠道-subscription"},{"ID":8,"BatchID":3,"HostID":1,"ResourceType":"plan","HostResourceID":"5","ResourceName":"MiniMax 默认套餐-subscription"},{"ID":9,"BatchID":3,"HostID":1,"ResourceType":"account","HostResourceID":"18","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..7e3466f2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 22; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779280758-5a155833'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 22, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..d29a4a3c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:f4ae7c893cb06a3f3f0875516eace6be6de292dde23553ed4889b3724f6b270e +balance_cache_key=billing:balance:22 +subscription_cache_key=billing:sub:22:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..946f720a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组-subscription","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-20T20:39:22.955452+08:00","updated_at":"2026-05-20T20:39:22.955452+08:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":23,"user_id":22,"group_id":6,"starts_at":"2026-05-20T20:39:27.084382+08:00","expires_at":"2026-06-19T20:39:27.084382+08:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-20T20:39:27.084382+08:00","notes":"hermes remote subscription validation","created_at":"2026-05-20T20:39:27.084382+08:00","updated_at":"2026-05-20T20:39:27.084382+08:00","deleted_at":null}, "key" : {"id":19,"user_id":22,"key":"sk-1779280758-5a155833","name":"relay-sub-1779280758-5a155833-key","group_id":6,"status":"active","created_at":"2026-05-20T20:39:20.067749+08:00","updated_at":"2026-05-20T20:39:27.084382+08:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..97d3e38d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 0ed878d1-1b08-49e0-9d37-b8666a95bd9f +Date: Wed, 20 May 2026 12:39:32 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..0411961a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 503 Service Unavailable +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 61de8a5c-95a2-4a26-9c5e-455e9b72fc30 +Date: Wed, 20 May 2026 12:39:37 GMT +Content-Length: 74 + diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..6da31f0d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Service temporarily unavailable","type":"api_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..58da8159 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":3,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":4,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..fba258bf --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":3,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":3,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..d9f559e6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260520_203913_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":3,"BatchID":3,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":3,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":3,"id":3,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"18\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":6,"BatchID":3,"HostID":1,"ResourceType":"group","HostResourceID":"6","ResourceName":"MiniMax 默认分组-subscription"},{"ID":7,"BatchID":3,"HostID":1,"ResourceType":"channel","HostResourceID":"5","ResourceName":"MiniMax 默认渠道-subscription"},{"ID":8,"BatchID":3,"HostID":1,"ResourceType":"plan","HostResourceID":"5","ResourceName":"MiniMax 默认套餐-subscription"},{"ID":9,"BatchID":3,"HostID":1,"ResourceType":"account","HostResourceID":"18","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..a8126fbe --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "11", + "subscription_user_key_prefix": "sk-177929729", + "subscription_group_id": "6", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..57a37337 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 17:15:54 GMT +Content-Length: 475 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..a8402918 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":7,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..d67a6971 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":7,"BatchID":7,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":7,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":7,"id":7,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"22\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":13,"BatchID":7,"HostID":1,"ResourceType":"account","HostResourceID":"22","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..a5181307 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 11; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779297297-6dca4634'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 11, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..dac4c890 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:f7f852f714694a89a8d6ac1b1b908e31fe19ff9ec3db497674f4367a17c64e38 +balance_cache_key=billing:balance:11 +subscription_cache_key=billing:sub:11:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..b96f899a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":17,"user_id":11,"group_id":6,"starts_at":"2026-05-20T17:15:55.574002+00:00","expires_at":"2026-06-19T17:15:55.574002+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-20T17:15:55.574002+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-20T17:15:55.574002+00:00","updated_at":"2026-05-20T17:15:55.574002+00:00","deleted_at":null}, "key" : {"id":10,"user_id":11,"key":"sk-1779297297-6dca4634","name":"relay-sub-1779297297-6dca4634-key","group_id":6,"status":"active","created_at":"2026-05-20T17:14:58.738429+00:00","updated_at":"2026-05-20T17:15:55.574002+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..0d236d90 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 401 Unauthorized +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 7888b2da-327c-4438-88d0-d7a22ac365ab +Date: Wed, 20 May 2026 17:15:59 GMT +Content-Length: 54 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..60b4b122 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"code":"INVALID_API_KEY","message":"Invalid API key"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..a4571007 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 401 Unauthorized +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 6d2ca317-3d0e-4142-8d4e-fde21f08f685 +Date: Wed, 20 May 2026 17:16:02 GMT +Content-Length: 54 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..60b4b122 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"code":"INVALID_API_KEY","message":"Invalid API key"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..a8ce9fca --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":7,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..8bb9df8e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":7,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":7,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..d67a6971 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011544_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":7,"BatchID":7,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":7,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":7,"id":7,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"22\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":13,"BatchID":7,"HostID":1,"ResourceType":"account","HostResourceID":"22","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..f3191921 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,10 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "12", + "subscription_user_key_prefix": "sk-177929744", + "subscription_group_id": "5", + "admin_user_id": "1" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..28fe8ff4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 17:17:28 GMT +Content-Length: 466 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..31e65988 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":8,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..2e5639cc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":8,"BatchID":8,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":8,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":8,"id":8,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"23\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":14,"BatchID":8,"HostID":1,"ResourceType":"account","HostResourceID":"23","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..3642c246 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 12; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779297442-1feade76'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 12, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..1a3f96bd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:709f8bf6682ecbf5dbddd377189b8d39ddaa720b37a9a224620eea92597f9450 +balance_cache_key=billing:balance:12 +subscription_cache_key=billing:sub:12:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..34a54465 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":11,"user_id":12,"key":"sk-1779297442-1feade76","name":"relay-sub-1779297442-1feade76-key","group_id":null,"status":"active","created_at":"2026-05-20T17:17:23.974024+00:00","updated_at":"2026-05-20T17:17:23.974024+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..25106351 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 401 Unauthorized +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: e93c3921-4011-45c9-8e05-14a6afbbb3ff +Date: Wed, 20 May 2026 17:17:33 GMT +Content-Length: 54 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..60b4b122 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"code":"INVALID_API_KEY","message":"Invalid API key"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..2bbfb4f1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 401 Unauthorized +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 869bfb9b-3073-47f5-84f1-b85464b0db75 +Date: Wed, 20 May 2026 17:17:36 GMT +Content-Length: 54 + diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..60b4b122 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"code":"INVALID_API_KEY","message":"Invalid API key"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..3699e227 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":8,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..70bd1930 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":8,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":8,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..2e5639cc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_011717_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":8,"BatchID":8,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":8,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":8,"id":8,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"23\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":14,"BatchID":8,"HostID":1,"ResourceType":"account","HostResourceID":"23","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..0d23682c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "12", + "subscription_user_key_prefix": "sk-177929744", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "12-67e4718760bd7916@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-67e471876" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..1df8a18d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 22:41:17 GMT +Content-Length: 475 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..0ce30bb8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":9,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..ff703f0a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":9,"BatchID":9,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":9,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":9,"id":9,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"24\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":15,"BatchID":9,"HostID":1,"ResourceType":"account","HostResourceID":"24","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..c3c9f0a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 12; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779297442-1feade76'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 12, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..5438f4a4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:709f8bf6682ecbf5dbddd377189b8d39ddaa720b37a9a224620eea92597f9450 +balance_cache_key=billing:balance:12 +subscription_cache_key=billing:sub:12:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..3d0e32c4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":18,"user_id":12,"group_id":6,"starts_at":"2026-05-20T22:41:19.614207+00:00","expires_at":"2026-06-19T22:41:19.614207+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-20T22:41:19.614207+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-20T22:41:19.614207+00:00","updated_at":"2026-05-20T22:41:19.614207+00:00","deleted_at":null}, "key" : {"id":11,"user_id":12,"key":"sk-1779297442-1feade76","name":"relay-sub-1779297442-1feade76-key","group_id":6,"status":"active","created_at":"2026-05-20T17:17:23.974024+00:00","updated_at":"2026-05-20T22:41:19.614207+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..b0ed8e8c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: dc49e7eb-6d02-4972-8213-b49bd6942966 +Date: Wed, 20 May 2026 22:41:22 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..90d62664 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: dbc0ee2b-cb43-4793-a6a5-b7a5dbcc1df6 +Date: Wed, 20 May 2026 22:41:26 GMT +Content-Length: 103 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..2a8c1710 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream access forbidden, please contact administrator","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..65349321 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":9,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..63b0b9ee --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":9,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":9,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..ff703f0a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064109_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":9,"BatchID":9,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":9,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":9,"id":9,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"24\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":15,"BatchID":9,"HostID":1,"ResourceType":"account","HostResourceID":"24","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..221ea1f4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "13", + "subscription_user_key_prefix": "sk-177931692", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "13-2126d1069087f6ea@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-2126d1069" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..d4badd11 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 22:42:12 GMT +Content-Length: 467 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..e9ca36c3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":10,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..2b85277f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":10,"BatchID":10,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":10,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":10,"id":10,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"25\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":16,"BatchID":10,"HostID":1,"ResourceType":"account","HostResourceID":"25","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..46096edb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 13; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779316927-cbeb844b'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 13, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..b9412d0e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:c0139596c399350a62d8b221630f7ebb783b863bc398c2154babf46ba37e56c1 +balance_cache_key=billing:balance:13 +subscription_cache_key=billing:sub:13:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..82c5679c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":12,"user_id":13,"key":"sk-1779316927-cbeb844b","name":"relay-sub-1779316927-cbeb844b-key","group_id":null,"status":"active","created_at":"2026-05-20T22:42:08.792888+00:00","updated_at":"2026-05-20T22:42:08.792888+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..60ab935a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 2aa5f559-f0e6-460f-ba90-5c29d0d03349 +Date: Wed, 20 May 2026 22:42:17 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..a5dc97bb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 8180cca8-befa-4adc-99f4-36c8b437476c +Date: Wed, 20 May 2026 22:42:30 GMT +Content-Length: 88 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6471785e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..47ab3827 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":10,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..82ddb287 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":10,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":10,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..2b85277f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064203_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":10,"BatchID":10,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":10,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":10,"id":10,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"25\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":16,"BatchID":10,"HostID":1,"ResourceType":"account","HostResourceID":"25","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..85e21509 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "31", + "subscription_user_key_prefix": "sk-177931704", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "31-d1700435ef912457@sub2api.local", + "managed_user_id": "32", + "managed_probe_key_prefix": "sk-relay-d1700435e" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..48391c95 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 22:44:11 GMT +Content-Length: 467 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..256476d7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":11,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..edb9a457 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":11,"BatchID":11,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":11,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":11,"id":11,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"26\",\"models\":[{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"},{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":17,"BatchID":11,"HostID":1,"ResourceType":"account","HostResourceID":"26","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..98f7245e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 31; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779317047-73d58f30'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 31, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..f4dd9fe4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:701d9ac5f1d8ab4fb73dac038f4e26d9679c39cfbe7e180cf27d1d4be4e8fd45 +balance_cache_key=billing:balance:31 +subscription_cache_key=billing:sub:31:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..4dfa57bc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : {"id":5,"name":"DeepSeek 默认分组-subscription","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-20T18:54:06.21433+08:00","updated_at":"2026-05-20T18:54:06.21433+08:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":30,"user_id":32,"group_id":5,"starts_at":"2026-05-21T06:44:11.353388+08:00","expires_at":"2026-06-20T06:44:11.353388+08:00","status":"active","daily_window_start":"2026-05-21T00:00:00+08:00","weekly_window_start":"2026-05-21T00:00:00+08:00","monthly_window_start":"2026-05-21T00:00:00+08:00","daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T06:44:11.353388+08:00","notes":"","created_at":"2026-05-21T06:44:11.353392+08:00","updated_at":"2026-05-21T06:44:11.741263+08:00","deleted_at":null}, "key" : {"id":30,"user_id":32,"key":"sk-relay-d1700435ef912457d8fc116f5efb67e1","name":"31-d1700435-key","group_id":5,"status":"active","created_at":"2026-05-21T06:44:11.5569+08:00","updated_at":"2026-05-21T06:44:11.741201+08:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":"2026-05-21T06:44:11.741201+08:00","rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..6bf62660 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: e128d248-1f11-4b17-a30e-95b969c9b9c4 +Date: Wed, 20 May 2026 22:44:16 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..e4ac775d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: cadb7093-bb42-48ca-bee4-b0c787e01c9a +Date: Wed, 20 May 2026 22:44:25 GMT +Content-Length: 88 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6471785e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..bbd4318c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":11,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..921ac081 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":11,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":11,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..edb9a457 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064403_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":11,"BatchID":11,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":11,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":11,"id":11,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"26\",\"models\":[{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"},{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":17,"BatchID":11,"HostID":1,"ResourceType":"account","HostResourceID":"26","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..5ac4e0a4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "33", + "subscription_user_key_prefix": "sk-177931709", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "33-593f287b03f995f0@sub2api.local", + "managed_user_id": "34", + "managed_probe_key_prefix": "sk-relay-593f287b0" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..b7a3e419 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Wed, 20 May 2026 22:45:02 GMT +Content-Length: 476 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..d7dc8195 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":12,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..c74731dd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":12,"BatchID":12,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":12,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":12,"id":12,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"27\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":18,"BatchID":12,"HostID":1,"ResourceType":"account","HostResourceID":"27","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..ff858703 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 33; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779317098-d0dda725'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 33, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..293dc625 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:1ea0b7822e014239fd5ae782f198e44ea8bf0ca8392a3d9c34f46143d02765f1 +balance_cache_key=billing:balance:33 +subscription_cache_key=billing:sub:33:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..38346e07 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组-subscription","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-20T20:39:22.955452+08:00","updated_at":"2026-05-20T20:39:22.955452+08:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":32,"user_id":34,"group_id":6,"starts_at":"2026-05-21T06:45:02.096196+08:00","expires_at":"2026-06-20T06:45:02.096196+08:00","status":"active","daily_window_start":"2026-05-21T00:00:00+08:00","weekly_window_start":"2026-05-21T00:00:00+08:00","monthly_window_start":"2026-05-21T00:00:00+08:00","daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T06:45:02.096196+08:00","notes":"","created_at":"2026-05-21T06:45:02.0962+08:00","updated_at":"2026-05-21T06:45:02.516159+08:00","deleted_at":null}, "key" : {"id":32,"user_id":34,"key":"sk-relay-593f287b03f995f0e95f854aefec0d49","name":"33-593f287b-key","group_id":6,"status":"active","created_at":"2026-05-21T06:45:02.30348+08:00","updated_at":"2026-05-21T06:45:02.516112+08:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":"2026-05-21T06:45:02.516112+08:00","rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..3cf72a59 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: db0b8b22-df25-4571-92e1-68c0b74db8f8 +Date: Wed, 20 May 2026 22:45:07 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..c8cda2d3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: ccc1df98-894f-450f-876e-cdfa020bd465 +Date: Wed, 20 May 2026 22:45:10 GMT +Content-Length: 103 + diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..2a8c1710 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream access forbidden, please contact administrator","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..df69f9dc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":12,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..cf5256d5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":12,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":12,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..c74731dd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_064454_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":12,"BatchID":12,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":12,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":12,"id":12,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"27\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":18,"BatchID":12,"HostID":1,"ResourceType":"account","HostResourceID":"27","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..221ea1f4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "13", + "subscription_user_key_prefix": "sk-177931692", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "13-2126d1069087f6ea@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-2126d1069" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..d578091f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 03:02:08 GMT +Content-Length: 467 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..14adeecc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":13,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..e718806c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":13,"BatchID":13,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":13,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":13,"id":13,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"28\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":19,"BatchID":13,"HostID":1,"ResourceType":"account","HostResourceID":"28","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..46096edb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 13; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779316927-cbeb844b'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 13, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..b9412d0e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:c0139596c399350a62d8b221630f7ebb783b863bc398c2154babf46ba37e56c1 +balance_cache_key=billing:balance:13 +subscription_cache_key=billing:sub:13:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..82c5679c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":12,"user_id":13,"key":"sk-1779316927-cbeb844b","name":"relay-sub-1779316927-cbeb844b-key","group_id":null,"status":"active","created_at":"2026-05-20T22:42:08.792888+00:00","updated_at":"2026-05-20T22:42:08.792888+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..6755a2df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 9b7a44eb-0c05-4925-9e5e-9be14cfbd5a3 +Date: Thu, 21 May 2026 03:02:14 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..458765da --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 9d27ec41-07b2-4916-8957-8baf58099709 +Date: Thu, 21 May 2026 03:02:26 GMT +Content-Length: 88 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6471785e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..a6e5d5d4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":13,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..77777d90 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":13,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":13,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..e718806c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110159_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":13,"BatchID":13,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":13,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":13,"id":13,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"28\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":19,"BatchID":13,"HostID":1,"ResourceType":"account","HostResourceID":"28","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..6cc82436 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "13", + "subscription_user_key_prefix": "sk-177931692", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "13-ddd8e111ba1f2840@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-ddd8e111b" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..b1e6a56d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 03:02:37 GMT +Content-Length: 476 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..99a0a2a2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":14,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..9946405b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":14,"BatchID":14,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":14,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":14,"id":14,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"29\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":20,"BatchID":14,"HostID":1,"ResourceType":"account","HostResourceID":"29","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..9c8cc756 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 13; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779316927-cbeb844b'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 13, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..eabcea17 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:c0139596c399350a62d8b221630f7ebb783b863bc398c2154babf46ba37e56c1 +balance_cache_key=billing:balance:13 +subscription_cache_key=billing:sub:13:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..7d27eeaf --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":19,"user_id":13,"group_id":6,"starts_at":"2026-05-21T03:02:39.652331+00:00","expires_at":"2026-06-20T03:02:39.652331+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T03:02:39.652331+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T03:02:39.652331+00:00","updated_at":"2026-05-21T03:02:39.652331+00:00","deleted_at":null}, "key" : {"id":12,"user_id":13,"key":"sk-1779316927-cbeb844b","name":"relay-sub-1779316927-cbeb844b-key","group_id":6,"status":"active","created_at":"2026-05-20T22:42:08.792888+00:00","updated_at":"2026-05-21T03:02:39.652331+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..08425cab --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 83f18e20-3e74-4d6a-9fd8-9db0fbe1a3eb +Date: Thu, 21 May 2026 03:02:42 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..a915e613 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: ac685214-c78b-4dbc-8ab1-e982c11b53e4 +Date: Thu, 21 May 2026 03:02:49 GMT +Content-Length: 103 + diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..2a8c1710 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream access forbidden, please contact administrator","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..91bdd462 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":14,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..73b124cb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":14,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":14,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..9946405b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_110229_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":14,"BatchID":14,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":14,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":14,"id":14,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"29\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":20,"BatchID":14,"HostID":1,"ResourceType":"account","HostResourceID":"29","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..c04806f8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "15", + "subscription_user_key_prefix": "sk-177935533", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "15-bd88f5939121110b@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-bd88f5939" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..4ef9cd17 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 09:24:45 GMT +Content-Length: 467 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..6beb67bb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":15,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..f13230ac --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":15,"BatchID":15,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":15,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":15,"id":15,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"30\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":21,"BatchID":15,"HostID":1,"ResourceType":"account","HostResourceID":"30","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..99b55b3c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 15; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779355338-ae6aa39f'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 15, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..180b144b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:25f398913d249d87acb2ff1321091eab6324b7918dbb8814593ed6d9154cb423 +balance_cache_key=billing:balance:15 +subscription_cache_key=billing:sub:15:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..d9001f02 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":14,"user_id":15,"key":"sk-1779355338-ae6aa39f","name":"relay-sub-1779355338-ae6aa39f-key","group_id":6,"status":"active","created_at":"2026-05-21T09:22:19.822272+00:00","updated_at":"2026-05-21T09:24:48.326988+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..e35b5598 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: c9744b12-8d1f-4c9c-8c96-9978c0bc77dc +Date: Thu, 21 May 2026 09:24:51 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..cc1dee5f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,18 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: cc5f3ee1-81f7-4d78-aaca-c5618602cb95 +Date: Thu, 21 May 2026 09:24:58 GMT +Content-Length: 103 + +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 38420d35-a529-4661-8c09-7def4161e8ab +Date: Thu, 21 May 2026 09:25:02 GMT +Content-Length: 88 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..6471785e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..bc052c61 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":15,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..d50b363d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":15,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":15,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..f13230ac --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":15,"BatchID":15,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":15,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":15,"id":15,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"30\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":21,"BatchID":15,"HostID":1,"ResourceType":"account","HostResourceID":"30","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..af1d04c7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/17-upstream-models.headers.txt @@ -0,0 +1,19 @@ +HTTP/1.1 200 OK +Server: Tengine +Content-Type: application/json; charset=utf-8 +Content-Length: 289 +Connection: keep-alive +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: POST,GET,PUT,OPTIONS,DELETE +Access-Control-Allow-Origin: * +Date: Thu, 21 May 2026 09:25:03 GMT +X-New-Api-Version: v0.0.0 +X-Oneapi-Request-Id: 202605210925035218104328268d9d6Itmt5HbI +Via: ens-cache41.l2cn7147[198,198,200-0,M], ens-cache63.l2cn7147[200,0], kunlun7.cn192[225,225,200-0,M], kunlun10.cn192[227,0] +Ali-Swift-Global-Savetime: 1779355506 +X-Cache: MISS TCP_REFRESH_MISS dirn:-2:-2 +X-Swift-SaveTime: Thu, 21 May 2026 09:25:06 GMT +X-Swift-CacheTime: -1 +Timing-Allow-Origin: * +EagleId: 3adad01e17793555061318706e + diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..8d20c767 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-pro","object":"model","created":1626777600,"owned_by":"deepseek","supported_endpoint_types":["openai"]},{"id":"deepseek-v4-flash","object":"model","created":1626777600,"owned_by":"deepseek","supported_endpoint_types":["openai"]}],"object":"list","success":true} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..1e6785cf --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,29 @@ +HTTP/1.1 200 OK +Server: Tengine +Content-Type: application/json +Content-Length: 660 +Connection: keep-alive +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: POST,GET,PUT,OPTIONS,DELETE +Access-Control-Allow-Origin: * +Alt-Svc: h3=":443"; ma=86400 +Cf-Cache-Status: DYNAMIC +Cf-Ray: 9ff28842d9d9de32-AMS +Date: Thu, 21 May 2026 09:25:10 GMT +Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800} +Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=() +Referrer-Policy: strict-origin-when-cross-origin +Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=5u%2FiOhWkaJFwSJrW2sclSOyjWPtsE%2BSYAhE5v49%2FIhjDd0XaC6m8XRP7A%2BzFdc5k42lB9cSuDTXOmh2%2BR5n%2FSzcDQ3%2F8WwpEkJD1peYRmXlemOIogrDXUkfxlcsqUM0%2F"}]} +Vary: Origin +X-Content-Type-Options: nosniff +X-Frame-Options: SAMEORIGIN +X-New-Api-Version: v0.0.0 +X-Oneapi-Request-Id: 202605210925072401963428268d9d602RwUp9A +Via: cache86.l2cn8786[947,947,200-0,M], cache86.l2cn8786[949,0], kunlun8.cn192[973,972,200-0,M], kunlun8.cn192[974,0] +Ali-Swift-Global-Savetime: 1779355510 +X-Cache: MISS TCP_MISS dirn:-2:-2 +X-Swift-SaveTime: Thu, 21 May 2026 09:25:10 GMT +X-Swift-CacheTime: 0 +Timing-Allow-Origin: * +EagleId: 3adad01c17793555099483343e + diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..38df628e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"choices":[{"finish_reason":"length","index":0,"logprobs":null,"message":{"annotations":null,"audio":null,"content":null,"function_call":null,"reasoning":"We need to respond as deepseek-v","reasoning_content":"We need to respond as deepseek-v","refusal":null,"role":"assistant","tool_calls":[]},"stop_reason":null,"token_ids":null}],"created":1779355510,"id":"chatcmpl-ab8460eec5f91928","kv_transfer_params":null,"model":"deepseek-v4-pro","object":"chat.completion","prompt_logprobs":null,"prompt_token_ids":null,"service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":8,"prompt_tokens":199,"prompt_tokens_details":null,"total_tokens":207}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/21-summary.json new file mode 100644 index 00000000..35d5c895 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172436_remote43_deepseek_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_172436_remote43_deepseek_key_import", "provider_id": "deepseek", "batch_id": 15, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": false, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": false, "direct_chat_status": 502, "upstream_models": ["deepseek-v4-pro", "deepseek-v4-flash"], "upstream_models_has_expected_model": true, "upstream_chat_status": 200, "completion_classification": "unknown", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "5", "import_group_id": "5"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..3630f99f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "15", + "subscription_user_key_prefix": "sk-177935533", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "15-469282dfda2aed7c@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-469282dfd" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..580ca690 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 09:24:46 GMT +Content-Length: 476 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..4b6fc1d8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":16,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..07ef1540 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":16,"BatchID":16,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":16,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":16,"id":16,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"31\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":22,"BatchID":16,"HostID":1,"ResourceType":"account","HostResourceID":"31","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..f9b89dc8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 15; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779355338-ae6aa39f'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 15, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..951e5a99 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:25f398913d249d87acb2ff1321091eab6324b7918dbb8814593ed6d9154cb423 +balance_cache_key=billing:balance:15 +subscription_cache_key=billing:sub:15:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..eba35b4a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":20,"user_id":15,"group_id":6,"starts_at":"2026-05-21T09:24:48.326988+00:00","expires_at":"2026-06-20T09:24:48.326988+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T09:24:48.326988+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T09:24:48.326988+00:00","updated_at":"2026-05-21T09:24:48.326988+00:00","deleted_at":null}, "key" : {"id":14,"user_id":15,"key":"sk-1779355338-ae6aa39f","name":"relay-sub-1779355338-ae6aa39f-key","group_id":6,"status":"active","created_at":"2026-05-21T09:22:19.822272+00:00","updated_at":"2026-05-21T09:24:48.326988+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..e35b5598 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: c9744b12-8d1f-4c9c-8c96-9978c0bc77dc +Date: Thu, 21 May 2026 09:24:51 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..f0717a70 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: cc5f3ee1-81f7-4d78-aaca-c5618602cb95 +Date: Thu, 21 May 2026 09:24:58 GMT +Content-Length: 103 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..2a8c1710 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream access forbidden, please contact administrator","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..3af0e05c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":16,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..9e730b86 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":16,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":16,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..07ef1540 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":16,"BatchID":16,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":16,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":16,"id":16,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"31\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":22,"BatchID":16,"HostID":1,"ResourceType":"account","HostResourceID":"31","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..ac67d67a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/17-upstream-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/2 200 +server: nginx +date: Thu, 21 May 2026 09:25:01 GMT +content-type: application/json; charset=utf-8 +content-length: 560 +x-new-api-version: v0.0.0 +x-oneapi-request-id: 20260521092501118968620sFBhk1vp +x-cache: MISS + diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9d410bb3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.1","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai"]},{"id":"MiniMax-M2.5","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai"]},{"id":"MiniMax-M2.5-highspeed","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai","anthropic"]},{"id":"MiniMax-M2.7-highspeed","object":"model","created":1626777600,"owned_by":"custom","supported_endpoint_types":["openai","anthropic"]}],"object":"list","success":true} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..80314892 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,8 @@ +HTTP/2 403 +server: nginx +date: Thu, 21 May 2026 09:25:04 GMT +content-type: application/json; charset=utf-8 +content-length: 182 +x-new-api-version: v0.0.0 +x-oneapi-request-id: 20260521092504160964260xgg6eVB9 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..d318ced5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"error":{"message":"用户额度不足, 剩余额度: $0.000000 (request id: 20260521092504160964260xgg6eVB9)","type":"new_api_error","param":"","code":"insufficient_user_quota"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/21-summary.json new file mode 100644 index 00000000..b316658c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172437_remote43_minimax_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_172437_remote43_minimax_key_import", "provider_id": "minimax", "batch_id": 16, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": false, "direct_chat_status": 502, "upstream_models": ["MiniMax-M2.1", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "upstream_models_has_expected_model": true, "upstream_chat_status": 403, "completion_classification": "upstream_key_quota_issue", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "6", "import_group_id": "6"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..24c820ae --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-bvv6BDVS9", + "upstream_key_suffix": "G0zg9l" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..4917798e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18102", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "14", + "subscription_user_key_prefix": "sk-177935533", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "14-0a4d301c67c86402@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-0a4d301c6" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..6a1b29e7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 09:26:53 GMT +Content-Length: 712 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..f84c221d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":17,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true,"completion_ok":false,"completion_status":502,"completion_content_type":"application/json; charset=utf-8","completion_body_preview":"{\"error\":{\"message\":\"Upstream access forbidden, please contact administrator\",\"type\":\"upstream_error\"}}"},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..dc4edb04 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":17,"BatchID":17,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream access forbidden, please contact administrator\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":17,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":17,"id":17,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"32\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":23,"BatchID":17,"HostID":1,"ResourceType":"account","HostResourceID":"32","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..f54f09a4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 14; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779355337-7cd8f595'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 14, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..450c0ecb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:8390b610fdf0ee0698828ac381612ac664955e40b6e3588c3b82c8609fbaba38 +balance_cache_key=billing:balance:14 +subscription_cache_key=billing:sub:14:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..8c86675d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":21,"user_id":14,"group_id":6,"starts_at":"2026-05-21T09:26:55.881692+00:00","expires_at":"2026-06-20T09:26:55.881692+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T09:26:55.881692+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T09:26:55.881692+00:00","updated_at":"2026-05-21T09:26:55.881692+00:00","deleted_at":null}, "key" : {"id":13,"user_id":14,"key":"sk-1779355337-7cd8f595","name":"relay-sub-1779355337-7cd8f595-key","group_id":6,"status":"active","created_at":"2026-05-21T09:22:18.783933+00:00","updated_at":"2026-05-21T09:26:55.881692+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..5275b525 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: c6b196cd-657c-4a19-86f8-4c167dcc0aab +Date: Thu, 21 May 2026 09:26:59 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..b82db14f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 503 Service Unavailable +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 878005ac-fca5-49b2-ae5d-58befae1e890 +Date: Thu, 21 May 2026 09:27:01 GMT +Content-Length: 74 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..6da31f0d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Service temporarily unavailable","type":"api_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..77e72d3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":17,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..992163eb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":17,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream access forbidden, please contact administrator\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":17,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..776e8709 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":false,"message":"access status broken does not satisfy mode subscription"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..dc4edb04 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":17,"BatchID":17,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream access forbidden, please contact administrator\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":17,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":17,"id":17,"key_fingerprint":"sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316","probe_summary_json":"{\"account_id\":\"32\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":23,"BatchID":17,"HostID":1,"ResourceType":"account","HostResourceID":"32","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..51a46942 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/17-upstream-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/2 200 +server: nginx +date: Thu, 21 May 2026 09:27:05 GMT +content-type: application/json; charset=utf-8 +content-length: 560 +x-new-api-version: v0.0.0 +x-oneapi-request-id: 20260521092705359755170wRXs9zR9 +x-cache: MISS + diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9d410bb3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.1","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai"]},{"id":"MiniMax-M2.5","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai"]},{"id":"MiniMax-M2.5-highspeed","object":"model","created":1626777600,"owned_by":"minimax","supported_endpoint_types":["openai","anthropic"]},{"id":"MiniMax-M2.7-highspeed","object":"model","created":1626777600,"owned_by":"custom","supported_endpoint_types":["openai","anthropic"]}],"object":"list","success":true} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..6ec9c08c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,8 @@ +HTTP/2 403 +server: nginx +date: Thu, 21 May 2026 09:27:08 GMT +content-type: application/json; charset=utf-8 +content-length: 182 +x-new-api-version: v0.0.0 +x-oneapi-request-id: 202605210927085853179925JSK7L28 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..32bfddaa --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"error":{"message":"用户额度不足, 剩余额度: $0.000000 (request id: 202605210927085853179925JSK7L28)","type":"new_api_error","param":"","code":"insufficient_user_quota"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/21-summary.json new file mode 100644 index 00000000..c5bfa146 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172646_remote43_minimax_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_172646_remote43_minimax_key_import", "provider_id": "minimax", "batch_id": 17, "batch_status": "partially_succeeded", "access_status_from_import": "broken", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": false, "direct_chat_status": 503, "upstream_models": ["MiniMax-M2.1", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "upstream_models_has_expected_model": true, "upstream_chat_status": 403, "completion_classification": "upstream_key_quota_issue", "latest_access_status": "broken", "preview_available": false, "accepted_keys_count": 1, "subscription_group_id": "6", "import_group_id": "6"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..8b0871c5 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:DEEPSEEK_API_KEY", + "provider_id": "deepseek", + "upstream_key_prefix": "sk-IknW1INpO", + "upstream_key_suffix": "oHExDZ" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..3ad8a0a6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18102", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "16", + "subscription_user_key_prefix": "sk-177935563", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "16-73ace0980e7e7ee0@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-73ace0980" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..5ecc0c10 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 09:27:27 GMT +Content-Length: 688 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..daeae438 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":18,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true,"completion_ok":false,"completion_status":502,"completion_content_type":"application/json; charset=utf-8","completion_body_preview":"{\"error\":{\"message\":\"Upstream service temporarily unavailable\",\"type\":\"upstream_error\"}}"},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..bdfe775d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":18,"BatchID":18,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream service temporarily unavailable\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":18,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":18,"id":18,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"33\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":24,"BatchID":18,"HostID":1,"ResourceType":"account","HostResourceID":"33","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..c4d5678b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 16; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779355634-87dedb3c'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 16, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..f0c5454a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:3250e5617d75087611cfc6301ff476fdf37ba953c84fa244e77bf40c1acae546 +balance_cache_key=billing:balance:16 +subscription_cache_key=billing:sub:16:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..766f2cc7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":15,"user_id":16,"key":"sk-1779355634-87dedb3c","name":"relay-sub-1779355634-87dedb3c-key","group_id":null,"status":"active","created_at":"2026-05-21T09:27:15.267757+00:00","updated_at":"2026-05-21T09:27:15.267757+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..6986b86e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: cc059af9-ff96-48f5-b1cf-4df48740e6b2 +Date: Thu, 21 May 2026 09:27:32 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..797cff72 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 1c8d7af1-724a-42a4-b15c-39c9d4308e58 +Date: Thu, 21 May 2026 09:27:40 GMT +Content-Length: 103 + diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..2a8c1710 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream access forbidden, please contact administrator","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..3cf8bf56 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":18,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..2843d15b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":18,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream service temporarily unavailable\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":18,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..2630ae1a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":false,"message":"access status broken does not satisfy mode subscription"} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..bdfe775d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":18,"BatchID":18,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream service temporarily unavailable\\\",\\\"type\\\":\\\"upstream_error\\\"}}\",\"completion_status\":502,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":18,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":18,"id":18,"key_fingerprint":"sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202","probe_summary_json":"{\"account_id\":\"33\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":24,"BatchID":18,"HostID":1,"ResourceType":"account","HostResourceID":"33","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..7ee3bdf2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/17-upstream-models.headers.txt @@ -0,0 +1,19 @@ +HTTP/1.1 200 OK +Server: Tengine +Content-Type: application/json; charset=utf-8 +Content-Length: 289 +Connection: keep-alive +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: POST,GET,PUT,OPTIONS,DELETE +Access-Control-Allow-Origin: * +Date: Thu, 21 May 2026 09:27:43 GMT +X-New-Api-Version: v0.0.0 +X-Oneapi-Request-Id: 202605210927434004572498268d9d6CN4e20Vz +Via: ens-cache41.l2cn7147[193,192,200-0,M], ens-cache18.l2cn7147[195,0], kunlun7.cn192[222,221,200-0,M], kunlun3.cn192[224,0] +Ali-Swift-Global-Savetime: 1779355666 +X-Cache: MISS TCP_REFRESH_MISS dirn:-2:-2 +X-Swift-SaveTime: Thu, 21 May 2026 09:27:46 GMT +X-Swift-CacheTime: -1 +Timing-Allow-Origin: * +EagleId: 3adad01717793556660186348e + diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..8d20c767 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-pro","object":"model","created":1626777600,"owned_by":"deepseek","supported_endpoint_types":["openai"]},{"id":"deepseek-v4-flash","object":"model","created":1626777600,"owned_by":"deepseek","supported_endpoint_types":["openai"]}],"object":"list","success":true} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..e5d59e9c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,20 @@ +HTTP/1.1 403 Forbidden +Server: Tengine +Content-Type: application/json; charset=utf-8 +Content-Length: 191 +Connection: keep-alive +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: POST,GET,PUT,OPTIONS,DELETE +Access-Control-Allow-Origin: * +Date: Thu, 21 May 2026 09:27:47 GMT +X-New-Api-Version: v0.0.0 +X-Oneapi-Request-Id: 202605210927472614390998268d9d6CPvEQoNv +Via: cache83.l2cn8786[66,66,403-1280,M], cache83.l2cn8786[67,0], kunlun9.cn192[89,88,403-1280,M], kunlun9.cn192[90,0] +Ali-Swift-Global-Savetime: 1779355670 +X-Cache: MISS TCP_MISS dirn:-2:-2 +X-Swift-Error: orig response 4XX error +X-Swift-SaveTime: Thu, 21 May 2026 09:27:50 GMT +X-Swift-CacheTime: 0 +Timing-Allow-Origin: * +EagleId: 3adad01d17793556699971730e + diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..c10d50f9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"error":{"message":"用户额度不足, 剩余额度: 💰0.000000 (request id: 202605210927472614390998268d9d6CPvEQoNv)","type":"new_api_error","param":"","code":"insufficient_user_quota"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/21-summary.json new file mode 100644 index 00000000..330e9938 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_172709_remote43_deepseek_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_172709_remote43_deepseek_key_import", "provider_id": "deepseek", "batch_id": 18, "batch_status": "partially_succeeded", "access_status_from_import": "broken", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["deepseek-v4-flash", "deepseek-v4-pro"], "direct_chat_http200": false, "direct_chat_status": 502, "upstream_models": ["deepseek-v4-pro", "deepseek-v4-flash"], "upstream_models_has_expected_model": true, "upstream_chat_status": 403, "completion_classification": "upstream_key_quota_issue", "latest_access_status": "broken", "preview_available": false, "accepted_keys_count": 1, "subscription_group_id": "5", "import_group_id": "5"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..9a7f3b4b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_53HK_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-4175b7d84", + "upstream_key_suffix": "42d776" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..e26c9fb3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "16", + "subscription_user_key_prefix": "sk-177935563", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "16-8a2904e87cb6c8ff@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-8a2904e87" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..263a1e5e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 10:28:58 GMT +Content-Length: 1037 + diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..32be3a1f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":19,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true,"completion_ok":true,"completion_status":200,"completion_content_type":"text/event-stream","completion_body_preview":"{\"id\":\"065e1168ecb61aa030fee01e0fcd8813\",\"object\":\"chat.completion\",\"created\":1779359338,\"model\":\"MiniMax-M2.7-highspeed\",\"choices\":[{\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"pong\",\"reasoning_content\":\"The user just says \\\"ping\\\". Usually they want a ping response. It's a simple test. I can respond \\\"pong\\\" or something. The user might be checking connectivity. So I'll respond with \\\"pon"},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..e7ca1f27 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":19,"BatchID":19,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1168ecb61aa030fee01e0fcd8813\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779359338,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user just says \\\\\\\"ping\\\\\\\". Usually they want a ping response. It's a simple test. I can respond \\\\\\\"pong\\\\\\\" or something. The user might be checking connectivity. So I'll respond with \\\\\\\"pon\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":19,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":19,"id":19,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"34\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":25,"BatchID":19,"HostID":1,"ResourceType":"account","HostResourceID":"34","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..fa4a529d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 16; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779355634-87dedb3c'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 16, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..2e7b2c61 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:3250e5617d75087611cfc6301ff476fdf37ba953c84fa244e77bf40c1acae546 +balance_cache_key=billing:balance:16 +subscription_cache_key=billing:sub:16:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..78a523e6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":22,"user_id":16,"group_id":6,"starts_at":"2026-05-21T10:29:00.703899+00:00","expires_at":"2026-06-20T10:29:00.703899+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T10:29:00.703899+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T10:29:00.703899+00:00","updated_at":"2026-05-21T10:29:00.703899+00:00","deleted_at":null}, "key" : {"id":15,"user_id":16,"key":"sk-1779355634-87dedb3c","name":"relay-sub-1779355634-87dedb3c-key","group_id":6,"status":"active","created_at":"2026-05-21T09:27:15.267757+00:00","updated_at":"2026-05-21T10:29:00.703899+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..22bd9fa9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 637fc06d-b0c1-442a-8740-3884c894f3ed +Date: Thu, 21 May 2026 10:29:03 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..1aeb9a01 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,12 @@ +HTTP/1.1 200 OK +Cache-Control: max-age=0 +Content-Type: text/event-stream +Date: Thu, 21 May 2026 10:29:06 GMT +Referrer-Policy: strict-origin-when-cross-origin +Vary: Accept-Encoding +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: f3dd8a3d-ad14-4108-a847-aee8a1476583 +X-Request-Id: 84c0d96b-da38-45d6-84d4-539037c8ba7e +Content-Length: 866 + diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..40be27a3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"id":"065e1173a1f8ffc194a752c7849c6fbd","object":"chat.completion","created":1779359350,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","content":"Pong! 🏓\n\nJust testing connectivity, I see! I'm here and ready to help. What can I do","reasoning_content":"The user just said \"ping\". This is a classic network diagnostic command used to test connectivity. It's also often used as a simple way to check if someone is listening/responsive. \n\nAs a helpful assistant, I should acknowledge this with a friendly response. I could:\n1. Just say \"pong\" in a playful way\n2. Explain what ping does\n3. Offer to help with something\n\nGiven the simplicity of the message, I'll keep it light and friendly while still being helpful."},"finish_reason":"stop"}],"usage":{"prompt_tokens":42,"completion_tokens":128,"total_tokens":170}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..ed4f718f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":19,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..447a294c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":19,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1168ecb61aa030fee01e0fcd8813\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779359338,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user just says \\\\\\\"ping\\\\\\\". Usually they want a ping response. It's a simple test. I can respond \\\\\\\"pong\\\\\\\" or something. The user might be checking connectivity. So I'll respond with \\\\\\\"pon\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":19,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..e7ca1f27 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":19,"BatchID":19,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1168ecb61aa030fee01e0fcd8813\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779359338,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user just says \\\\\\\"ping\\\\\\\". Usually they want a ping response. It's a simple test. I can respond \\\\\\\"pong\\\\\\\" or something. The user might be checking connectivity. So I'll respond with \\\\\\\"pon\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":19,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":19,"id":19,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"34\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":25,"BatchID":19,"HostID":1,"ResourceType":"account","HostResourceID":"34","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..c56dc2b8 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/17-upstream-models.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: application/json; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: f31def11-dc86-42c6-bc18-3298d0ff6cfd +age: 0 +content-length: 1282 +date: Thu, 21 May 2026 10:29:13 GMT +eo-log-uuid: 1705810324805416610 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9fddc31f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"Claude Opeus 4","type":"model","display_name":"Claude Opeus 4","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5","type":"model","display_name":"MiniMax-M2.5","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7:MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7:MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"claude-opus-4","type":"model","display_name":"claude-opus-4","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..c5ec8f43 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: text/event-stream; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: 997e5eca-0dfe-49fb-a12d-a76f1cb1eda0 +age: 0 +content-length: 449 +date: Thu, 21 May 2026 10:29:17 GMT +eo-log-uuid: 12561668712582276679 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..ec60ce15 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"id":"065e117d5a818d1621348c35d9f74060","object":"chat.completion","created":1779359358,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","content":"pong","reasoning_content":"The user just said \"ping\". This is a simple request to check if I'm responsive. I should respond with \"pong\" or similar acknowledgment."},"finish_reason":"stop"}],"usage":{"prompt_tokens":42,"completion_tokens":34,"total_tokens":76}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/21-summary.json new file mode 100644 index 00000000..3b309ce7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_182844_remote43_minimax_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_182844_remote43_minimax_key_import", "provider_id": "minimax", "batch_id": 19, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": true, "direct_chat_status": 200, "upstream_models": ["Claude Opeus 4", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed", "MiniMax-M2.7:MiniMax-M2.7", "MiniMax-M2.7MiniMax-M2.7", "claude-opus-4"], "upstream_models_has_expected_model": true, "upstream_chat_status": 200, "completion_classification": "unknown", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "6", "import_group_id": "6"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..9a7f3b4b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_53HK_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-4175b7d84", + "upstream_key_suffix": "42d776" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..b4c5e1a3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18103", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "17", + "subscription_user_key_prefix": "sk-177936154", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "17-c3f309c79ac6319c@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-c3f309c79" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..c081cfc1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 11:08:20 GMT +Content-Length: 1033 + diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..c09081c1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":20,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true,"completion_ok":true,"completion_status":200,"completion_content_type":"text/event-stream","completion_body_preview":"{\"id\":\"065e1aa2adc8bf9f725ba252b1e16c3a\",\"object\":\"chat.completion\",\"created\":1779361700,\"model\":\"MiniMax-M2.7-highspeed\",\"choices\":[{\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"pong! 👋\\n\\nI'm here and ready to help. What can I do for you today?\",\"reasoning_content\":\"The user just said \\\"ping\\\". This is a simple test message, often used to check if the system is responsive. I should resp"},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..23d7de7d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":20,"BatchID":20,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1aa2adc8bf9f725ba252b1e16c3a\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361700,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong! 👋\\\\n\\\\nI'm here and ready to help. What can I do for you today?\\\",\\\"reasoning_content\\\":\\\"The user just said \\\\\\\"ping\\\\\\\". This is a simple test message, often used to check if the system is responsive. I should resp\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":20,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":20,"id":20,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"35\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":26,"BatchID":20,"HostID":1,"ResourceType":"account","HostResourceID":"35","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..dd2db869 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 17; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779361540-a233419a'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 17, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..00a99f85 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:4eca0038db82dea3c77d9566725436a5fae1cf969e46f642e423d198537d879b +balance_cache_key=billing:balance:17 +subscription_cache_key=billing:sub:17:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..18a991ed --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":23,"user_id":17,"group_id":6,"starts_at":"2026-05-21T11:08:23.067717+00:00","expires_at":"2026-06-20T11:08:23.067717+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T11:08:23.067717+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T11:08:23.067717+00:00","updated_at":"2026-05-21T11:08:23.067717+00:00","deleted_at":null}, "key" : {"id":16,"user_id":17,"key":"sk-1779361540-a233419a","name":"relay-sub-1779361540-a233419a-key","group_id":6,"status":"active","created_at":"2026-05-21T11:05:41.798962+00:00","updated_at":"2026-05-21T11:08:23.067717+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..37159021 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 75c7d6c8-b228-4b42-a81f-a4aa9e917b30 +Date: Thu, 21 May 2026 11:08:26 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..225dac99 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,12 @@ +HTTP/1.1 200 OK +Cache-Control: max-age=0 +Content-Type: text/event-stream +Date: Thu, 21 May 2026 11:08:29 GMT +Referrer-Policy: strict-origin-when-cross-origin +Vary: Accept-Encoding +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 6246bed9-71c6-495d-9689-c86204fc28e3 +X-Request-Id: 6a066c5f-3593-4cb7-b2d2-90705c8efc23 +Content-Length: 560 + diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..b919aca4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"id":"065e1aadeb50774bb537bf7509d7ba13","object":"chat.completion","created":1779361711,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","content":"pong! 🏓\n\nI'm here and ready to help. What can I do for you today?","reasoning_content":"The user simply said \"ping\". This is a common way to test connectivity or get a response from a bot. I should respond with a friendly acknowledgment that I'm here and ready to help."},"finish_reason":"stop"}],"usage":{"prompt_tokens":42,"completion_tokens":63,"total_tokens":105}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..dfc1822c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":20,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..c4941410 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":20,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1aa2adc8bf9f725ba252b1e16c3a\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361700,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong! 👋\\\\n\\\\nI'm here and ready to help. What can I do for you today?\\\",\\\"reasoning_content\\\":\\\"The user just said \\\\\\\"ping\\\\\\\". This is a simple test message, often used to check if the system is responsive. I should resp\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":20,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..23d7de7d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":20,"BatchID":20,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1aa2adc8bf9f725ba252b1e16c3a\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361700,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong! 👋\\\\n\\\\nI'm here and ready to help. What can I do for you today?\\\",\\\"reasoning_content\\\":\\\"The user just said \\\\\\\"ping\\\\\\\". This is a simple test message, often used to check if the system is responsive. I should resp\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":20,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":20,"id":20,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"35\",\"models\":[{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":26,"BatchID":20,"HostID":1,"ResourceType":"account","HostResourceID":"35","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..1872ec87 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/17-upstream-models.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: application/json; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: 2db0b15e-f7ce-464c-989e-e8c64c7c24ce +age: 0 +content-length: 1282 +date: Thu, 21 May 2026 11:08:34 GMT +eo-log-uuid: 877428220715300072 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9fddc31f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"Claude Opeus 4","type":"model","display_name":"Claude Opeus 4","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5","type":"model","display_name":"MiniMax-M2.5","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7:MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7:MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"claude-opus-4","type":"model","display_name":"claude-opus-4","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..1ca822d4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: text/event-stream; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: e5e18e36-e6ab-45d5-9bce-dc1761a12b47 +age: 0 +content-length: 855 +date: Thu, 21 May 2026 11:08:38 GMT +eo-log-uuid: 14919005859075373913 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..cb17f69b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"id":"065e1ab7aa277dd84f10993baaa257bd","object":"chat.completion","created":1779361722,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","reasoning_content":"The user says \"ping\". This is a simple request. Usually \"ping\" is a network diagnostic command that tests connectivity. However, in a chat, it could be an instruction to send a \"pong\" back. As an AI assistant, I can respond accordingly. There's no disallowed content. So respond in a friendly way. Perhaps respond: \"pong\". Or also ask how I can help. The instruction \"ping\" might be an implicit request for a \"pong\". So just say \"pong\". Or something like \"pong! How can I help you?\" Usually it's a test of connection. So answer with \"pong\"."},"finish_reason":"length"}],"usage":{"prompt_tokens":42,"completion_tokens":128,"total_tokens":170}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/21-summary.json new file mode 100644 index 00000000..5927b829 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_190809_remote43_minimax_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_190809_remote43_minimax_key_import", "provider_id": "minimax", "batch_id": 20, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": true, "direct_chat_status": 200, "upstream_models": ["Claude Opeus 4", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed", "MiniMax-M2.7:MiniMax-M2.7", "MiniMax-M2.7MiniMax-M2.7", "claude-opus-4"], "upstream_models_has_expected_model": true, "upstream_chat_status": 200, "completion_classification": "unknown", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "6", "import_group_id": "6"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/00-local-key-source.json new file mode 100644 index 00000000..9a7f3b4b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_53HK_API_KEY", + "provider_id": "minimax", + "upstream_key_prefix": "sk-4175b7d84", + "upstream_key_suffix": "42d776" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01-runtime-context.json new file mode 100644 index 00000000..f1c20196 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18105", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax", + "subscription_user_id": "18", + "subscription_user_key_prefix": "sk-177936178", + "subscription_group_id": "6", + "admin_user_id": "1", + "managed_user_email": "18-b47f4d67497b6f47@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-b47f4d674" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/02-import.headers.txt new file mode 100644 index 00000000..3cae2f92 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 11:10:38 GMT +Content-Length: 1039 + diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/03-import.body.json new file mode 100644 index 00000000..cd300a77 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":21,"batch_status":"partially_succeeded","channel":{"id":"5","name":"MiniMax 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true,"completion_ok":true,"completion_status":200,"completion_content_type":"text/event-stream","completion_body_preview":"{\"id\":\"065e1b2c7251bdf51ad871253c7967da\",\"object\":\"chat.completion\",\"created\":1779361838,\"model\":\"MiniMax-M2.7-highspeed\",\"choices\":[{\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"pong\",\"reasoning_content\":\"The user says \\\"ping\\\". This is typical test request. Likely expecting \\\"pong\\\". According to instruction, we respond simply \\\"pong\\\". There's no policy conflict. There's no disallowed con"},"group":{"id":"6","name":"MiniMax 默认分组-subscription"},"plan":{"id":"5","name":"MiniMax 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..38f78578 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":21,"BatchID":21,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1b2c7251bdf51ad871253c7967da\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361838,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user says \\\\\\\"ping\\\\\\\". This is typical test request. Likely expecting \\\\\\\"pong\\\\\\\". According to instruction, we respond simply \\\\\\\"pong\\\\\\\". There's no policy conflict. There's no disallowed con\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":21,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":21,"id":21,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"36\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 503: {\\\"error\\\":{\\\"code\\\":\\\"api_error\\\",\\\"message\\\":\\\"No available accounts: no available accounts supporting model: gpt-5.4 (channel pricing restriction)\\\"}}\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":27,"BatchID":21,"HostID":1,"ResourceType":"account","HostResourceID":"36","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..8cdd82bc --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 18; +UPDATE api_keys +SET group_id = 6, + updated_at = now() +WHERE key = 'sk-1779361786-75c24792'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 18, + 6, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..894b2e3a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,5 @@ +BEGIN +UPDATE 1 +UPDATE 1 +INSERT 0 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..29c12b9f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:1bbaee5b133fe6662104a098c78247618c32e690990d48cc4fcee2139852f6c6 +balance_cache_key=billing:balance:18 +subscription_cache_key=billing:sub:18:6 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..29fa2aba --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 6, "group" : {"id":6,"name":"MiniMax 默认分组","description":"","rate_multiplier":1.0000,"is_exclusive":false,"status":"active","created_at":"2026-05-19T03:16:42.338399+00:00","updated_at":"2026-05-19T03:16:42.338399+00:00","deleted_at":null,"platform":"openai","subscription_type":"subscription","daily_limit_usd":null,"weekly_limit_usd":null,"monthly_limit_usd":null,"default_validity_days":0,"image_price_1k":null,"image_price_2k":null,"image_price_4k":null,"claude_code_only":false,"fallback_group_id":null,"model_routing":{},"model_routing_enabled":false,"fallback_group_id_on_invalid_request":null,"mcp_xml_inject":true,"supported_model_scopes":null,"sort_order":0,"allow_messages_dispatch":false,"default_mapped_model":"","require_oauth_only":false,"require_privacy_set":false,"messages_dispatch_model_config":{},"rpm_limit":0,"allow_image_generation":false,"image_rate_independent":false,"image_rate_multiplier":1.0000}, "subscription" : {"id":24,"user_id":18,"group_id":6,"starts_at":"2026-05-21T11:10:40.564763+00:00","expires_at":"2026-06-20T11:10:40.564763+00:00","status":"active","daily_window_start":null,"weekly_window_start":null,"monthly_window_start":null,"daily_usage_usd":0.0000000000,"weekly_usage_usd":0.0000000000,"monthly_usage_usd":0.0000000000,"assigned_by":1,"assigned_at":"2026-05-21T11:10:40.564763+00:00","notes":"hermes remote subscription validation","created_at":"2026-05-21T11:10:40.564763+00:00","updated_at":"2026-05-21T11:10:40.564763+00:00","deleted_at":null}, "key" : {"id":17,"user_id":18,"key":"sk-1779361786-75c24792","name":"relay-sub-1779361786-75c24792-key","group_id":6,"status":"active","created_at":"2026-05-21T11:09:47.555553+00:00","updated_at":"2026-05-21T11:10:40.564763+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/09-models.headers.txt new file mode 100644 index 00000000..3151f4f1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: c23fd08e-4efd-4822-9e96-88aec56cffe2 +Date: Thu, 21 May 2026 11:10:44 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/11-chat.headers.txt new file mode 100644 index 00000000..1f13f10c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/11-chat.headers.txt @@ -0,0 +1,12 @@ +HTTP/1.1 200 OK +Cache-Control: max-age=0 +Content-Type: text/event-stream +Date: Thu, 21 May 2026 11:10:46 GMT +Referrer-Policy: strict-origin-when-cross-origin +Vary: Accept-Encoding +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 87ecf9eb-df9a-4354-b4ef-b64d21f0f84c +X-Request-Id: 07227c5c-c794-4aef-b62f-e7c1b47074bf +Content-Length: 503 + diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/12-chat.body.json new file mode 100644 index 00000000..0e312b91 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"id":"065e1b37ea32ac98a93e2adfec247776","object":"chat.completion","created":1779361849,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","content":"pong! 👋\n\nI'm here and ready to help. What can I do for you?","reasoning_content":"The user just said \"ping\". This is a simple request, likely testing if I'm responsive. I should respond in a friendly, concise way."},"finish_reason":"stop"}],"usage":{"prompt_tokens":42,"completion_tokens":52,"total_tokens":94}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/13-provider-status.json new file mode 100644 index 00000000..acca2084 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":21,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"MiniMax OpenAI Compatible","platform":"openai","provider_id":"minimax"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/14-access-status.json new file mode 100644 index 00000000..e60ea7c3 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":21,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1b2c7251bdf51ad871253c7967da\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361838,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user says \\\\\\\"ping\\\\\\\". This is typical test request. Likely expecting \\\\\\\"pong\\\\\\\". According to instruction, we respond simply \\\\\\\"pong\\\\\\\". There's no policy conflict. There's no disallowed con\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":21,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"minimax"} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/15-access-preview.json new file mode 100644 index 00000000..1cef7a29 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..38f78578 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":21,"BatchID":21,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"065e1b2c7251bdf51ad871253c7967da\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779361838,\\\"model\\\":\\\"MiniMax-M2.7-highspeed\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"reasoning_content\\\":\\\"The user says \\\\\\\"ping\\\\\\\". This is typical test request. Likely expecting \\\\\\\"pong\\\\\\\". According to instruction, we respond simply \\\\\\\"pong\\\\\\\". There's no policy conflict. There's no disallowed con\",\"completion_status\":200,\"completion_type\":\"text/event-stream\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":21,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"failed","batch_id":21,"id":21,"key_fingerprint":"sha256:3285f7116ec262d059c83dbdaf041eb7fcf6d04e2abdacbbff94891648beaccd","probe_summary_json":"{\"account_id\":\"36\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 503: {\\\"error\\\":{\\\"code\\\":\\\"api_error\\\",\\\"message\\\":\\\"No available accounts: no available accounts supporting model: gpt-5.4 (channel pricing restriction)\\\"}}\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":27,"BatchID":21,"HostID":1,"ResourceType":"account","HostResourceID":"36","ResourceName":"minimax-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..3aa0582c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/17-upstream-models.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: application/json; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: 79f59889-05eb-491c-a000-5c8b1e252168 +age: 0 +content-length: 1282 +date: Thu, 21 May 2026 11:10:52 GMT +eo-log-uuid: 12791220225097071756 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9fddc31f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"Claude Opeus 4","type":"model","display_name":"Claude Opeus 4","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5","type":"model","display_name":"MiniMax-M2.5","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7:MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7:MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7MiniMax-M2.7","type":"model","display_name":"MiniMax-M2.7MiniMax-M2.7","created_at":"2024-01-01T00:00:00Z"},{"id":"claude-opus-4","type":"model","display_name":"claude-opus-4","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..6dcc045c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,16 @@ +HTTP/2 200 +server: nginx/1.24.0 (Ubuntu) +content-type: text/event-stream; charset=utf-8 +referrer-policy: strict-origin-when-cross-origin +x-content-type-options: nosniff +x-frame-options: DENY +x-request-id: 2bc0a39e-5aa3-493e-bbad-c77ca8ccf7ac +age: 0 +content-length: 533 +date: Thu, 21 May 2026 11:10:56 GMT +eo-log-uuid: 10224517951827048695 +eo-cache-status: MISS +cache-control: max-age=0 +nel: {"success_fraction":0.1,"report_to":"eo-nel","max_age":604800} +report-to: {"endpoints":[{"url":"https://nel.teo-rum.com/eo-cgi/nel"}],"group":"eo-nel","max_age":604800} + diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..d32b6612 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"id":"065e1b40961e59f1b16a651c4e77115b","object":"chat.completion","created":1779361858,"model":"MiniMax-M2.7-highspeed","choices":[{"index":0,"message":{"role":"assistant","content":"pong! 🏓\n\nI'm here and ready to help. What can I do for you today?","reasoning_content":"The user just sent \"ping\". This is a simple network utility request - they want to know if I'm responsive. I should respond with a friendly acknowledgment."},"finish_reason":"stop"}],"usage":{"prompt_tokens":42,"completion_tokens":56,"total_tokens":98}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/21-summary.json new file mode 100644 index 00000000..001bebed --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_191026_remote43_minimax_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_191026_remote43_minimax_key_import", "provider_id": "minimax", "batch_id": 21, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": true, "direct_chat_status": 200, "upstream_models": ["Claude Opeus 4", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeed:MiniMax-M2.7-highspeed", "MiniMax-M2.7-highspeedMiniMax-M2.7-highspeed", "MiniMax-M2.7:MiniMax-M2.7", "MiniMax-M2.7MiniMax-M2.7", "claude-opus-4"], "upstream_models_has_expected_model": true, "upstream_chat_status": 200, "completion_classification": "unknown", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "6", "import_group_id": "6"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/00-local-key-source.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/00-local-key-source.json new file mode 100644 index 00000000..e9f3a4ba --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "file:/tmp/deepseek_2166.key", + "provider_id": "deepseek", + "upstream_key_prefix": "rk-aW9xpPDBP", + "upstream_key_suffix": "aUPv1B" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01-runtime-context.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01-runtime-context.json new file mode 100644 index 00000000..2dfe2a5d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "deepseek", + "subscription_user_id": "20", + "subscription_user_key_prefix": "sk-177936446", + "subscription_group_id": "5", + "admin_user_id": "1", + "managed_user_email": "20-d2c672db64e51303@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-d2c672db6" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01a-create-host.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/02-import.headers.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/02-import.headers.txt new file mode 100644 index 00000000..7c574fdd --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 12:09:53 GMT +Content-Length: 1035 + diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/03-import.body.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/03-import.body.json new file mode 100644 index 00000000..1a46342a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"subscription_ready","accounts_count":1,"batch_id":23,"batch_status":"partially_succeeded","channel":{"id":"4","name":"DeepSeek 默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true,"completion_ok":true,"completion_status":200,"completion_content_type":"application/json","completion_body_preview":"{\"id\":\"chatcmpl-2881e443-2f29-9682-8e3d-5959a479db7d\",\"object\":\"chat.completion\",\"created\":1779365393,\"model\":\"deepseek-ai/DeepSeek-V4-Pro\",\"system_fingerprint\":\"\",\"choices\":[{\"index\":0,\"finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"pong\",\"tool_calls\":null,\"reasoning_content\":\"We are asked: \\\"ping\\\". This is a very simple query. The user likely expects a \\\"pong\\\" response, a commo"},"group":{"id":"5","name":"DeepSeek 默认分组-subscription"},"plan":{"id":"4","name":"DeepSeek 默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..6ad63438 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":23,"BatchID":23,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"chatcmpl-2881e443-2f29-9682-8e3d-5959a479db7d\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779365393,\\\"model\\\":\\\"deepseek-ai/DeepSeek-V4-Pro\\\",\\\"system_fingerprint\\\":\\\"\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"finish_reason\\\":\\\"stop\\\",\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"tool_calls\\\":null,\\\"reasoning_content\\\":\\\"We are asked: \\\\\\\"ping\\\\\\\". This is a very simple query. The user likely expects a \\\\\\\"pong\\\\\\\" response, a commo\",\"completion_status\":200,\"completion_type\":\"application/json\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":23,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":23,"id":23,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"38\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 429: {\\\"error\\\":{\\\"message\\\":\\\"Rate limited (429); user=1997/2000 model=49/50; daily_exhausted=False\\\",\\\"type\\\":\\\"rate_limit_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"rate_limit_exceeded\\\"}}\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":29,"BatchID":23,"HostID":1,"ResourceType":"account","HostResourceID":"38","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..8ffe59e6 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 20; +UPDATE api_keys +SET group_id = 5, + updated_at = now() +WHERE key = 'sk-1779364460-a9bac8bd'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 20, + 5, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..76b46f61 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:ca052e60820f3457831e3080de38cc3c14889bef4838b485377afca5567a1481 +balance_cache_key=billing:balance:20 +subscription_cache_key=billing:sub:20:5 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..fe76e94b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 5, "group" : null, "subscription" : null, "key" : {"id":19,"user_id":20,"key":"sk-1779364460-a9bac8bd","name":"relay-sub-1779364460-a9bac8bd-key","group_id":null,"status":"active","created_at":"2026-05-21T11:54:21.758954+00:00","updated_at":"2026-05-21T11:54:21.758954+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/09-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/09-models.headers.txt new file mode 100644 index 00000000..b5380bf2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 80b2de96-5891-447e-940f-e1ae630c4e8e +Date: Thu, 21 May 2026 12:10:00 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/10-models.body.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/10-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/11-chat.headers.txt new file mode 100644 index 00000000..06f44818 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 12:10:04 GMT +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 111e0bc8-0e6c-4e31-95c3-2988789fb819 +Content-Length: 555 + diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/12-chat.body.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/12-chat.body.json new file mode 100644 index 00000000..856318d2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"id":"chatcmpl-cd047e9f-d25e-99b5-993f-92ba6f8c36d0","object":"chat.completion","created":1779365407,"model":"deepseek-ai/DeepSeek-V4-Pro","system_fingerprint":"","choices":[{"index":0,"finish_reason":"stop","message":{"role":"assistant","content":"pong","tool_calls":null,"reasoning_content":"We are asked: \"ping\". This is a very simple query. The user likely wants a \"pong\" response. I should just respond with \"pong\". No need for any additional explanation or formatting."}}],"usage":{"prompt_tokens":5,"completion_tokens":47,"total_tokens":52}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/13-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/13-provider-status.json new file mode 100644 index 00000000..caab3830 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","id":23,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":1,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/14-access-status.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/14-access-status.json new file mode 100644 index 00000000..6657de3e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"subscription_ready","batch_id":23,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"chatcmpl-2881e443-2f29-9682-8e3d-5959a479db7d\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779365393,\\\"model\\\":\\\"deepseek-ai/DeepSeek-V4-Pro\\\",\\\"system_fingerprint\\\":\\\"\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"finish_reason\\\":\\\"stop\\\",\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"tool_calls\\\":null,\\\"reasoning_content\\\":\\\"We are asked: \\\\\\\"ping\\\\\\\". This is a very simple query. The user likely expects a \\\\\\\"pong\\\\\\\" response, a commo\",\"completion_status\":200,\"completion_type\":\"application/json\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}","id":23,"status":"subscription_ready"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/15-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/15-access-preview.json new file mode 100644 index 00000000..59bbb5df --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"subscription","available":true,"message":"latest access status: subscription_ready"} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..6ad63438 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":23,"BatchID":23,"ClosureType":"subscription","Status":"subscription_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"chatcmpl-2881e443-2f29-9682-8e3d-5959a479db7d\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779365393,\\\"model\\\":\\\"deepseek-ai/DeepSeek-V4-Pro\\\",\\\"system_fingerprint\\\":\\\"\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"finish_reason\\\":\\\"stop\\\",\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"pong\\\",\\\"tool_calls\\\":null,\\\"reasoning_content\\\":\\\"We are asked: \\\\\\\"ping\\\\\\\". This is a very simple query. The user likely expects a \\\\\\\"pong\\\\\\\" response, a commo\",\"completion_status\":200,\"completion_type\":\"application/json\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"subscription_ready","batch_status":"partially_succeeded","host_id":1,"id":23,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":23,"id":23,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"38\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 429: {\\\"error\\\":{\\\"message\\\":\\\"Rate limited (429); user=1997/2000 model=49/50; daily_exhausted=False\\\",\\\"type\\\":\\\"rate_limit_error\\\",\\\"param\\\":null,\\\"code\\\":\\\"rate_limit_exceeded\\\"}}\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":29,"BatchID":23,"HostID":1,"ResourceType":"account","HostResourceID":"38","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..a366e722 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/17-upstream-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +date: Thu, 21 May 2026 12:10:12 GMT +server: uvicorn +content-length: 891 +content-type: application/json +x-content-type-options: nosniff +referrer-policy: no-referrer +x-frame-options: DENY + diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..5e58326f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"object":"list","data":[{"id":"deepseek-ai/DeepSeek-V4-Flash","object":"model","created":1777039693,"owned_by":"gongxiang"},{"id":"deepseek-ai/DeepSeek-V4-Flash-Max","object":"model","created":1777039693,"owned_by":"gongxiang"},{"id":"deepseek-ai/DeepSeek-V4-Pro","object":"model","created":1777039670,"owned_by":"gongxiang"},{"id":"deepseek-ai/DeepSeek-V4-Pro-Max","object":"model","created":1777039670,"owned_by":"gongxiang"},{"id":"ZhipuAI/GLM-5.1","object":"model","created":1776264446,"owned_by":"gongxiang"},{"id":"inclusionAI/Ling-2.6-1T","object":"model","created":1779365413,"owned_by":"gongxiang"},{"id":"inclusionAI/Ring-2.6-1T","object":"model","created":1779365413,"owned_by":"gongxiang"},{"id":"moonshotai/Kimi-K2.5","object":"model","created":1770027165,"owned_by":"gongxiang"},{"id":"stepfun-ai/Step-3.5-Flash","object":"model","created":1770216621,"owned_by":"gongxiang"}]} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..7da5d9cb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +date: Thu, 21 May 2026 12:10:17 GMT +server: uvicorn +content-length: 692 +content-type: application/json +x-content-type-options: nosniff +referrer-policy: no-referrer +x-frame-options: DENY + diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..3daf177c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"id":"chatcmpl-b1ea3948-3252-9d03-bdcb-477d8731496c","object":"chat.completion","created":1779365423,"model":"deepseek-ai/DeepSeek-V4-Pro","system_fingerprint":"","choices":[{"index":0,"finish_reason":"length","message":{"role":"assistant","content":"pong! How can I help you","tool_calls":null,"reasoning_content":"We are asked: \"ping\". This is a very simple prompt. The user likely wants to test if the AI is responsive, or perhaps they are just typing \"ping\" expecting a \"pong\" response. I should respond with \"pong\" as a playful acknowledgment. Also, I can add a brief friendly note. I'll keep it concise."}}],"usage":{"prompt_tokens":5,"completion_tokens":82,"total_tokens":87}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/21-summary.json b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/21-summary.json new file mode 100644 index 00000000..f8e2c605 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_200932_remote43_deepseek_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_200932_remote43_deepseek_key_import", "provider_id": "deepseek", "batch_id": 23, "batch_status": "partially_succeeded", "access_status_from_import": "subscription_ready", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["deepseek-v4-flash", "deepseek-v4-pro"], "direct_chat_http200": true, "direct_chat_status": 200, "upstream_models": ["deepseek-ai/DeepSeek-V4-Flash", "deepseek-ai/DeepSeek-V4-Flash-Max", "deepseek-ai/DeepSeek-V4-Pro", "deepseek-ai/DeepSeek-V4-Pro-Max", "ZhipuAI/GLM-5.1", "inclusionAI/Ling-2.6-1T", "inclusionAI/Ring-2.6-1T", "moonshotai/Kimi-K2.5", "stepfun-ai/Step-3.5-Flash"], "upstream_models_has_expected_model": false, "upstream_chat_status": 200, "completion_classification": "unknown", "latest_access_status": "subscription_ready", "preview_available": true, "accepted_keys_count": 1, "subscription_group_id": "5", "import_group_id": "5"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/00-artifact-guide.txt b/artifacts/real-host-acceptance-archive/20260521_202654/00-artifact-guide.txt new file mode 100644 index 00000000..8a05b3c4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/00-artifact-guide.txt @@ -0,0 +1,30 @@ +真实宿主验收产物 -> 速查清单对应 + +清单 1(环境 / host 前置) +- 01-create-host.json +- 02-probe-host.json + +清单 2(channel 宿主契约 / 导入落库) +- 03-install-pack.json +- 04-preview-import.json +- 05-import.json +- 05a-batch-detail-pre-access.json(若拿到 batch_id 且非 dry-run) +- 08-provider-status.json +- 09-reconcile.json +- 10-batch-detail.json(若拿到 batch_id 且非 dry-run) + +清单 3(access / key 闭环状态) +- 06-access-preview.json +- 07-access-status.json + +清单 4(必须分层留证据,不可混用) +- account 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /api/v1/admin/accounts/:id/models +- 普通用户 / managed key 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /v1/models +- completion 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 POST /v1/chat/completions + +红线: +- /api/v1/admin/accounts/:id/models 正确 ≠ /v1/models 正确 +- /v1/models 正确 ≠ /v1/chat/completions 正确 +- admin API 成功 ≠ 普通用户链路成功 + +当前 hook 配置:enabled diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/01-create-host.json b/artifacts/real-host-acceptance-archive/20260521_202654/01-create-host.json new file mode 100644 index 00000000..56fce13d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/01-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260521_202654/02-probe-host.json new file mode 100644 index 00000000..003d7a2d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/02-probe-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260521_202654/03-install-pack.json new file mode 100644 index 00000000..6a9dbdbb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/03-install-pack.json @@ -0,0 +1 @@ +{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.1"} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260521_202654/04-preview-import.json new file mode 100644 index 00000000..688c857d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/04-preview-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"2","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"3","Reason":"matching managed resource already exists"},"plan":{"Action":"reuse","Suggested":"DeepSeek 默认套餐","ExistingID":"2","Reason":"matching managed resource already exists"}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05-import.json b/artifacts/real-host-acceptance-archive/20260521_202654/05-import.json new file mode 100644 index 00000000..b8edd1e4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/05-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":25,"batch_status":"partially_succeeded","channel":{"id":"6","name":"DeepSeek 默认渠道-self-service"},"gateway":{"ok":false,"status_code":401,"models":null,"has_expected_model":false,"completion_ok":false,"completion_status":0},"group":{"id":"7","name":"DeepSeek 默认分组-self-service"},"plan":null,"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05a-batch-detail-pre-access.json b/artifacts/real-host-acceptance-archive/20260521_202654/05a-batch-detail-pre-access.json new file mode 100644 index 00000000..99928ba0 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/05a-batch-detail-pre-access.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":25,"BatchID":25,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":401}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":25,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"passed","batch_id":25,"id":25,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"40\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"smoke_model_seen\":true,\"validation_status\":\"passed\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":31,"BatchID":25,"HostID":1,"ResourceType":"group","HostResourceID":"7","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":32,"BatchID":25,"HostID":1,"ResourceType":"channel","HostResourceID":"6","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":33,"BatchID":25,"HostID":1,"ResourceType":"account","HostResourceID":"40","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05b-after-import-hook.stderr.txt b/artifacts/real-host-acceptance-archive/20260521_202654/05b-after-import-hook.stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05b-after-import-hook.stdout.txt b/artifacts/real-host-acceptance-archive/20260521_202654/05b-after-import-hook.stdout.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05c-self-service-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_202654/05c-self-service-access-prep.sql new file mode 100644 index 00000000..530300a2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/05c-self-service-access-prep.sql @@ -0,0 +1,10 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 21; +UPDATE api_keys +SET group_id = 7, + updated_at = now() +WHERE key = 'sk-self-1779366337-c8b5d767'; +COMMIT; diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05d-self-service-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_202654/05d-self-service-access-prep.psql.txt new file mode 100644 index 00000000..1b6122f0 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/05d-self-service-access-prep.psql.txt @@ -0,0 +1,4 @@ +BEGIN +UPDATE 1 +UPDATE 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/05e-self-service-redis-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_202654/05e-self-service-redis-invalidation.txt new file mode 100644 index 00000000..c67e4f4a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/05e-self-service-redis-invalidation.txt @@ -0,0 +1,3 @@ +auth_cache_key=apikey:auth:c62a77d458390be637c002a915b319d87dc97d9046886633be1a6809ff080bfb +balance_cache_key=billing:balance:21 +0 diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_202654/06-access-preview.json new file mode 100644 index 00000000..47eeda87 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/06-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status subscription_ready does not satisfy mode self_service"} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/07-access-status.json b/artifacts/real-host-acceptance-archive/20260521_202654/07-access-status.json new file mode 100644 index 00000000..6fbd55b7 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/07-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":25,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"self_service","details_json":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":401}","id":25,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_202654/08-provider-status.json new file mode 100644 index 00000000..c327cde0 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/08-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":25,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260521_202654/09-reconcile.json new file mode 100644 index 00000000..cfff1bb2 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/09-reconcile.json @@ -0,0 +1 @@ +{"batch_id":25,"extra_count":3,"missing_count":2,"provider_id":"deepseek","stale_noise_count":0,"status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":3,"host_version":"0.1.126","missing_count":2,"probe_failures":0,"raw_extra_count":3,"stale_noise_accounts":[],"stale_noise_count":0}} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260521_202654/10-batch-detail.json new file mode 100644 index 00000000..9498b598 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/10-batch-detail.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":25,"BatchID":25,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":401}"},{"ID":26,"BatchID":25,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":401}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":25,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"warning","batch_id":25,"id":25,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"40\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":true,\"probe_message\":\"账号已被探测为不支持 OpenAI Responses API(如 DeepSeek/Kimi 等三方兼容上游),账号本身可正常使用,但当前测试接口仅支持 Responses API 路径。请直接通过实际 API 调用验证。\",\"probe_ok\":false,\"probe_status\":\"failed\",\"reconcile_rerun\":true,\"smoke_model_seen\":true,\"validation_status\":\"warning\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":31,"BatchID":25,"HostID":1,"ResourceType":"group","HostResourceID":"7","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":32,"BatchID":25,"HostID":1,"ResourceType":"channel","HostResourceID":"6","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":33,"BatchID":25,"HostID":1,"ResourceType":"account","HostResourceID":"40","ResourceName":"deepseek-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":5,"BatchID":25,"HostID":1,"ProviderID":1,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":3,\"host_version\":\"0.1.126\",\"missing_count\":2,\"probe_failures\":0,\"raw_extra_count\":3,\"stale_noise_accounts\":[],\"stale_noise_count\":0}"}]} diff --git a/artifacts/real-host-acceptance-archive/20260521_202654/11-rollback.json b/artifacts/real-host-acceptance-archive/20260521_202654/11-rollback.json new file mode 100644 index 00000000..0f0f6017 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_202654/11-rollback.json @@ -0,0 +1 @@ +{"batch_id":25,"deleted_accounts":1,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/00-artifact-guide.txt b/artifacts/real-host-acceptance-archive/20260521_203020/00-artifact-guide.txt new file mode 100644 index 00000000..8a05b3c4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/00-artifact-guide.txt @@ -0,0 +1,30 @@ +真实宿主验收产物 -> 速查清单对应 + +清单 1(环境 / host 前置) +- 01-create-host.json +- 02-probe-host.json + +清单 2(channel 宿主契约 / 导入落库) +- 03-install-pack.json +- 04-preview-import.json +- 05-import.json +- 05a-batch-detail-pre-access.json(若拿到 batch_id 且非 dry-run) +- 08-provider-status.json +- 09-reconcile.json +- 10-batch-detail.json(若拿到 batch_id 且非 dry-run) + +清单 3(access / key 闭环状态) +- 06-access-preview.json +- 07-access-status.json + +清单 4(必须分层留证据,不可混用) +- account 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /api/v1/admin/accounts/:id/models +- 普通用户 / managed key 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /v1/models +- completion 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 POST /v1/chat/completions + +红线: +- /api/v1/admin/accounts/:id/models 正确 ≠ /v1/models 正确 +- /v1/models 正确 ≠ /v1/chat/completions 正确 +- admin API 成功 ≠ 普通用户链路成功 + +当前 hook 配置:enabled diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/01-create-host.json b/artifacts/real-host-acceptance-archive/20260521_203020/01-create-host.json new file mode 100644 index 00000000..56fce13d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/01-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260521_203020/02-probe-host.json new file mode 100644 index 00000000..003d7a2d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/02-probe-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260521_203020/03-install-pack.json new file mode 100644 index 00000000..6a9dbdbb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/03-install-pack.json @@ -0,0 +1 @@ +{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.1"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260521_203020/04-preview-import.json new file mode 100644 index 00000000..688c857d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/04-preview-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"2","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"3","Reason":"matching managed resource already exists"},"plan":{"Action":"reuse","Suggested":"DeepSeek 默认套餐","ExistingID":"2","Reason":"matching managed resource already exists"}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05-import.json b/artifacts/real-host-acceptance-archive/20260521_203020/05-import.json new file mode 100644 index 00000000..8dea966b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/05-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":26,"batch_status":"partially_succeeded","channel":{"id":"7","name":"DeepSeek 默认渠道-self-service"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false,"completion_ok":false,"completion_status":0},"group":{"id":"8","name":"DeepSeek 默认分组-self-service"},"plan":null,"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05a-batch-detail-pre-access.json b/artifacts/real-host-acceptance-archive/20260521_203020/05a-batch-detail-pre-access.json new file mode 100644 index 00000000..41fff037 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/05a-batch-detail-pre-access.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":27,"BatchID":26,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":26,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"passed","batch_id":26,"id":26,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"41\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"smoke_model_seen\":true,\"validation_status\":\"passed\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":34,"BatchID":26,"HostID":1,"ResourceType":"group","HostResourceID":"8","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":35,"BatchID":26,"HostID":1,"ResourceType":"channel","HostResourceID":"7","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":36,"BatchID":26,"HostID":1,"ResourceType":"account","HostResourceID":"41","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05b-after-import-hook.stderr.txt b/artifacts/real-host-acceptance-archive/20260521_203020/05b-after-import-hook.stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05b-after-import-hook.stdout.txt b/artifacts/real-host-acceptance-archive/20260521_203020/05b-after-import-hook.stdout.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05c-self-service-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_203020/05c-self-service-access-prep.sql new file mode 100644 index 00000000..ba3d4745 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/05c-self-service-access-prep.sql @@ -0,0 +1,10 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 44; +UPDATE api_keys +SET group_id = 8, + updated_at = now() +WHERE key = 'sk-self-1779366599-e6a8e91f'; +COMMIT; diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05d-self-service-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_203020/05d-self-service-access-prep.psql.txt new file mode 100644 index 00000000..1b6122f0 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/05d-self-service-access-prep.psql.txt @@ -0,0 +1,4 @@ +BEGIN +UPDATE 1 +UPDATE 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/05e-self-service-redis-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_203020/05e-self-service-redis-invalidation.txt new file mode 100644 index 00000000..04669e2c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/05e-self-service-redis-invalidation.txt @@ -0,0 +1,3 @@ +auth_cache_key=apikey:auth:fea8417f49cb14e24a78ce3e9ccc05bcfaa57c0126f1c8869b896a75a31fdb0b +balance_cache_key=billing:balance:44 +1 diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_203020/06-access-preview.json new file mode 100644 index 00000000..47eeda87 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/06-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status subscription_ready does not satisfy mode self_service"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/07-access-status.json b/artifacts/real-host-acceptance-archive/20260521_203020/07-access-status.json new file mode 100644 index 00000000..844c330b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/07-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":26,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"self_service","details_json":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":27,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_203020/08-provider-status.json new file mode 100644 index 00000000..1b3c0a64 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/08-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":26,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260521_203020/09-reconcile.json new file mode 100644 index 00000000..5acb140a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/09-reconcile.json @@ -0,0 +1 @@ +{"batch_id":26,"extra_count":3,"missing_count":4,"provider_id":"deepseek","stale_noise_count":0,"status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":3,"host_version":"0.1.126","missing_count":4,"probe_failures":0,"raw_extra_count":3,"stale_noise_accounts":[],"stale_noise_count":0}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260521_203020/10-batch-detail.json new file mode 100644 index 00000000..499f428f --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/10-batch-detail.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":27,"BatchID":26,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"},{"ID":28,"BatchID":26,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":403}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":26,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"warning","batch_id":26,"id":26,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"41\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":true,\"probe_message\":\"账号已被探测为不支持 OpenAI Responses API(如 DeepSeek/Kimi 等三方兼容上游),账号本身可正常使用,但当前测试接口仅支持 Responses API 路径。请直接通过实际 API 调用验证。\",\"probe_ok\":false,\"probe_status\":\"failed\",\"reconcile_rerun\":true,\"smoke_model_seen\":true,\"validation_status\":\"warning\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":34,"BatchID":26,"HostID":1,"ResourceType":"group","HostResourceID":"8","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":35,"BatchID":26,"HostID":1,"ResourceType":"channel","HostResourceID":"7","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":36,"BatchID":26,"HostID":1,"ResourceType":"account","HostResourceID":"41","ResourceName":"deepseek-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":6,"BatchID":26,"HostID":1,"ProviderID":1,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":3,\"host_version\":\"0.1.126\",\"missing_count\":4,\"probe_failures\":0,\"raw_extra_count\":3,\"stale_noise_accounts\":[],\"stale_noise_count\":0}"}]} diff --git a/artifacts/real-host-acceptance-archive/20260521_203020/11-rollback.json b/artifacts/real-host-acceptance-archive/20260521_203020/11-rollback.json new file mode 100644 index 00000000..eaad8644 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203020/11-rollback.json @@ -0,0 +1 @@ +{"batch_id":26,"deleted_accounts":1,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/00-artifact-guide.txt b/artifacts/real-host-acceptance-archive/20260521_203229/00-artifact-guide.txt new file mode 100644 index 00000000..8a05b3c4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/00-artifact-guide.txt @@ -0,0 +1,30 @@ +真实宿主验收产物 -> 速查清单对应 + +清单 1(环境 / host 前置) +- 01-create-host.json +- 02-probe-host.json + +清单 2(channel 宿主契约 / 导入落库) +- 03-install-pack.json +- 04-preview-import.json +- 05-import.json +- 05a-batch-detail-pre-access.json(若拿到 batch_id 且非 dry-run) +- 08-provider-status.json +- 09-reconcile.json +- 10-batch-detail.json(若拿到 batch_id 且非 dry-run) + +清单 3(access / key 闭环状态) +- 06-access-preview.json +- 07-access-status.json + +清单 4(必须分层留证据,不可混用) +- account 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /api/v1/admin/accounts/:id/models +- 普通用户 / managed key 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /v1/models +- completion 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 POST /v1/chat/completions + +红线: +- /api/v1/admin/accounts/:id/models 正确 ≠ /v1/models 正确 +- /v1/models 正确 ≠ /v1/chat/completions 正确 +- admin API 成功 ≠ 普通用户链路成功 + +当前 hook 配置:enabled diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/01-create-host.json b/artifacts/real-host-acceptance-archive/20260521_203229/01-create-host.json new file mode 100644 index 00000000..56fce13d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/01-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260521_203229/02-probe-host.json new file mode 100644 index 00000000..003d7a2d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/02-probe-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260521_203229/03-install-pack.json new file mode 100644 index 00000000..6a9dbdbb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/03-install-pack.json @@ -0,0 +1 @@ +{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.1"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260521_203229/04-preview-import.json new file mode 100644 index 00000000..688c857d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/04-preview-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"2","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"3","Reason":"matching managed resource already exists"},"plan":{"Action":"reuse","Suggested":"DeepSeek 默认套餐","ExistingID":"2","Reason":"matching managed resource already exists"}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05-import.json b/artifacts/real-host-acceptance-archive/20260521_203229/05-import.json new file mode 100644 index 00000000..f4ec186e --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":27,"batch_status":"partially_succeeded","channel":{"id":"8","name":"DeepSeek 默认渠道-self-service"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false,"completion_ok":false,"completion_status":0},"group":{"id":"9","name":"DeepSeek 默认分组-self-service"},"plan":null,"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05a-batch-detail-pre-access.json b/artifacts/real-host-acceptance-archive/20260521_203229/05a-batch-detail-pre-access.json new file mode 100644 index 00000000..8b4dba40 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05a-batch-detail-pre-access.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":29,"BatchID":27,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":27,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"passed","batch_id":27,"id":27,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"42\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"smoke_model_seen\":true,\"validation_status\":\"passed\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":37,"BatchID":27,"HostID":1,"ResourceType":"group","HostResourceID":"9","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":38,"BatchID":27,"HostID":1,"ResourceType":"channel","HostResourceID":"8","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":39,"BatchID":27,"HostID":1,"ResourceType":"account","HostResourceID":"42","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05b-after-import-hook.stderr.txt b/artifacts/real-host-acceptance-archive/20260521_203229/05b-after-import-hook.stderr.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05b-after-import-hook.stdout.txt b/artifacts/real-host-acceptance-archive/20260521_203229/05b-after-import-hook.stdout.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05c-self-service-access-prep.sql b/artifacts/real-host-acceptance-archive/20260521_203229/05c-self-service-access-prep.sql new file mode 100644 index 00000000..9dce8786 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05c-self-service-access-prep.sql @@ -0,0 +1,10 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 44; +UPDATE api_keys +SET group_id = 9, + updated_at = now() +WHERE key = 'sk-self-1779366599-e6a8e91f'; +COMMIT; diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05d-self-service-access-prep.psql.txt b/artifacts/real-host-acceptance-archive/20260521_203229/05d-self-service-access-prep.psql.txt new file mode 100644 index 00000000..1b6122f0 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05d-self-service-access-prep.psql.txt @@ -0,0 +1,4 @@ +BEGIN +UPDATE 1 +UPDATE 1 +COMMIT diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05e-self-service-redis-invalidation.txt b/artifacts/real-host-acceptance-archive/20260521_203229/05e-self-service-redis-invalidation.txt new file mode 100644 index 00000000..04669e2c --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05e-self-service-redis-invalidation.txt @@ -0,0 +1,3 @@ +auth_cache_key=apikey:auth:fea8417f49cb14e24a78ce3e9ccc05bcfaa57c0126f1c8869b896a75a31fdb0b +balance_cache_key=billing:balance:44 +1 diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/05f-self-service-group-state.json b/artifacts/real-host-acceptance-archive/20260521_203229/05f-self-service-group-state.json new file mode 100644 index 00000000..6fbca86a --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/05f-self-service-group-state.json @@ -0,0 +1 @@ +{"user_id" : 44, "balance" : 10.00000000, "api_key_status" : "active", "api_key_group_id" : 9, "group_exists" : true} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/06-access-preview.json b/artifacts/real-host-acceptance-archive/20260521_203229/06-access-preview.json new file mode 100644 index 00000000..47eeda87 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/06-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status subscription_ready does not satisfy mode self_service"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/07-access-status.json b/artifacts/real-host-acceptance-archive/20260521_203229/07-access-status.json new file mode 100644 index 00000000..29e8fd93 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/07-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":27,"closures_count":1,"latest_access_status":"subscription_ready","latest_closure":{"closure_type":"self_service","details_json":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":29,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/08-provider-status.json b/artifacts/real-host-acceptance-archive/20260521_203229/08-provider-status.json new file mode 100644 index 00000000..a679d43b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/08-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":27,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"subscription_ready","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.1"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/09-reconcile.json b/artifacts/real-host-acceptance-archive/20260521_203229/09-reconcile.json new file mode 100644 index 00000000..091faeac --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/09-reconcile.json @@ -0,0 +1 @@ +{"batch_id":27,"extra_count":3,"missing_count":6,"provider_id":"deepseek","stale_noise_count":0,"status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":3,"host_version":"0.1.126","missing_count":6,"probe_failures":0,"raw_extra_count":3,"stale_noise_accounts":[],"stale_noise_count":0}} diff --git a/artifacts/real-host-acceptance-archive/20260521_203229/10-batch-detail.json b/artifacts/real-host-acceptance-archive/20260521_203229/10-batch-detail.json new file mode 100644 index 00000000..de5d9ebe --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_203229/10-batch-detail.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":29,"BatchID":27,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"},{"ID":30,"BatchID":27,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"\",\"completion_status\":0,\"completion_type\":\"\",\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":403}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":27,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"warning","batch_id":27,"id":27,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"42\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":true,\"probe_message\":\"账号已被探测为不支持 OpenAI Responses API(如 DeepSeek/Kimi 等三方兼容上游),账号本身可正常使用,但当前测试接口仅支持 Responses API 路径。请直接通过实际 API 调用验证。\",\"probe_ok\":false,\"probe_status\":\"failed\",\"reconcile_rerun\":true,\"smoke_model_seen\":true,\"validation_status\":\"warning\"}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":37,"BatchID":27,"HostID":1,"ResourceType":"group","HostResourceID":"9","ResourceName":"DeepSeek 默认分组-self-service"},{"ID":38,"BatchID":27,"HostID":1,"ResourceType":"channel","HostResourceID":"8","ResourceName":"DeepSeek 默认渠道-self-service"},{"ID":39,"BatchID":27,"HostID":1,"ResourceType":"account","HostResourceID":"42","ResourceName":"deepseek-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":7,"BatchID":27,"HostID":1,"ProviderID":1,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":3,\"host_version\":\"0.1.126\",\"missing_count\":6,\"probe_failures\":0,\"raw_extra_count\":3,\"stale_noise_accounts\":[],\"stale_noise_count\":0}"}]} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/00-artifact-guide.txt b/artifacts/real-host-acceptance-archive/20260521_210306/00-artifact-guide.txt new file mode 100644 index 00000000..8a05b3c4 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/00-artifact-guide.txt @@ -0,0 +1,30 @@ +真实宿主验收产物 -> 速查清单对应 + +清单 1(环境 / host 前置) +- 01-create-host.json +- 02-probe-host.json + +清单 2(channel 宿主契约 / 导入落库) +- 03-install-pack.json +- 04-preview-import.json +- 05-import.json +- 05a-batch-detail-pre-access.json(若拿到 batch_id 且非 dry-run) +- 08-provider-status.json +- 09-reconcile.json +- 10-batch-detail.json(若拿到 batch_id 且非 dry-run) + +清单 3(access / key 闭环状态) +- 06-access-preview.json +- 07-access-status.json + +清单 4(必须分层留证据,不可混用) +- account 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /api/v1/admin/accounts/:id/models +- 普通用户 / managed key 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 GET /v1/models +- completion 视角:由 AFTER_IMPORT_HOOK_COMMAND 额外落证据,例如 POST /v1/chat/completions + +红线: +- /api/v1/admin/accounts/:id/models 正确 ≠ /v1/models 正确 +- /v1/models 正确 ≠ /v1/chat/completions 正确 +- admin API 成功 ≠ 普通用户链路成功 + +当前 hook 配置:enabled diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/01-create-host.json b/artifacts/real-host-acceptance-archive/20260521_210306/01-create-host.json new file mode 100644 index 00000000..56fce13d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/01-create-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","auth_type":"bearer","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/02-probe-host.json b/artifacts/real-host-acceptance-archive/20260521_210306/02-probe-host.json new file mode 100644 index 00000000..003d7a2d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/02-probe-host.json @@ -0,0 +1 @@ +{"host_id":"remote43-fresh18097-deepseek-1779280533","base_url":"http://127.0.0.1:18097","host_version":"0.1.126","status":"unsupported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":false,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/03-install-pack.json b/artifacts/real-host-acceptance-archive/20260521_210306/03-install-pack.json new file mode 100644 index 00000000..6a9dbdbb --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/03-install-pack.json @@ -0,0 +1 @@ +{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.1"} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/04-preview-import.json b/artifacts/real-host-acceptance-archive/20260521_210306/04-preview-import.json new file mode 100644 index 00000000..688c857d --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/04-preview-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"2","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"3","Reason":"matching managed resource already exists"},"plan":{"Action":"reuse","Suggested":"DeepSeek 默认套餐","ExistingID":"2","Reason":"matching managed resource already exists"}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/05-import.json b/artifacts/real-host-acceptance-archive/20260521_210306/05-import.json new file mode 100644 index 00000000..ea74d73b --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/05-import.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"self_service_ready","accounts_count":1,"batch_id":28,"batch_status":"succeeded","channel":{"id":"8","name":"DeepSeek 默认渠道-self-service"},"gateway":{"ok":true,"status_code":200,"models":["deepseek-v4-flash","deepseek-v4-pro"],"has_expected_model":true,"completion_ok":true,"completion_status":200,"completion_content_type":"text/event-stream; charset=utf-8","completion_body_preview":"{\"id\":\"resp_77e7210e197948bea99580f9e2b2a18f\",\"object\":\"chat.completion\",\"created\":1779368607,\"model\":\"deepseek-v4-pro\",\"choices\":[{\"index\":0,\"message\":{\"role\":\"assistant\",\"content\":\"Pong! I'm here and ready to help. What can I do for you?\",\"reasoning_content\":\"We are asked to \\\"ping\\\". This is a simple test message, likely to check if the assistant is responsive. I should respond appropriately, p"},"group":{"id":"9","name":"DeepSeek 默认分组-self-service"},"plan":null,"provider_status":"active"} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/05a-batch-detail-pre-access.json b/artifacts/real-host-acceptance-archive/20260521_210306/05a-batch-detail-pre-access.json new file mode 100644 index 00000000..88a20fee --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/05a-batch-detail-pre-access.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":32,"BatchID":28,"ClosureType":"self_service","Status":"self_service_ready","DetailsJSON":"{\"completion_ok\":true,\"completion_preview\":\"{\\\"id\\\":\\\"resp_77e7210e197948bea99580f9e2b2a18f\\\",\\\"object\\\":\\\"chat.completion\\\",\\\"created\\\":1779368607,\\\"model\\\":\\\"deepseek-v4-pro\\\",\\\"choices\\\":[{\\\"index\\\":0,\\\"message\\\":{\\\"role\\\":\\\"assistant\\\",\\\"content\\\":\\\"Pong! I'm here and ready to help. What can I do for you?\\\",\\\"reasoning_content\\\":\\\"We are asked to \\\\\\\"ping\\\\\\\". This is a simple test message, likely to check if the assistant is responsive. I should respond appropriately, p\",\"completion_status\":200,\"completion_type\":\"text/event-stream; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"self_service_ready","batch_status":"succeeded","host_id":1,"id":28,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"passed","batch_id":28,"id":28,"key_fingerprint":"sha256:6c228a62edd9c319e624cc10d761edaca1b96ac590aa196940a7ccb101ae6c92","probe_summary_json":"{\"account_id\":\"43\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"smoke_model_seen\":true,\"validation_status\":\"passed\"}"}],"items_count":1,"managed_count":1,"managed_resources":[{"ID":40,"BatchID":28,"HostID":1,"ResourceType":"account","HostResourceID":"43","ResourceName":"deepseek-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/05b-after-import-hook.stderr.txt b/artifacts/real-host-acceptance-archive/20260521_210306/05b-after-import-hook.stderr.txt new file mode 100644 index 00000000..98fcd876 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/20260521_210306/05b-after-import-hook.stderr.txt @@ -0,0 +1 @@ +failed to resolve group id from /home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_210306/05a-batch-detail-pre-access.json diff --git a/artifacts/real-host-acceptance-archive/20260521_210306/05b-after-import-hook.stdout.txt b/artifacts/real-host-acceptance-archive/20260521_210306/05b-after-import-hook.stdout.txt new file mode 100644 index 00000000..e69de29b diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/01-create-host.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/01-create-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/01-create-host.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/01-create-host.json diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/02-probe-host.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/02-probe-host.json similarity index 100% rename from artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/02-probe-host.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/02-probe-host.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/03-install-pack.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/03-install-pack.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/03-install-pack.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/03-install-pack.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/04-preview-import.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/04-preview-import.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/04-preview-import.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/04-preview-import.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/05-import.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/05-import.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/05-import.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/05-import.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/06-access-preview.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/06-access-preview.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/06-access-preview.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/06-access-preview.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/07-access-status.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/07-access-status.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/07-access-status.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/07-access-status.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/08-provider-status.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/08-provider-status.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/08-provider-status.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/08-provider-status.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/09-reconcile.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/09-reconcile.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/09-reconcile.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/09-reconcile.json diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/10-batch-detail.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/10-batch-detail.json similarity index 100% rename from artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/10-batch-detail.json rename to artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/10-batch-detail.json diff --git a/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/11-rollback.json b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/11-rollback.json new file mode 100644 index 00000000..280e36f9 --- /dev/null +++ b/artifacts/real-host-acceptance-archive/auto_a5f5185f_minimax_self_service/11-rollback.json @@ -0,0 +1 @@ +{"batch_id":1,"deleted_accounts":1,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0} diff --git a/artifacts/real-host-acceptance/20260516_155350/01-create-host.json b/artifacts/real-host-acceptance/20260516_155350/01-create-host.json deleted file mode 100644 index d7db0f06..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/hosts"} diff --git a/artifacts/real-host-acceptance/20260516_155350/02-probe-host.json b/artifacts/real-host-acceptance/20260516_155350/02-probe-host.json deleted file mode 100644 index 327730eb..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/hosts/prod-sub2api/probe"} diff --git a/artifacts/real-host-acceptance/20260516_155350/03-install-pack.json b/artifacts/real-host-acceptance/20260516_155350/03-install-pack.json deleted file mode 100644 index 6a093887..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/packs/install"} diff --git a/artifacts/real-host-acceptance/20260516_155350/04-preview-import.json b/artifacts/real-host-acceptance/20260516_155350/04-preview-import.json deleted file mode 100644 index 92b96f71..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/preview-import"} diff --git a/artifacts/real-host-acceptance/20260516_155350/05-import.json b/artifacts/real-host-acceptance/20260516_155350/05-import.json deleted file mode 100644 index b832e76e..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/05-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/import"} diff --git a/artifacts/real-host-acceptance/20260516_155350/06-access-preview.json b/artifacts/real-host-acceptance/20260516_155350/06-access-preview.json deleted file mode 100644 index 0448b622..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/06-access-preview.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/access/preview"} diff --git a/artifacts/real-host-acceptance/20260516_155350/07-access-status.json b/artifacts/real-host-acceptance/20260516_155350/07-access-status.json deleted file mode 100644 index 6d206e90..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/07-access-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:8080/api/providers/deepseek/access/status"} diff --git a/artifacts/real-host-acceptance/20260516_155350/08-provider-status.json b/artifacts/real-host-acceptance/20260516_155350/08-provider-status.json deleted file mode 100644 index dce98737..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/08-provider-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:8080/api/providers/deepseek/status"} diff --git a/artifacts/real-host-acceptance/20260516_155350/09-reconcile.json b/artifacts/real-host-acceptance/20260516_155350/09-reconcile.json deleted file mode 100644 index 5b62610b..00000000 --- a/artifacts/real-host-acceptance/20260516_155350/09-reconcile.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/reconcile"} diff --git a/artifacts/real-host-acceptance/20260516_170410/01-create-host.json b/artifacts/real-host-acceptance/20260516_170410/01-create-host.json deleted file mode 100644 index 14b99a51..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts"} diff --git a/artifacts/real-host-acceptance/20260516_170410/02-probe-host.json b/artifacts/real-host-acceptance/20260516_170410/02-probe-host.json deleted file mode 100644 index 4da93bb2..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts/local-sub2api/probe"} diff --git a/artifacts/real-host-acceptance/20260516_170410/03-install-pack.json b/artifacts/real-host-acceptance/20260516_170410/03-install-pack.json deleted file mode 100644 index af6333e6..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/packs/install"} diff --git a/artifacts/real-host-acceptance/20260516_170410/04-preview-import.json b/artifacts/real-host-acceptance/20260516_170410/04-preview-import.json deleted file mode 100644 index 82d56f8c..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/preview-import"} diff --git a/artifacts/real-host-acceptance/20260516_170410/05-import.json b/artifacts/real-host-acceptance/20260516_170410/05-import.json deleted file mode 100644 index 29782ec9..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/05-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/import"} diff --git a/artifacts/real-host-acceptance/20260516_170410/06-access-preview.json b/artifacts/real-host-acceptance/20260516_170410/06-access-preview.json deleted file mode 100644 index 5bf0e4e4..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/06-access-preview.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/access/preview"} diff --git a/artifacts/real-host-acceptance/20260516_170410/07-access-status.json b/artifacts/real-host-acceptance/20260516_170410/07-access-status.json deleted file mode 100644 index 1c177e32..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/07-access-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/access/status"} diff --git a/artifacts/real-host-acceptance/20260516_170410/08-provider-status.json b/artifacts/real-host-acceptance/20260516_170410/08-provider-status.json deleted file mode 100644 index f68aa287..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/08-provider-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/status"} diff --git a/artifacts/real-host-acceptance/20260516_170410/09-reconcile.json b/artifacts/real-host-acceptance/20260516_170410/09-reconcile.json deleted file mode 100644 index 561edc52..00000000 --- a/artifacts/real-host-acceptance/20260516_170410/09-reconcile.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/reconcile"} diff --git a/artifacts/real-host-acceptance/20260516_170607/01-create-host.json b/artifacts/real-host-acceptance/20260516_170607/01-create-host.json deleted file mode 100644 index 14b99a51..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts"} diff --git a/artifacts/real-host-acceptance/20260516_170607/02-probe-host.json b/artifacts/real-host-acceptance/20260516_170607/02-probe-host.json deleted file mode 100644 index 4da93bb2..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts/local-sub2api/probe"} diff --git a/artifacts/real-host-acceptance/20260516_170607/03-install-pack.json b/artifacts/real-host-acceptance/20260516_170607/03-install-pack.json deleted file mode 100644 index af6333e6..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/packs/install"} diff --git a/artifacts/real-host-acceptance/20260516_170607/04-preview-import.json b/artifacts/real-host-acceptance/20260516_170607/04-preview-import.json deleted file mode 100644 index 82d56f8c..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/preview-import"} diff --git a/artifacts/real-host-acceptance/20260516_170607/05-import.json b/artifacts/real-host-acceptance/20260516_170607/05-import.json deleted file mode 100644 index 29782ec9..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/05-import.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/import"} diff --git a/artifacts/real-host-acceptance/20260516_170607/06-access-preview.json b/artifacts/real-host-acceptance/20260516_170607/06-access-preview.json deleted file mode 100644 index 5bf0e4e4..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/06-access-preview.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/access/preview"} diff --git a/artifacts/real-host-acceptance/20260516_170607/07-access-status.json b/artifacts/real-host-acceptance/20260516_170607/07-access-status.json deleted file mode 100644 index 1c177e32..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/07-access-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/access/status"} diff --git a/artifacts/real-host-acceptance/20260516_170607/08-provider-status.json b/artifacts/real-host-acceptance/20260516_170607/08-provider-status.json deleted file mode 100644 index f68aa287..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/08-provider-status.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/status"} diff --git a/artifacts/real-host-acceptance/20260516_170607/09-reconcile.json b/artifacts/real-host-acceptance/20260516_170607/09-reconcile.json deleted file mode 100644 index 561edc52..00000000 --- a/artifacts/real-host-acceptance/20260516_170607/09-reconcile.json +++ /dev/null @@ -1 +0,0 @@ -{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/reconcile"} diff --git a/artifacts/real-host-acceptance/20260516_171131/04-preview-import.json b/artifacts/real-host-acceptance/20260516_171131/04-preview-import.json deleted file mode 100644 index b3560528..00000000 --- a/artifacts/real-host-acceptance/20260516_171131/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"crm-deepseek-channel","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"crm-deepseek-group","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"crm-deepseek-plan","ExistingID":"","Reason":""}},"names":{"Group":"crm-deepseek-group","Channel":"crm-deepseek-channel","Plan":"crm-deepseek-plan"}} diff --git a/artifacts/real-host-acceptance/20260517_061947_postfix/03-install-pack.json b/artifacts/real-host-acceptance/20260517_061947_postfix/03-install-pack.json deleted file mode 100644 index 3cfa0535..00000000 --- a/artifacts/real-host-acceptance/20260517_061947_postfix/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/03-install-pack.json b/artifacts/real-host-acceptance/20260517_062209_fixed/03-install-pack.json deleted file mode 100644 index 3cfa0535..00000000 --- a/artifacts/real-host-acceptance/20260517_062209_fixed/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_062209_fixed/04-preview-import.json b/artifacts/real-host-acceptance/20260517_062209_fixed/04-preview-import.json deleted file mode 100644 index f3c9f8eb..00000000 --- a/artifacts/real-host-acceptance/20260517_062209_fixed/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance/20260517_062722_after_account_fix/03-install-pack.json b/artifacts/real-host-acceptance/20260517_062722_after_account_fix/03-install-pack.json deleted file mode 100644 index 3cfa0535..00000000 --- a/artifacts/real-host-acceptance/20260517_062722_after_account_fix/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_080506_post_fix/04-preview-import.json b/artifacts/real-host-acceptance/20260517_080506_post_fix/04-preview-import.json deleted file mode 100644 index 1bd5ec55..00000000 --- a/artifacts/real-host-acceptance/20260517_080506_post_fix/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"1","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/03-install-pack.json b/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/03-install-pack.json deleted file mode 100644 index 087100d4..00000000 --- a/artifacts/real-host-acceptance/20260517_082153_post_account_type_fix/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_102113_subscription_probe/03-install-pack.json b/artifacts/real-host-acceptance/20260517_102113_subscription_probe/03-install-pack.json deleted file mode 100644 index 087100d4..00000000 --- a/artifacts/real-host-acceptance/20260517_102113_subscription_probe/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/03-install-pack.json b/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/03-install-pack.json deleted file mode 100644 index 087100d4..00000000 --- a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/04-preview-import.json b/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/04-preview-import.json deleted file mode 100644 index f7f7f4ab..00000000 --- a/artifacts/real-host-acceptance/20260517_104007_subscription_after_fix/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"DeepSeek 默认分组","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/01-create-host.json b/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/02-probe-host.json b/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/03-install-pack.json b/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/03-install-pack.json deleted file mode 100644 index 3cfa0535..00000000 --- a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/03-install-pack.json +++ /dev/null @@ -1 +0,0 @@ -{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"} diff --git a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/04-preview-import.json b/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/04-preview-import.json deleted file mode 100644 index f7f7f4ab..00000000 --- a/artifacts/real-host-acceptance/20260517_104113_subscription_skip_rollback/04-preview-import.json +++ /dev/null @@ -1 +0,0 @@ -{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"DeepSeek 默认分组","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/01-create-host.json b/artifacts/real-host-acceptance/20260517_live_openai_retest/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_retest/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_retest/02-probe-host.json b/artifacts/real-host-acceptance/20260517_live_openai_retest/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_retest/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/01-create-host.json b/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/02-probe-host.json b/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_subscription_nokey/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/01-create-host.json b/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/02-probe-host.json b/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_live_openai_subscription_retest/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/01-create-host.json b/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/02-probe-host.json b/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_group_balance_retest/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/01-create-host.json b/artifacts/real-host-acceptance/20260517_openai_keep_scene/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_keep_scene/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_keep_scene/02-probe-host.json b/artifacts/real-host-acceptance/20260517_openai_keep_scene/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_keep_scene/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/01-create-host.json b/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/02-probe-host.json b/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/20260517_openai_platform_fix_retest/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/deepseek.json b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/deepseek.json new file mode 100644 index 00000000..85b1a78b --- /dev/null +++ b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/deepseek.json @@ -0,0 +1,283 @@ +{ + "provider_id": "deepseek", + "import_http_status": 200, + "import_body": { + "accepted_keys_count": 1, + "access_status": "subscription_ready", + "accounts_count": 1, + "batch_id": 5, + "batch_status": "partially_succeeded", + "channel": { + "id": "4", + "name": "DeepSeek 默认渠道-subscription" + }, + "gateway": { + "ok": true, + "status_code": 200, + "models": [ + "deepseek-v4-flash", + "deepseek-v4-pro" + ], + "has_expected_model": true + }, + "group": { + "id": "5", + "name": "DeepSeek 默认分组-subscription" + }, + "plan": { + "id": "4", + "name": "DeepSeek 默认套餐-subscription" + }, + "provider_status": "degraded" + }, + "subscription_user_id": "24", + "gateway_key_prefix": "sk-deepseek-", + "batch_id": 5, + "batch_detail": { + "access_closures": [ + { + "ID": 5, + "BatchID": 5, + "ClosureType": "subscription", + "Status": "subscription_ready", + "DetailsJSON": "{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}" + } + ], + "access_count": 1, + "batch": { + "access_status": "subscription_ready", + "batch_status": "partially_succeeded", + "host_id": 1, + "id": 5, + "mode": "partial", + "pack_id": 1, + "provider_id": 1 + }, + "items": [ + { + "account_status": "failed", + "batch_id": 5, + "id": 5, + "key_fingerprint": "sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202", + "probe_summary_json": "{\"account_id\":\"20\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}" + } + ], + "items_count": 1, + "managed_count": 1, + "managed_resources": [ + { + "ID": 11, + "BatchID": 5, + "HostID": 1, + "ResourceType": "account", + "HostResourceID": "20", + "ResourceName": "deepseek-01" + } + ], + "reconcile_count": 0, + "reconcile_runs": [] + }, + "access_status": { + "batch_access_status": "subscription_ready", + "batch_id": 5, + "closures_count": 1, + "latest_access_status": "subscription_ready", + "latest_closure": { + "closure_type": "subscription", + "details_json": "{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}", + "id": 5, + "status": "subscription_ready" + }, + "pack_id": "openai-cn-pack", + "provider_id": "deepseek" + }, + "host_account_id": "20", + "host_channel_id": "4", + "host_account": { + "code": 0, + "message": "success", + "data": { + "id": 20, + "name": "deepseek-01", + "notes": null, + "platform": "openai", + "type": "apikey", + "credentials": { + "api_key": "sk-IknW1INpOCo00HWUgUdEpJ0gko6BrUPzRLqbMHRXAfoHExDZ", + "base_url": "https://aitoken.quanfuli.cn/v1", + "model_mapping": { + "deepseek-v4-flash": "deepseek-v4-flash", + "deepseek-v4-pro": "deepseek-v4-pro" + } + }, + "extra": { + "openai_responses_supported": true + }, + "proxy_id": null, + "concurrency": 0, + "priority": 0, + "rate_multiplier": 1, + "status": "active", + "error_message": "", + "last_used_at": null, + "expires_at": null, + "auto_pause_on_expired": true, + "created_at": "2026-05-20T22:27:22.84296+08:00", + "updated_at": "2026-05-20T22:27:24.709819+08:00", + "schedulable": true, + "rate_limited_at": null, + "rate_limit_reset_at": null, + "overload_until": null, + "temp_unschedulable_until": null, + "temp_unschedulable_reason": "", + "session_window_start": null, + "session_window_end": null, + "session_window_status": "", + "account_groups": [ + { + "account_id": 20, + "group_id": 5, + "priority": 1, + "created_at": "2026-05-20T22:27:22.850434+08:00", + "group": { + "id": 5, + "name": "DeepSeek 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T18:54:06.21433+08:00", + "updated_at": "2026-05-20T18:54:06.21433+08:00" + } + } + ], + "group_ids": [ + 5 + ], + "groups": [ + { + "id": 5, + "name": "DeepSeek 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T18:54:06.21433+08:00", + "updated_at": "2026-05-20T18:54:06.21433+08:00" + } + ], + "current_concurrency": 0 + } + }, + "host_account_models": { + "code": 0, + "message": "success", + "data": [ + { + "id": "deepseek-v4-flash", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "deepseek-v4-flash" + }, + { + "id": "deepseek-v4-pro", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "deepseek-v4-pro" + } + ] + }, + "host_channel": { + "code": 0, + "message": "success", + "data": { + "id": 4, + "name": "DeepSeek 默认渠道-subscription", + "description": "", + "status": "active", + "billing_model_source": "channel_mapped", + "restrict_models": true, + "features": "", + "features_config": {}, + "group_ids": [ + 5 + ], + "model_pricing": [ + { + "id": 1, + "platform": "openai", + "models": [ + "deepseek-v4-pro", + "deepseek-v4-flash" + ], + "billing_mode": "token", + "input_price": null, + "output_price": null, + "cache_write_price": null, + "cache_read_price": null, + "image_output_price": null, + "per_request_price": null, + "intervals": [] + } + ], + "model_mapping": { + "openai": { + "deepseek-v4-flash": "deepseek-v4-flash", + "deepseek-v4-pro": "deepseek-v4-pro" + } + }, + "apply_pricing_to_account_stats": false, + "account_stats_pricing_rules": [], + "created_at": "2026-05-20T18:54:06Z", + "updated_at": "2026-05-20T20:50:30Z" + } + }, + "gateway_models_status": 403, + "gateway_models_body": { + "error": { + "message": "API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.", + "type": "permission_error" + }, + "type": "error" + } +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/minimax.json b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/minimax.json new file mode 100644 index 00000000..7552a33f --- /dev/null +++ b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/minimax.json @@ -0,0 +1,266 @@ +{ + "provider_id": "minimax", + "import_http_status": 200, + "import_body": { + "accepted_keys_count": 1, + "access_status": "subscription_ready", + "accounts_count": 1, + "batch_id": 6, + "batch_status": "partially_succeeded", + "channel": { + "id": "5", + "name": "MiniMax 默认渠道-subscription" + }, + "gateway": { + "ok": true, + "status_code": 200, + "models": [ + "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed" + ], + "has_expected_model": true + }, + "group": { + "id": "6", + "name": "MiniMax 默认分组-subscription" + }, + "plan": { + "id": "5", + "name": "MiniMax 默认套餐-subscription" + }, + "provider_status": "degraded" + }, + "subscription_user_id": "26", + "gateway_key_prefix": "sk-minimax-0", + "batch_id": 6, + "batch_detail": { + "access_closures": [ + { + "ID": 6, + "BatchID": 6, + "ClosureType": "subscription", + "Status": "subscription_ready", + "DetailsJSON": "{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}" + } + ], + "access_count": 1, + "batch": { + "access_status": "subscription_ready", + "batch_status": "partially_succeeded", + "host_id": 1, + "id": 6, + "mode": "partial", + "pack_id": 1, + "provider_id": 3 + }, + "items": [ + { + "account_status": "failed", + "batch_id": 6, + "id": 6, + "key_fingerprint": "sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316", + "probe_summary_json": "{\"account_id\":\"21\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}" + } + ], + "items_count": 1, + "managed_count": 1, + "managed_resources": [ + { + "ID": 12, + "BatchID": 6, + "HostID": 1, + "ResourceType": "account", + "HostResourceID": "21", + "ResourceName": "minimax-01" + } + ], + "reconcile_count": 0, + "reconcile_runs": [] + }, + "access_status": { + "batch_access_status": "subscription_ready", + "batch_id": 6, + "closures_count": 1, + "latest_access_status": "subscription_ready", + "latest_closure": { + "closure_type": "subscription", + "details_json": "{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}", + "id": 6, + "status": "subscription_ready" + }, + "pack_id": "openai-cn-pack", + "provider_id": "minimax" + }, + "host_account_id": "21", + "host_channel_id": "5", + "host_account": { + "code": 0, + "message": "success", + "data": { + "id": 21, + "name": "minimax-01", + "notes": null, + "platform": "openai", + "type": "apikey", + "credentials": { + "api_key": "sk-bvv6BDVS9v6dvHYPo8rGluhxZ1TlrJzK0yfVF1c4F0G0zg9l", + "base_url": "https://v2.aicodee.com/v1", + "model_mapping": { + "MiniMax-M2.5-highspeed": "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed": "MiniMax-M2.7-highspeed" + } + }, + "extra": { + "openai_responses_supported": true + }, + "proxy_id": null, + "concurrency": 0, + "priority": 0, + "rate_multiplier": 1, + "status": "active", + "error_message": "", + "last_used_at": null, + "expires_at": null, + "auto_pause_on_expired": true, + "created_at": "2026-05-20T22:27:37.239873+08:00", + "updated_at": "2026-05-20T22:27:38.9747+08:00", + "schedulable": true, + "rate_limited_at": null, + "rate_limit_reset_at": null, + "overload_until": null, + "temp_unschedulable_until": null, + "temp_unschedulable_reason": "", + "session_window_start": null, + "session_window_end": null, + "session_window_status": "", + "account_groups": [ + { + "account_id": 21, + "group_id": 6, + "priority": 1, + "created_at": "2026-05-20T22:27:37.244179+08:00", + "group": { + "id": 6, + "name": "MiniMax 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T20:39:22.955452+08:00", + "updated_at": "2026-05-20T20:39:22.955452+08:00" + } + } + ], + "group_ids": [ + 6 + ], + "groups": [ + { + "id": 6, + "name": "MiniMax 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T20:39:22.955452+08:00", + "updated_at": "2026-05-20T20:39:22.955452+08:00" + } + ], + "current_concurrency": 0 + } + }, + "host_account_models": { + "code": 0, + "message": "success", + "data": [ + { + "id": "MiniMax-M2.7-highspeed", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "MiniMax-M2.7-highspeed" + }, + { + "id": "MiniMax-M2.5-highspeed", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "MiniMax-M2.5-highspeed" + } + ] + }, + "host_channel": { + "code": 0, + "message": "success", + "data": { + "id": 5, + "name": "MiniMax 默认渠道-subscription", + "description": "", + "status": "active", + "billing_model_source": "channel_mapped", + "restrict_models": true, + "features": "", + "features_config": {}, + "group_ids": [ + 6 + ], + "model_pricing": [], + "model_mapping": { + "openai": { + "MiniMax-M2.5-highspeed": "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed": "MiniMax-M2.7-highspeed" + } + }, + "apply_pricing_to_account_stats": false, + "account_stats_pricing_rules": [], + "created_at": "2026-05-20T20:39:23Z", + "updated_at": "2026-05-20T20:39:23Z" + } + }, + "gateway_models_status": 403, + "gateway_models_body": { + "error": { + "message": "API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.", + "type": "permission_error" + }, + "type": "error" + } +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/summary.json b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/summary.json new file mode 100644 index 00000000..85ec01c4 --- /dev/null +++ b/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation/summary.json @@ -0,0 +1,556 @@ +{ + "artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260520_222713_crm18100_live_model_mapping_validation", + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "providers": { + "deepseek": { + "provider_id": "deepseek", + "import_http_status": 200, + "import_body": { + "accepted_keys_count": 1, + "access_status": "subscription_ready", + "accounts_count": 1, + "batch_id": 5, + "batch_status": "partially_succeeded", + "channel": { + "id": "4", + "name": "DeepSeek 默认渠道-subscription" + }, + "gateway": { + "ok": true, + "status_code": 200, + "models": [ + "deepseek-v4-flash", + "deepseek-v4-pro" + ], + "has_expected_model": true + }, + "group": { + "id": "5", + "name": "DeepSeek 默认分组-subscription" + }, + "plan": { + "id": "4", + "name": "DeepSeek 默认套餐-subscription" + }, + "provider_status": "degraded" + }, + "subscription_user_id": "24", + "gateway_key_prefix": "sk-deepseek-", + "batch_id": 5, + "batch_detail": { + "access_closures": [ + { + "ID": 5, + "BatchID": 5, + "ClosureType": "subscription", + "Status": "subscription_ready", + "DetailsJSON": "{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}" + } + ], + "access_count": 1, + "batch": { + "access_status": "subscription_ready", + "batch_status": "partially_succeeded", + "host_id": 1, + "id": 5, + "mode": "partial", + "pack_id": 1, + "provider_id": 1 + }, + "items": [ + { + "account_status": "failed", + "batch_id": 5, + "id": 5, + "key_fingerprint": "sha256:71c15291f4fa4044fdd7b80fb3b04295441122a2e0db4b9028e2e4e18919e202", + "probe_summary_json": "{\"account_id\":\"20\",\"models\":[{\"id\":\"deepseek-v4-pro\",\"display_name\":\"deepseek-v4-pro\",\"type\":\"model\"},{\"id\":\"deepseek-v4-flash\",\"display_name\":\"deepseek-v4-flash\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}" + } + ], + "items_count": 1, + "managed_count": 1, + "managed_resources": [ + { + "ID": 11, + "BatchID": 5, + "HostID": 1, + "ResourceType": "account", + "HostResourceID": "20", + "ResourceName": "deepseek-01" + } + ], + "reconcile_count": 0, + "reconcile_runs": [] + }, + "access_status": { + "batch_access_status": "subscription_ready", + "batch_id": 5, + "closures_count": 1, + "latest_access_status": "subscription_ready", + "latest_closure": { + "closure_type": "subscription", + "details_json": "{\"has_expected_model\":true,\"models\":[\"deepseek-v4-flash\",\"deepseek-v4-pro\"],\"ok\":true,\"status_code\":200}", + "id": 5, + "status": "subscription_ready" + }, + "pack_id": "openai-cn-pack", + "provider_id": "deepseek" + }, + "host_account_id": "20", + "host_channel_id": "4", + "host_account": { + "code": 0, + "message": "success", + "data": { + "id": 20, + "name": "deepseek-01", + "notes": null, + "platform": "openai", + "type": "apikey", + "credentials": { + "api_key": "sk-IknW1INpOCo00HWUgUdEpJ0gko6BrUPzRLqbMHRXAfoHExDZ", + "base_url": "https://aitoken.quanfuli.cn/v1", + "model_mapping": { + "deepseek-v4-flash": "deepseek-v4-flash", + "deepseek-v4-pro": "deepseek-v4-pro" + } + }, + "extra": { + "openai_responses_supported": true + }, + "proxy_id": null, + "concurrency": 0, + "priority": 0, + "rate_multiplier": 1, + "status": "active", + "error_message": "", + "last_used_at": null, + "expires_at": null, + "auto_pause_on_expired": true, + "created_at": "2026-05-20T22:27:22.84296+08:00", + "updated_at": "2026-05-20T22:27:24.709819+08:00", + "schedulable": true, + "rate_limited_at": null, + "rate_limit_reset_at": null, + "overload_until": null, + "temp_unschedulable_until": null, + "temp_unschedulable_reason": "", + "session_window_start": null, + "session_window_end": null, + "session_window_status": "", + "account_groups": [ + { + "account_id": 20, + "group_id": 5, + "priority": 1, + "created_at": "2026-05-20T22:27:22.850434+08:00", + "group": { + "id": 5, + "name": "DeepSeek 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T18:54:06.21433+08:00", + "updated_at": "2026-05-20T18:54:06.21433+08:00" + } + } + ], + "group_ids": [ + 5 + ], + "groups": [ + { + "id": 5, + "name": "DeepSeek 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T18:54:06.21433+08:00", + "updated_at": "2026-05-20T18:54:06.21433+08:00" + } + ], + "current_concurrency": 0 + } + }, + "host_account_models": { + "code": 0, + "message": "success", + "data": [ + { + "id": "deepseek-v4-flash", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "deepseek-v4-flash" + }, + { + "id": "deepseek-v4-pro", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "deepseek-v4-pro" + } + ] + }, + "host_channel": { + "code": 0, + "message": "success", + "data": { + "id": 4, + "name": "DeepSeek 默认渠道-subscription", + "description": "", + "status": "active", + "billing_model_source": "channel_mapped", + "restrict_models": true, + "features": "", + "features_config": {}, + "group_ids": [ + 5 + ], + "model_pricing": [ + { + "id": 1, + "platform": "openai", + "models": [ + "deepseek-v4-pro", + "deepseek-v4-flash" + ], + "billing_mode": "token", + "input_price": null, + "output_price": null, + "cache_write_price": null, + "cache_read_price": null, + "image_output_price": null, + "per_request_price": null, + "intervals": [] + } + ], + "model_mapping": { + "openai": { + "deepseek-v4-flash": "deepseek-v4-flash", + "deepseek-v4-pro": "deepseek-v4-pro" + } + }, + "apply_pricing_to_account_stats": false, + "account_stats_pricing_rules": [], + "created_at": "2026-05-20T18:54:06Z", + "updated_at": "2026-05-20T20:50:30Z" + } + }, + "gateway_models_status": 403, + "gateway_models_body": { + "error": { + "message": "API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.", + "type": "permission_error" + }, + "type": "error" + } + }, + "minimax": { + "provider_id": "minimax", + "import_http_status": 200, + "import_body": { + "accepted_keys_count": 1, + "access_status": "subscription_ready", + "accounts_count": 1, + "batch_id": 6, + "batch_status": "partially_succeeded", + "channel": { + "id": "5", + "name": "MiniMax 默认渠道-subscription" + }, + "gateway": { + "ok": true, + "status_code": 200, + "models": [ + "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed" + ], + "has_expected_model": true + }, + "group": { + "id": "6", + "name": "MiniMax 默认分组-subscription" + }, + "plan": { + "id": "5", + "name": "MiniMax 默认套餐-subscription" + }, + "provider_status": "degraded" + }, + "subscription_user_id": "26", + "gateway_key_prefix": "sk-minimax-0", + "batch_id": 6, + "batch_detail": { + "access_closures": [ + { + "ID": 6, + "BatchID": 6, + "ClosureType": "subscription", + "Status": "subscription_ready", + "DetailsJSON": "{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}" + } + ], + "access_count": 1, + "batch": { + "access_status": "subscription_ready", + "batch_status": "partially_succeeded", + "host_id": 1, + "id": 6, + "mode": "partial", + "pack_id": 1, + "provider_id": 3 + }, + "items": [ + { + "account_status": "failed", + "batch_id": 6, + "id": 6, + "key_fingerprint": "sha256:e596db01acd8bded5707675c39116a9d1291ad8ea197e5a2090d68f378944316", + "probe_summary_json": "{\"account_id\":\"21\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true}" + } + ], + "items_count": 1, + "managed_count": 1, + "managed_resources": [ + { + "ID": 12, + "BatchID": 6, + "HostID": 1, + "ResourceType": "account", + "HostResourceID": "21", + "ResourceName": "minimax-01" + } + ], + "reconcile_count": 0, + "reconcile_runs": [] + }, + "access_status": { + "batch_access_status": "subscription_ready", + "batch_id": 6, + "closures_count": 1, + "latest_access_status": "subscription_ready", + "latest_closure": { + "closure_type": "subscription", + "details_json": "{\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}", + "id": 6, + "status": "subscription_ready" + }, + "pack_id": "openai-cn-pack", + "provider_id": "minimax" + }, + "host_account_id": "21", + "host_channel_id": "5", + "host_account": { + "code": 0, + "message": "success", + "data": { + "id": 21, + "name": "minimax-01", + "notes": null, + "platform": "openai", + "type": "apikey", + "credentials": { + "api_key": "sk-bvv6BDVS9v6dvHYPo8rGluhxZ1TlrJzK0yfVF1c4F0G0zg9l", + "base_url": "https://v2.aicodee.com/v1", + "model_mapping": { + "MiniMax-M2.5-highspeed": "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed": "MiniMax-M2.7-highspeed" + } + }, + "extra": { + "openai_responses_supported": true + }, + "proxy_id": null, + "concurrency": 0, + "priority": 0, + "rate_multiplier": 1, + "status": "active", + "error_message": "", + "last_used_at": null, + "expires_at": null, + "auto_pause_on_expired": true, + "created_at": "2026-05-20T22:27:37.239873+08:00", + "updated_at": "2026-05-20T22:27:38.9747+08:00", + "schedulable": true, + "rate_limited_at": null, + "rate_limit_reset_at": null, + "overload_until": null, + "temp_unschedulable_until": null, + "temp_unschedulable_reason": "", + "session_window_start": null, + "session_window_end": null, + "session_window_status": "", + "account_groups": [ + { + "account_id": 21, + "group_id": 6, + "priority": 1, + "created_at": "2026-05-20T22:27:37.244179+08:00", + "group": { + "id": 6, + "name": "MiniMax 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T20:39:22.955452+08:00", + "updated_at": "2026-05-20T20:39:22.955452+08:00" + } + } + ], + "group_ids": [ + 6 + ], + "groups": [ + { + "id": 6, + "name": "MiniMax 默认分组-subscription", + "description": "", + "platform": "openai", + "rate_multiplier": 1, + "is_exclusive": false, + "status": "active", + "subscription_type": "subscription", + "daily_limit_usd": null, + "weekly_limit_usd": null, + "monthly_limit_usd": null, + "allow_image_generation": false, + "image_rate_independent": false, + "image_rate_multiplier": 1, + "image_price_1k": null, + "image_price_2k": null, + "image_price_4k": null, + "claude_code_only": false, + "fallback_group_id": null, + "fallback_group_id_on_invalid_request": null, + "allow_messages_dispatch": false, + "require_oauth_only": false, + "require_privacy_set": false, + "rpm_limit": 0, + "created_at": "2026-05-20T20:39:22.955452+08:00", + "updated_at": "2026-05-20T20:39:22.955452+08:00" + } + ], + "current_concurrency": 0 + } + }, + "host_account_models": { + "code": 0, + "message": "success", + "data": [ + { + "id": "MiniMax-M2.7-highspeed", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "MiniMax-M2.7-highspeed" + }, + { + "id": "MiniMax-M2.5-highspeed", + "object": "model", + "created": 0, + "owned_by": "", + "type": "model", + "display_name": "MiniMax-M2.5-highspeed" + } + ] + }, + "host_channel": { + "code": 0, + "message": "success", + "data": { + "id": 5, + "name": "MiniMax 默认渠道-subscription", + "description": "", + "status": "active", + "billing_model_source": "channel_mapped", + "restrict_models": true, + "features": "", + "features_config": {}, + "group_ids": [ + 6 + ], + "model_pricing": [], + "model_mapping": { + "openai": { + "MiniMax-M2.5-highspeed": "MiniMax-M2.5-highspeed", + "MiniMax-M2.7-highspeed": "MiniMax-M2.7-highspeed" + } + }, + "apply_pricing_to_account_stats": false, + "account_stats_pricing_rules": [], + "created_at": "2026-05-20T20:39:23Z", + "updated_at": "2026-05-20T20:39:23Z" + } + }, + "gateway_models_status": 403, + "gateway_models_body": { + "error": { + "message": "API Key is not assigned to any group and cannot be used. Please contact the administrator to assign it to a group.", + "type": "permission_error" + }, + "type": "error" + } + } + } +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/01-host-models.headers.txt b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/01-host-models.headers.txt new file mode 100644 index 00000000..c6477e21 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/01-host-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 31ad243a-2d71-4cf8-bc4e-edca3151eace +Date: Thu, 21 May 2026 06:22:11 GMT +Content-Length: 248 + diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/02-host-models.body.json b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/02-host-models.body.json new file mode 100644 index 00000000..eb1aa93c --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/02-host-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"deepseek-v4-flash","type":"model","display_name":"deepseek-v4-flash","created_at":"2024-01-01T00:00:00Z"},{"id":"deepseek-v4-pro","type":"model","display_name":"deepseek-v4-pro","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/03-host-chat.headers.txt b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/03-host-chat.headers.txt new file mode 100644 index 00000000..18050f84 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/03-host-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 502 Bad Gateway +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: b48520c0-9551-46ef-9750-c20be2143ef5 +Date: Thu, 21 May 2026 06:22:21 GMT +Content-Length: 88 + diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/04-host-chat.body.json b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/04-host-chat.body.json new file mode 100644 index 00000000..6471785e --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/04-host-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream service temporarily unavailable","type":"upstream_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/05-upstream-chat.headers.txt b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/05-upstream-chat.headers.txt new file mode 100644 index 00000000..6d66b6d1 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/05-upstream-chat.headers.txt @@ -0,0 +1,22 @@ +HTTP/1.1 200 Connection established + +HTTP/1.1 200 OK +Server: Tengine +Content-Type: text/event-stream +Transfer-Encoding: chunked +Connection: keep-alive +Access-Control-Allow-Headers: * +Access-Control-Allow-Methods: POST,GET,PUT,OPTIONS,DELETE +Access-Control-Allow-Origin: * +Cache-Control: no-cache +Date: Thu, 21 May 2026 06:22:22 GMT +X-New-Api-Version: v0.0.0 +X-Oneapi-Request-Id: 202605210622187114400048268d9d6iqqeewcv +Via: cache88.l2cn8786[4107,4107,200-0,M], cache88.l2cn8786[4109,0], kunlun5.cn9039[4219,4218,200-0,M], kunlun5.cn9039[4222,0] +Ali-Swift-Global-Savetime: 1779344545 +X-Cache: MISS TCP_MISS dirn:-2:-2 +X-Swift-SaveTime: Thu, 21 May 2026 06:22:25 GMT +X-Swift-CacheTime: 0 +Timing-Allow-Origin: * +EagleId: 78e9180a17793445411677654e + diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/06-upstream-chat.body.txt b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/06-upstream-chat.body.txt new file mode 100644 index 00000000..b1a4fb92 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/06-upstream-chat.body.txt @@ -0,0 +1,4 @@ +data: {"id":"","object":"chat.completion.chunk","created":0,"model":"deepseek-v4-flash","system_fingerprint":"","choices":[],"usage":{"prompt_tokens":9,"completion_tokens":0,"total_tokens":9,"prompt_tokens_details":{"cached_tokens":0,"text_tokens":0,"audio_tokens":0,"image_tokens":0},"completion_tokens_details":{"text_tokens":0,"audio_tokens":0,"image_tokens":0,"reasoning_tokens":0},"input_tokens":0,"output_tokens":0,"input_tokens_details":null,"claude_cache_creation_5_m_tokens":0,"claude_cache_creation_1_h_tokens":0}} + +data: [DONE] + diff --git a/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/summary.json b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/summary.json new file mode 100644 index 00000000..3e579466 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_142211_crm18100_deepseek_completion_split/summary.json @@ -0,0 +1,10 @@ +{ + "host_models_status": 200, + "host_has_expected_model": true, + "host_chat_status": 502, + "upstream_chat_status": 200, + "upstream_chat_content_type": "text/event-stream", + "classification": "host_compatibility_gap", + "host_chat_body": "{\"error\":{\"message\":\"Upstream service temporarily unavailable\",\"type\":\"upstream_error\"}}", + "upstream_chat_body_preview": "data: {\"id\":\"\",\"object\":\"chat.completion.chunk\",\"created\":0,\"model\":\"deepseek-v4-flash\",\"system_fingerprint\":\"\",\"choices\":[],\"usage\":{\"prompt_tokens\":9,\"completion_tokens\":0,\"total_tokens\":9,\"prompt_tokens_details\":{\"cached_tokens\":0,\"text_tokens\":0,\"audio_tokens\":0,\"image_tokens\":0},\"completion_tokens_details\":{\"text_tokens\":0,\"audio_tokens\":0,\"image_tokens\":0,\"reasoning_tokens\":0},\"input_tokens\"" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/00-local-key-source.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/00-local-key-source.json new file mode 100644 index 00000000..aa619c9d --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/00-local-key-source.json @@ -0,0 +1,6 @@ +{ + "source": "env:MINIMAX_CN_API_KEY", + "provider_id": "minimax-m2-7-official", + "upstream_key_prefix": "sk-cp-rjg3va", + "upstream_key_suffix": "EXHNrI" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01-runtime-context.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01-runtime-context.json new file mode 100644 index 00000000..7c3c0212 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01-runtime-context.json @@ -0,0 +1,13 @@ +{ + "crm_base": "http://127.0.0.1:18100", + "host_base": "http://127.0.0.1:18097", + "crm_host_base": "http://127.0.0.1:18097", + "provider_id": "minimax-m2-7-official", + "subscription_user_id": "20", + "subscription_user_key_prefix": "sk-177936446", + "subscription_group_id": "10", + "admin_user_id": "1", + "managed_user_email": "20-b5e7f44b9d164101@sub2api.local", + "managed_user_id": "", + "managed_probe_key_prefix": "sk-relay-b5e7f44b9" +} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01a-create-host.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01a-create-host.json new file mode 100644 index 00000000..613eba80 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/01a-create-host.json @@ -0,0 +1 @@ +{"host_id": "remote43-fresh18097-deepseek-1779280533", "base_url": "http://127.0.0.1:18097", "host_version": "0.1.126", "auth_type": "bearer", "status": "unsupported", "capabilities": {"groups": true, "channels": true, "plans": true, "accounts": true, "account_test": false, "account_models": true, "subscriptions": true}} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/02-import.headers.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/02-import.headers.txt new file mode 100644 index 00000000..cac909ab --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/02-import.headers.txt @@ -0,0 +1,5 @@ +HTTP/1.1 200 OK +Content-Type: application/json +Date: Thu, 21 May 2026 14:22:26 GMT +Content-Length: 741 + diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/03-import.body.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/03-import.body.json new file mode 100644 index 00000000..46ab041c --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/03-import.body.json @@ -0,0 +1 @@ +{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":30,"batch_status":"partially_succeeded","channel":{"id":"9","name":"MiniMax M2.7 官方默认渠道-subscription"},"gateway":{"ok":true,"status_code":200,"models":["MiniMax-M2.5-highspeed","MiniMax-M2.7-highspeed"],"has_expected_model":true,"completion_ok":false,"completion_status":429,"completion_content_type":"application/json; charset=utf-8","completion_body_preview":"{\"error\":{\"message\":\"Upstream rate limit exceeded, please retry later\",\"type\":\"rate_limit_error\"}}"},"group":{"id":"10","name":"MiniMax M2.7 官方默认分组-subscription"},"plan":{"id":"6","name":"MiniMax M2.7 官方默认套餐-subscription"},"provider_status":"degraded"} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/04-batch-detail-initial.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/04-batch-detail-initial.json new file mode 100644 index 00000000..9044338f --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/04-batch-detail-initial.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":35,"BatchID":30,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream rate limit exceeded, please retry later\\\",\\\"type\\\":\\\"rate_limit_error\\\"}}\",\"completion_status\":429,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":30,"mode":"partial","pack_id":1,"provider_id":45},"items":[{"account_status":"failed","batch_id":30,"id":30,"key_fingerprint":"sha256:0bc73e921f3a0fcb9e5a718dc7a061d154a616fc92ef0e7e3f7668db9eb335b2","probe_summary_json":"{\"account_id\":\"45\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 404: 404 page not found\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":42,"BatchID":30,"HostID":1,"ResourceType":"group","HostResourceID":"10","ResourceName":"MiniMax M2.7 官方默认分组-subscription"},{"ID":43,"BatchID":30,"HostID":1,"ResourceType":"channel","HostResourceID":"9","ResourceName":"MiniMax M2.7 官方默认渠道-subscription"},{"ID":44,"BatchID":30,"HostID":1,"ResourceType":"plan","HostResourceID":"6","ResourceName":"MiniMax M2.7 官方默认套餐-subscription"},{"ID":45,"BatchID":30,"HostID":1,"ResourceType":"account","HostResourceID":"45","ResourceName":"minimax-m2-7-official-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/05-subscription-access-prep.sql b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/05-subscription-access-prep.sql new file mode 100644 index 00000000..e8c7873b --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/05-subscription-access-prep.sql @@ -0,0 +1,46 @@ +BEGIN; +UPDATE users +SET balance = CASE WHEN balance < 10 THEN 10 ELSE balance END, + updated_at = now() +WHERE id = 20; +UPDATE api_keys +SET group_id = 10, + updated_at = now() +WHERE key = 'sk-1779364460-a9bac8bd'; +INSERT INTO user_subscriptions ( + user_id, + group_id, + starts_at, + expires_at, + status, + assigned_by, + assigned_at, + notes, + created_at, + updated_at, + deleted_at +) +VALUES ( + 20, + 10, + now(), + now() + interval '30 days', + 'active', + 1, + now(), + 'hermes remote subscription validation', + now(), + now(), + NULL +) +ON CONFLICT (user_id, group_id) WHERE deleted_at IS NULL +DO UPDATE SET + starts_at = EXCLUDED.starts_at, + expires_at = EXCLUDED.expires_at, + status = 'active', + assigned_by = EXCLUDED.assigned_by, + assigned_at = EXCLUDED.assigned_at, + notes = EXCLUDED.notes, + updated_at = now(), + deleted_at = NULL; +COMMIT; \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/06-subscription-access-prep.psql.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/06-subscription-access-prep.psql.txt new file mode 100644 index 00000000..75b5e3a1 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/06-subscription-access-prep.psql.txt @@ -0,0 +1,3 @@ +BEGIN +UPDATE 1 +ROLLBACK diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/07-redis-targeted-invalidation.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/07-redis-targeted-invalidation.txt new file mode 100644 index 00000000..cf1c310f --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/07-redis-targeted-invalidation.txt @@ -0,0 +1,4 @@ +auth_cache_key=apikey:auth:ca052e60820f3457831e3080de38cc3c14889bef4838b485377afca5567a1481 +balance_cache_key=billing:balance:20 +subscription_cache_key=billing:sub:20:10 +0 diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/08-subscription-group-state.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/08-subscription-group-state.json new file mode 100644 index 00000000..6fea250e --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/08-subscription-group-state.json @@ -0,0 +1 @@ +{"group_id" : 10, "group" : null, "subscription" : null, "key" : {"id":19,"user_id":20,"key":"sk-1779364460-a9bac8bd","name":"relay-sub-1779364460-a9bac8bd-key","group_id":null,"status":"active","created_at":"2026-05-21T11:54:21.758954+00:00","updated_at":"2026-05-21T11:54:21.758954+00:00","deleted_at":null,"ip_whitelist":null,"ip_blacklist":null,"quota":0.00000000,"quota_used":0.00000000,"expires_at":null,"last_used_at":null,"rate_limit_5h":0.00000000,"rate_limit_1d":0.00000000,"rate_limit_7d":0.00000000,"usage_5h":0.00000000,"usage_1d":0.00000000,"usage_7d":0.00000000,"window_5h_start":null,"window_1d_start":null,"window_7d_start":null}} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/09-models.headers.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/09-models.headers.txt new file mode 100644 index 00000000..4cca666e --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/09-models.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 6796ef9a-68a6-4f59-857d-6078c7e8fc46 +Date: Thu, 21 May 2026 14:22:34 GMT +Content-Length: 272 + diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/10-models.body.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/10-models.body.json new file mode 100644 index 00000000..2741b29d --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/10-models.body.json @@ -0,0 +1 @@ +{"data":[{"id":"MiniMax-M2.5-highspeed","type":"model","display_name":"MiniMax-M2.5-highspeed","created_at":"2024-01-01T00:00:00Z"},{"id":"MiniMax-M2.7-highspeed","type":"model","display_name":"MiniMax-M2.7-highspeed","created_at":"2024-01-01T00:00:00Z"}],"object":"list"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/11-chat.headers.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/11-chat.headers.txt new file mode 100644 index 00000000..46df57aa --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/11-chat.headers.txt @@ -0,0 +1,9 @@ +HTTP/1.1 429 Too Many Requests +Content-Type: application/json; charset=utf-8 +Referrer-Policy: strict-origin-when-cross-origin +X-Content-Type-Options: nosniff +X-Frame-Options: DENY +X-Request-Id: 11d3ba3c-efbc-44c9-934f-2e37e2b52cf4 +Date: Thu, 21 May 2026 14:22:38 GMT +Content-Length: 98 + diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/12-chat.body.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/12-chat.body.json new file mode 100644 index 00000000..c45772db --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/12-chat.body.json @@ -0,0 +1 @@ +{"error":{"message":"Upstream rate limit exceeded, please retry later","type":"rate_limit_error"}} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/13-provider-status.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/13-provider-status.json new file mode 100644 index 00000000..5b8ee09c --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/13-provider-status.json @@ -0,0 +1 @@ +{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":30,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18097","host_id":"remote43-fresh18097-deepseek-1779280533","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":4,"pack":{"pack_id":"openai-cn-pack","version":"1.1.0"},"provider":{"display_name":"MiniMax M2.7 官方兼容","platform":"openai","provider_id":"minimax-m2-7-official"},"provider_status":"partially_succeeded","reconcile_runs_count":0} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/14-access-status.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/14-access-status.json new file mode 100644 index 00000000..f398aa46 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/14-access-status.json @@ -0,0 +1 @@ +{"batch_access_status":"broken","batch_id":30,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"subscription","details_json":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream rate limit exceeded, please retry later\\\",\\\"type\\\":\\\"rate_limit_error\\\"}}\",\"completion_status\":429,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}","id":35,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"minimax-m2-7-official"} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/15-access-preview.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/15-access-preview.json new file mode 100644 index 00000000..50a6cb1b --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/15-access-preview.json @@ -0,0 +1 @@ +{"provider_id":"minimax-m2-7-official","mode":"subscription","available":false,"message":"access status broken does not satisfy mode subscription"} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/16-batch-detail-final.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/16-batch-detail-final.json new file mode 100644 index 00000000..9044338f --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/16-batch-detail-final.json @@ -0,0 +1 @@ +{"access_closures":[{"ID":35,"BatchID":30,"ClosureType":"subscription","Status":"broken","DetailsJSON":"{\"completion_ok\":false,\"completion_preview\":\"{\\\"error\\\":{\\\"message\\\":\\\"Upstream rate limit exceeded, please retry later\\\",\\\"type\\\":\\\"rate_limit_error\\\"}}\",\"completion_status\":429,\"completion_type\":\"application/json; charset=utf-8\",\"has_expected_model\":true,\"models\":[\"MiniMax-M2.5-highspeed\",\"MiniMax-M2.7-highspeed\"],\"ok\":true,\"status_code\":200}"}],"access_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":1,"id":30,"mode":"partial","pack_id":1,"provider_id":45},"items":[{"account_status":"failed","batch_id":30,"id":30,"key_fingerprint":"sha256:0bc73e921f3a0fcb9e5a718dc7a061d154a616fc92ef0e7e3f7668db9eb335b2","probe_summary_json":"{\"account_id\":\"45\",\"models\":[{\"id\":\"MiniMax-M2.5-highspeed\",\"display_name\":\"MiniMax-M2.5-highspeed\",\"type\":\"model\"},{\"id\":\"MiniMax-M2.7-highspeed\",\"display_name\":\"MiniMax-M2.7-highspeed\",\"type\":\"model\"}],\"probe_advisory\":false,\"probe_message\":\"API returned 404: 404 page not found\",\"probe_ok\":false,\"probe_status\":\"failed\",\"smoke_model_seen\":true,\"validation_status\":\"failed\"}"}],"items_count":1,"managed_count":4,"managed_resources":[{"ID":42,"BatchID":30,"HostID":1,"ResourceType":"group","HostResourceID":"10","ResourceName":"MiniMax M2.7 官方默认分组-subscription"},{"ID":43,"BatchID":30,"HostID":1,"ResourceType":"channel","HostResourceID":"9","ResourceName":"MiniMax M2.7 官方默认渠道-subscription"},{"ID":44,"BatchID":30,"HostID":1,"ResourceType":"plan","HostResourceID":"6","ResourceName":"MiniMax M2.7 官方默认套餐-subscription"},{"ID":45,"BatchID":30,"HostID":1,"ResourceType":"account","HostResourceID":"45","ResourceName":"minimax-m2-7-official-01"}],"reconcile_count":0,"reconcile_runs":[]} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/17-upstream-models.headers.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/17-upstream-models.headers.txt new file mode 100644 index 00000000..bd172584 --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/17-upstream-models.headers.txt @@ -0,0 +1,10 @@ +HTTP/1.1 200 OK +Date: Thu, 21 May 2026 14:22:42 GMT +Content-Type: application/json; charset=utf-8 +Content-Length: 621 +Connection: keep-alive +Trace-Id: 065e4832a8de814e32d4e19bcf649a01 +Minimax-Request-Id: b3712afbb4f08a8fca786ed1c581d0b5 +alb_receive_time: 1779373362.225 +alb_request_id: 43ee5749cf8c0bf4d85e150f06af7e2e115b3e3c + diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/18-upstream-models.body.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/18-upstream-models.body.json new file mode 100644 index 00000000..9be3c9fe --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/18-upstream-models.body.json @@ -0,0 +1 @@ +{"object":"list","data":[{"id":"MiniMax-M2.7","object":"model","created":1773799200,"owned_by":"minimax"},{"id":"MiniMax-M2.7-highspeed","object":"model","created":1773799200,"owned_by":"minimax"},{"id":"MiniMax-M2.5","object":"model","created":1770948000,"owned_by":"minimax"},{"id":"MiniMax-M2.5-highspeed","object":"model","created":1770948000,"owned_by":"minimax"},{"id":"MiniMax-M2.1","object":"model","created":1766455200,"owned_by":"minimax"},{"id":"MiniMax-M2.1-highspeed","object":"model","created":1766455200,"owned_by":"minimax"},{"id":"MiniMax-M2","object":"model","created":1761530400,"owned_by":"minimax"}]} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/19-upstream-chat.headers.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/19-upstream-chat.headers.txt new file mode 100644 index 00000000..09624c8e --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/19-upstream-chat.headers.txt @@ -0,0 +1,12 @@ +HTTP/1.1 429 Too Many Requests +Date: Thu, 21 May 2026 14:22:46 GMT +Content-Type: application/json; charset=utf-8 +Content-Length: 159 +Connection: keep-alive +Trace-Id: 065e4836da85aaed75f1d64a2c9fe18a +X-Session-Id: 5d638734f24f4def1e33ea8235d71f0e +X-Mm-Request-Id: 2035702256761835932_1779373366y1ul3o +Minimax-Request-Id: fa35a6c74412e99db2ebf57f487cc4c2 +alb_receive_time: 1779373366.823 +alb_request_id: c023309e53aa5724ed448cf445fb731a92daeecd + diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/20-upstream-chat.body.txt b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/20-upstream-chat.body.txt new file mode 100644 index 00000000..0c4678ab --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/20-upstream-chat.body.txt @@ -0,0 +1 @@ +{"type":"error","error":{"type":"rate_limit_error","message":"usage limit exceeded (2056)","http_code":"429"},"request_id":"065e4836da85aaed75f1d64a2c9fe18a"} diff --git a/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/21-summary.json b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/21-summary.json new file mode 100644 index 00000000..6280a14e --- /dev/null +++ b/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import/21-summary.json @@ -0,0 +1 @@ +{"artifact_dir": "/home/long/project/sub2api-cn-relay-manager/artifacts/real-host-acceptance/20260521_222212_remote43_minimax-m2-7-official_key_import", "provider_id": "minimax-m2-7-official", "batch_id": 30, "batch_status": "partially_succeeded", "access_status_from_import": "broken", "provider_status_from_import": "degraded", "direct_models_http200": true, "direct_models_has_expected_model": true, "direct_models": ["MiniMax-M2.5-highspeed", "MiniMax-M2.7-highspeed"], "direct_chat_http200": false, "direct_chat_status": 429, "upstream_models": ["MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", "MiniMax-M2.5-highspeed", "MiniMax-M2.1", "MiniMax-M2.1-highspeed", "MiniMax-M2"], "upstream_models_has_expected_model": true, "upstream_chat_status": 429, "completion_classification": "unknown", "latest_access_status": "broken", "preview_available": false, "accepted_keys_count": 1, "subscription_group_id": "10", "import_group_id": "10"} \ No newline at end of file diff --git a/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/01-create-host.json b/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/02-probe-host.json b/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/auto_4431135c_openai_subscription/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/01-create-host.json b/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/01-create-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/01-create-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/02-probe-host.json b/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/02-probe-host.json deleted file mode 100644 index c5e7b007..00000000 --- a/artifacts/real-host-acceptance/auto_a5f5185f_minimax_self_service/02-probe-host.json +++ /dev/null @@ -1 +0,0 @@ -{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}} diff --git a/docs/REAL_HOST_ARTIFACT_RETENTION.md b/docs/REAL_HOST_ARTIFACT_RETENTION.md new file mode 100644 index 00000000..10155f25 --- /dev/null +++ b/docs/REAL_HOST_ARTIFACT_RETENTION.md @@ -0,0 +1,221 @@ +# Real-Host Artifact 保留/归档/清理清单 + +日期:2026-05-22 +项目:`sub2api-cn-relay-manager` + +## 用途 + +本清单用于给 `artifacts/real-host-acceptance/` 下的历史目录做统一分层: + +1. 保留为最终证据 +2. 归档保留,但日常不必继续关注 +3. 可清理的中间试错记录 + +判断原则: + +- 以 `docs/SOURCE_OF_TRUTH.md` 与 `docs/PRODUCTION_CLOSURE_BOARD.md` 的当前真相为准 +- 优先看目录内 `21-summary.json`、`05-import.json`、`03-import.body.json`、`07-access-status.json` +- 只把“latest-head / fresh-host / current-code”直接相关的证据放进“最终证据” +- 纯预跑、空目录、只到 preflight、已被后续更完整证据覆盖的目录,放入“可清理” + +## 1. 可保留为最终证据 + +这些目录应长期保留,属于当前 Gate=`APPROVED` 的核心证据。 + +### 当前主链路最终证据 + +- `20260521_191418_remote43_minimax_key_import` + - `subscription` 主链路最终成功样本 + - `21-summary.json` 已到 `batch_status=succeeded`、`provider_status=active` + - host `/v1/chat/completions` 与 upstream `/chat/completions` 都是 `200` + +- `20260521_201509_remote43_deepseek_key_import` + - `subscription` 主链路最终成功样本 + - `21-summary.json` 已到 `batch_status=succeeded`、`provider_status=active` + - host `/v1/chat/completions` 与 upstream `/chat/completions` 都是 `200` + +- `20260521_210403` + - latest-head `self_service` 标准 fresh-host 验收最终成功样本 + - `05-import.json` = `succeeded/self_service_ready/active` + - `07-access-status.json` = `latest_access_status=fully_ready` + +### 当前根因/能力校准证据 + +- `20260520_222713_crm18100_live_model_mapping_validation` + - 证明 `model_mapping` 真实落盘与 live runtime 一致 + - 属于“为什么不再回退 GPT 默认模型”的关键证据 + +- `20260521_142211_crm18100_deepseek_completion_split` + - 证明 host completion 失败与 upstream completion 成功可以分离 + - 是 `host_compatibility_gap` 与 `upstream_key_quota_issue` 分流逻辑的重要根因样本 + +- `20260521_222212_remote43_minimax-m2-7-official_key_import` + - 官方 MiniMax 模板的真实 live 样本 + - 不是通过样本,但它是“模板链路通、上游 quota/429 阻断”的最终证据 + - 对后续官方 provider 验收矩阵有持续价值 + +## 2. 可归档但不必继续关注 + +这些目录有参考价值,但已经不是当前真相的第一证据。建议保留压缩包或移到归档区,不需要日常留在主视图里。 + +### 早期 OpenAI / host-scope 里程碑样本 + +- `20260517_openai_platform_fix_retest` +- `20260518_reconcile_hostscope_self_service` +- `20260518_reconcile_hostscope_subscription` +- `20260518_redeploy_matrix` +- `20260521_210306` + +说明: + +- 这些目录证明过某一阶段的 self-service / subscription / host-scope 语义曾经打通 +- 但都已被 `20260521_191418_*`、`20260521_201509_*`、`20260521_210403` 覆盖 + +### 已定位问题、但已被后续最终修复覆盖的关键失败样本 + +- `20260520_173133_remote43_deepseek_key_import` +- `20260520_203533_remote43_deepseek_key_import` +- `20260520_203818_remote43_deepseek_key_import` +- `20260520_203913_remote43_minimax_key_import` +- `20260521_011544_remote43_minimax_key_import` +- `20260521_011717_remote43_deepseek_key_import` +- `20260521_064109_remote43_minimax_key_import` +- `20260521_064203_remote43_deepseek_key_import` +- `20260521_064403_remote43_deepseek_key_import` +- `20260521_064454_remote43_minimax_key_import` +- `20260521_110159_remote43_deepseek_key_import` +- `20260521_110229_remote43_minimax_key_import` +- `20260521_172436_remote43_deepseek_key_import` +- `20260521_172437_remote43_minimax_key_import` +- `20260521_172646_remote43_minimax_key_import` +- `20260521_172709_remote43_deepseek_key_import` +- `20260521_182844_remote43_minimax_key_import` +- `20260521_190809_remote43_minimax_key_import` +- `20260521_191026_remote43_minimax_key_import` +- `20260521_200932_remote43_deepseek_key_import` + +说明: + +- 这些目录记录了“模型列表成功但 completion 失败”“quota 问题”“probe 假失败”“ready 语义修正前后”的完整演进 +- 若后续要回顾 debug 过程,它们有价值 +- 但对当前上线结论已不是必需证据 + +### 旧版 full-flow 但已失败/半成功的早期验收目录 + +- `20260517192934_openai_group_bound_closure` +- `20260517_062209_fixed` +- `20260517_080506_post_fix` +- `20260517_081533_post_decode_fix` +- `20260517_082153_post_account_type_fix` +- `20260517_104007_subscription_after_fix` +- `20260517_104113_subscription_skip_rollback` +- `20260517_live_openai_retest` +- `20260517_live_openai_subscription_retest` +- `20260517_openai_group_balance_retest` +- `20260517_openai_keep_scene` +- `20260518_redeploy_self_service` +- `20260518_redeploy_self_service_keep` +- `20260518_self_service_reaccept_v6` +- `20260518_subscription_reaccept_v6` +- `20260519_self_service_reaccept_current` +- `20260521_202654` +- `20260521_203020` +- `20260521_203229` +- `auto_a5f5185f_minimax_self_service` + +说明: + +- 这些目录大多是完整流程快照,包含导入、access、provider-status、reconcile、rollback +- 虽然最终失败或半成功,但对复盘“问题怎么一步步收口”仍有价值 + +## 3. 可以清理掉的中间试错记录 + +这些目录主要是: + +- 空目录 +- 只到 create-host / preflight / runtime-context +- 明显被后续同主题目录完全覆盖 +- 手工临时试验目录,且已有更完整自动化目录替代 + +### 空目录或只有极少预跑内容 + +- `20260516_170617` +- `20260517_000027` +- `20260518_redeploy_subscription_keep` +- `20260519_111543_remote43_local_minimax_key_import` +- `20260521_195330_remote43_deepseek_key_import` +- `20260521_221921_remote43_minimax-m2-7-official_key_import` + +### 仅 preflight / install-pack / preview,未形成有效验收结论 + +- `20260516_155350` +- `20260516_170410` +- `20260516_170421` +- `20260516_170607` +- `20260516_170725` +- `20260516_171131` +- `20260517_000418` +- `20260517_061947_postfix` +- `20260517_062722_after_account_fix` +- `20260517_102113_subscription_probe` +- `20260517_live_openai_subscription_nokey` +- `20260520_115443_remote43_deepseek_key_import` +- `20260520_115505_remote43_deepseek_key_import` +- `20260520_115549_remote43_deepseek_key_import` +- `20260520_123159_remote43_deepseek_key_import` +- `20260520_172725_remote43_deepseek_key_import` +- `20260520_173010_remote43_deepseek_key_import` +- `20260520_184240_remote43_deepseek_key_import` +- `20260520_185332_remote43_deepseek_key_import` +- `20260520_194731_remote43_deepseek_key_import` +- `20260520_194818_remote43_deepseek_key_import` +- `20260520_194946_remote43_deepseek_key_import` +- `20260520_195110_remote43_deepseek_key_import` +- `20260521_011452_remote43_minimax_key_import` +- `20260521_171701_remote43_deepseek_key_import` +- `20260521_172212_remote43_deepseek_key_import` +- `20260521_172213_remote43_minimax_key_import` +- `20260521_172337_remote43_deepseek_key_import` +- `20260521_172338_remote43_minimax_key_import` +- `20260521_182744_remote43_minimax_key_import` +- `20260521_190534_remote43_minimax_key_import` +- `20260521_190941_remote43_minimax_key_import` +- `20260521_195348_remote43_deepseek_key_import` +- `20260521_195413_remote43_deepseek_key_import` +- `20260521_195635_remote43_deepseek_key_import` +- `20260521_200014_remote43_deepseek_key_import` +- `20260521_200217_remote43_deepseek_key_import` +- `20260521_200733_remote43_deepseek_key_import` +- `20260521_204702` +- `20260521_221940_remote43_minimax-m2-7-official_key_import` +- `20260521_222052_remote43_minimax-m2-7-official_key_import` +- `auto_4431135c_openai_subscription` + +### 手工临时 reaccept 目录,已被后续自动化 remote43 目录覆盖 + +- `20260520_115732_remote43_deepseek_manual_reaccept` +- `20260520_115820_remote43_deepseek_manual_reaccept` +- `20260520_120656_remote43_deepseek_manual_reaccept` +- `20260520_120819_host18080_deepseek_manual_reaccept` +- `20260520_121447_host18091_deepseek_manual_reaccept` +- `20260520_121640_host18091_deepseek_manual_reaccept` +- `20260520_121936_crm18092_host18091_deepseek_manual_reaccept` + +## 建议执行方式 + +### 低风险做法 + +1. 先保留“最终证据”原样不动 +2. 把“可归档”目录打包移动到归档区,例如: + - `artifacts/real-host-acceptance-archive/` +3. 把“可清理”目录删除 + +### 不建议的做法 + +- 不要只按时间删除最新之前的所有目录 +- 不要删除 `20260521_191418_remote43_minimax_key_import` +- 不要删除 `20260521_201509_remote43_deepseek_key_import` +- 不要删除 `20260521_210403` +- 不要删除 `20260520_222713_crm18100_live_model_mapping_validation` +- 不要删除 `20260521_142211_crm18100_deepseek_completion_split` +- 不要删除 `20260521_222212_remote43_minimax-m2-7-official_key_import`