@bongos/core 1.25.17 → 1.25.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 +131 -61
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +10 -0
- package/clients/bongos-client/index.cjs +10 -0
- package/clients/bongos-client/index.d.ts +15 -1
- package/clients/bongos-client/index.mjs +10 -0
- package/docs/adr/0408-a-genesis-stage-is-three-doors-onto-one-record.md +1 -0
- package/docs/api/openapi.json +243 -6
- package/docs/api-reference.md +12 -3
- package/docs/copy-inventory.md +118 -108
- package/docs/copy-registry.json +315 -172
- package/docs/file-map.md +2 -1
- package/docs/module-api-changelog.md +2 -0
- package/docs/page-inventory.json +3 -0
- package/docs/page-readings.json +62 -62
- package/modules/app-host/CLAUDE.md +15 -0
- package/modules/app-host/module.json +20 -0
- package/modules/app-host/public/settings-widget.js +143 -0
- package/modules/app-host/routes/app-host.js +88 -0
- package/modules/government/charter-advice.js +103 -0
- package/modules/government/presets.js +42 -0
- package/modules/government/recommendations.js +102 -7
- package/modules/government/routes/government.js +1 -0
- package/modules/lifecycle/first-read-catalog.js +62 -0
- package/modules/lifecycle/first-read-db.js +47 -9
- package/modules/lifecycle/first-read.js +88 -23
- package/modules/lifecycle/migrations/lifecycle_023_repo_map_dismissed.sql +19 -0
- package/modules/lifecycle/routes/first-read.js +27 -5
- package/modules/onboarding/genesis-work.js +101 -4
- package/modules/onboarding/routes/genesis-work.js +2 -2
- package/modules/platform-identity/module.json +1 -1
- package/modules/platform-identity/routes/sso-app-status.js +65 -0
- package/modules/provisioning/module.json +1 -0
- package/modules/provisioning/seams.js +32 -1
- package/modules/provisioning/starter-bundles.js +1 -0
- package/modules/public-landing/public/assets/guide-core.js +475 -0
- package/modules/public-landing/public/assets/guide-hall.css +121 -0
- package/modules/public-landing/public/assets/guide-hall.js +164 -0
- package/modules/public-landing/public/assets/guide-scene.css +9 -0
- package/modules/public-landing/public/assets/guide-scene.js +58 -381
- package/modules/public-landing/public/index.html +46 -1
- package/modules/public-landing/public/projects.html +11 -2
- package/modules/ui-design/kit/serve.js +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +18 -0
- package/scripts/bongos/first-read.js +45 -11
- package/scripts/bongos/genesis.js +21 -1
- package/scripts/bongos/publish-manifest.js +1 -0
- package/scripts/bongos/seam-wiring-guard.js +3 -2
- package/scripts/hall-preview/server.js +2 -0
- package/src/bongos/auth-admission.js +64 -0
- package/src/bongos/auth.js +2 -1
- package/src/bongos/module-scope-map.js +4 -0
- package/src/bongos/routes/core-update.js +3 -16
- package/src/bongos/routes/modules.js +11 -0
- package/src/bongos/serve-internal.js +20 -6
- package/src/module-api.js +6 -1
- package/src/module-loader/loader.js +2 -2
- package/tests/app_host.mjs +413 -0
- package/tests/first_read.mjs +184 -8
- package/tests/genesis_work.mjs +74 -3
- package/tests/government_charter_advice.mjs +150 -0
- package/tests/landing_guide_hall.mjs +364 -0
- package/tests/landing_guide_scene.mjs +8 -5
- package/tests/module_api.mjs +1 -0
- package/tests/module_loader.mjs +1 -1
- package/tests/npm_release_where.mjs +13 -3
|
@@ -153,6 +153,10 @@ function createClient(opts = {}) {
|
|
|
153
153
|
// GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
|
|
154
154
|
getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
|
|
155
155
|
},
|
|
156
|
+
"appHost": {
|
|
157
|
+
// GET /app-host — rank: any-builder — GET /app-host
|
|
158
|
+
getAppHost: (args) => request("GET", "/app-host", { hasBody: false }, args),
|
|
159
|
+
},
|
|
156
160
|
"artistGate": {
|
|
157
161
|
// GET /artist-gate — rank: any-builder — GET /artist-gate
|
|
158
162
|
getArtistGate: (args) => request("GET", "/artist-gate", { hasBody: false }, args),
|
|
@@ -468,12 +472,16 @@ function createClient(opts = {}) {
|
|
|
468
472
|
getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
|
|
469
473
|
},
|
|
470
474
|
"firstRead": {
|
|
475
|
+
// GET /first-read/catalog — rank: any-builder — GET /first-read/catalog
|
|
476
|
+
getFirstReadCatalog: (args) => request("GET", "/first-read/catalog", { hasBody: false }, args),
|
|
471
477
|
// POST /first-read/maps — rank: metic+archon — POST /first-read/maps
|
|
472
478
|
postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
|
|
473
479
|
// GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
|
|
474
480
|
getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
|
|
475
481
|
// POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
|
|
476
482
|
postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
|
|
483
|
+
// POST /first-read/maps/{id}/dismiss — rank: metic+archon — POST /first-read/maps/:id/dismiss
|
|
484
|
+
postFirstReadMapsIdDismiss: (args) => request("POST", "/first-read/maps/{id}/dismiss", { hasBody: true }, args),
|
|
477
485
|
// POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
|
|
478
486
|
postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
|
|
479
487
|
// GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
|
|
@@ -1514,6 +1522,8 @@ function createClient(opts = {}) {
|
|
|
1514
1522
|
"sso": {
|
|
1515
1523
|
// POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
|
|
1516
1524
|
postSsoActivityRollup: (args) => request("POST", "/sso/activity/rollup", { hasBody: true }, args),
|
|
1525
|
+
// POST /sso/app-status — rank: public — POST /sso/app-status
|
|
1526
|
+
postSsoAppStatus: (args) => request("POST", "/sso/app-status", { hasBody: true }, args),
|
|
1517
1527
|
// POST /sso/applicant-profile — rank: public — POST /sso/applicant-profile
|
|
1518
1528
|
postSsoApplicantProfile: (args) => request("POST", "/sso/applicant-profile", { hasBody: true }, args),
|
|
1519
1529
|
// GET /sso/authorize — rank: public — GET /sso/authorize
|
|
@@ -75,7 +75,8 @@ export interface GetCoreUpgradesResponse { ok: boolean; running: unknown; limit:
|
|
|
75
75
|
export interface GetDiscordChannelsPlanResponse { ok: boolean; guild_id: unknown; op_count: unknown; ops: unknown; warnings: unknown }
|
|
76
76
|
export interface GetDiscordChannelsSnapshotResponse { ok: boolean; guild_id: unknown; config: unknown; warnings: unknown }
|
|
77
77
|
export interface GetDoneWhenPendingReviewResponse { criteria: unknown; count: unknown }
|
|
78
|
-
export interface
|
|
78
|
+
export interface GetFirstReadCatalogResponse { available: unknown; modules: unknown }
|
|
79
|
+
export interface GetFirstReadPromptResponse { schema: unknown; file: unknown; prompt: unknown; example: unknown; limits: unknown; catalog: unknown }
|
|
79
80
|
export interface GetFrontDoorGuideMineResponse { ok: boolean; conversation: unknown }
|
|
80
81
|
export interface GetGithubOrgsOrgResponse { org: unknown }
|
|
81
82
|
export interface GetGithubRepoResponse { ok: boolean; repo: unknown; private_deployable: boolean }
|
|
@@ -391,6 +392,7 @@ export interface PostDoneWhenCriterionIdUnsatisfyResponse { criterion: unknown }
|
|
|
391
392
|
export interface PostFeedbackReceiptRequest { sha256: string; kind?: "bug" | "idea" }
|
|
392
393
|
export interface PostFeedbackReceiptResponse { ok: boolean; receipt: unknown; hub: unknown }
|
|
393
394
|
export interface PostFirstReadMapsIdAcceptRequest { all?: boolean; items?: string[] }
|
|
395
|
+
export interface PostFirstReadMapsIdDismissRequest { items: string[] }
|
|
394
396
|
export interface PostFirstReadMapsRequest { map: Record<string, unknown> }
|
|
395
397
|
export interface PostFirstReadMapsResponse { map_id: unknown; status: unknown; items: unknown; next: unknown }
|
|
396
398
|
export interface PostFoundingPlanRequest { days?: Record<string, unknown>; passes?: number; advisors?: string; government?: string; expected_builders?: number; existing?: boolean }
|
|
@@ -658,6 +660,8 @@ export interface PostSpecialitiesRequest { name: string; discipline: string; sum
|
|
|
658
660
|
export interface PostSpecialitiesResponse { speciality: unknown }
|
|
659
661
|
export interface PostSsoActivityRollupRequest { client_id: string; client_secret: string; github_id: StringifiableId; credits?: number; tasks_shipped?: number; karma?: number; rank?: string; disciplines?: unknown; recent_ships?: unknown; crafts?: unknown }
|
|
660
662
|
export interface PostSsoActivityRollupResponse { ok: boolean }
|
|
663
|
+
export interface PostSsoAppStatusRequest { client_id: string; client_secret: string }
|
|
664
|
+
export interface PostSsoAppStatusResponse { ok: boolean; known: boolean; app: unknown; sandbox: unknown }
|
|
661
665
|
export interface PostSsoApplicantProfileRequest { client_id: string; client_secret: string; github_id: StringifiableId }
|
|
662
666
|
export interface PostSsoApplicantProfileResponse { profile: unknown; guild: unknown }
|
|
663
667
|
export interface PostSsoDevicePollRequest { device_code: string }
|
|
@@ -842,6 +846,10 @@ export interface BongosClient {
|
|
|
842
846
|
/** GET /analytics/builder/{id} — rank: any-builder */
|
|
843
847
|
getAnalyticsBuilderId(args?: RequestArgs): Promise<ApiResponse>;
|
|
844
848
|
};
|
|
849
|
+
"appHost": {
|
|
850
|
+
/** GET /app-host — rank: any-builder */
|
|
851
|
+
getAppHost(args?: RequestArgs): Promise<ApiResponse>;
|
|
852
|
+
};
|
|
845
853
|
"artistGate": {
|
|
846
854
|
/** GET /artist-gate — rank: any-builder */
|
|
847
855
|
getArtistGate(args?: RequestArgs): Promise<GetArtistGateResponse>;
|
|
@@ -1157,12 +1165,16 @@ export interface BongosClient {
|
|
|
1157
1165
|
getFeedbackReceiptId(args?: RequestArgs): Promise<ApiResponse>;
|
|
1158
1166
|
};
|
|
1159
1167
|
"firstRead": {
|
|
1168
|
+
/** GET /first-read/catalog — rank: any-builder */
|
|
1169
|
+
getFirstReadCatalog(args?: RequestArgs): Promise<GetFirstReadCatalogResponse>;
|
|
1160
1170
|
/** POST /first-read/maps — rank: metic+archon */
|
|
1161
1171
|
postFirstReadMaps(args: RequestArgs & { body: PostFirstReadMapsRequest }): Promise<PostFirstReadMapsResponse>;
|
|
1162
1172
|
/** GET /first-read/maps/{id} — rank: metic+archon */
|
|
1163
1173
|
getFirstReadMapsId(args?: RequestArgs): Promise<ApiResponse>;
|
|
1164
1174
|
/** POST /first-read/maps/{id}/accept — rank: metic+archon */
|
|
1165
1175
|
postFirstReadMapsIdAccept(args?: RequestArgs & { body?: PostFirstReadMapsIdAcceptRequest }): Promise<ApiResponse>;
|
|
1176
|
+
/** POST /first-read/maps/{id}/dismiss — rank: metic+archon */
|
|
1177
|
+
postFirstReadMapsIdDismiss(args: RequestArgs & { body: PostFirstReadMapsIdDismissRequest }): Promise<ApiResponse>;
|
|
1166
1178
|
/** POST /first-read/maps/{id}/reject — rank: metic+archon */
|
|
1167
1179
|
postFirstReadMapsIdReject(args?: RequestArgs): Promise<ApiResponse>;
|
|
1168
1180
|
/** GET /first-read/prompt — rank: any-builder */
|
|
@@ -2203,6 +2215,8 @@ export interface BongosClient {
|
|
|
2203
2215
|
"sso": {
|
|
2204
2216
|
/** POST /sso/activity/rollup — rank: public */
|
|
2205
2217
|
postSsoActivityRollup(args: RequestArgs & { body: PostSsoActivityRollupRequest }): Promise<PostSsoActivityRollupResponse>;
|
|
2218
|
+
/** POST /sso/app-status — rank: public */
|
|
2219
|
+
postSsoAppStatus(args: RequestArgs & { body: PostSsoAppStatusRequest }): Promise<PostSsoAppStatusResponse>;
|
|
2206
2220
|
/** POST /sso/applicant-profile — rank: public */
|
|
2207
2221
|
postSsoApplicantProfile(args: RequestArgs & { body: PostSsoApplicantProfileRequest }): Promise<PostSsoApplicantProfileResponse>;
|
|
2208
2222
|
/** GET /sso/authorize — rank: public */
|
|
@@ -150,6 +150,10 @@ export function createClient(opts = {}) {
|
|
|
150
150
|
// GET /analytics/builder/{id} — rank: any-builder — GET /analytics/builder/:id
|
|
151
151
|
getAnalyticsBuilderId: (args) => request("GET", "/analytics/builder/{id}", { hasBody: false }, args),
|
|
152
152
|
},
|
|
153
|
+
"appHost": {
|
|
154
|
+
// GET /app-host — rank: any-builder — GET /app-host
|
|
155
|
+
getAppHost: (args) => request("GET", "/app-host", { hasBody: false }, args),
|
|
156
|
+
},
|
|
153
157
|
"artistGate": {
|
|
154
158
|
// GET /artist-gate — rank: any-builder — GET /artist-gate
|
|
155
159
|
getArtistGate: (args) => request("GET", "/artist-gate", { hasBody: false }, args),
|
|
@@ -465,12 +469,16 @@ export function createClient(opts = {}) {
|
|
|
465
469
|
getFeedbackReceiptId: (args) => request("GET", "/feedback/receipt/{id}", { hasBody: false }, args),
|
|
466
470
|
},
|
|
467
471
|
"firstRead": {
|
|
472
|
+
// GET /first-read/catalog — rank: any-builder — GET /first-read/catalog
|
|
473
|
+
getFirstReadCatalog: (args) => request("GET", "/first-read/catalog", { hasBody: false }, args),
|
|
468
474
|
// POST /first-read/maps — rank: metic+archon — POST /first-read/maps
|
|
469
475
|
postFirstReadMaps: (args) => request("POST", "/first-read/maps", { hasBody: true }, args),
|
|
470
476
|
// GET /first-read/maps/{id} — rank: metic+archon — GET /first-read/maps/:id
|
|
471
477
|
getFirstReadMapsId: (args) => request("GET", "/first-read/maps/{id}", { hasBody: false }, args),
|
|
472
478
|
// POST /first-read/maps/{id}/accept — rank: metic+archon — POST /first-read/maps/:id/accept
|
|
473
479
|
postFirstReadMapsIdAccept: (args) => request("POST", "/first-read/maps/{id}/accept", { hasBody: true }, args),
|
|
480
|
+
// POST /first-read/maps/{id}/dismiss — rank: metic+archon — POST /first-read/maps/:id/dismiss
|
|
481
|
+
postFirstReadMapsIdDismiss: (args) => request("POST", "/first-read/maps/{id}/dismiss", { hasBody: true }, args),
|
|
474
482
|
// POST /first-read/maps/{id}/reject — rank: metic+archon — POST /first-read/maps/:id/reject
|
|
475
483
|
postFirstReadMapsIdReject: (args) => request("POST", "/first-read/maps/{id}/reject", { hasBody: true }, args),
|
|
476
484
|
// GET /first-read/prompt — rank: any-builder — GET /first-read/prompt
|
|
@@ -1511,6 +1519,8 @@ export function createClient(opts = {}) {
|
|
|
1511
1519
|
"sso": {
|
|
1512
1520
|
// POST /sso/activity/rollup — rank: public — POST /sso/activity/rollup
|
|
1513
1521
|
postSsoActivityRollup: (args) => request("POST", "/sso/activity/rollup", { hasBody: true }, args),
|
|
1522
|
+
// POST /sso/app-status — rank: public — POST /sso/app-status
|
|
1523
|
+
postSsoAppStatus: (args) => request("POST", "/sso/app-status", { hasBody: true }, args),
|
|
1514
1524
|
// POST /sso/applicant-profile — rank: public — POST /sso/applicant-profile
|
|
1515
1525
|
postSsoApplicantProfile: (args) => request("POST", "/sso/applicant-profile", { hasBody: true }, args),
|
|
1516
1526
|
// GET /sso/authorize — rank: public — GET /sso/authorize
|
|
@@ -58,4 +58,5 @@ every stage, not a strategize feature that charter then copies.
|
|
|
58
58
|
the hall version (task 1005285). Today a founder works a stage through their AI session
|
|
59
59
|
and `npx bongos genesis …`.
|
|
60
60
|
- Task 1005115 renders each stage's record as an editable document from this store.
|
|
61
|
+
- Charter adopted it (task 1005119): how decisions should go and the founder's principles. A question may declare `choices` (a closed answer, stored as its key) where another module reads the answer; the charter stage's read carries the government module's recommendation built from them.
|
|
61
62
|
- Scope adopted it with the project interview (task 1005114): six questions in three groups. `/goal-create` and `/planning-session` read the answers before planning, through `genesis.js context`.
|
package/docs/api/openapi.json
CHANGED
|
@@ -45,6 +45,10 @@
|
|
|
45
45
|
"name": "analytics",
|
|
46
46
|
"description": "Endpoints under `/api/bongos/analytics`."
|
|
47
47
|
},
|
|
48
|
+
{
|
|
49
|
+
"name": "app-host",
|
|
50
|
+
"description": "Endpoints under `/api/bongos/app-host`."
|
|
51
|
+
},
|
|
48
52
|
{
|
|
49
53
|
"name": "artist-gate",
|
|
50
54
|
"description": "Endpoints under `/api/bongos/artist-gate`."
|
|
@@ -1748,6 +1752,37 @@
|
|
|
1748
1752
|
]
|
|
1749
1753
|
}
|
|
1750
1754
|
},
|
|
1755
|
+
"/app-host": {
|
|
1756
|
+
"get": {
|
|
1757
|
+
"operationId": "get_app_host",
|
|
1758
|
+
"tags": [
|
|
1759
|
+
"app-host"
|
|
1760
|
+
],
|
|
1761
|
+
"summary": "GET /app-host",
|
|
1762
|
+
"description": "GET /app-host — rank: any signed-in builder; owner-only parts gated on core.pin.move.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
1763
|
+
"x-rank": "any-builder",
|
|
1764
|
+
"x-source": "modules/app-host/routes/app-host.js",
|
|
1765
|
+
"responses": {
|
|
1766
|
+
"200": {
|
|
1767
|
+
"description": "Success."
|
|
1768
|
+
},
|
|
1769
|
+
"400": {
|
|
1770
|
+
"$ref": "#/components/responses/BadRequest"
|
|
1771
|
+
},
|
|
1772
|
+
"401": {
|
|
1773
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
1774
|
+
},
|
|
1775
|
+
"403": {
|
|
1776
|
+
"$ref": "#/components/responses/Forbidden"
|
|
1777
|
+
}
|
|
1778
|
+
},
|
|
1779
|
+
"security": [
|
|
1780
|
+
{
|
|
1781
|
+
"builderSession": []
|
|
1782
|
+
}
|
|
1783
|
+
]
|
|
1784
|
+
}
|
|
1785
|
+
},
|
|
1751
1786
|
"/artist-gate": {
|
|
1752
1787
|
"get": {
|
|
1753
1788
|
"operationId": "get_artist_gate",
|
|
@@ -7613,6 +7648,44 @@
|
|
|
7613
7648
|
"security": []
|
|
7614
7649
|
}
|
|
7615
7650
|
},
|
|
7651
|
+
"/first-read/catalog": {
|
|
7652
|
+
"get": {
|
|
7653
|
+
"operationId": "get_first_read_catalog",
|
|
7654
|
+
"tags": [
|
|
7655
|
+
"first-read"
|
|
7656
|
+
],
|
|
7657
|
+
"summary": "GET /first-read/catalog",
|
|
7658
|
+
"description": "the modules this project can switch on, the only ones a map may recommend. `available: false` when the list cannot be read here.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7659
|
+
"x-rank": "any-builder",
|
|
7660
|
+
"x-source": "modules/lifecycle/routes/first-read.js",
|
|
7661
|
+
"responses": {
|
|
7662
|
+
"200": {
|
|
7663
|
+
"description": "Success.",
|
|
7664
|
+
"content": {
|
|
7665
|
+
"application/json": {
|
|
7666
|
+
"schema": {
|
|
7667
|
+
"$ref": "#/components/schemas/GetFirstReadCatalogResponse"
|
|
7668
|
+
}
|
|
7669
|
+
}
|
|
7670
|
+
}
|
|
7671
|
+
},
|
|
7672
|
+
"400": {
|
|
7673
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7674
|
+
},
|
|
7675
|
+
"401": {
|
|
7676
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7677
|
+
},
|
|
7678
|
+
"403": {
|
|
7679
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7680
|
+
}
|
|
7681
|
+
},
|
|
7682
|
+
"security": [
|
|
7683
|
+
{
|
|
7684
|
+
"builderSession": []
|
|
7685
|
+
}
|
|
7686
|
+
]
|
|
7687
|
+
}
|
|
7688
|
+
},
|
|
7616
7689
|
"/first-read/maps": {
|
|
7617
7690
|
"post": {
|
|
7618
7691
|
"operationId": "post_first_read_maps",
|
|
@@ -7772,6 +7845,65 @@
|
|
|
7772
7845
|
]
|
|
7773
7846
|
}
|
|
7774
7847
|
},
|
|
7848
|
+
"/first-read/maps/{id}/dismiss": {
|
|
7849
|
+
"post": {
|
|
7850
|
+
"operationId": "post_first_read_maps_id_dismiss",
|
|
7851
|
+
"tags": [
|
|
7852
|
+
"first-read"
|
|
7853
|
+
],
|
|
7854
|
+
"summary": "POST /first-read/maps/:id/dismiss",
|
|
7855
|
+
"description": ".create — the owner's no to named items (a module recommendation, usually). Files nothing; a later \"accept all\" passes them by.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).\n\n**Permissions:** `goal.create` (all required).",
|
|
7856
|
+
"x-rank": "metic+archon",
|
|
7857
|
+
"x-source": "modules/lifecycle/routes/first-read.js",
|
|
7858
|
+
"x-permissions": [
|
|
7859
|
+
"goal.create"
|
|
7860
|
+
],
|
|
7861
|
+
"parameters": [
|
|
7862
|
+
{
|
|
7863
|
+
"name": "id",
|
|
7864
|
+
"in": "path",
|
|
7865
|
+
"required": true,
|
|
7866
|
+
"schema": {
|
|
7867
|
+
"type": "string"
|
|
7868
|
+
},
|
|
7869
|
+
"description": "Path parameter `id`."
|
|
7870
|
+
}
|
|
7871
|
+
],
|
|
7872
|
+
"requestBody": {
|
|
7873
|
+
"required": true,
|
|
7874
|
+
"content": {
|
|
7875
|
+
"application/json": {
|
|
7876
|
+
"schema": {
|
|
7877
|
+
"$ref": "#/components/schemas/PostFirstReadMapsIdDismissRequest"
|
|
7878
|
+
}
|
|
7879
|
+
}
|
|
7880
|
+
},
|
|
7881
|
+
"x-validated": true
|
|
7882
|
+
},
|
|
7883
|
+
"responses": {
|
|
7884
|
+
"200": {
|
|
7885
|
+
"description": "Success."
|
|
7886
|
+
},
|
|
7887
|
+
"400": {
|
|
7888
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
7889
|
+
},
|
|
7890
|
+
"401": {
|
|
7891
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7892
|
+
},
|
|
7893
|
+
"403": {
|
|
7894
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7895
|
+
},
|
|
7896
|
+
"404": {
|
|
7897
|
+
"$ref": "#/components/responses/NotFound"
|
|
7898
|
+
}
|
|
7899
|
+
},
|
|
7900
|
+
"security": [
|
|
7901
|
+
{
|
|
7902
|
+
"builderSession": []
|
|
7903
|
+
}
|
|
7904
|
+
]
|
|
7905
|
+
}
|
|
7906
|
+
},
|
|
7775
7907
|
"/first-read/maps/{id}/reject": {
|
|
7776
7908
|
"post": {
|
|
7777
7909
|
"operationId": "post_first_read_maps_id_reject",
|
|
@@ -7827,7 +7959,7 @@
|
|
|
7827
7959
|
"first-read"
|
|
7828
7960
|
],
|
|
7829
7961
|
"summary": "GET /first-read/prompt",
|
|
7830
|
-
"description": "the prompt and the shape are instructions, not project data.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7962
|
+
"description": "the prompt and the shape are instructions, not project data. The prompt carries the live module list (task 1005281), so a session recommends from it.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7831
7963
|
"x-rank": "any-builder",
|
|
7832
7964
|
"x-source": "modules/lifecycle/routes/first-read.js",
|
|
7833
7965
|
"responses": {
|
|
@@ -29282,6 +29414,45 @@
|
|
|
29282
29414
|
"security": []
|
|
29283
29415
|
}
|
|
29284
29416
|
},
|
|
29417
|
+
"/sso/app-status": {
|
|
29418
|
+
"post": {
|
|
29419
|
+
"operationId": "post_sso_app_status",
|
|
29420
|
+
"tags": [
|
|
29421
|
+
"sso"
|
|
29422
|
+
],
|
|
29423
|
+
"summary": "POST /sso/app-status",
|
|
29424
|
+
"description": "authenticated by client_id + client_secret, not a builder rank.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
29425
|
+
"x-rank": "public",
|
|
29426
|
+
"x-source": "modules/platform-identity/routes/sso-app-status.js",
|
|
29427
|
+
"requestBody": {
|
|
29428
|
+
"required": true,
|
|
29429
|
+
"content": {
|
|
29430
|
+
"application/json": {
|
|
29431
|
+
"schema": {
|
|
29432
|
+
"$ref": "#/components/schemas/PostSsoAppStatusRequest"
|
|
29433
|
+
}
|
|
29434
|
+
}
|
|
29435
|
+
},
|
|
29436
|
+
"x-validated": true
|
|
29437
|
+
},
|
|
29438
|
+
"responses": {
|
|
29439
|
+
"200": {
|
|
29440
|
+
"description": "Success.",
|
|
29441
|
+
"content": {
|
|
29442
|
+
"application/json": {
|
|
29443
|
+
"schema": {
|
|
29444
|
+
"$ref": "#/components/schemas/PostSsoAppStatusResponse"
|
|
29445
|
+
}
|
|
29446
|
+
}
|
|
29447
|
+
}
|
|
29448
|
+
},
|
|
29449
|
+
"400": {
|
|
29450
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
29451
|
+
}
|
|
29452
|
+
},
|
|
29453
|
+
"security": []
|
|
29454
|
+
}
|
|
29455
|
+
},
|
|
29285
29456
|
"/sso/applicant-profile": {
|
|
29286
29457
|
"post": {
|
|
29287
29458
|
"operationId": "post_sso_applicant_profile",
|
|
@@ -34664,6 +34835,17 @@
|
|
|
34664
34835
|
"count"
|
|
34665
34836
|
]
|
|
34666
34837
|
},
|
|
34838
|
+
"GetFirstReadCatalogResponse": {
|
|
34839
|
+
"type": "object",
|
|
34840
|
+
"properties": {
|
|
34841
|
+
"available": {},
|
|
34842
|
+
"modules": {}
|
|
34843
|
+
},
|
|
34844
|
+
"required": [
|
|
34845
|
+
"available",
|
|
34846
|
+
"modules"
|
|
34847
|
+
]
|
|
34848
|
+
},
|
|
34667
34849
|
"GetFirstReadPromptResponse": {
|
|
34668
34850
|
"type": "object",
|
|
34669
34851
|
"properties": {
|
|
@@ -34671,14 +34853,16 @@
|
|
|
34671
34853
|
"file": {},
|
|
34672
34854
|
"prompt": {},
|
|
34673
34855
|
"example": {},
|
|
34674
|
-
"limits": {}
|
|
34856
|
+
"limits": {},
|
|
34857
|
+
"catalog": {}
|
|
34675
34858
|
},
|
|
34676
34859
|
"required": [
|
|
34677
34860
|
"schema",
|
|
34678
34861
|
"file",
|
|
34679
34862
|
"prompt",
|
|
34680
34863
|
"example",
|
|
34681
|
-
"limits"
|
|
34864
|
+
"limits",
|
|
34865
|
+
"catalog"
|
|
34682
34866
|
]
|
|
34683
34867
|
},
|
|
34684
34868
|
"GetFrontDoorGuideMineResponse": {
|
|
@@ -39192,6 +39376,22 @@
|
|
|
39192
39376
|
},
|
|
39193
39377
|
"additionalProperties": false
|
|
39194
39378
|
},
|
|
39379
|
+
"PostFirstReadMapsIdDismissRequest": {
|
|
39380
|
+
"type": "object",
|
|
39381
|
+
"properties": {
|
|
39382
|
+
"items": {
|
|
39383
|
+
"type": "array",
|
|
39384
|
+
"items": {
|
|
39385
|
+
"type": "string"
|
|
39386
|
+
},
|
|
39387
|
+
"maxItems": 500
|
|
39388
|
+
}
|
|
39389
|
+
},
|
|
39390
|
+
"required": [
|
|
39391
|
+
"items"
|
|
39392
|
+
],
|
|
39393
|
+
"additionalProperties": false
|
|
39394
|
+
},
|
|
39195
39395
|
"PostFirstReadMapsRequest": {
|
|
39196
39396
|
"type": "object",
|
|
39197
39397
|
"properties": {
|
|
@@ -43544,6 +43744,43 @@
|
|
|
43544
43744
|
"ok"
|
|
43545
43745
|
]
|
|
43546
43746
|
},
|
|
43747
|
+
"PostSsoAppStatusRequest": {
|
|
43748
|
+
"type": "object",
|
|
43749
|
+
"properties": {
|
|
43750
|
+
"client_id": {
|
|
43751
|
+
"type": "string",
|
|
43752
|
+
"maxLength": 200
|
|
43753
|
+
},
|
|
43754
|
+
"client_secret": {
|
|
43755
|
+
"type": "string",
|
|
43756
|
+
"maxLength": 512
|
|
43757
|
+
}
|
|
43758
|
+
},
|
|
43759
|
+
"required": [
|
|
43760
|
+
"client_id",
|
|
43761
|
+
"client_secret"
|
|
43762
|
+
],
|
|
43763
|
+
"additionalProperties": false
|
|
43764
|
+
},
|
|
43765
|
+
"PostSsoAppStatusResponse": {
|
|
43766
|
+
"type": "object",
|
|
43767
|
+
"properties": {
|
|
43768
|
+
"ok": {
|
|
43769
|
+
"type": "boolean"
|
|
43770
|
+
},
|
|
43771
|
+
"known": {
|
|
43772
|
+
"type": "boolean"
|
|
43773
|
+
},
|
|
43774
|
+
"app": {},
|
|
43775
|
+
"sandbox": {}
|
|
43776
|
+
},
|
|
43777
|
+
"required": [
|
|
43778
|
+
"ok",
|
|
43779
|
+
"known",
|
|
43780
|
+
"app",
|
|
43781
|
+
"sandbox"
|
|
43782
|
+
]
|
|
43783
|
+
},
|
|
43547
43784
|
"PostSsoApplicantProfileRequest": {
|
|
43548
43785
|
"type": "object",
|
|
43549
43786
|
"properties": {
|
|
@@ -45306,9 +45543,9 @@
|
|
|
45306
45543
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
45307
45544
|
}
|
|
45308
45545
|
},
|
|
45309
|
-
"x-endpoint-count":
|
|
45310
|
-
"x-schema-count":
|
|
45546
|
+
"x-endpoint-count": 729,
|
|
45547
|
+
"x-schema-count": 759,
|
|
45311
45548
|
"x-undocumented-bodies": 12,
|
|
45312
|
-
"x-response-schemas":
|
|
45549
|
+
"x-response-schemas": 473,
|
|
45313
45550
|
"x-generated-by": "scripts/bongos/gen-api-docs.js"
|
|
45314
45551
|
}
|
package/docs/api-reference.md
CHANGED
|
@@ -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.
|
|
5
|
+
> **Generated from the live route files** — the route file is authoritative. 729 endpoints across 124 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`.
|
|
@@ -66,6 +66,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
66
66
|
|---|---|---|---|---|
|
|
67
67
|
| GET | `/api/bongos/analytics/builder/:id` | `any-builder` | — | a builder's historical AI dev curve. |
|
|
68
68
|
|
|
69
|
+
## `app-host` (1)
|
|
70
|
+
|
|
71
|
+
| Method | Path | Rank | Body | Description |
|
|
72
|
+
|---|---|---|---|---|
|
|
73
|
+
| GET | `/api/bongos/app-host` | `any-builder` | — | GET /app-host — rank: any signed-in builder; owner-only parts gated on core.pin.move. |
|
|
74
|
+
|
|
69
75
|
## `artist-gate` (1)
|
|
70
76
|
|
|
71
77
|
| Method | Path | Rank | Body | Description |
|
|
@@ -315,13 +321,15 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
315
321
|
| POST | `/api/bongos/feedback/receipt` | `any-builder` | `sha256`, `kind` | signed-in builder — a receipt only says "this builder sent this text"; it grants nothing here, and the hub files every report behind a nod. |
|
|
316
322
|
| GET | `/api/bongos/feedback/receipt/:id` | `public` | — | the hub redeems a receipt with no session of its own. |
|
|
317
323
|
|
|
318
|
-
## `first-read` (
|
|
324
|
+
## `first-read` (7)
|
|
319
325
|
|
|
320
326
|
| Method | Path | Rank | Body | Description |
|
|
321
327
|
|---|---|---|---|---|
|
|
328
|
+
| GET | `/api/bongos/first-read/catalog` | `any-builder` | — | the modules this project can switch on, the only ones a map may recommend. |
|
|
322
329
|
| POST | `/api/bongos/first-read/maps` | `metic+archon` | `map` | .create — a map is a planning proposal for this project. |
|
|
323
330
|
| GET | `/api/bongos/first-read/maps/:id` | `metic+archon` | — | .create — the review is for whoever may accept or reject it. |
|
|
324
331
|
| POST | `/api/bongos/first-read/maps/:id/accept` | `metic+archon` | `all`, `items` | .create + act-alone planning — the owner's yes. |
|
|
332
|
+
| POST | `/api/bongos/first-read/maps/:id/dismiss` | `metic+archon` | `items` | .create — the owner's no to named items (a module recommendation, usually). |
|
|
325
333
|
| POST | `/api/bongos/first-read/maps/:id/reject` | `metic+archon` | — | .create — the owner's no. |
|
|
326
334
|
| GET | `/api/bongos/first-read/prompt` | `any-builder` | — | the prompt and the shape are instructions, not project data. |
|
|
327
335
|
|
|
@@ -1041,11 +1049,12 @@ Base path: `/api/bongos`. Ranks (enforced server-side, [ADR 0016](adr/0016-trust
|
|
|
1041
1049
|
| GET | `/api/bongos/specialities/installed-skills` | `any-builder` | — | GET /specialities/installed-skills — every skill THIS instance has, each explained the way the adoption walkthrough explains it, so a spe… |
|
|
1042
1050
|
| GET | `/api/bongos/specialities/offered` | `any-builder` | — | GET /specialities/offered — the suggestions for THIS builder. |
|
|
1043
1051
|
|
|
1044
|
-
## `sso` (
|
|
1052
|
+
## `sso` (13)
|
|
1045
1053
|
|
|
1046
1054
|
| Method | Path | Rank | Body | Description |
|
|
1047
1055
|
|---|---|---|---|---|
|
|
1048
1056
|
| POST | `/api/bongos/sso/activity/rollup` | `public` | `client_id`, `client_secret`, `github_id`, `credits`, `tasks_shipped`, `karma`, `rank`, `disciplines`, `recent_ships`, `crafts` | POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). |
|
|
1057
|
+
| POST | `/api/bongos/sso/app-status` | `public` | `client_id`, `client_secret` | authenticated by client_id + client_secret, not a builder rank. |
|
|
1049
1058
|
| POST | `/api/bongos/sso/applicant-profile` | `public` | `client_id`, `client_secret`, `github_id` | POST /sso/applicant-profile — a federated instance resolves ONE applicant's profile view for its own reviewer queue, LIVE at render (priv… |
|
|
1050
1059
|
| GET | `/api/bongos/sso/authorize` | `public` | — | GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. |
|
|
1051
1060
|
| POST | `/api/bongos/sso/device/poll` | `public` | `device_code` | POST /sso/device/poll — poll the hub device flow. |
|