
Transparent Proxy Maintenance
- 5 installs
- 21 repo stars
- Updated August 3, 2026
- starchild-ai-agent/official-skills
Helps with ai & agent building tasks during AI-assisted development.
About
transparent-proxy-maintenance is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- transparent-proxy-maintenance
- AI & Agent Building
- AI-coding skill
Transparent Proxy Maintenance by the numbers
- 5 all-time installs (skills.sh)
- Ranked #13,065 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/starchild-ai-agent/official-skills --skill transparent-proxy-maintenanceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 5 |
|---|---|
| repo stars | ★ 21 |
| Last updated | August 3, 2026 |
| Repository | starchild-ai-agent/official-skills ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
transparent-proxy-maintenance
Use this skill for all paid-API lifecycle work in transparent-proxy.
Scope
Covers 3 common tasks: 1. 修改价格和限频 2. 修改付费 API 的计价方式 3. 添加和移除付费 API
Also includes testing + Fly deployment workflow.
Architecture you must respect
- Core proxy:
transparent-proxy/proxy.py - Plugin base:
transparent-proxy/apis/base.py - One paid API per plugin file:
transparent-proxy/apis/*.py - Static config snapshots (still kept for sync/ops):
transparent-proxy/config/pricing.jsontransparent-proxy/config/rate_limits.jsontransparent-proxy/config/proxied_apis.jsontransparent-proxy/config/keys.json
Rule: each paid API should stay self-contained in its plugin (pricing, limit, key injection), and config snapshots must remain consistent.
Standard workflow (always)
1. Read target plugin + related config files first. 2. Apply minimal edits (edit_file preferred). 3. Run tests (quick first, then full when needed). 4. Deploy to Fly (fly deploy, no hot reload assumptions). 5. Post-deploy smoke tests through sc-proxy.internal:8080. 6. Verify billing headers + DB charge behavior for changed APIs.
---
A) 修改价格和限频
Where to change
- Plugin file, e.g.
apis/twitterapi.py - price:
pricing = Pricing.per_request(...) - rate limit:
rate_limit = RateLimit(requests_per_minute=...) - Keep snapshot config aligned:
config/pricing.jsonconfig/rate_limits.json
Example patterns
- Per-request pricing:
pricing = Pricing.per_request(0.001)- RPM:
rate_limit = RateLimit(requests_per_minute=240)
Validate
- Functional: API still returns 200 via proxy.
- Billing headers exist on paid domains:
X-Credits-UsedX-Credits-Balance- Rate limit works at new threshold with burst test (expect some 429 only beyond threshold/burst).
INET/IPv6 null-safety (subscription-service specific)
When writing to subscriptions.machine_ipv6 (type INET), never pass string placeholders like "None" or "null".
- Normalize empty/placeholder values to Python
Nonebefore SQL bind. - Use parameterized SQL only; let psycopg2 map
Noneto SQLNULL. - Expected behavior for pre-machine subscription: insert succeeds with
machine_ipv6 = NULL; downstream refresh jobs should skip these rows until IPv6 is backfilled.
Stripe upgrade payment-gating (subscription-service specific)
For plan upgrades, do not switch local subscriptions.plan on change-plan response alone.
- Treat
change-planas initiating payment only; do not persist intermediate upgrade state. - Only apply upgraded plan + higher daily credit after
invoice.paidwebhook. - If
payment_intent_statusisrequires_action, return a frontend redirect/confirmation hint and keep current plan unchanged. - If payment is incomplete/failed (
requires_payment_method,requires_confirmation,canceled), keep current plan unchanged.
This prevents unpaid/3DS-incomplete upgrades from being activated locally while keeping state handling minimal.
---
B) 修改付费 API 的计价方式
Available models (apis/base.py)
Pricing.per_request(x)Pricing.per_token(input_per_1k=..., output_per_1k=...)Pricing.openrouter_usage(multiplier=...)
Decision guide
- Fixed-cost APIs →
per_request - Token-based LLM APIs →
per_token - OpenRouter-like responses with usage cost →
openrouter_usage
Additional hooks when needed
extract_usage(flow)for custom token/cost extractionrewrite_response(flow, credits_used, sse_streamed)for usage.cost rewritetransform_sse_chunk(data)for streaming chunk rewritecharge_api_type(usage)for per-model charge type (e.g.openrouter/{model})
Important implementation detail: proxy.py only calls extract_usage(...) when plugin.is_llm = True. If you implement dynamic billing via extract_usage (even for non-LLM APIs like async video), set is_llm = True in that plugin or the extracted cost will be ignored and charges become 0.
Critical checks for billing-model changes
- Non-stream response:
body.usage.costshould matchX-Credits-Usedwhen rewrite is expected. - SSE response: final usage chunk cost rewrite must be correct.
- Error responses (4xx/5xx): should not create positive charges.
- Twitterapi.io payload-shape guardrails for verification:
/twitter/tweet/retweetersreturnsusers[](notretweeters[])/twitter/tweet/repliescommonly returnstweets[](notreplies[])/twitter/user/searchreturnsusers[]
Confirm actual key shape before computing expected billed items, otherwise you may misdiagnose pricing bugs.
---
E) fal.ai storage support (image/video reference uploads)
When user asks to support fal image-to-video/video-to-video reference files via fal storage:
1. Update apis/falai.py plugin to include both domains:
queue.fal.run(generation)api.fal.ai(file storage API)
2. Add storage endpoint handling in plugin:
POST /v1/serverless/files/file/local/{target_path}POST /v1/serverless/files/file/url/{file}- optional read/list endpoints as zero-cost
3. Enforce upload guards in plugin preflight (before upstream call):
- Require
multipart/form-data+Content-Lengthfor local upload - Reject unsupported extensions
- Enforce size limits (example policy):
- image max 10MB
- video max 100MB
4. Storage pricing policy (if requested):
- image local upload = 0.01
- video local upload = 0.1
- queue poll/result/list/get can remain 0
5. Keep config snapshots/admin config aligned:
config/proxied_apis.jsonaddapi.fal.aiconfig/domains.jsonaddapi.fal.ai- mirror to
admin-app/config/*files
6. Validation checklist:
- unit tests for plugin endpoint identification, size limits, pricing
python -m py_compileon modified files- proxy smoke: storage upload returns billing headers (
X-Credits-Used) with expected fee
7. Abuse-prevention policy for fal integration:
- Endpoint allowlist only (deny-by-default):
- generation: only approved video endpoints needed for text-to-video / image-to-video / video-to-video / edit-video
- storage: only
file/local,file/url, optionalfile/getandlist - Billing model scope:
- charge generation only for
per_video_secondandper_video - unknown/unsupported generation endpoints should be rejected (403), not soft-charged with fallback
- Storage upload anti-abuse:
- both image and video upload operations are billable
- enforce content-type + extension + size limits before upstream call
C) 添加和移除付费 API
Add a new paid API
1. Create apis/<name>.py plugin class inheriting ApiPlugin. 2. Define at minimum:
namedomainsenv_varpricinginject_key(...)
3. Add/align config snapshots:
config/keys.json(fake_key + env_var)config/pricing.jsonconfig/rate_limits.jsonconfig/proxied_apis.json(domains + type)
4. Verify plugin autoload logs show it loaded. 5. Smoke test against a real endpoint on that domain via proxy.
Remove a paid API
1. Remove plugin file apis/<name>.py. 2. Remove entries from the 4 config snapshot files above. 3. Deploy and verify:
- Plugin no longer appears in loaded list.
- Requests to removed domain become passthrough or unhandled as designed.
- No new charges for removed api_type.
---
Testing playbook
1) Quick local/static checks
- Read edited files to confirm exact values.
- Run tests (start with fast suite).
- If full suite is required, run full pytest before deploy.
2) Post-deploy smoke checks (mandatory)
Use proxy endpoint:
http://sc-proxy.internal:8080
For each changed API:
- Send real request with fake key header from config.
- Expect HTTP success and billing headers on paid API domains.
Passthrough control:
- Test
https://example.comvia proxy. - Expect no billing headers.
3) Rate-limit verification (when RPM changed)
- Sequential test (sanity): medium volume should pass.
- Concurrent burst test: high volume should hit 429 near threshold/burst window.
- Use dedicated
SC-CALLER-IDfor traceability.
4) Billing verification (when pricing/model changed)
- Check
X-Credits-Usedprecision and value shape. - For LLM APIs, verify rewritten cost behavior (normal + SSE).
- Verify charges in DB for the specific caller id if needed.
---
Deployment (Fly)
- Test app:
test-sc-proxywithTEST_SC_PROXY_FLY_TOKEN - Prod app:
sc-proxywithSC_PROXY_FLY_TOKEN - Team token file convention can be either
FLY.env(workspace root) or repo-local.env; source whichever exists before deploy.
Deploy command pattern:
cd transparent-proxy
set -a; source /data/workspace/FLY.env; set +a # or source .env
export FLY_API_TOKEN="$TEST_SC_PROXY_FLY_TOKEN" # prod use SC_PROXY_FLY_TOKEN
fly deploy -c fly.test.toml --remote-only # prod: fly.tomlPost-deploy checks:
fly status -a <app>healthy.- plugin load logs are clean.
- smoke tests immediately.
Non-interactive SSH smoke tip:
- Prefer
fly ssh console --machine <id> -a <app> -C "..." - Avoid
-s/--selectin scripts (it triggers interactive prompt).
---
D) DB connection OOM / connection-growth triage (post-deploy)
When DB memory spikes after a deploy, check connection growth before changing billing logic.
1) Verify where connections come from (not only sc-proxy)
Use pg_stat_activity grouped by application_name, client_addr, and state.
Interpretation:
- If one process exceeds its own pool max, suspect leak/unchecked
getconn()path. - If each process stays near configured pool max but total is high, it's aggregate pool over-allocation across services/machines.
2) Compare against configured pool ceilings
Check pool max in each service, then sum by running machine count:
- sc-proxy (
DB_POOL_MAX) - starchild-credit-api (billing/user pools)
- subscription-service (primary/user pools)
- recharge-watcher (billing/user pools)
- admin-app (pool)
A common failure mode is each service being “correct” individually while aggregate connections exceed DB capacity.
3) sc-proxy code audit checklist
In billing.py / proxy.py, confirm:
- all DB access paths use
with db.get_conn() - no direct
db.pool.getconn()in request/response hot paths - failed/stale connections are returned with
close=True - singleton DB object is initialized once per process
4) Immediate mitigation
- Lower pool maxima first (fastest rollback-safe mitigation):
- sc-proxy: reduce
DB_POOL_MAX(e.g., 50 → 20) - also reduce secondary services' pool max where possible
- Temporarily scale down non-critical machines (admin/aux services)
- Redeploy and re-check
pg_stat_activity
5) Completion criteria for incident
- Total DB connections stable under expected aggregate ceiling
- No monotonic connection growth over at least 20–30 minutes
- DB memory remains stable after traffic bursts
Geo-restricted upstream debugging (use SC-VPN correctly)
When a target API blocks default region access, do not set global HTTP_PROXY/HTTPS_PROXY for the whole service.
- Use SC-VPN per request only (example:
http://jp:x@sc-vpn.internal:8080). - Keep
sc-proxyas the primary path; SC-VPN is a fallback for region-specific failures. - Current SC-VPN fixed country codes:
au,ch,de,jp,my,mx,th,za,br,ar,sg,hk,gb,nl,fr,se,es,it. - Unknown region returns
502 Bad Gateway; switch to one of the fixed codes above.
Guardrails
- No hot reload assumptions; use redeploy for stable updates.
- Prefer clean switch; avoid alias/compat hacks unless explicitly requested.
- One change set per deploy whenever possible (easy rollback and attribution).
- Never claim success without verifying with real proxy requests.
- Keep plugin code minimal and isolated.
---
Done criteria
A change is done only when all are true:
1. File edits match requested business change. 2. Deploy succeeded on target Fly app. 3. Changed API requests pass through proxy. 4. Billing/rate-limit behavior matches requested outcome. 5. Passthrough non-paid domains still unbilled. 6. Results are validated with concrete request outputs.
---
Recommended caller-id conventions for tests
- Chat smoke:
chat:<topic> - Burst/rate test:
chat:<api>-ratelimit - Pricing test:
chat:<api>-pricing
This makes DB verification and incident tracing straightforward.