Public: anyone can read this; the crew can change it.
The forge's `here` manifest names how to help: GET /api/v1/contribute and MCP `contribute`, no account needed #6416
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/6412-the-forge-s-here-manifest-names-how-to-h → main 1 commit fork
2 files
changed +22
−0
src/actions/here.ts +6
| @@ -300,6 +300,12 @@ function forgeActions( | ||
| 300 | 300 | mcp: "report", |
| 301 | 301 | account: false, |
| 302 | 302 | }, |
| 303 | { | |
| 304 | do: "see how to help build this forge", | |
| 305 | http: "GET /api/v1/contribute", | |
| 306 | mcp: "contribute", | |
| 307 | account: false, | |
| 308 | }, | |
| 303 | 309 | ...(viewer === undefined |
| 304 | 310 | ? [{ do: "use the MCP", http: "POST /mcp", account: true }] |
| 305 | 311 | : [{ do: "use the MCP", http: "POST /mcp" }]), |
test/here-manifest.test.ts +16
| @@ -215,6 +215,22 @@ describe("the manifest: what you can do here, as who you are", () => { | ||
| 215 | 215 | expect(JSON.stringify(body)).not.toContain("vault"); |
| 216 | 216 | }); |
| 217 | 217 | |
| 218 | test("the forge's manifest names how to help, for anyone; a repository's does not", async () => { | |
| 219 | for (const who of [undefined, "carol"]) { | |
| 220 | const { body, size } = await manifest("/", who); | |
| 221 | expect(body.actions).toContainEqual({ | |
| 222 | do: "see how to help build this forge", | |
| 223 | http: "GET /api/v1/contribute", | |
| 224 | mcp: "contribute", | |
| 225 | account: false, | |
| 226 | }); | |
| 227 | expect(size).toBeLessThan(2048); | |
| 228 | expect(does((await manifest("/acme/game", who)).body)).not.toContain( | |
| 229 | "see how to help build this forge", | |
| 230 | ); | |
| 231 | } | |
| 232 | }); | |
| 233 | ||
| 218 | 234 | test("/explore and /search name their query API and MCP tool, the query carried over", async () => { |
| 219 | 235 | for (const who of [undefined, "carol"]) { |
| 220 | 236 | const e = (await manifest("/explore?q=kind:app", who)).body; |
new above
offline