main moved 210 commits ahead in five days (413 files: AnyAPI, Prospeo, Dropleads and other catalog
listings, routed-parent adaptation, the archive's own-key and repeat-pricing work, video task
settlement, org slug history). Only ONE file conflicted, the GENERATED MAP.md, which was rebuilt
rather than merged by hand. Nothing in the hub needed a code change this time.
Migration numbers collided again: main took 0039 and 0040, so the six hub revisions move
0039-0044 → 0041-0046 and chain onto main's 0040. Single head 0046; the chain applies clean on a
fresh sqlite with both hub switch columns present. The numbers named in architecture/hub.md follow,
and every file it names exists.
Verified after the merge: our phase 10 work survived intact — `scripts/build_plugin.py` still ships
the hub section unconditionally, and all five plugins still carry the hub (9 mentions each), the
"per-deployment switch" instruction for the off case, and no raw markers. main changed skill.md and
llms.txt; the plugin freshness check passes against the merged agent files.
Green: full suite 4393 passed, 8 skipped; hub + callmatrix + mcp 213; agent pages + seo 228;
surface snapshot + alembic parity 8; import-linter 14/14; plugin check OK. One failure in the
parallel run, test_prospeo_platform_email_settles_one_credit, which passes alone and whose whole
file passes alone (363); dev/hub touches no prospeo or marketplace file.
Maintainer half of PR #398 on top of current main: every core test_request
run live on 2026-09-19 (36/36 answered, no row metered above its price),
verified stamps and recaptured examples, linkedin.email made untestable under
the PII rule, platform_key_anyapi + tests/test_anyapi.py, plugin skill copies
regenerated, and the anyapi context fragment.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The version test pins every plugin manifest (Claude, Codex, Cursor, MiniMax,
dsh package.json) to the package version, and the generated SKILL.md copies
to src/treg/web/skill.md; both were left at 0.19.1 by the bump.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Closes#557
Root cause: PyPI's 0.19.1 was published before the `treg host` command
landed on main (c8d51c5e), but the skill served from the live server
documented `treg host`. Users installing via `curl | sh` got a CLI
without `host` and a skill that claimed it existed. Worse, because
`host` is also the name of a system DNS tool (/usr/bin/host), the
bare-word fallback (`treg claude` → `treg with claude`) intercepted
`treg host face.jpg` and ran `/usr/bin/host face.jpg` instead,
producing a confusing DNS error.
Changes:
- Bump version to 0.20.0 (0.19.1 is already on PyPI without `host`)
- Add test confirming `host` is a registered subcommand and won't fall
through to the system binary
- Add version note to skill.md (and all plugin copies): "Requires CLI
≥ 0.20.0; run `treg update` if `treg host` is unrecognised."
The existing `treg host` implementation is unchanged — it was already
on main, just never released.
Co-authored-by: Jason Zhou <JayZeeDesign@users.noreply.github.com>
One skill an agent can be pointed at for the whole /ugc loop: trend pull, hook patterns, a
character with the same vibe (via portrait-clone), Seedance 2.5 talking-head hooks (via
ugc-talking-head-video), an optional voiced demo, captions and the bill. Source lives in the
bundled web folder so it is served; .agents/skills/make-ugc symlinks to it. Listed as the
second entry in the well-known skills index.
The agent-facing descriptions (skill.md, llms.txt, MCP server, README) now name image and
video generation and voice so agents reach for treg for those tasks too; plugin skill copies
regenerated. The onboarding modal's trending card becomes "Make UGC videos" pointing at the
skill, and the /ugc final card's follow-up line does the same.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Owner's decision, 2026-09-16: a plugin must carry the hub knowledge whatever a deployment does. A
plugin is a static file installed against ANY registry, including a self-hosted one that may have
the hub switched ON, so a plugin that omitted the section would hide a feature that works there.
- src/treg/web/skill.md, src/treg/web/llms.txt: the hub section gains the instruction for the OFF
case. Every `/hub/...` route answers 404 and every `treg hub` command refuses when a deployment
has `hub_enabled` off; an agent reports "this registry does not offer the hub" and uses the rest
of the catalog, instead of retrying a fault that cannot be fixed. The SERVER still strips the
whole section while its own flag is off, because the server knows its own state.
- scripts/build_plugin.py: the hub section is no longer behind `--with-hub`; it always ships.
Leaving it behind a flag meant a plain `--check` rebuilt the plugins WITHOUT the hub, reported all
five as stale, and invited a regeneration that silently stripped the hub text back out.
`--with-hub` is still accepted and now does nothing. `--check` passes with and without it.
- The five plugins regenerated: claude, codex, cursor, dsh, minimax.
- CHANGELOG.md: new file, this repo had none. Covers the hub under Unreleased.
Full suite 4069 passed, 8 skipped; agent pages + seo 228; hub + mcp + snapshot 186; import-linter
14/14; plugin check OK. One failure in the parallel run, test_backlinks_ceiling, which passes alone
and whose whole file passes alone (14); no source file in this commit relates to it.
main added revision 0038 (endpoint day stats): the archive revision is now 0039 and every
reference follows. Public docs describe the archive by mechanism only - the dated section
titles and the hosted staging plan moved to the private runbook, per the updated AGENTS.md rule.
Plugin skills and the fragment index are regenerated on the merged tree.
main shipped migrations 0034-0037 (managed API keys, media hosting) while this branch was open:
the archive migration is renumbered 0038 (down_revision 0037) and every reference follows. The
plugin skills and the fragment index are regenerated on the merged tree.
Two fixes from generating an 18 s Seedance 2.5 take through treg on 2026-09-14.
`treg host <file>` / `POST /media` / `GET /m/{token}`: AIGC endpoints take reference
images, voice clips and videos as public URLs the vendor fetches, and every paste host
tried failed a vendor probe (catbox unreachable from reAPI's fal-backed probe, tmpfiles
serving HTML, uguu timing out) - five submissions for one accepted task. Bytes live in a
new `media` table (migration 0037), served by a 192-bit opaque token, 30 MB per file,
300 MB per org per 24 h, 7-day TTL, image/audio/video only, refused in the sandbox, not
metered. Expiry is swept inline on upload.
`treg call reapi.tasks.get tasks/<id>` used to answer "no tool 'reapi.tasks.get' in this
org": the own-tool shape applied to a catalog id sent the caller to the wrong half of
treg. It now answers 400 naming the endpoint's parameter slots and the --query form.
Fragments: new architecture/media.md; interface/cli.md, interface/api.md. Front door:
llms.txt, skill.md (+ generated plugin copies), USAGE.md. Snapshots regenerated.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WYmLQ8AcvGcDM95MRNjodb
The archive now takes part in every credential tier and prices a hit per team.
- Serving defaults open: TREG_ARCHIVE_SERVE_ENDPOINTS accepts "*" (the new default) and
TREG_ARCHIVE_SERVE_PERCENT defaults to 100; an empty allowlist stays the rollback lever.
- Own-key catalog calls look the question up before the relay and, when the 2xx answer fits
archive_max_body_bytes, read it whole and record it with origin_org_id; larger answers stream
untouched. A hit on an own key is free. Own-key snapshots serve their own team always and
other teams only where the provider's licence was judged (explicit cache: transient/archive).
- An answer that echoes the team's own credential is never recorded; compressed answers are
not recorded either.
- A metered hit settles through the same hold: a team's first billed call on a question is full
price, its later hits archive_hit_repeat_price_percent (10). ArchiveKeyOrg (migration 0034)
marks (org, key) inside the settle transaction (allowlisted write archive_org_use_in_settle).
Fragments updated: archive, money, proxy-model, data-model, api; plus AGENTS.md, SECURITY.md,
llms.txt, skill.md and the generated plugin skills.
Two AIGC resellers that serve Seedance 2.5 with a relaxed content filter (reAPI
`content_filter: false`, PiAPI `seedance-2.5-less-restriction`), the only routes on which
a real person's photo drives the video, plus GPT Image 2.5 / 2 and Gemini 3 Pro Image.
Both files share per-model capability join keys so the model wall shows the two routes
to one model on a single row.
- oauth_providers: REAPI (Bearer; unknown-task probe, 401 = bad key) and PIAPI
(X-API-Key; free /account/info probe), both `AI generation`.
- config: platform_key_reapi / platform_key_piapi tier-4 slots.
- catalog: reapi.yaml (6 rows) and piapi.yaml (6 rows) with file-level async
descriptors, per-row overrides for the image result paths and PiAPI's bare-object
gpt-image route, and price tables; every generation row live-verified with the
observed charge (reAPI usage.credits, PiAPI meta.usage points / equivalent_in_usd).
- tests: registry + offerable lists, a platform-priced test for both files, and the
model-wall test now pins the five merged rows.
- docs: catalog fragment (sources + AIGC paragraphs); plugin skill copies regenerated.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SKjtrwx9eJ5Ewap8Fesp4J
Resolves the conflicts from #470: render.yaml is gone (the Harvest key slot and
capacity-cron forwarding now belong to the private deployment repository), the
Harvest sections of ops/deploy.md and ops/capacity.md follow the hosted details
out of this repo, and the harvestapi fragment records the hosted wiring in one
paragraph instead. Context map and the three skill mirrors regenerated.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015vSvXHoJ2rrEpgoH7kdrsh
The CLI now prints one stderr line for X-Treg-Hint: feedback beside the charge line, as it already
did for review invitations, and reads the unified header a 0.19 registry sends (the older
X-Treg-Review: requested still works against a pre-0.19 registry). Plugin manifests, the skill
copies and the lock file carry the same version.
A free endpoint served through the overflow relay bills the relay's price
(apollo.people.search: 8,810 calls at $0.002 on 2026-09-08) and nothing on
the MCP surface said so. The call result now carries served_via and a hint,
and catalog_get shows overflow_price_usd up front.