@bongos/core 1.17.3 → 1.18.0
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 +161 -91
- package/.devcontainer/healthcheck.sh +0 -0
- package/.devcontainer/init-firewall.sh +0 -0
- package/.devcontainer/post-create.sh +0 -0
- package/GOVERNANCE.md +1 -1
- package/README.md +26 -22
- package/bin/bongos.js +0 -0
- package/docker-entrypoint.sh +0 -0
- package/docs/adr/0139-platform-history-migration-to-cloudbongos.md +94 -0
- package/docs/adr/0140-cloudbongos-standalone-reprovision.md +43 -0
- package/docs/adr/README.md +3 -0
- package/docs/api/openapi.json +4 -345
- package/docs/api-reference.md +5 -17
- package/docs/file-map.md +7 -25
- package/docs/onboarding/diagrams/05-versioning.mmd +4 -6
- package/docs/onboarding/diagrams/assertions.json +5 -9
- package/modules/hall-ui/public/builders.js +37 -0
- package/modules/hall-ui/public/goals-page.js +98 -176
- package/modules/hall-ui/public/goals.css +183 -0
- package/modules/hall-ui/public/goals.html +35 -261
- package/modules/hall-ui/public/goals.js +7 -2
- package/modules/hall-ui/public/hall-widgets.js +12 -4
- package/modules/hall-ui/public/settings.css +355 -0
- package/modules/hall-ui/public/settings.html +86 -414
- package/modules/hall-ui/public/settings.js +96 -35
- package/modules/hall-ui/public/style.css +31 -0
- package/modules/hall-ui/public/watch.css +184 -0
- package/modules/hall-ui/public/watch.html +111 -285
- package/modules/hall-ui/public/watch.js +59 -21
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/create.html +83 -7
- package/public-landing/index.html +11 -76
- package/scripts/cron/style_guide_audit.sh +0 -0
- package/scripts/gds/api.js +0 -0
- package/scripts/gds/architect-audit.js +0 -0
- package/scripts/gds/audit-authorship.sh +0 -0
- package/scripts/gds/audit-replay.sh +0 -0
- package/scripts/gds/box.js +0 -0
- package/scripts/gds/capture.js +0 -0
- package/scripts/gds/conductor-dispatch.js +0 -0
- package/scripts/gds/coreB-carve-proof.sh +0 -0
- package/scripts/gds/db-backup-nightly.sh +0 -0
- package/scripts/gds/db-backup-offsite.sh +0 -0
- package/scripts/gds/doctor.js +0 -0
- package/scripts/gds/grade-smoke.js +0 -0
- package/scripts/gds/hooks/pre-push.js +0 -0
- package/scripts/gds/install-git-hooks.js +0 -0
- package/scripts/gds/main-audit.js +0 -0
- package/scripts/gds/oauth-secret.js +0 -0
- package/scripts/gds/onboarding-analyze.js +0 -0
- package/scripts/gds/onboarding-ship.js +0 -0
- package/scripts/gds/paste-token.js +0 -0
- package/scripts/gds/portability-smoke-art.sh +0 -0
- package/scripts/gds/portability-smoke-memory.sh +0 -0
- package/scripts/gds/provision.js +125 -4
- package/scripts/gds/push-main.js +0 -0
- package/scripts/gds/render-ideas.js +0 -0
- package/scripts/gds/security-baseline-check.sh +0 -0
- package/scripts/gds/session.js +0 -0
- package/scripts/gds/ship.js +11 -1
- package/scripts/gds/smoke-batch-claim.sh +0 -0
- package/scripts/gds/smoke-batch-release.sh +0 -0
- package/scripts/gds/smoke-box.sh +0 -0
- package/scripts/gds/smoke-claim-consistency.sh +0 -0
- package/scripts/gds/smoke-dependencies.sh +0 -0
- package/scripts/gds/smoke-write.sh +0 -0
- package/scripts/hall-preview/fixtures/access-requests.json +20 -1
- package/scripts/hall-preview/fixtures/audit-log.json +68 -1
- package/scripts/hall-preview/fixtures/blockers__detail.json +12 -0
- package/scripts/hall-preview/fixtures/box__me.json +5 -0
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +69 -1
- package/scripts/hall-preview/fixtures/builders__roster.json +48 -1
- package/scripts/hall-preview/fixtures/grades__by-builder.json +32 -1
- package/scripts/hall-preview/fixtures/inbox__detail.json +15 -0
- package/scripts/hall-preview/fixtures/me__art-key__own.json +6 -0
- package/scripts/hall-preview/fixtures/me__event-sound-prefs.json +209 -0
- package/scripts/hall-preview/fixtures/me__render.json +5 -0
- package/scripts/hall-preview/fixtures/me__skill-prefs.json +143 -0
- package/scripts/hall-preview/fixtures/me__sound-prefs.json +67 -0
- package/scripts/hall-preview/fixtures/me__wandering.json +43 -0
- package/scripts/hall-preview/fixtures/override-requests.json +15 -1
- package/scripts/hall-preview/fixtures/security__docs.json +10 -1
- package/scripts/hall-preview/fixtures/security__reports.json +31 -1
- package/scripts/hall-preview/fixtures/sessions__search.json +9 -1
- package/scripts/hall-preview/server.js +18 -1
- package/scripts/migrate.sh +0 -0
- package/scripts/migrate_cost_ledger.sh +0 -0
- package/scripts/render-diagrams.sh +0 -0
- package/scripts/security/dep-audit.js +0 -0
- package/scripts/setup-builder.js +0 -0
- package/scripts/setup-builder.sh +0 -0
- package/scripts/snapshots/maybe-render-on-deploy.sh +0 -0
- package/src/module-api.js +20 -1
- package/tests/provision.mjs +69 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/* settings.css — page-local styles for Settings (task 2172; extracted from
|
|
2
|
+
settings.html's old inline <style> per the hall placement rules). Components
|
|
3
|
+
layered on the shared design system (style.css) — the rail (.section-rail /
|
|
4
|
+
.rail-link) and buttons derive from the shared tokens so instance theme
|
|
5
|
+
packs reskin this page too. */
|
|
6
|
+
|
|
7
|
+
/* ---- grouped layout: left sub-nav rail + one visible group (task 1723) ---- */
|
|
8
|
+
.settings-layout {
|
|
9
|
+
display: grid;
|
|
10
|
+
grid-template-columns: 180px minmax(0, 1fr);
|
|
11
|
+
gap: 20px;
|
|
12
|
+
align-items: start;
|
|
13
|
+
}
|
|
14
|
+
.settings-layout[hidden] { display: none !important; }
|
|
15
|
+
/* Only the active group's sections render. Each grouped element is a direct
|
|
16
|
+
child of .settings-groups carrying data-group; a section's own [hidden]
|
|
17
|
+
attribute always wins (the !important rule below), so the per-section
|
|
18
|
+
reveal logic in settings.js is unchanged. */
|
|
19
|
+
.settings-groups > [data-group] { display: none; }
|
|
20
|
+
.settings-groups[data-active="account"] > [data-group="account"],
|
|
21
|
+
.settings-groups[data-active="devbox"] > [data-group="devbox"],
|
|
22
|
+
.settings-groups[data-active="access"] > [data-group="access"],
|
|
23
|
+
.settings-groups[data-active="preferences"] > [data-group="preferences"],
|
|
24
|
+
.settings-groups[data-active="sound"] > [data-group="sound"],
|
|
25
|
+
.settings-groups[data-active="extensions"] > [data-group="extensions"] { display: block; }
|
|
26
|
+
.settings-groups > [data-group][hidden] { display: none !important; }
|
|
27
|
+
|
|
28
|
+
/* task 2172 density pass — standard panel anatomy (title → one-line purpose →
|
|
29
|
+
control → save-semantics note) in a tighter card: less padding + stacking
|
|
30
|
+
margin than the default .scroll, ledes clamped to one visual line's worth. */
|
|
31
|
+
.settings-groups .scroll { padding: 16px 18px; margin: 0 0 12px; }
|
|
32
|
+
.settings-groups .scroll__lede { font-size: 13px; margin-bottom: 10px; }
|
|
33
|
+
|
|
34
|
+
@media (max-width: 768px) {
|
|
35
|
+
/* Collapse to one column; the shared .section-rail ≤768px rules turn the
|
|
36
|
+
rail into a sticky horizontal chip strip just under the top bar. */
|
|
37
|
+
.settings-layout { grid-template-columns: minmax(0, 1fr); }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.settings-status {
|
|
41
|
+
font-size: 13px;
|
|
42
|
+
color: var(--ink-soft);
|
|
43
|
+
min-height: 1.2em;
|
|
44
|
+
margin-top: 8px;
|
|
45
|
+
}
|
|
46
|
+
.section-note {
|
|
47
|
+
color: var(--ink-faint);
|
|
48
|
+
font-size: 12.5px;
|
|
49
|
+
margin-top: 10px;
|
|
50
|
+
margin-bottom: 0;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* ---- Voices (per-skill model picker) ---- */
|
|
54
|
+
.voices-scroll { /* keep many rows compact within a bounded, scrollable box */ }
|
|
55
|
+
.voices-wrap {
|
|
56
|
+
max-height: 460px;
|
|
57
|
+
overflow-y: auto;
|
|
58
|
+
margin-top: 6px;
|
|
59
|
+
border: 1px solid var(--border);
|
|
60
|
+
border-radius: var(--radius-sm);
|
|
61
|
+
}
|
|
62
|
+
table.voices {
|
|
63
|
+
width: 100%;
|
|
64
|
+
border-collapse: collapse;
|
|
65
|
+
font-size: 13px;
|
|
66
|
+
color: var(--ink);
|
|
67
|
+
}
|
|
68
|
+
table.voices th, table.voices td {
|
|
69
|
+
padding: 7px 12px;
|
|
70
|
+
text-align: left;
|
|
71
|
+
border-bottom: 1px solid var(--rule-soft);
|
|
72
|
+
vertical-align: middle;
|
|
73
|
+
}
|
|
74
|
+
table.voices th {
|
|
75
|
+
/* sticks inside .voices-wrap's own scroller, not the window — top:0 is
|
|
76
|
+
relative to the wrap, so no --topbar-h offset needed here */
|
|
77
|
+
position: sticky;
|
|
78
|
+
top: 0;
|
|
79
|
+
z-index: 1;
|
|
80
|
+
background: var(--surface);
|
|
81
|
+
font-size: 11px;
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
letter-spacing: 0.06em;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
color: var(--ink-faint);
|
|
86
|
+
border-bottom: 1px solid var(--border-strong);
|
|
87
|
+
}
|
|
88
|
+
table.voices tr:last-child td { border-bottom: none; }
|
|
89
|
+
table.voices tbody tr:hover td { background: var(--surface-2); }
|
|
90
|
+
.voices__skill code {
|
|
91
|
+
font-size: 12.5px;
|
|
92
|
+
color: var(--info);
|
|
93
|
+
}
|
|
94
|
+
.voices__default {
|
|
95
|
+
font-size: 12.5px;
|
|
96
|
+
color: var(--ink-soft);
|
|
97
|
+
}
|
|
98
|
+
select.voices__select { min-width: 140px; }
|
|
99
|
+
.voices-empty, .craft-empty {
|
|
100
|
+
color: var(--ink-faint);
|
|
101
|
+
font-style: italic;
|
|
102
|
+
font-size: 13px;
|
|
103
|
+
padding: 10px 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* ---- Sounds (per-sound on/off toggles) ---- */
|
|
107
|
+
.sound-rows { margin-top: 8px; }
|
|
108
|
+
.sound-row {
|
|
109
|
+
display: flex;
|
|
110
|
+
align-items: center;
|
|
111
|
+
justify-content: space-between;
|
|
112
|
+
gap: 16px;
|
|
113
|
+
padding: 9px 0;
|
|
114
|
+
border-bottom: 1px solid var(--rule-soft);
|
|
115
|
+
}
|
|
116
|
+
.sound-row:last-child { border-bottom: none; }
|
|
117
|
+
.sound-row__text { min-width: 0; }
|
|
118
|
+
.sound-row__label {
|
|
119
|
+
font-size: 13.5px;
|
|
120
|
+
color: var(--ink);
|
|
121
|
+
font-weight: 600;
|
|
122
|
+
}
|
|
123
|
+
.sound-row__desc {
|
|
124
|
+
font-size: 12.5px;
|
|
125
|
+
color: var(--ink-soft);
|
|
126
|
+
margin-top: 2px;
|
|
127
|
+
}
|
|
128
|
+
button.sound-toggle {
|
|
129
|
+
font-family: var(--font-body);
|
|
130
|
+
font-size: 12.5px;
|
|
131
|
+
font-weight: 600;
|
|
132
|
+
padding: 5px 16px;
|
|
133
|
+
min-width: 72px;
|
|
134
|
+
border-radius: 999px;
|
|
135
|
+
border: 1px solid var(--border-strong);
|
|
136
|
+
background: var(--surface);
|
|
137
|
+
color: var(--ink-soft);
|
|
138
|
+
cursor: pointer;
|
|
139
|
+
flex-shrink: 0;
|
|
140
|
+
}
|
|
141
|
+
button.sound-toggle[data-on="1"] {
|
|
142
|
+
background: var(--accent);
|
|
143
|
+
border-color: var(--accent);
|
|
144
|
+
color: #fff;
|
|
145
|
+
}
|
|
146
|
+
button.sound-toggle:disabled { opacity: 0.5; cursor: default; }
|
|
147
|
+
.sound-volume {
|
|
148
|
+
display: flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
gap: 14px;
|
|
151
|
+
padding: 4px 0 12px;
|
|
152
|
+
border-bottom: 1px solid var(--border);
|
|
153
|
+
margin-bottom: 4px;
|
|
154
|
+
}
|
|
155
|
+
.sound-volume__label {
|
|
156
|
+
font-size: 11px;
|
|
157
|
+
font-weight: 600;
|
|
158
|
+
text-transform: uppercase;
|
|
159
|
+
letter-spacing: 0.06em;
|
|
160
|
+
color: var(--ink-faint);
|
|
161
|
+
flex-shrink: 0;
|
|
162
|
+
}
|
|
163
|
+
.sound-volume input[type="range"] {
|
|
164
|
+
flex: 1;
|
|
165
|
+
accent-color: var(--accent);
|
|
166
|
+
cursor: pointer;
|
|
167
|
+
}
|
|
168
|
+
.sound-volume__pct {
|
|
169
|
+
font-size: 13px;
|
|
170
|
+
color: var(--ink);
|
|
171
|
+
min-width: 3.2em;
|
|
172
|
+
text-align: right;
|
|
173
|
+
font-variant-numeric: tabular-nums;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* ---- Event sounds (per-event variant dropdowns, task 582) ---- */
|
|
177
|
+
.event-sound-rows { margin-top: 8px; }
|
|
178
|
+
.event-sound-row {
|
|
179
|
+
display: flex;
|
|
180
|
+
align-items: center;
|
|
181
|
+
justify-content: space-between;
|
|
182
|
+
gap: 16px;
|
|
183
|
+
padding: 9px 0;
|
|
184
|
+
border-bottom: 1px solid var(--rule-soft);
|
|
185
|
+
}
|
|
186
|
+
.event-sound-row:last-child { border-bottom: none; }
|
|
187
|
+
.event-sound-row__text { flex: 1; min-width: 0; }
|
|
188
|
+
.event-sound-row__label {
|
|
189
|
+
font-size: 13.5px;
|
|
190
|
+
color: var(--ink);
|
|
191
|
+
font-weight: 600;
|
|
192
|
+
}
|
|
193
|
+
.event-sound-row__desc {
|
|
194
|
+
font-size: 12.5px;
|
|
195
|
+
color: var(--ink-soft);
|
|
196
|
+
margin-top: 2px;
|
|
197
|
+
}
|
|
198
|
+
.event-sound-row__controls {
|
|
199
|
+
display: flex;
|
|
200
|
+
align-items: center;
|
|
201
|
+
gap: 8px;
|
|
202
|
+
flex-shrink: 0;
|
|
203
|
+
}
|
|
204
|
+
.event-sound-select { cursor: pointer; }
|
|
205
|
+
.event-sound-preview {
|
|
206
|
+
font-family: var(--font-body);
|
|
207
|
+
font-size: 12px;
|
|
208
|
+
font-weight: 600;
|
|
209
|
+
padding: 5px 12px;
|
|
210
|
+
border-radius: 999px;
|
|
211
|
+
border: 1px solid var(--border-strong);
|
|
212
|
+
background: transparent;
|
|
213
|
+
color: var(--ink-soft);
|
|
214
|
+
cursor: pointer;
|
|
215
|
+
}
|
|
216
|
+
.event-sound-preview:active { opacity: 0.7; }
|
|
217
|
+
|
|
218
|
+
/* ---- Disciplines (preference chips) ---- */
|
|
219
|
+
.craft-chips {
|
|
220
|
+
display: flex;
|
|
221
|
+
flex-wrap: wrap;
|
|
222
|
+
gap: 10px;
|
|
223
|
+
margin-top: 8px;
|
|
224
|
+
}
|
|
225
|
+
.craft-chip {
|
|
226
|
+
display: inline-flex;
|
|
227
|
+
align-items: center;
|
|
228
|
+
gap: 8px;
|
|
229
|
+
font-size: 13.5px;
|
|
230
|
+
color: var(--ink);
|
|
231
|
+
background: var(--surface);
|
|
232
|
+
border: 1px solid var(--border-strong);
|
|
233
|
+
border-radius: 999px;
|
|
234
|
+
padding: 6px 14px;
|
|
235
|
+
cursor: pointer;
|
|
236
|
+
user-select: none;
|
|
237
|
+
text-transform: capitalize;
|
|
238
|
+
}
|
|
239
|
+
.craft-chip:hover { background: var(--surface-2); }
|
|
240
|
+
.craft-chip input { cursor: pointer; }
|
|
241
|
+
.craft-chip[data-on="1"] {
|
|
242
|
+
background: var(--accent);
|
|
243
|
+
border-color: var(--accent);
|
|
244
|
+
color: #fff;
|
|
245
|
+
}
|
|
246
|
+
.craft-actions {
|
|
247
|
+
display: flex;
|
|
248
|
+
align-items: center;
|
|
249
|
+
gap: 14px;
|
|
250
|
+
margin-top: 14px;
|
|
251
|
+
flex-wrap: wrap;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/* ---- Buttons (Save / card actions) ---- */
|
|
255
|
+
button.craft-save, .settings-btn {
|
|
256
|
+
font-family: var(--font-body);
|
|
257
|
+
font-size: 13px;
|
|
258
|
+
font-weight: 600;
|
|
259
|
+
padding: 7px 16px;
|
|
260
|
+
border: 1px solid var(--accent);
|
|
261
|
+
background: var(--surface);
|
|
262
|
+
color: var(--accent-text);
|
|
263
|
+
border-radius: var(--radius-sm);
|
|
264
|
+
cursor: pointer;
|
|
265
|
+
display: inline-block;
|
|
266
|
+
text-decoration: none;
|
|
267
|
+
}
|
|
268
|
+
button.craft-save:hover:not(:disabled), .settings-btn:hover:not(:disabled) {
|
|
269
|
+
background: var(--accent);
|
|
270
|
+
color: #fff;
|
|
271
|
+
text-decoration: none;
|
|
272
|
+
}
|
|
273
|
+
button.craft-save:disabled, .settings-btn:disabled { opacity: 0.5; cursor: default; }
|
|
274
|
+
/* Discord brand button — keeps its blurple so it's recognisable. */
|
|
275
|
+
.settings-btn--discord {
|
|
276
|
+
background: #5865F2;
|
|
277
|
+
border-color: #4853c4;
|
|
278
|
+
color: #fff;
|
|
279
|
+
}
|
|
280
|
+
.settings-btn--discord:hover { background: #4853c4; color: #fff; }
|
|
281
|
+
.settings-btn--quiet {
|
|
282
|
+
border-color: var(--border-strong);
|
|
283
|
+
color: var(--ink-soft);
|
|
284
|
+
}
|
|
285
|
+
.settings-btn--quiet:hover:not(:disabled) { background: var(--surface-2); color: var(--ink); }
|
|
286
|
+
|
|
287
|
+
/* ---- Display name (single editable field, task 1669) ---- */
|
|
288
|
+
.display-name-row {
|
|
289
|
+
display: flex;
|
|
290
|
+
flex-wrap: wrap;
|
|
291
|
+
align-items: center;
|
|
292
|
+
gap: 12px;
|
|
293
|
+
margin-top: 8px;
|
|
294
|
+
}
|
|
295
|
+
input.display-name-input {
|
|
296
|
+
flex: 1 1 280px;
|
|
297
|
+
min-width: 0;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* ---- Connections + CLI access cards ---- */
|
|
301
|
+
.settings-card {
|
|
302
|
+
margin-top: 8px;
|
|
303
|
+
display: flex;
|
|
304
|
+
flex-wrap: wrap;
|
|
305
|
+
align-items: center;
|
|
306
|
+
gap: 12px;
|
|
307
|
+
}
|
|
308
|
+
.settings-card__hint { color: var(--ink-soft); font-size: 13px; }
|
|
309
|
+
.settings-card__ok { font-weight: 600; color: var(--ok); }
|
|
310
|
+
.cli-result { flex-basis: 100%; margin-top: 4px; }
|
|
311
|
+
.cli-result pre {
|
|
312
|
+
background: var(--bg-deep);
|
|
313
|
+
color: var(--ink);
|
|
314
|
+
padding: 10px 12px;
|
|
315
|
+
border: 1px solid var(--border);
|
|
316
|
+
border-radius: var(--radius-sm);
|
|
317
|
+
overflow-x: auto;
|
|
318
|
+
font-size: 12.5px;
|
|
319
|
+
margin: 6px 0;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/* ---- Image key (task 1013) — the "we cover it" / "action needed" banner
|
|
323
|
+
uses the shared semantic status tokens. ---- */
|
|
324
|
+
.artkey-banner {
|
|
325
|
+
border-radius: var(--radius-sm);
|
|
326
|
+
padding: 10px 14px;
|
|
327
|
+
font-size: 13px;
|
|
328
|
+
line-height: 1.45;
|
|
329
|
+
border: 1px solid var(--border);
|
|
330
|
+
margin-bottom: 10px;
|
|
331
|
+
}
|
|
332
|
+
.artkey-banner--covered {
|
|
333
|
+
background: var(--ok-weak);
|
|
334
|
+
border-color: color-mix(in srgb, var(--ok) 45%, var(--border));
|
|
335
|
+
color: var(--ok);
|
|
336
|
+
}
|
|
337
|
+
.artkey-banner--action {
|
|
338
|
+
background: var(--warn-weak);
|
|
339
|
+
border-color: color-mix(in srgb, var(--warn) 45%, var(--border));
|
|
340
|
+
color: var(--warn);
|
|
341
|
+
}
|
|
342
|
+
.artkey-entry-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; flex-basis: 100%; }
|
|
343
|
+
.artkey-input {
|
|
344
|
+
flex: 1 1 280px;
|
|
345
|
+
min-width: 0;
|
|
346
|
+
padding: 7px 10px;
|
|
347
|
+
border: 1px solid var(--border-strong);
|
|
348
|
+
border-radius: var(--radius-sm);
|
|
349
|
+
background: var(--surface);
|
|
350
|
+
color: var(--ink);
|
|
351
|
+
font-family: ui-monospace, "SF Mono", Menlo, monospace;
|
|
352
|
+
font-size: 13px;
|
|
353
|
+
}
|
|
354
|
+
.artkey-actions { display: flex; gap: 10px; flex-wrap: wrap; }
|
|
355
|
+
#artkey-entry { flex-basis: 100%; }
|