autoreg-skills-max: initial public release (restored, redacted, hardened)

This commit is contained in:
baradok60915d52e8425
2026-10-20 02:16:32 +03:00
commit f58eafeb48
565 changed files with 60064 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
# ai& / aiand provider validation notes
Use these notes for legitimate single-account setup, API-key validation, and Hermes provider configuration for aiand.com. Do **not** use them to automate mass signup, promo abuse, or coupon circumvention.
## Domains and routes
- Marketing site: `https://www.aiand.com/`
- Console: `https://console.aiand.com/`
- API host: `https://api.aiand.com`
- Magic-link verification page: `https://console.aiand.com/verify-magic?token=<uuid>`
- OpenAI-compatible chat endpoint: `https://api.aiand.com/v1/chat/completions`
- Pitfall: `https://api.aiand.com/api/v1/chat/completions` is the wrong base path for OpenAI-compatible chat probes.
## Email magic-link flow
A login email may contain both a tracked redirect URL and a plain console URL. Prefer the plain URL matching:
```text
https://console.aiand.com/verify-magic?token=<uuid>
```
After navigation, click `Continue sign-in` to establish the browser session.
## Dashboard credit-check flow
For one-account validation:
1. Open `https://console.aiand.com/home`.
2. Read the top-right `Credits: $...` button/state.
3. `Add Credits` opens a `Purchase Credits` dialog.
4. Choose `$50` (or requested amount) and click `Purchase` to reach Stripe checkout.
5. In Stripe, enter the promo in the `Ввести промокод` / promo-code field and verify page text:
- Success: discount line appears and total becomes zero or expected discounted value.
- Failure: explicit alert such as `Код недействителен.` means the coupon did not apply for that checkout/account/product/region.
Do not infer success from merely typing the code; verify total and explicit error text.
### Billing-page route nuance
- The docs point to billing at `https://console.aiand.com/settings/billing`, but in practice the same flow is reachable from the Home dashboard via `Add Credits`.
- The purchase dialog commonly shows preset buttons like `$50`, `$150`, `$500` and a `Purchase` button before redirecting to Stripe.
- Browser snapshots around the Stripe transition can briefly come back as `(empty page)` even while `window.location.href` already points at `https://checkout.stripe.com/...`. When that happens, confirm location first, then refresh the snapshot or take a screenshot before concluding the click failed.
### Stripe promo diagnostics notes
- Observed Stripe checkout for aiand `Platform Credits` may localize to Russian; the promo field label can be `Ввести промокод`, the apply button `Применить`, and rejection text `Код недействителен.`
- On a valid browser session, the `$50` credit purchase flow reaches Stripe correctly even when the coupon fails. A Stripe rejection means the issue is coupon eligibility/configuration, not browser automation or field selection.
- Treat `Код недействителен.` / invalid-code alerts as a hard diagnostic result for that checkout: likely expired/disabled coupon, wrong product/price, region/currency restriction, or customer-specific coupon. Do not retry across many accounts as a workaround.
- Clicking `Purchase` to reach Stripe can create an unpaid checkout/invoice state; do not enter payment details or complete the payment during diagnostics unless the user explicitly intends to pay. Use the merchant back link to exit.
## API-key validation classification
Use a minimal chat/completions request against `/v1/chat/completions` with a known model id. Interpret results carefully:
- `200 OK`: key, org routing, endpoint, and selected model are usable.
- `insufficient_credits`: key authentication succeeded, but org/account balance is zero.
- `No access token` / 401-like: missing, truncated, or wrong bearer token, or wrong auth header.
- Model-not-found errors: auth may still be valid; retry with a known aiand model.
- Cloudflare `Error 1010: Access denied` / `browser's signature`: not necessarily an auth failure. Python HTTP clients such as `urllib` and `aiohttp` are blocked by Cloudflare while the same key succeeds through system `curl`. Re-test with curl before concluding the token is bad. For any Python tool that needs to talk to aiand API, use `subprocess.run(["curl", ...])` instead of `requests`/`aiohttp`/`urllib`.
### Actual model availability (2026-07-09)
`GET /v1/models` returns 7 models, but only 1 actually works on a $0-balance account:
| Model | Status | Notes |
|---|---|---|
| `qwen/qwen3.6-27b` | ✅ Works | **Reasoning model** — output in `reasoning` field, `content` is null. Free tier. |
| `deepseek-ai/deepseek-v4-pro` | ❌ Needs credits | Returns `insufficient_credits` |
| `deepseek-ai/deepseek-v4-flash` | ❌ Needs credits | Returns `insufficient_credits` |
| `zai-org/glm-5.2` | ❌ Not on host | Returns `does not exist` |
| `moonshotai/kimi-k2.7-code` | ❌ Not on host | Returns `does not exist` |
| `google/gemma-4-31b-it` | ❌ Not on host | Returns `does not exist` |
| `openai/gpt-oss-120b` | ❌ Not on host | Returns `does not exist` |
Note: `moonshotai/kimi-k2.6` is NOT in the `/v1/models` response (7 models, not 8).
### qwen/qwen3.6-27b reasoning model quirk
This model is a reasoning model running on vLLM. The output is in `choices[0].message.reasoning` — NOT `choices[0].message.content` which is `null`. The model uses `finish_reason: "length"` when `max_tokens` is hit. Always check BOTH fields when parsing responses:
```python
msg = data["choices"][0]["message"]
txt = msg.get("content") or msg.get("reasoning", "")
```
Stress test results (2026-07-09): 108/108 requests OK, 6.8 req/s throughput, avg latency 5.73s, p50 4.94s, 204 tok/s total TPS. Multi-key concurrent requests work without rate limiting.
For bulk key files, prefer the bundled curl-based checker:
```bash
python scripts/aiand_check_keys_curl.py --keys C:/path/to/aiand_keys.txt --out aiand_key_report.csv
```
Parsing pitfalls:
- Current observed key rows may be `email|sk-...|org_id`; do not split once and treat `sk-...|org_id` as the bearer token.
- Select the first field beginning with `sk-` as the API key and the UUID-like non-email field as `X-Org-ID`.
- Never log raw keys; print email/line, key length, status, and HTTP status only.
Known model ids observed in the console/pricing table include:
- `zai-org/glm-5.2`
- `moonshotai/kimi-k2.7-code`
- `moonshotai/kimi-k2.6`
- `qwen/qwen3.6-27b`
- `deepseek-ai/deepseek-v4-pro`
- `deepseek-ai/deepseek-v4-flash`
- `google/gemma-4-31b-it`
- `openai/gpt-oss-120b`
## Session timeout pitfall
The aiand console session (established via magic link) expires aggressively — often within **5-10 minutes** of inactivity. After expiry, any navigation (`console.aiand.com/*`) redirects to `/login` with an empty page. The browser snapshot shows only `region "Notifications alt+T"` with no interactive elements.
**Workflow impact**: When doing browser-based promo code validation or credit checks, the entire flow (login → magic link → navigate → add credits → Stripe → promo code) must complete within one session window. If the session dies mid-flow, request a fresh magic link via IMAP (`execute_code` with `imaplib` is fastest) and restart.
**Detection**: A snapshot showing only `region "Notifications alt+T"` and no navigation/content elements means the session is dead. Do not try to interact — go straight to requesting a new magic link.
**Fastest re-login**: Use `execute_code` to pull the latest magic link from IMAP, then `browser_navigate` directly to the `verify-magic?token=` URL. This is faster than re-entering email on the login form.
## Security hygiene
If an email app password or provider key is found hardcoded in a script, move it to `.env`/environment variables and recommend rotating it. Do not preserve raw secrets in skill references.