@officexapp/vidfarm-devcli 0.21.61 → 0.21.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/dollarplatoon-skill/SKILL.md +163 -1174
- package/.agents/skills/dollarplatoon-skill/SOURCE.md +62 -0
- package/.agents/skills/dollarplatoon-skill/skill/clients.md +234 -0
- package/.agents/skills/dollarplatoon-skill/skill/feeds.md +326 -0
- package/.agents/skills/dollarplatoon-skill/skill/gigs.md +395 -0
- package/.agents/skills/dollarplatoon-skill/skill/gigworkers.md +324 -0
- package/.agents/skills/dollarplatoon-skill/skill/orders.md +573 -0
- package/.agents/skills/dollarplatoon-skill/skill/payouts.md +234 -0
- package/.agents/skills/dollarplatoon-skill/skill/platform.md +174 -0
- package/.agents/skills/dollarplatoon-skill/skill/prices.md +75 -0
- package/.agents/skills/dollarplatoon-skill/skill/pricing-and-tags.md +255 -0
- package/.agents/skills/dollarplatoon-skill/skill/proofs.md +555 -0
- package/.agents/skills/dollarplatoon-skill/skill/queue.md +404 -0
- package/.agents/skills/dollarplatoon-skill/skill/quickstart.md +191 -0
- package/.agents/skills/dollarplatoon-skill/skill/staging.md +178 -0
- package/.agents/skills/dollarplatoon-skill/skill/tasks.md +588 -0
- package/.agents/skills/dollarplatoon-skill/skill/web-pages.md +586 -0
- package/.agents/skills/vidfarm/SKILL.md +3 -3
- package/.agents/skills/vidfarm/references/core-workflows.md +39 -0
- package/SKILL.director.md +42 -3
- package/SKILL.md +3 -1
- package/clipper.md +20 -0
- package/dist/src/cli.js +50 -6
- package/dist/src/devcli/delivery-seal.js +119 -0
- package/dist/src/devcli/marketplace-console.js +1253 -0
- package/dist/src/devcli/marketplace-gigs.js +162 -16
- package/marketplace.md +275 -1
- package/package.json +28 -3
- package/public/assets/homepage-client-app.js +13 -13
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Building against staging
|
|
2
|
+
|
|
3
|
+
Staging is a complete, independent copy of Dollar Platoon on a test chain. It is the environment
|
|
4
|
+
to build against: same code, same API surface, its own accounts, and money that costs nothing to
|
|
5
|
+
be wrong with.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
|
|
9
|
+
- The two stages, side by side
|
|
10
|
+
- Where the documentation lives on each stage
|
|
11
|
+
- Getting an account and a key
|
|
12
|
+
- Getting testnet money
|
|
13
|
+
- Autologin, so a link lands somewhere useful
|
|
14
|
+
- What staging has that production does not
|
|
15
|
+
- What is NOT production-ready — read before you ship
|
|
16
|
+
- Moving an integration from staging to production
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## The two stages, side by side
|
|
21
|
+
|
|
22
|
+
| | Staging | Production |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| Frontend | `https://staging.dollarplatoon.com` | `https://dollarplatoon.com` |
|
|
25
|
+
| API | `https://staging.dollarplatoon.com/api` | `https://dollarplatoon.com/api` |
|
|
26
|
+
| Chain | **Base Sepolia** (chain id `84532`) | Base mainnet (chain id `8453`) |
|
|
27
|
+
| USDC | **MockUSDC** `0xE4E5…c6a8` — worthless by design | Real USDC `0x8335…2913` |
|
|
28
|
+
| Treasury | `0x932B9D4CA0e11D7859C43F7e58492F2C6206D485` | `0xE4E5…c6a8` |
|
|
29
|
+
| Accounts | Entirely separate. Your production key does **not** work here. | |
|
|
30
|
+
| `inbound_order` | **Available** | Not deployed — see below |
|
|
31
|
+
| Inbound email | `…@fwd.zoomgtm.com`, with a `staging.` infix in the address | same domain, no infix |
|
|
32
|
+
|
|
33
|
+
The two Treasury addresses are not a copy-paste error, and neither is production's Treasury
|
|
34
|
+
matching staging's MockUSDC: they are the same deployer account at the same nonce on two
|
|
35
|
+
different chains. Nothing is shared between them.
|
|
36
|
+
|
|
37
|
+
Everything in the rest of this skill is written with production URLs. To read it as a staging
|
|
38
|
+
integrator, substitute the host — every path is identical. `POST /gigs` means
|
|
39
|
+
`POST https://staging.dollarplatoon.com/api/gigs`.
|
|
40
|
+
|
|
41
|
+
## Where the documentation lives on each stage
|
|
42
|
+
|
|
43
|
+
This skill is served as plain Markdown from whichever stage you are pointed at:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
https://staging.dollarplatoon.com/SKILL.md the index
|
|
47
|
+
https://staging.dollarplatoon.com/skill/orders.md any linked page
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
`/skill.md`, `/skill` and `/skill/` all resolve to the index too, case-insensitively.
|
|
51
|
+
|
|
52
|
+
**The links inside these files are absolute production URLs.** That is a deliberate trade — one
|
|
53
|
+
copy of the text, not one per stage — but it means an agent following them from staging silently
|
|
54
|
+
crosses over to production's copy. The two are kept identical, so the *content* is the same; if
|
|
55
|
+
you are pinning a version, fetch siblings from the host you started on rather than following the
|
|
56
|
+
link as written.
|
|
57
|
+
|
|
58
|
+
## Getting an account and a key
|
|
59
|
+
|
|
60
|
+
Accounts are email plus a one-time code. There are no passwords, and a staging account is
|
|
61
|
+
created by the first login.
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
POST /auth/send-otp { "email": "you@example.com" }
|
|
65
|
+
POST /auth/verify-otp { "email": "you@example.com", "code": "1234" }
|
|
66
|
+
→ { "email": "you@example.com", "api_key": "…" }
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
A first login also **auto-provisions a hot wallet** on Base Sepolia. Logging in again returns the
|
|
70
|
+
existing key rather than rotating it, so a login never breaks a running agent. For a fleet of
|
|
71
|
+
agents, `POST /admin/users/provision` with an `x-admin-key` header is idempotent — see
|
|
72
|
+
[quickstart.md](https://dollarplatoon.com/skill/quickstart.md).
|
|
73
|
+
|
|
74
|
+
**Membership is the credential for everything gig-shaped.** There is no public marketplace on
|
|
75
|
+
either stage: `GET /gigs` answers `410`. A worker needs an active mailbox in a gig before they
|
|
76
|
+
can poll it, and — on an order machine — a buyer needs an active mailbox before they can place
|
|
77
|
+
an order at all. The way in is always an invite link from the gig owner
|
|
78
|
+
(`POST /gigs/:id/invites`). A `pending_approval` mailbox is not enough.
|
|
79
|
+
|
|
80
|
+
## Getting testnet money
|
|
81
|
+
|
|
82
|
+
Two different tokens, and you need both:
|
|
83
|
+
|
|
84
|
+
- **MockUSDC** is what gigs and orders are denominated in. It has no faucet route on the API. Ask
|
|
85
|
+
the platform owner to mint some to your hot wallet address, which you can read from
|
|
86
|
+
`GET /wallets`.
|
|
87
|
+
- **Base Sepolia ETH** is gas. It matters more than it looks: on an order machine the **buyer**
|
|
88
|
+
signs their own deposit transaction from their own hot wallet, so a buyer with no gas cannot
|
|
89
|
+
place an order however much MockUSDC they hold. Any public Base Sepolia faucet works.
|
|
90
|
+
|
|
91
|
+
Balances: `GET /wallets/:alias_id/balances` returns both.
|
|
92
|
+
|
|
93
|
+
## Autologin, so a link lands somewhere useful
|
|
94
|
+
|
|
95
|
+
Append `?api_key=` to **any** staging URL to sign in and land on that exact page in one step:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
https://staging.dollarplatoon.com/gigs?api_key=YOUR_API_KEY
|
|
99
|
+
https://staging.dollarplatoon.com/gigs/GIG_01HX...?api_key=YOUR_API_KEY
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The key is validated, the session stored, and `api_key` scrubbed from the address bar and
|
|
103
|
+
history. Compose it with `?hide_navbar=true&hide_logo=true` for an embed. See
|
|
104
|
+
[web-pages.md](https://dollarplatoon.com/skill/web-pages.md) for every page and param.
|
|
105
|
+
|
|
106
|
+
> **A URL containing `api_key` grants full account access to anyone who sees it.** On staging the
|
|
107
|
+
> money is fake and the risk is only your test data; the habit still matters, because the same
|
|
108
|
+
> link shape works in production.
|
|
109
|
+
|
|
110
|
+
## What staging has that production does not
|
|
111
|
+
|
|
112
|
+
**`inbound_order` — the order machine mode — runs on staging only.** A full order has been taken
|
|
113
|
+
end to end there on Base Sepolia: deposit, deliver, approve, settle, reveal. Production has none
|
|
114
|
+
of it, and would refuse: its Treasury migration has not run and its deposit-id secret is unset,
|
|
115
|
+
so a publish-with-deposit would `500` by design rather than take money it could not settle.
|
|
116
|
+
|
|
117
|
+
If you are building against `inbound_order`, staging is not a rehearsal — it is the only place it
|
|
118
|
+
exists. See [orders.md](https://dollarplatoon.com/skill/orders.md).
|
|
119
|
+
|
|
120
|
+
## What is NOT production-ready — read before you ship
|
|
121
|
+
|
|
122
|
+
Stated plainly, because the difference between the stages is not only "one has fake money".
|
|
123
|
+
|
|
124
|
+
- **The wallet encryption key rotation has not run — on either stage.** Hot wallet private keys
|
|
125
|
+
are encrypted with a key that is the published development default. On production that is 782
|
|
126
|
+
real wallets. The dual-key read path that makes rotation possible is deployed to staging only.
|
|
127
|
+
**Do not treat a Dollar Platoon hot wallet as cold storage on either stage.** Withdraw earnings
|
|
128
|
+
to a wallet you control (`POST /wallets/:alias_id/transfer`).
|
|
129
|
+
- **The production Treasury migration has not happened.** Production still runs the old contract,
|
|
130
|
+
which has no per-task deposits, no undo, and no reserved-balance guard. Every `inbound_order`
|
|
131
|
+
feature depends on the new one.
|
|
132
|
+
- **The maintenance flag does not exist.** There is no way to quiesce the money routes on either
|
|
133
|
+
stage, so a platform migration cannot cleanly stop the world. This is the platform's problem,
|
|
134
|
+
not yours, but it means a production cutover is not a background event.
|
|
135
|
+
- **`GET /public/read-url` signs any S3 key for any share-token holder.** Unfixed on both stages.
|
|
136
|
+
Anything offloaded to S3 — a large task body, an uploaded file — should be treated as readable
|
|
137
|
+
by anyone holding any share token on the platform. Keep secrets in `private_details` and
|
|
138
|
+
`private_note`, which are not S3-backed.
|
|
139
|
+
- **Staging carries test debris.** Some gigs sit on retired Treasuries with stale MockUSDC and
|
|
140
|
+
unsettled rollups, and a little unattributed dust exists in old contracts. If a *very* old
|
|
141
|
+
staging gig behaves oddly around money, check its `contract_address` before assuming a bug.
|
|
142
|
+
|
|
143
|
+
## Moving an integration from staging to production
|
|
144
|
+
|
|
145
|
+
Three things change and nothing else does:
|
|
146
|
+
|
|
147
|
+
1. **The host.** `staging.dollarplatoon.com` → `dollarplatoon.com`. Every path is the same.
|
|
148
|
+
2. **The API key.** Accounts do not cross over. Provision or log in again against production.
|
|
149
|
+
3. **The money is real.** Same code paths, same rounding, same 110% budgeting rule on outbound
|
|
150
|
+
gigs — and the same total absence of a reversal. There is no dispute resolution and no refund
|
|
151
|
+
after a payout on either stage. See
|
|
152
|
+
[platform.md](https://dollarplatoon.com/skill/platform.md).
|
|
153
|
+
|
|
154
|
+
What does **not** carry over: any `inbound_order` shop, because production has no such mode yet.
|
|
155
|
+
Build the rest of your integration against production if you like; build that half against
|
|
156
|
+
staging and wait.
|
|
157
|
+
|
|
158
|
+
`GET /health` tells you which stage answered, which is worth asserting once at startup:
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
GET /health → { "status": "ok", "stage": "staging", "timestamp": "..." }
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Tell the two apart without trusting a hostname
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
curl -s https://staging.dollarplatoon.com/api/health
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
{ "stage": "staging",
|
|
172
|
+
"chain": { "chain_id": 84532, "chain_name": "Base Sepolia", "is_testnet": true },
|
|
173
|
+
"treasury_address": "0x932B…D485", "usdc_address": "0xE4E5…c6a8" }
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
`is_testnet` is the field to branch on. `stage` is a label somebody typed into an env file;
|
|
177
|
+
`chain_id` is asked of the node, and it is the one that decides whether the money is real. Treat an
|
|
178
|
+
unrecognised chain id as a testnet — the safe default is "do not send real funds here".
|