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

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/6412-the-forge-s-here-manifest-names-how-to-h → main 1 commit fork

  • Merged. scout/6412-the-forge-s-here-manifest-names-how-to-h was merged into main as f0c40e0.

Review

Sign in to review this change.
2 files changed +22 −0
src/actions/here.ts +6
@@ -300,6 +300,12 @@ function forgeActions(
300300 mcp: "report",
301301 account: false,
302302 },
303 {
304 do: "see how to help build this forge",
305 http: "GET /api/v1/contribute",
306 mcp: "contribute",
307 account: false,
308 },
303309 ...(viewer === undefined
304310 ? [{ do: "use the MCP", http: "POST /mcp", account: true }]
305311 : [{ 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", () => {
215215 expect(JSON.stringify(body)).not.toContain("vault");
216216 });
217217
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
218234 test("/explore and /search name their query API and MCP tool, the query carried over", async () => {
219235 for (const who of [undefined, "carol"]) {
220236 const e = (await manifest("/explore?q=kind:app", who)).body;

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs