@bongos/core 1.24.16 → 1.24.18

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/.bongos-core.json CHANGED
@@ -2,22 +2,22 @@
2
2
  "artifact": "bongos-core",
3
3
  "manifest_schema": 1,
4
4
  "generator": "scripts/bongos/package-core.js",
5
- "core_version": "1.24.16",
6
- "core_contract": "1.24.16",
7
- "source_commit": "e8dbc5553383bc1a79bba1d5b54537e89ea25d12",
5
+ "core_version": "1.24.18",
6
+ "core_contract": "1.24.18",
7
+ "source_commit": "0ebf219ad01de6b8e9ed1b617c4fcf6857ebabbf",
8
8
  "source_ref": "HEAD",
9
- "built_at": "2026-10-30T20:37:30.980Z",
9
+ "built_at": "2026-10-30T21:27:32.715Z",
10
10
  "redaction": {
11
11
  "model": "docs-redacted+functional-verbatim",
12
12
  "docs_redacted": 632,
13
13
  "agent_docs_stubbed": 32,
14
- "functional_verbatim": 3798,
14
+ "functional_verbatim": 3802,
15
15
  "rules": 3,
16
16
  "gate_literals": 3,
17
17
  "gate": "passed"
18
18
  },
19
- "file_count": 4463,
20
- "tree_sha256": "27ce12aa54042b2a48e3165cd44421d2ded0772dffbf4f47cdca60288614cc6a",
19
+ "file_count": 4467,
20
+ "tree_sha256": "c5ec1713b059cfb62f825c5ff39b3ebf934db4b9ef6bee93c174a99da1c999f1",
21
21
  "files": [
22
22
  {
23
23
  "path": ".claude/skills/ask-for-help/SKILL.md",
@@ -332,12 +332,12 @@
332
332
  {
333
333
  "path": "clients/bongos-client/README.md",
334
334
  "mode": "0000644",
335
- "sha256": "a2e94297703074317b5bceb88168c4d7c2caa79d4619b2dad16445a8eacd85e8"
335
+ "sha256": "93014d9ba68f4a28c1c23ca623762df541883df9201aad5ffdfd53bee22a0b8d"
336
336
  },
337
337
  {
338
338
  "path": "clients/bongos-client/bongos-client.global.js",
339
339
  "mode": "0000644",
340
- "sha256": "dee0d76f41a5c0449c9bb506287911470a78744370c225247eb80f74a049c7fe"
340
+ "sha256": "f4ef4c8a0d192356bcbf81a20d793ad368506a245f9b392d4654776fde6539f0"
341
341
  },
342
342
  {
343
343
  "path": "clients/bongos-client/examples/hello-world.mjs",
@@ -347,17 +347,17 @@
347
347
  {
348
348
  "path": "clients/bongos-client/index.cjs",
349
349
  "mode": "0000644",
350
- "sha256": "4277b81ea894f709e793e1cc2b9080ca65ac2c50e383e994082c2af3a973d467"
350
+ "sha256": "fafbd80941536f67f85b55c5c250df1ed152398f30ebec2820d431c99676ffb3"
351
351
  },
352
352
  {
353
353
  "path": "clients/bongos-client/index.d.ts",
354
354
  "mode": "0000644",
355
- "sha256": "01c06f818ea2709ec5af984a362306ae444e04911f8062712b8f02ff2f8f036d"
355
+ "sha256": "0e60eb71a4c912b79c2cac3bc338403883667da5c6f871ed811f21dec58d33f9"
356
356
  },
357
357
  {
358
358
  "path": "clients/bongos-client/index.mjs",
359
359
  "mode": "0000644",
360
- "sha256": "5fe1ff79bf2840651074640d90f9daab7db4455eddf1d2ace559589bc8b74f70"
360
+ "sha256": "68e375e1c32558fc6e442849bac87b2a82433d333bee255d3aeb0904b9c3f5a1"
361
361
  },
362
362
  {
363
363
  "path": "clients/bongos-client/package.json",
@@ -2457,17 +2457,17 @@
2457
2457
  {
2458
2458
  "path": "docs/api-reference.md",
2459
2459
  "mode": "0000644",
2460
- "sha256": "2eeb56594f7d73ba944f8154c1ad7dad95be7e3b3979298ca84607db0e3d5ee8"
2460
+ "sha256": "57e77a6ffdbe2d558c088fce69e154b3b595b4d6d10b5053ad4ba0043cb00c46"
2461
2461
  },
2462
2462
  {
2463
2463
  "path": "docs/api/openapi.json",
2464
2464
  "mode": "0000644",
2465
- "sha256": "8b51cc3fd37cd0cd371424ac821f84285f0e4fba5fc79a0efddb2ae92ca6bae4"
2465
+ "sha256": "d2e12182597058030c086d3283f652f8d8e2b2e62900c9babed2eba71a97996a"
2466
2466
  },
2467
2467
  {
2468
2468
  "path": "docs/architecture.md",
2469
2469
  "mode": "0000644",
2470
- "sha256": "9aafe52bde706254b562411ff290104c0aa5dbe8a29e2e3e61fec89b2f3bb24c"
2470
+ "sha256": "ac90efe1fecf89564c59896f69f6131923dfbfdc480f514af9e86802eb1041de"
2471
2471
  },
2472
2472
  {
2473
2473
  "path": "docs/branding-contract.md",
@@ -2487,12 +2487,12 @@
2487
2487
  {
2488
2488
  "path": "docs/copy-inventory.md",
2489
2489
  "mode": "0000644",
2490
- "sha256": "59713d4b3b53edf02ccd29125effd2e677c83ecc6a6616064be5b53ed3ff6ce1"
2490
+ "sha256": "e12823aa3c890a488a59b6e1fa098cbb527312c2d670b38f8aea1662bf6bbcd9"
2491
2491
  },
2492
2492
  {
2493
2493
  "path": "docs/copy-registry.json",
2494
2494
  "mode": "0000644",
2495
- "sha256": "f87a88a59f03b3b33c85a18b5f325ea976539b6ddaccc4e5c3745a2e423862aa"
2495
+ "sha256": "d72c6c9a078af32b7412c2ec8da6abe091d75251c2f0acd3c2dd7e44297e6198"
2496
2496
  },
2497
2497
  {
2498
2498
  "path": "docs/design/apex-pass-2-direction.md",
@@ -3002,7 +3002,7 @@
3002
3002
  {
3003
3003
  "path": "docs/module-api-changelog.md",
3004
3004
  "mode": "0000644",
3005
- "sha256": "691f8ca91b557183307f411c12394ec8d9b69dfa3217032fd8c8278183444fe8"
3005
+ "sha256": "f452287804538b6969ab460071c916397ba3ec34aa53231b18f30d52d3d00b7a"
3006
3006
  },
3007
3007
  {
3008
3008
  "path": "docs/modules-contract.md",
@@ -3092,7 +3092,7 @@
3092
3092
  {
3093
3093
  "path": "docs/page-readings.json",
3094
3094
  "mode": "0000644",
3095
- "sha256": "41a0a25a8eab0ac5e0885ef4bace2ff10af9187493703b6cb5f72d2ea2d542a0"
3095
+ "sha256": "9470379d40e621c3a1dbb0bde781f96b3f13617f1ddec8a66202c7e0d5ef6ef7"
3096
3096
  },
3097
3097
  {
3098
3098
  "path": "docs/project-context.template.md",
@@ -4309,6 +4309,11 @@
4309
4309
  "mode": "0000644",
4310
4310
  "sha256": "e7be74430d0d9349b4f9820ff3f202ef03d8c28363fecbaa532c4b9c119e77ec"
4311
4311
  },
4312
+ {
4313
+ "path": "migrations/core_290_builder_payouts.sql",
4314
+ "mode": "0000644",
4315
+ "sha256": "6a8ca9343a4e7d9657baaadb89f42fe76f9354ce739d09ea51569d12e01d8706"
4316
+ },
4312
4317
  {
4313
4318
  "path": "modules/agents/CLAUDE.md",
4314
4319
  "mode": "0000644",
@@ -4422,7 +4427,7 @@
4422
4427
  {
4423
4428
  "path": "modules/ai-studio/keys.js",
4424
4429
  "mode": "0000644",
4425
- "sha256": "a1b92a3661832537bedbbf5b5c8a111cef7398e928de71c6f631d5c4865f8b6c"
4430
+ "sha256": "4fd7a7b6f9bf0ed8f0e5c73ce24101832b5b82a4fb47a997bb58409be747fcc4"
4426
4431
  },
4427
4432
  {
4428
4433
  "path": "modules/ai-studio/migrations/ai_studio_001_keys.sql",
@@ -4462,7 +4467,7 @@
4462
4467
  {
4463
4468
  "path": "modules/ai-studio/routes/ai-studio.js",
4464
4469
  "mode": "0000644",
4465
- "sha256": "dbd4a55ba9942cdbc0103b402d1081423cad23adf30725d03b370aa73261c56f"
4470
+ "sha256": "4211cabb9b3923acc9d82bb0459efa6d2e2b4b115c9968927ec666a8115035ef"
4466
4471
  },
4467
4472
  {
4468
4473
  "path": "modules/ai-studio/studio.js",
@@ -5242,7 +5247,7 @@
5242
5247
  {
5243
5248
  "path": "modules/economy/module.json",
5244
5249
  "mode": "0000644",
5245
- "sha256": "b958458c140d149228f8ed40487f3e982466cf79be585691d4f1ffcbef13480d"
5250
+ "sha256": "0c1dd2a3a6f467697bdd72443d05cc3f99ec51b2b4e6d2efdd2e0f57a03cf6c9"
5246
5251
  },
5247
5252
  {
5248
5253
  "path": "modules/economy/policy.js",
@@ -5287,7 +5292,7 @@
5287
5292
  {
5288
5293
  "path": "modules/economy/routes/project-account.js",
5289
5294
  "mode": "0000644",
5290
- "sha256": "d2a4dd604dd29ad6b0da1d7d8fadba423b6279fd46866512cd0cc4fbb37ad1cb"
5295
+ "sha256": "1e61263bf8b0aaf2ad0e677fb4a57ab2c02888c296de4ca8fc76ccd2c135f235"
5291
5296
  },
5292
5297
  {
5293
5298
  "path": "modules/economy/routes/reward.js",
@@ -5877,7 +5882,7 @@
5877
5882
  {
5878
5883
  "path": "modules/hall-ui/public/ai-studio-lib.js",
5879
5884
  "mode": "0000644",
5880
- "sha256": "903ee8f348ac461d2c2e2712e110d17ef6e1fa25d0f89a3ad570d456b482bdff"
5885
+ "sha256": "f845fd50a042a785b9ea06fb651ed55d459c2b7d631b19576199c6c641feed12"
5881
5886
  },
5882
5887
  {
5883
5888
  "path": "modules/hall-ui/public/ai-studio.css",
@@ -5892,7 +5897,7 @@
5892
5897
  {
5893
5898
  "path": "modules/hall-ui/public/ai-studio.js",
5894
5899
  "mode": "0000644",
5895
- "sha256": "70d9aee3ed9057f1460de3c8ff641396b28271186a7a980e1785061a675dbe4e"
5900
+ "sha256": "67c9b6f4652a71357fc1f435637f14ed6725530c0544ca338a7b95e128bd7741"
5896
5901
  },
5897
5902
  {
5898
5903
  "path": "modules/hall-ui/public/ai-studio.states.json",
@@ -11692,12 +11697,12 @@
11692
11697
  {
11693
11698
  "path": "package-lock.json",
11694
11699
  "mode": "0000644",
11695
- "sha256": "2fdb487bbe1ef223f624f1aada21af2df70d420640eb77b4b61ce7995ad95424"
11700
+ "sha256": "575055f35b185145ffef2a3568a1ac4547fb6fa2379d6e130d70563660fb25b8"
11696
11701
  },
11697
11702
  {
11698
11703
  "path": "package.json",
11699
11704
  "mode": "0000644",
11700
- "sha256": "93b9f649209897afd37554864ecd9f8372414a168191d11e3c8e9f14296cb593"
11705
+ "sha256": "121c3e8f9ea0d45d23fcb52d5791b7e6524aac3ae9898f922d0c7b259e945b35"
11701
11706
  },
11702
11707
  {
11703
11708
  "path": "public-docs/index.html",
@@ -11717,7 +11722,7 @@
11717
11722
  {
11718
11723
  "path": "release-notes.json",
11719
11724
  "mode": "0000644",
11720
- "sha256": "f01ac97b1d814ccd53835a41a5a3a5feb2c091b8673f36b26b9138935c0009e5"
11725
+ "sha256": "00b08004177af637f2afa9c9eb567146deaf53ad93d975965eeb99f86d3024d2"
11721
11726
  },
11722
11727
  {
11723
11728
  "path": "scripts/bongos/CLAUDE.md",
@@ -12947,7 +12952,7 @@
12947
12952
  {
12948
12953
  "path": "scripts/bongos/run-unit-tests.js",
12949
12954
  "mode": "0000644",
12950
- "sha256": "16b3277dc426f3bb2c7043d1c0b466b7db65c75a277c4e77864457152624cf2a"
12955
+ "sha256": "52b452c7f022282371d0583561498737716103358ed8e010eb9734efe77f2e89"
12951
12956
  },
12952
12957
  {
12953
12958
  "path": "scripts/bongos/runner-drift.js",
@@ -15139,6 +15144,11 @@
15139
15144
  "mode": "0000644",
15140
15145
  "sha256": "f09f297371563a361002d1443414aa5ab65da36ad5e68bfadb634c659aeda6f3"
15141
15146
  },
15147
+ {
15148
+ "path": "src/bongos/builder-payouts.js",
15149
+ "mode": "0000644",
15150
+ "sha256": "b84ffb276778a5ddf018618c689b656c2d5d3a810af9e829dcb5fd20e6d6e81f"
15151
+ },
15142
15152
  {
15143
15153
  "path": "src/bongos/cascade-dispatch.js",
15144
15154
  "mode": "0000644",
@@ -15492,7 +15502,7 @@
15492
15502
  {
15493
15503
  "path": "src/bongos/routes/payout-approvals.js",
15494
15504
  "mode": "0000644",
15495
- "sha256": "7528a05d03970ea359b8b15e8bdd2a8cc56835e3c867f7662f09b3adf38ea8d5"
15505
+ "sha256": "5575f0616b45c78f57a8fa237ead916f3b04e4eae394f807603d7bf6cb53a912"
15496
15506
  },
15497
15507
  {
15498
15508
  "path": "src/bongos/routes/payout-gates.js",
@@ -15582,7 +15592,7 @@
15582
15592
  {
15583
15593
  "path": "src/module-api.js",
15584
15594
  "mode": "0000644",
15585
- "sha256": "ac2f7155740717b05c1024991a25fd662afedd122eb15672126e2a75d82eb423"
15595
+ "sha256": "8db80ccb2a1b60d7c647717b445dafeb381b0473e21b64da3ae780124f9afe4d"
15586
15596
  },
15587
15597
  {
15588
15598
  "path": "src/module-loader/catalog.js",
@@ -15852,7 +15862,7 @@
15852
15862
  {
15853
15863
  "path": "tests/ai_studio_generate.mjs",
15854
15864
  "mode": "0000644",
15855
- "sha256": "ee75867d1f3a45d0a06242b664f2d2f0829f34c586bcd883c04ac64eefc53dfd"
15865
+ "sha256": "e4b659932669bd58e44a0216a5b1e8643a0961a60ecda9b695f9042b40fc3c4d"
15856
15866
  },
15857
15867
  {
15858
15868
  "path": "tests/ai_studio_keys.mjs",
@@ -16399,6 +16409,16 @@
16399
16409
  "mode": "0000644",
16400
16410
  "sha256": "2eecaaa02ad5d2cd8e25449d66dc86aa1884278dbf72656c0d9401129034e247"
16401
16411
  },
16412
+ {
16413
+ "path": "tests/builder_payouts.mjs",
16414
+ "mode": "0000644",
16415
+ "sha256": "45d49e84f826115c43bf9f01a42eae4ee70ffe26fdc02acf303b345c9850d397"
16416
+ },
16417
+ {
16418
+ "path": "tests/builder_payouts_db.mjs",
16419
+ "mode": "0000644",
16420
+ "sha256": "1676f0b2452e0d834df2b49974d4699f918e223e56d2f4193ffe87339b6f1f4a"
16421
+ },
16402
16422
  {
16403
16423
  "path": "tests/builder_tester_tag.mjs",
16404
16424
  "mode": "0000644",
@@ -18292,7 +18312,7 @@
18292
18312
  {
18293
18313
  "path": "tests/hall_ai_studio.mjs",
18294
18314
  "mode": "0000644",
18295
- "sha256": "5b027b4922f78764d8d1222763e4aca31cc2d43895f616e37b35d018ca5188a2"
18315
+ "sha256": "e4c7673b57e03ce15eade36932ac02efdceb06101c53f673d8978e35de22cb33"
18296
18316
  },
18297
18317
  {
18298
18318
  "path": "tests/hall_approval_queue.mjs",
@@ -5,7 +5,7 @@ A **generated**, zero-dependency typed client for the Bongos API — produced fr
5
5
  by hand; it regenerates when the spec changes, so it can never drift from the routes.
6
6
 
7
7
  - API version: **v1** (served at `/api/bongos/v1`)
8
- - 657 operations across 83 resource groups
8
+ - 659 operations across 83 resource groups
9
9
 
10
10
  ## Use it from your project
11
11
 
@@ -1037,6 +1037,10 @@ function createClient(opts = {}) {
1037
1037
  getPayoutsApprovals: (args) => request("GET", "/payouts/approvals", { hasBody: false }, args),
1038
1038
  // POST /payouts/approve — rank: archon — POST /payouts/approve
1039
1039
  postPayoutsApprove: (args) => request("POST", "/payouts/approve", { hasBody: true }, args),
1040
+ // GET /payouts/builder-payouts — rank: archon — GET /payouts/builder-payouts
1041
+ getPayoutsBuilderPayouts: (args) => request("GET", "/payouts/builder-payouts", { hasBody: false }, args),
1042
+ // POST /payouts/builder-payouts — rank: archon — POST /payouts/builder-payouts
1043
+ postPayoutsBuilderPayouts: (args) => request("POST", "/payouts/builder-payouts", { hasBody: true }, args),
1040
1044
  // POST /payouts/contracts — rank: archon — POST /payouts/contracts
1041
1045
  postPayoutsContracts: (args) => request("POST", "/payouts/contracts", { hasBody: true }, args),
1042
1046
  // POST /payouts/freezes — rank: archon — POST /payouts/freezes
@@ -1036,6 +1036,10 @@ function createClient(opts = {}) {
1036
1036
  getPayoutsApprovals: (args) => request("GET", "/payouts/approvals", { hasBody: false }, args),
1037
1037
  // POST /payouts/approve — rank: archon — POST /payouts/approve
1038
1038
  postPayoutsApprove: (args) => request("POST", "/payouts/approve", { hasBody: true }, args),
1039
+ // GET /payouts/builder-payouts — rank: archon — GET /payouts/builder-payouts
1040
+ getPayoutsBuilderPayouts: (args) => request("GET", "/payouts/builder-payouts", { hasBody: false }, args),
1041
+ // POST /payouts/builder-payouts — rank: archon — POST /payouts/builder-payouts
1042
+ postPayoutsBuilderPayouts: (args) => request("POST", "/payouts/builder-payouts", { hasBody: true }, args),
1039
1043
  // POST /payouts/contracts — rank: archon — POST /payouts/contracts
1040
1044
  postPayoutsContracts: (args) => request("POST", "/payouts/contracts", { hasBody: true }, args),
1041
1045
  // POST /payouts/freezes — rank: archon — POST /payouts/freezes
@@ -144,6 +144,7 @@ export interface GetPageNotesSiteResponse { notes: unknown }
144
144
  export interface GetPayTermsResponse { pay_terms: unknown }
145
145
  export interface GetPayTypeGatesResponse { gates: unknown }
146
146
  export interface GetPayoutsApprovalsResponse { approvals: unknown }
147
+ export interface GetPayoutsBuilderPayoutsResponse { payouts: unknown; page: PageInfo }
147
148
  export interface GetPayoutsGatesBuilderIdResponse { gate: unknown }
148
149
  export interface GetPayoutsRulesResponse { rules: unknown }
149
150
  export interface GetProfilesHandleResponse { account: unknown; cross_project: unknown }
@@ -303,7 +304,7 @@ export interface PostAgentsNameEnableResponse { ok: boolean; agent: unknown }
303
304
  export interface PostAgentsNameInvokeRequest { input?: string }
304
305
  export interface PostAgentsNameInvokeResponse { ok: boolean; run_id: unknown; poll: unknown; message: unknown }
305
306
  export interface PostAgentsResponse { ok: boolean; agent: unknown }
306
- export interface PostAiStudioRequestsRequest { prompt: string; file_ids: unknown[]; pay_with?: "own" | "ours" }
307
+ export interface PostAiStudioRequestsRequest { prompt: string; file_ids: unknown[]; pay_with?: "own" | "ours" | "openrouter" | "gemini" }
307
308
  export interface PostAiStudioRequestsResponse { request: unknown }
308
309
  export interface PostAiStudioTopupRequest { amount_usd: number }
309
310
  export interface PostAiStudioTopupResponse { topup: unknown; balance: unknown }
@@ -534,6 +535,7 @@ export interface PostPayoutsAgeRecordsRequest { builder_id: StringifiableId; tie
534
535
  export interface PostPayoutsAgeRecordsResponse { record: unknown }
535
536
  export interface PostPayoutsApproveRequest { recipient_id?: StringifiableId; amount_cents?: unknown; currency?: unknown; note?: unknown }
536
537
  export interface PostPayoutsApproveResponse { approval: unknown }
538
+ export interface PostPayoutsBuilderPayoutsRequest { approval_id: StringifiableId; task_id: StringifiableId }
537
539
  export interface PostPayoutsFreezesIdDecideRequest { decision: unknown; statement: unknown }
538
540
  export interface PostPayoutsFreezesIdDecideResponse { event: unknown }
539
541
  export interface PostPayoutsFreezesRequest { builder_id: StringifiableId; notice_text: unknown; owed_cents?: unknown }
@@ -1675,6 +1677,10 @@ export interface BongosClient {
1675
1677
  getPayoutsApprovals(args?: RequestArgs): Promise<GetPayoutsApprovalsResponse>;
1676
1678
  /** POST /payouts/approve — rank: archon */
1677
1679
  postPayoutsApprove(args?: RequestArgs & { body?: PostPayoutsApproveRequest }): Promise<PostPayoutsApproveResponse>;
1680
+ /** GET /payouts/builder-payouts — rank: archon */
1681
+ getPayoutsBuilderPayouts(args?: RequestArgs): Promise<GetPayoutsBuilderPayoutsResponse>;
1682
+ /** POST /payouts/builder-payouts — rank: archon */
1683
+ postPayoutsBuilderPayouts(args: RequestArgs & { body: PostPayoutsBuilderPayoutsRequest }): Promise<ApiResponse>;
1678
1684
  /** POST /payouts/contracts — rank: archon */
1679
1685
  postPayoutsContracts(args?: RequestArgs): Promise<ApiResponse>;
1680
1686
  /** POST /payouts/freezes — rank: archon */
@@ -1033,6 +1033,10 @@ export function createClient(opts = {}) {
1033
1033
  getPayoutsApprovals: (args) => request("GET", "/payouts/approvals", { hasBody: false }, args),
1034
1034
  // POST /payouts/approve — rank: archon — POST /payouts/approve
1035
1035
  postPayoutsApprove: (args) => request("POST", "/payouts/approve", { hasBody: true }, args),
1036
+ // GET /payouts/builder-payouts — rank: archon — GET /payouts/builder-payouts
1037
+ getPayoutsBuilderPayouts: (args) => request("GET", "/payouts/builder-payouts", { hasBody: false }, args),
1038
+ // POST /payouts/builder-payouts — rank: archon — POST /payouts/builder-payouts
1039
+ postPayoutsBuilderPayouts: (args) => request("POST", "/payouts/builder-payouts", { hasBody: true }, args),
1036
1040
  // POST /payouts/contracts — rank: archon — POST /payouts/contracts
1037
1041
  postPayoutsContracts: (args) => request("POST", "/payouts/contracts", { hasBody: true }, args),
1038
1042
  // POST /payouts/freezes — rank: archon — POST /payouts/freezes
@@ -19595,6 +19595,90 @@
19595
19595
  ]
19596
19596
  }
19597
19597
  },
19598
+ "/payouts/builder-payouts": {
19599
+ "get": {
19600
+ "operationId": "get_payouts_builder_payouts",
19601
+ "tags": [
19602
+ "payouts"
19603
+ ],
19604
+ "summary": "GET /payouts/builder-payouts",
19605
+ "description": "GET /api/bongos/payouts/builder-payouts — every builder payout and where it stands (task 1003183, M04): paid, or owed with its latest try and the reason in words.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `payout.approve` (all required).",
19606
+ "x-rank": "archon",
19607
+ "x-source": "src/bongos/routes/payout-approvals.js",
19608
+ "x-permissions": [
19609
+ "payout.approve"
19610
+ ],
19611
+ "responses": {
19612
+ "200": {
19613
+ "description": "Success.",
19614
+ "content": {
19615
+ "application/json": {
19616
+ "schema": {
19617
+ "$ref": "#/components/schemas/GetPayoutsBuilderPayoutsResponse"
19618
+ }
19619
+ }
19620
+ }
19621
+ },
19622
+ "400": {
19623
+ "$ref": "#/components/responses/BadRequest"
19624
+ },
19625
+ "401": {
19626
+ "$ref": "#/components/responses/Unauthorized"
19627
+ },
19628
+ "403": {
19629
+ "$ref": "#/components/responses/Forbidden"
19630
+ }
19631
+ },
19632
+ "security": [
19633
+ {
19634
+ "builderSession": []
19635
+ }
19636
+ ]
19637
+ },
19638
+ "post": {
19639
+ "operationId": "post_payouts_builder_payouts",
19640
+ "tags": [
19641
+ "payouts"
19642
+ ],
19643
+ "summary": "POST /payouts/builder-payouts",
19644
+ "description": "POST /api/bongos/payouts/builder-payouts — send ONE approved payout for ONE task (task 1003183, M04). Body: { approval_id, task_id }. The person and the amount come from the approval, never the body. A person presses it on the website: the approval says what may be paid, and this is the person sending it (Art. I). Pressing again is safe: a paid task answers paid, an owed one retries with the same processor key.\n\n**Rank:** `archon` — Archon only (rank and identity management + the escalation keys — the trust boundary).\n\n**Permissions:** `payout.approve` (all required).",
19645
+ "x-rank": "archon",
19646
+ "x-source": "src/bongos/routes/payout-approvals.js",
19647
+ "x-permissions": [
19648
+ "payout.approve"
19649
+ ],
19650
+ "requestBody": {
19651
+ "required": true,
19652
+ "content": {
19653
+ "application/json": {
19654
+ "schema": {
19655
+ "$ref": "#/components/schemas/PostPayoutsBuilderPayoutsRequest"
19656
+ }
19657
+ }
19658
+ },
19659
+ "x-validated": true
19660
+ },
19661
+ "responses": {
19662
+ "200": {
19663
+ "description": "Success."
19664
+ },
19665
+ "400": {
19666
+ "$ref": "#/components/responses/ValidationFailed"
19667
+ },
19668
+ "401": {
19669
+ "$ref": "#/components/responses/Unauthorized"
19670
+ },
19671
+ "403": {
19672
+ "$ref": "#/components/responses/Forbidden"
19673
+ }
19674
+ },
19675
+ "security": [
19676
+ {
19677
+ "builderSession": []
19678
+ }
19679
+ ]
19680
+ }
19681
+ },
19598
19682
  "/payouts/contracts": {
19599
19683
  "post": {
19600
19684
  "operationId": "post_payouts_contracts",
@@ -32569,6 +32653,19 @@
32569
32653
  "approvals"
32570
32654
  ]
32571
32655
  },
32656
+ "GetPayoutsBuilderPayoutsResponse": {
32657
+ "type": "object",
32658
+ "properties": {
32659
+ "payouts": {},
32660
+ "page": {
32661
+ "$ref": "#/components/schemas/PageInfo"
32662
+ }
32663
+ },
32664
+ "required": [
32665
+ "payouts",
32666
+ "page"
32667
+ ]
32668
+ },
32572
32669
  "GetPayoutsGatesBuilderIdResponse": {
32573
32670
  "type": "object",
32574
32671
  "properties": {
@@ -34768,7 +34865,9 @@
34768
34865
  "type": "string",
34769
34866
  "enum": [
34770
34867
  "own",
34771
- "ours"
34868
+ "ours",
34869
+ "openrouter",
34870
+ "gemini"
34772
34871
  ]
34773
34872
  }
34774
34873
  },
@@ -38570,6 +38669,22 @@
38570
38669
  "approval"
38571
38670
  ]
38572
38671
  },
38672
+ "PostPayoutsBuilderPayoutsRequest": {
38673
+ "type": "object",
38674
+ "properties": {
38675
+ "approval_id": {
38676
+ "$ref": "#/components/schemas/StringifiableId"
38677
+ },
38678
+ "task_id": {
38679
+ "$ref": "#/components/schemas/StringifiableId"
38680
+ }
38681
+ },
38682
+ "required": [
38683
+ "approval_id",
38684
+ "task_id"
38685
+ ],
38686
+ "additionalProperties": false
38687
+ },
38573
38688
  "PostPayoutsFreezesIdDecideRequest": {
38574
38689
  "type": "object",
38575
38690
  "properties": {
@@ -41642,9 +41757,9 @@
41642
41757
  "description": "A required dependency/feature is not configured or is temporarily down."
41643
41758
  }
41644
41759
  },
41645
- "x-endpoint-count": 657,
41646
- "x-schema-count": 705,
41760
+ "x-endpoint-count": 659,
41761
+ "x-schema-count": 707,
41647
41762
  "x-undocumented-bodies": 12,
41648
- "x-response-schemas": 451,
41763
+ "x-response-schemas": 452,
41649
41764
  "x-generated-by": "scripts/bongos/gen-api-docs.js"
41650
41765
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Bongos API reference
4
4
 
5
- > **Generated from the live route files** — the route file is authoritative. 657 endpoints across 111 route files.
5
+ > **Generated from the live route files** — the route file is authoritative. 659 endpoints across 111 route files.
6
6
  > Machine-readable spec: [`docs/api/openapi.json`](api/openapi.json) (OpenAPI 3.1). Rendered docs site: **`/docs`** (e.g. `cloudbongos.com/docs`).
7
7
 
8
8
  Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust-boundary-server-enforced-permissions.md)): `public` < `any-builder` < `metic+archon` < `archon`.
@@ -708,13 +708,15 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
708
708
  | GET | `/api/bongos/pay-type-gates` | `any-builder` | — | for met/missing (the same pay information `GET /pay-terms` shows, no person's money); the evidence references and who cleared each requir… |
709
709
  | PUT | `/api/bongos/pay-type-gates/:payType/:requirement` | `archon` | `state`, `evidence_ref`, `acknowledged` | .approve (archon floor). |
710
710
 
711
- ## `payouts` (16)
711
+ ## `payouts` (18)
712
712
 
713
713
  | Method | Path | Rank | Body | Description |
714
714
  |---|---|---|---|---|
715
715
  | POST | `/api/bongos/payouts/age-records` | `archon` | `builder_id`, `tier` | POST /api/bongos/payouts/age-records — record a builder's age tier, verified by a person. |
716
716
  | GET | `/api/bongos/payouts/approvals` | `archon` | — | GET /api/bongos/payouts/approvals — the log, newest first. |
717
717
  | POST | `/api/bongos/payouts/approve` | `archon` | `recipient_id`, `amount_cents`, `currency`, `note` | POST /api/bongos/payouts/approve — approve ONE payout. |
718
+ | GET | `/api/bongos/payouts/builder-payouts` | `archon` | — | GET /api/bongos/payouts/builder-payouts — every builder payout and where it stands (task 1003183, M04): paid, or owed with its latest try… |
719
+ | POST | `/api/bongos/payouts/builder-payouts` | `archon` | `approval_id`, `task_id` | POST /api/bongos/payouts/builder-payouts — send ONE approved payout for ONE task (task 1003183, M04). |
718
720
  | POST | `/api/bongos/payouts/contracts` | `archon` | — | POST /api/bongos/payouts/contracts — sign ONE contract. |
719
721
  | POST | `/api/bongos/payouts/freezes` | `archon` | `builder_id`, `notice_text`, `owed_cents` | POST /api/bongos/payouts/freezes — a person freezes a builder's payouts by hand. |
720
722
  | POST | `/api/bongos/payouts/freezes/:id/decide` | `archon` | `decision`, `statement` | POST /api/bongos/payouts/freezes/:id/decide — uphold or lift a freeze, with the reason the person will read. |
@@ -308,6 +308,21 @@ payout_guardian_cosigns(id, builder_id, guardian_id, approval_id | rule_id+run_k
308
308
  -- and a co-signature by anyone but the current guardian.
309
309
  ```
310
310
 
311
+ Builder payouts (migration `core_290`, task 1003183, [ADR 0397](adr/0397-the-payment-rail-is-stripe-connect-with-one-connected-account-per-project.md) D7 — a builder is paid for a task exactly once; `src/bongos/builder-payouts.js`, routes `GET`/`POST /payouts/builder-payouts` gated `payout.approve` plus the person's own web session for the POST; the `payout` movement is booked through the economy module's `economy.account` port in the same transaction. No processor adapter exists yet, so every payout is recorded owed and held `no_processor`):
312
+
313
+ ```
314
+ builder_payouts_owed(id, builder_id FK, task_id FK, approval_id FK payout_approvals,
315
+ amount_cents, currency, recorded_by FK, created_at)
316
+ -- written BEFORE anything is sent; UNIQUE (builder_id, task_id) and UNIQUE
317
+ -- (approval_id): a task is paid once, an approval pays one task.
318
+ builder_payout_attempts(id, owed_id FK, outcome sent|failed|held, processor_ref, reason,
319
+ actor_id, created_at)
320
+ -- at most one `sent` per debt (partial UNIQUE); sent needs processor_ref,
321
+ -- failed/held need a reason. BOTH APPEND-ONLY by trigger. The processor is
322
+ -- called with idempotency key `bongos-payout-<owed id>`, so a retry after an
323
+ -- unknown outcome gets the same transfer back.
324
+ ```
325
+
311
326
  Store sub-categories (migration `core_280`, task 1004355, [ADR 0342](adr/0342-module-categories-are-eight-parents-with-approved-sub-categories.md) D3 — an author proposes one at publish, a Metic+ person approves, renames or merges it; `src/bongos/module-subcategories.js`):
312
327
 
313
328
  ```
@@ -4,13 +4,13 @@
4
4
  > Deterministic on a given tree — regenerate and commit rather than hand-editing.
5
5
  > Machine-readable twin: [`copy-registry.json`](copy-registry.json).
6
6
 
7
- **3278 strings** across 3 surfaces · 2595 distinct pieces of copy · 3278 certain, 0 heuristic · 275 shown in more than one place.
7
+ **3276 strings** across 3 surfaces · 2593 distinct pieces of copy · 3276 certain, 0 heuristic · 275 shown in more than one place.
8
8
 
9
9
  ## Surfaces
10
10
 
11
11
  | surface | lives at | files | strings |
12
12
  |---|---|---|---|
13
- | `builders-hall` | `modules/hall-ui/public` | 172 | 2165 |
13
+ | `builders-hall` | `modules/hall-ui/public` | 172 | 2163 |
14
14
  | `status-dashboard` | `modules/status-ui/public` | 4 | 91 |
15
15
  | `landing` | `modules/public-landing/public` | 10 | 1022 |
16
16
 
@@ -78,7 +78,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
78
78
  | `72a29648399b` | 4x | Tweak a page | modules/hall-ui/public/tweak-editor.html:32, modules/hall-ui/public/tweak-editor.html:32, modules/hall-ui/public/tweak-editor.html:55 |
79
79
  | … | | _235 more in the JSON registry_ | |
80
80
 
81
- ## `builders-hall` — 2165 strings
81
+ ## `builders-hall` — 2163 strings
82
82
 
83
83
  | id | conf | text | where |
84
84
  |---|---|---|---|
@@ -581,7 +581,7 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
581
581
  | `94c68a78cd89` | certain | Follow a route from a goal you know to reach it — or turn explore off to see everything. | `modules/hall-ui/public/sky-interaction.js:35` |
582
582
  | `d5d7bad187ac` | certain | For a criterion with nothing to see on screen: it will be signed off without a recording | `modules/hall-ui/public/criterion-uat-ui.js:88` |
583
583
  | `3001bd688837` | certain | Founding builders | `modules/hall-ui/public/ranks.html:40` |
584
- | `e9a1af5dc515` | certain | Free here. {…} bills you for it directly. | `modules/hall-ui/public/ai-studio.js:334` |
584
+ | `e9a1af5dc515` | certain | Free here. {…} bills you for it directly. | `modules/hall-ui/public/ai-studio.js:336` |
585
585
  | `36ecb5d3686c` | certain | Fresh CLI token issued. Paste this into a terminal in your project folder: | `modules/hall-ui/public/settings.js:800` |
586
586
  | `55c71d76a94c` | certain | From creation to production — and the exact step where {{currency}} are awarded (at | `modules/hall-ui/public/diagrams.html:49` |
587
587
  | `edced5d528c3` | certain | From the live site | `modules/hall-ui/public/studio.html:155` |
@@ -860,7 +860,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
860
860
  | `b5839a34590c` | certain | My agents — {{worldName}} | `modules/hall-ui/public/my-agents.html:6` |
861
861
  | `b5839a34590c` | certain | My agents — {{worldName}} | `modules/hall-ui/public/my-agents.html:6` |
862
862
  | `39afdc03594a` | certain | My balance | `modules/hall-ui/public/ai-studio.js:340` |
863
- | `b7d4eeb3f762` | certain | My own key | `modules/hall-ui/public/ai-studio.js:334` |
864
863
  | `3d0d554cd684` | certain | Name (optional) | `modules/hall-ui/public/gate.js:201` |
865
864
  | `ae84ebe1d735` | certain | Name cannot be blank. | `modules/hall-ui/public/settings.js:649` |
866
865
  | `31e91ee6ce03` | certain | Name must be {…} characters or fewer. | `modules/hall-ui/public/settings.js:654` |
@@ -2137,7 +2136,6 @@ Identical copy within one surface. Sometimes right (a repeated button), sometime
2137
2136
  | `cf89ac85440d` | certain | {…} earned | `modules/hall-ui/public/goals-render.js:821` |
2138
2137
  | `55b949873848` | certain | {…} is in. | `modules/hall-ui/public/tweak-editor.js:578` |
2139
2138
  | `80b4aa799a4b` | certain | {…} is writing this page now. You can read it, download it, or take another page from the studio. | `modules/hall-ui/public/tweak-editor.js:329` |
2140
- | `c80c3434ae36` | certain | {…} key ending {…} | `modules/hall-ui/public/ai-studio.js:334` |
2141
2139
  | `5ad81ff61920` | certain | {…} lands in your balance; your card is charged {…}. | `modules/hall-ui/public/ai-studio.js:579` |
2142
2140
  | `92b79edf21f6` | certain | {…} left | `modules/hall-ui/public/market-watch.js:73` |
2143
2141
  | `830d2be6f859` | certain | {…} line | `modules/hall-ui/public/tweak-editor.js:235` |