@go-labs-sg/gosh 1.4.0 → 1.6.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/README.md +85 -2
- package/command-manifest.json +50 -3
- package/command-reference.md +43 -3
- package/dist/index.js +32 -5
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -157,6 +157,42 @@ Deploy prerequisite: apply the additive GOSH database schema changes for both
|
|
|
157
157
|
to `[]`, before deploying the updated server. Older event snapshots restore an
|
|
158
158
|
empty list. Client generation alone does not apply these database changes.
|
|
159
159
|
|
|
160
|
+
### Number range answers
|
|
161
|
+
|
|
162
|
+
Fill-in-the-blank missions can accept any number in an inclusive range instead
|
|
163
|
+
of text answers. Set `config.numberRange` with `min` and `max` (`min` must be
|
|
164
|
+
less than or equal to `max`). Players must answer with a number such as `55`,
|
|
165
|
+
`55.5`, `-3` or `1,000`; anything that is not a number is marked incorrect.
|
|
166
|
+
Ranges cannot be combined with `acceptedAnswers` and are only available for
|
|
167
|
+
fill-in-the-blank missions.
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
gosh mission create --input '{"stationId":"station-id","name":"Guess the height","type":"FILL_IN_THE_BLANK","config":{"numberRange":{"min":50,"max":60}}}'
|
|
171
|
+
gosh mission update --input '{"missionId":"mission-id","name":"Guess the height","type":"FILL_IN_THE_BLANK","config":null,"correctAnswer":"55"}'
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
When updating, omit `config` to keep the saved range or pass `null` to switch
|
|
175
|
+
back to text answers. Players see a number input but never the range itself.
|
|
176
|
+
|
|
177
|
+
Rollout gate: the stored `correctAnswer` (`"50-60"`) is a display key, not a
|
|
178
|
+
safe fallback. A server without number-range support grades it as plain text,
|
|
179
|
+
so it accepts the literal `50-60` and rejects an in-range `55`, and its
|
|
180
|
+
template, clone and version writers drop `config`. Apply the additive
|
|
181
|
+
`Mission.config` and `GoshTemplateMission.config` columns, finish rolling out
|
|
182
|
+
the server everywhere, then create range missions.
|
|
183
|
+
|
|
184
|
+
Rollback: a range mission that has submissions cannot be switched back to text.
|
|
185
|
+
The answer-key lock in `mission update` rejects that edit on purpose, so stored
|
|
186
|
+
answers and points stay consistent. Do not loosen or bypass it. Instead:
|
|
187
|
+
|
|
188
|
+
- Unused range missions (no submissions) and templates can be switched back to
|
|
189
|
+
text answers or removed before a rollback.
|
|
190
|
+
- Used range missions: do not roll the server back past number-range support
|
|
191
|
+
while those events are live. Fix forward on a compatible build (any build
|
|
192
|
+
with number-range grading), or keep the previous image ready only for
|
|
193
|
+
events with no range missions. A lossless rollback for used range missions
|
|
194
|
+
needs its own approved plan; a normal edit cannot do it.
|
|
195
|
+
|
|
160
196
|
### Templates and organization scope
|
|
161
197
|
|
|
162
198
|
Template commands use the selected organization as their scope. Provide its ID in
|
|
@@ -264,11 +300,15 @@ gosh team create \
|
|
|
264
300
|
```
|
|
265
301
|
|
|
266
302
|
Configure gameplay, then manage the event's routing groups and their complete
|
|
267
|
-
station lists
|
|
303
|
+
station lists. `requireLocationOnSubmit` (default false) makes players at a
|
|
304
|
+
location-locked station check in again within the last two minutes before each
|
|
305
|
+
answer or upload is accepted, not only once at check-in. A fresh QR scan counts
|
|
306
|
+
at stations that also accept QR. It stays editable during live play; omit it,
|
|
307
|
+
or `allowStationSkipping`, to keep the event's current value.
|
|
268
308
|
|
|
269
309
|
```bash
|
|
270
310
|
gosh event set-gameplay \
|
|
271
|
-
--input '{"eventId":"event-id","progression":"SEQUENTIAL","groupRoutingEnabled":true,"allowMissionSkipping":true,"allowStationSkipping":false}' \
|
|
311
|
+
--input '{"eventId":"event-id","progression":"SEQUENTIAL","groupRoutingEnabled":true,"allowMissionSkipping":true,"allowStationSkipping":false,"requireLocationOnSubmit":true}' \
|
|
272
312
|
--target event-id \
|
|
273
313
|
--allow-state-change
|
|
274
314
|
|
|
@@ -332,6 +372,49 @@ groups to read back release values and editability, and use
|
|
|
332
372
|
for the five most recent actor/before/after changes; the existing event activity
|
|
333
373
|
timeline provides the full audit history.
|
|
334
374
|
|
|
375
|
+
### Staggered team starts within a group
|
|
376
|
+
|
|
377
|
+
Teams sharing a route can start at different times. A team's own `releaseAt`
|
|
378
|
+
replaces the group's time (earlier or later); with none, the team uses the
|
|
379
|
+
group's time, so existing events are unchanged. A held group still holds every
|
|
380
|
+
team, and a team hold holds one team inside a released group. The server
|
|
381
|
+
enforces each team's effective time on every gameplay call.
|
|
382
|
+
|
|
383
|
+
Preview a stagger first. It writes nothing and lists each team's before/after
|
|
384
|
+
time plus any blockers the apply would refuse with:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
gosh routing-group stagger-preview \
|
|
388
|
+
--input '{"eventId":"event-id","groupId":"group-a","mode":"STAGGER","firstReleaseAt":"2030-01-01T13:40:00+08:00","intervalMinutes":5,"teamIds":["team-1","team-2","team-3"]}'
|
|
389
|
+
gosh routing-group stagger \
|
|
390
|
+
--input '{"eventId":"event-id","groupId":"group-a","mode":"STAGGER","firstReleaseAt":"2030-01-01T13:40:00+08:00","intervalMinutes":5,"teamIds":["team-1","team-2","team-3"]}' \
|
|
391
|
+
--target group-a \
|
|
392
|
+
--allow-state-change
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
`teamIds` order is start order: `team-1` 13:40, `team-2` 13:45, `team-3` 13:50.
|
|
396
|
+
Teams left out keep their current time. Use `"mode":"SHIFT","shiftMinutes":10`
|
|
397
|
+
to delay every unstarted scheduled team by 10 minutes (negative moves earlier,
|
|
398
|
+
never into the past), or `"mode":"CLEAR"` to drop team times so teams use the
|
|
399
|
+
group time again. Apply runs in one transaction, so either every team changes
|
|
400
|
+
or none do. Started teams are never rescheduled.
|
|
401
|
+
|
|
402
|
+
One team at a time, including while LIVE:
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
gosh team release \
|
|
406
|
+
--input '{"eventId":"event-id","teamId":"team-2","action":"HOLD"}' \
|
|
407
|
+
--target team-2 \
|
|
408
|
+
--allow-state-change
|
|
409
|
+
gosh team release-history --input '{"eventId":"event-id","teamId":"team-2"}'
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
Actions are SCHEDULE (future `releaseAt` with offset), CLEAR (use the group
|
|
413
|
+
time), HOLD, RELEASE_HOLD (keep the team time) and RELEASE_NOW (start this team
|
|
414
|
+
now; refused while the group is held). After a team starts, only HOLD and
|
|
415
|
+
RELEASE_HOLD are accepted. Every change is audited with actor and before/after
|
|
416
|
+
values.
|
|
417
|
+
|
|
335
418
|
The server evaluates deadlines without cron. Release never starts a timer or
|
|
336
419
|
bypasses LIVE status, availability, check-in or captain permissions. Any team in
|
|
337
420
|
a group beginning play locks that group's schedule; emergency HOLD/resume stays
|
package/command-manifest.json
CHANGED
|
@@ -791,7 +791,7 @@
|
|
|
791
791
|
"path": ["mission", "create"],
|
|
792
792
|
"procedure": "event.createMission",
|
|
793
793
|
"requiresAuth": true,
|
|
794
|
-
"summary": "Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives). Optional revealMessage (up to 2,000 characters) is shown only after submitting.",
|
|
794
|
+
"summary": "Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives), or config.numberRange {min,max} to accept any number in that inclusive range instead. Optional revealMessage (up to 2,000 characters) is shown only after submitting.",
|
|
795
795
|
"targetKeys": [
|
|
796
796
|
"id",
|
|
797
797
|
"memberId",
|
|
@@ -823,7 +823,7 @@
|
|
|
823
823
|
"path": ["mission", "update"],
|
|
824
824
|
"procedure": "event.updateMission",
|
|
825
825
|
"requiresAuth": true,
|
|
826
|
-
"summary": "Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.",
|
|
826
|
+
"summary": "Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Set config.numberRange {min,max} for a numeric range answer; omit config to preserve or pass null to return to text answers. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.",
|
|
827
827
|
"targetKeys": [
|
|
828
828
|
"id",
|
|
829
829
|
"memberId",
|
|
@@ -1170,7 +1170,7 @@
|
|
|
1170
1170
|
"path": ["event", "set-gameplay"],
|
|
1171
1171
|
"procedure": "team.setGameplaySettings",
|
|
1172
1172
|
"requiresAuth": true,
|
|
1173
|
-
"summary": "Set open or sequential progression, group routing, and per-mission skipping before play starts.",
|
|
1173
|
+
"summary": "Set open or sequential progression, group routing, and per-mission skipping before play starts. Station skipping and requireLocationOnSubmit stay editable live.",
|
|
1174
1174
|
"targetKeys": ["eventId"]
|
|
1175
1175
|
},
|
|
1176
1176
|
{
|
|
@@ -1201,6 +1201,44 @@
|
|
|
1201
1201
|
"summary": "Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, RELEASE_SCHEDULED_HOLD (keep schedule), or RELEASE_NOW for a routing group. After a group starts, only HOLD and RELEASE_SCHEDULED_HOLD are accepted. Requires launchEvent permission.",
|
|
1202
1202
|
"targetKeys": ["groupId", "eventId"]
|
|
1203
1203
|
},
|
|
1204
|
+
{
|
|
1205
|
+
"effects": [],
|
|
1206
|
+
"input": "json",
|
|
1207
|
+
"operation": "query",
|
|
1208
|
+
"path": ["routing-group", "stagger-preview"],
|
|
1209
|
+
"procedure": "team.previewRoutingGroupStagger",
|
|
1210
|
+
"requiresAuth": true,
|
|
1211
|
+
"summary": "Dry run: show each team's before/after start time for a routing-group STAGGER (firstReleaseAt + intervalMinutes in teamIds order), SHIFT (shiftMinutes, unstarted scheduled teams) or CLEAR (back to the group time). Writes nothing; returns blockers apply would refuse with."
|
|
1212
|
+
},
|
|
1213
|
+
{
|
|
1214
|
+
"effects": ["state-change"],
|
|
1215
|
+
"input": "json",
|
|
1216
|
+
"operation": "mutation",
|
|
1217
|
+
"path": ["routing-group", "stagger"],
|
|
1218
|
+
"procedure": "team.applyRoutingGroupStagger",
|
|
1219
|
+
"requiresAuth": true,
|
|
1220
|
+
"summary": "Apply the same STAGGER, SHIFT or CLEAR input as stagger-preview in one transaction (all teams or none). Started teams are never rescheduled. Requires launchEvent permission; allowed while LIVE.",
|
|
1221
|
+
"targetKeys": ["groupId", "eventId"]
|
|
1222
|
+
},
|
|
1223
|
+
{
|
|
1224
|
+
"effects": ["state-change"],
|
|
1225
|
+
"input": "json",
|
|
1226
|
+
"operation": "mutation",
|
|
1227
|
+
"path": ["team", "release"],
|
|
1228
|
+
"procedure": "team.updateTeamRelease",
|
|
1229
|
+
"requiresAuth": true,
|
|
1230
|
+
"summary": "Set one team's start inside its routing group: SCHEDULE (future releaseAt ISO timestamp with offset), CLEAR (use the group time), HOLD, RELEASE_HOLD, or RELEASE_NOW. A held group still holds every team. After a team starts, only HOLD and RELEASE_HOLD are accepted. Requires launchEvent permission.",
|
|
1231
|
+
"targetKeys": ["teamId", "eventId"]
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"effects": [],
|
|
1235
|
+
"input": "json",
|
|
1236
|
+
"operation": "query",
|
|
1237
|
+
"path": ["team", "release-history"],
|
|
1238
|
+
"procedure": "team.listTeamReleaseHistory",
|
|
1239
|
+
"requiresAuth": true,
|
|
1240
|
+
"summary": "Show a team's five most recent start-time changes with actor, action and before/after UTC values."
|
|
1241
|
+
},
|
|
1204
1242
|
{
|
|
1205
1243
|
"effects": ["state-change"],
|
|
1206
1244
|
"input": "json",
|
|
@@ -2200,6 +2238,15 @@
|
|
|
2200
2238
|
"requiresAuth": true,
|
|
2201
2239
|
"summary": "Get a playable station."
|
|
2202
2240
|
},
|
|
2241
|
+
{
|
|
2242
|
+
"effects": [],
|
|
2243
|
+
"input": "json",
|
|
2244
|
+
"operation": "query",
|
|
2245
|
+
"path": ["player", "station", "presence"],
|
|
2246
|
+
"procedure": "event.getPlayerStationPresence",
|
|
2247
|
+
"requiresAuth": true,
|
|
2248
|
+
"summary": "Check whether a location is within a station's submit range when the event asks players to stay at the station to submit. Returns a state and rounded distance, never coordinates."
|
|
2249
|
+
},
|
|
2203
2250
|
{
|
|
2204
2251
|
"effects": [],
|
|
2205
2252
|
"input": "none",
|
package/command-reference.md
CHANGED
|
@@ -332,7 +332,7 @@ Reorder shared stations, or a selected team's station route when scopeTeamId is
|
|
|
332
332
|
|
|
333
333
|
## `gosh mission create`
|
|
334
334
|
|
|
335
|
-
Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives). Optional revealMessage (up to 2,000 characters) is shown only after submitting.
|
|
335
|
+
Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives), or config.numberRange {min,max} to accept any number in that inclusive range instead. Optional revealMessage (up to 2,000 characters) is shown only after submitting.
|
|
336
336
|
|
|
337
337
|
- Authentication: browser-authenticated CLI session required
|
|
338
338
|
- Input: `--input '<json>'` required
|
|
@@ -340,7 +340,7 @@ Create a mission in a station. Fill-in-the-blank inputs support correctAnswer an
|
|
|
340
340
|
|
|
341
341
|
## `gosh mission update`
|
|
342
342
|
|
|
343
|
-
Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.
|
|
343
|
+
Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Set config.numberRange {min,max} for a numeric range answer; omit config to preserve or pass null to return to text answers. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.
|
|
344
344
|
|
|
345
345
|
- Authentication: browser-authenticated CLI session required
|
|
346
346
|
- Input: `--input '<json>'` required
|
|
@@ -444,7 +444,7 @@ Replace a team's linked station route and set its order.
|
|
|
444
444
|
|
|
445
445
|
## `gosh event set-gameplay`
|
|
446
446
|
|
|
447
|
-
Set open or sequential progression, group routing, and per-mission skipping before play starts.
|
|
447
|
+
Set open or sequential progression, group routing, and per-mission skipping before play starts. Station skipping and requireLocationOnSubmit stay editable live.
|
|
448
448
|
|
|
449
449
|
- Authentication: browser-authenticated CLI session required
|
|
450
450
|
- Input: `--input '<json>'` required
|
|
@@ -474,6 +474,38 @@ Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, REL
|
|
|
474
474
|
- Input: `--input '<json>'` required
|
|
475
475
|
- Effects: state-change
|
|
476
476
|
|
|
477
|
+
## `gosh routing-group stagger-preview`
|
|
478
|
+
|
|
479
|
+
Dry run: show each team's before/after start time for a routing-group STAGGER (firstReleaseAt + intervalMinutes in teamIds order), SHIFT (shiftMinutes, unstarted scheduled teams) or CLEAR (back to the group time). Writes nothing; returns blockers apply would refuse with.
|
|
480
|
+
|
|
481
|
+
- Authentication: browser-authenticated CLI session required
|
|
482
|
+
- Input: `--input '<json>'` required
|
|
483
|
+
- Effects: read-only
|
|
484
|
+
|
|
485
|
+
## `gosh routing-group stagger`
|
|
486
|
+
|
|
487
|
+
Apply the same STAGGER, SHIFT or CLEAR input as stagger-preview in one transaction (all teams or none). Started teams are never rescheduled. Requires launchEvent permission; allowed while LIVE.
|
|
488
|
+
|
|
489
|
+
- Authentication: browser-authenticated CLI session required
|
|
490
|
+
- Input: `--input '<json>'` required
|
|
491
|
+
- Effects: state-change
|
|
492
|
+
|
|
493
|
+
## `gosh team release`
|
|
494
|
+
|
|
495
|
+
Set one team's start inside its routing group: SCHEDULE (future releaseAt ISO timestamp with offset), CLEAR (use the group time), HOLD, RELEASE_HOLD, or RELEASE_NOW. A held group still holds every team. After a team starts, only HOLD and RELEASE_HOLD are accepted. Requires launchEvent permission.
|
|
496
|
+
|
|
497
|
+
- Authentication: browser-authenticated CLI session required
|
|
498
|
+
- Input: `--input '<json>'` required
|
|
499
|
+
- Effects: state-change
|
|
500
|
+
|
|
501
|
+
## `gosh team release-history`
|
|
502
|
+
|
|
503
|
+
Show a team's five most recent start-time changes with actor, action and before/after UTC values.
|
|
504
|
+
|
|
505
|
+
- Authentication: browser-authenticated CLI session required
|
|
506
|
+
- Input: `--input '<json>'` required
|
|
507
|
+
- Effects: read-only
|
|
508
|
+
|
|
477
509
|
## `gosh routing-group create`
|
|
478
510
|
|
|
479
511
|
Create a routing group within an event before play starts.
|
|
@@ -922,6 +954,14 @@ Get a playable station.
|
|
|
922
954
|
- Input: `--input '<json>'` required
|
|
923
955
|
- Effects: read-only
|
|
924
956
|
|
|
957
|
+
## `gosh player station presence`
|
|
958
|
+
|
|
959
|
+
Check whether a location is within a station's submit range when the event asks players to stay at the station to submit. Returns a state and rounded distance, never coordinates.
|
|
960
|
+
|
|
961
|
+
- Authentication: browser-authenticated CLI session required
|
|
962
|
+
- Input: `--input '<json>'` required
|
|
963
|
+
- Effects: read-only
|
|
964
|
+
|
|
925
965
|
## `gosh player events`
|
|
926
966
|
|
|
927
967
|
List events joined by the current user.
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,7 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
35
35
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
36
36
|
var __require = import.meta.require;
|
|
37
37
|
|
|
38
|
-
// ../../../node_modules/.bun/dotenv@18.0.
|
|
38
|
+
// ../../../node_modules/.bun/dotenv@18.0.9/node_modules/dotenv/dist/index.cjs
|
|
39
39
|
var require_dist = __commonJS(function(exports, module) {
|
|
40
40
|
var j = (e, n) => () => {
|
|
41
41
|
try {
|
|
@@ -367,7 +367,7 @@ var require_dist = __commonJS(function(exports, module) {
|
|
|
367
367
|
}
|
|
368
368
|
function Ee(e) {
|
|
369
369
|
let n = J(), t = { encoding: n.encoding || "utf8", quiet: n.quiet, debug: n.debug === true, override: n.override === true, fast: n.fast === true, paths: [".env"], defaultPath: true };
|
|
370
|
-
return n.path
|
|
370
|
+
return n.path && (t.paths = [n.path], t.defaultPath = false), e.pathSet && (t.paths = e.paths, t.defaultPath = false), e.quiet != null && (t.quiet = e.quiet), e.debug != null && (t.debug = e.debug), e.override != null && (t.override = e.override), e.fast != null && (t.fast = e.fast), t;
|
|
371
371
|
}
|
|
372
372
|
function be(e) {
|
|
373
373
|
let n = {}, t = [], o = { override: e.override, debug: e.debug };
|
|
@@ -7504,6 +7504,22 @@ var typedOperations = {
|
|
|
7504
7504
|
kind: "mutation",
|
|
7505
7505
|
invoke: (client, input) => client.team.updateRoutingGroupRelease.mutate(input)
|
|
7506
7506
|
},
|
|
7507
|
+
"team.previewRoutingGroupStagger": {
|
|
7508
|
+
kind: "query",
|
|
7509
|
+
invoke: (client, input) => client.team.previewRoutingGroupStagger.query(input)
|
|
7510
|
+
},
|
|
7511
|
+
"team.applyRoutingGroupStagger": {
|
|
7512
|
+
kind: "mutation",
|
|
7513
|
+
invoke: (client, input) => client.team.applyRoutingGroupStagger.mutate(input)
|
|
7514
|
+
},
|
|
7515
|
+
"team.updateTeamRelease": {
|
|
7516
|
+
kind: "mutation",
|
|
7517
|
+
invoke: (client, input) => client.team.updateTeamRelease.mutate(input)
|
|
7518
|
+
},
|
|
7519
|
+
"team.listTeamReleaseHistory": {
|
|
7520
|
+
kind: "query",
|
|
7521
|
+
invoke: (client, input) => client.team.listTeamReleaseHistory.query(input)
|
|
7522
|
+
},
|
|
7507
7523
|
"team.createRoutingGroup": {
|
|
7508
7524
|
kind: "mutation",
|
|
7509
7525
|
invoke: (client, input) => client.team.createRoutingGroup.mutate(input)
|
|
@@ -7728,6 +7744,10 @@ var typedOperations = {
|
|
|
7728
7744
|
kind: "query",
|
|
7729
7745
|
invoke: (client, input) => client.event.getPlayerStation.query(input)
|
|
7730
7746
|
},
|
|
7747
|
+
"event.getPlayerStationPresence": {
|
|
7748
|
+
kind: "query",
|
|
7749
|
+
invoke: (client, input) => client.event.getPlayerStationPresence.query(input)
|
|
7750
|
+
},
|
|
7731
7751
|
"event.listJoined": {
|
|
7732
7752
|
kind: "query",
|
|
7733
7753
|
invoke: (client, input) => client.event.listJoined.query(input)
|
|
@@ -7985,6 +8005,8 @@ var defaultMutationTargetKeys = [
|
|
|
7985
8005
|
];
|
|
7986
8006
|
var mutationTargetKeys = {
|
|
7987
8007
|
"team.updateRoutingGroupRelease": ["groupId", "eventId"],
|
|
8008
|
+
"team.updateTeamRelease": ["teamId", "eventId"],
|
|
8009
|
+
"team.applyRoutingGroupStagger": ["groupId", "eventId"],
|
|
7988
8010
|
"team.setGameplaySettings": ["eventId"],
|
|
7989
8011
|
"event.updateSurveySettings": ["eventId"],
|
|
7990
8012
|
"team.createRoutingGroup": ["eventId"],
|
|
@@ -8091,8 +8113,8 @@ var commands = [
|
|
|
8091
8113
|
mutation(["station", "clone"], "event.cloneStation", "Clone a station and its missions.", ["state-change"]),
|
|
8092
8114
|
mutation(["station", "archive"], "event.archiveStation", "Archive a station.", ["state-change", "delete"]),
|
|
8093
8115
|
mutation(["station", "reorder"], "event.reorderStations", "Reorder shared stations, or a selected team's station route when scopeTeamId is supplied.", ["state-change"]),
|
|
8094
|
-
mutation(["mission", "create"], "event.createMission", "Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives). Optional revealMessage (up to 2,000 characters) is shown only after submitting.", ["state-change"]),
|
|
8095
|
-
mutation(["mission", "update"], "event.updateMission", "Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.", ["state-change"]),
|
|
8116
|
+
mutation(["mission", "create"], "event.createMission", "Create a mission in a station. Fill-in-the-blank inputs support correctAnswer and acceptedAnswers (up to 50 alternatives), or config.numberRange {min,max} to accept any number in that inclusive range instead. Optional revealMessage (up to 2,000 characters) is shown only after submitting.", ["state-change"]),
|
|
8117
|
+
mutation(["mission", "update"], "event.updateMission", "Update a mission. Fill-in-the-blank inputs support acceptedAnswers; omit to preserve or pass [] to clear. Set config.numberRange {min,max} for a numeric range answer; omit config to preserve or pass null to return to text answers. Existing submissions are not re-graded. Edit revealMessage during live play; omit it to preserve or use an empty string to clear.", ["state-change"]),
|
|
8096
8118
|
mutation(["mission", "archive"], "event.archiveMission", "Archive a mission.", ["state-change", "delete"]),
|
|
8097
8119
|
mutation(["mission", "reorder"], "event.reorderMissions", "Reorder missions within a station.", ["state-change"]),
|
|
8098
8120
|
query(["team", "list"], "team.list", "List teams and their current members."),
|
|
@@ -8109,10 +8131,14 @@ var commands = [
|
|
|
8109
8131
|
mutation(["team", "set-play-mode"], "team.setPlayMode", "Change an event between individual and team play.", ["state-change"]),
|
|
8110
8132
|
mutation(["team", "set-submission-access"], "team.setSubmissionAccess", "Change who can submit missions in team play.", ["state-change"]),
|
|
8111
8133
|
mutation(["team", "set-station-routes"], "team.setStationRoutes", "Replace a team's linked station route and set its order.", ["state-change"]),
|
|
8112
|
-
mutation(["event", "set-gameplay"], "team.setGameplaySettings", "Set open or sequential progression, group routing, and per-mission skipping before play starts.", ["state-change"]),
|
|
8134
|
+
mutation(["event", "set-gameplay"], "team.setGameplaySettings", "Set open or sequential progression, group routing, and per-mission skipping before play starts. Station skipping and requireLocationOnSubmit stay editable live.", ["state-change"]),
|
|
8113
8135
|
query(["routing-group", "list"], "team.listRoutingGroups", "List an event's routing groups, ordered stations, and assigned teams."),
|
|
8114
8136
|
query(["routing-group", "release-history"], "team.listRoutingGroupReleaseHistory", "Show a routing group's five most recent release changes with actor, action and before/after UTC values."),
|
|
8115
8137
|
mutation(["routing-group", "release"], "team.updateRoutingGroupRelease", "Schedule (future releaseAt ISO timestamp with offset), CLEAR schedule, HOLD, RELEASE_SCHEDULED_HOLD (keep schedule), or RELEASE_NOW for a routing group. After a group starts, only HOLD and RELEASE_SCHEDULED_HOLD are accepted. Requires launchEvent permission.", ["state-change"]),
|
|
8138
|
+
query(["routing-group", "stagger-preview"], "team.previewRoutingGroupStagger", "Dry run: show each team's before/after start time for a routing-group STAGGER (firstReleaseAt + intervalMinutes in teamIds order), SHIFT (shiftMinutes, unstarted scheduled teams) or CLEAR (back to the group time). Writes nothing; returns blockers apply would refuse with."),
|
|
8139
|
+
mutation(["routing-group", "stagger"], "team.applyRoutingGroupStagger", "Apply the same STAGGER, SHIFT or CLEAR input as stagger-preview in one transaction (all teams or none). Started teams are never rescheduled. Requires launchEvent permission; allowed while LIVE.", ["state-change"]),
|
|
8140
|
+
mutation(["team", "release"], "team.updateTeamRelease", "Set one team's start inside its routing group: SCHEDULE (future releaseAt ISO timestamp with offset), CLEAR (use the group time), HOLD, RELEASE_HOLD, or RELEASE_NOW. A held group still holds every team. After a team starts, only HOLD and RELEASE_HOLD are accepted. Requires launchEvent permission.", ["state-change"]),
|
|
8141
|
+
query(["team", "release-history"], "team.listTeamReleaseHistory", "Show a team's five most recent start-time changes with actor, action and before/after UTC values."),
|
|
8116
8142
|
mutation(["routing-group", "create"], "team.createRoutingGroup", "Create a routing group within an event before play starts.", ["state-change"]),
|
|
8117
8143
|
mutation(["routing-group", "rename"], "team.renameRoutingGroup", "Rename an event's routing group before play starts.", ["state-change"]),
|
|
8118
8144
|
mutation(["routing-group", "delete"], "team.deleteRoutingGroup", "Delete an unassigned routing group before play starts.", ["state-change", "delete"]),
|
|
@@ -8172,6 +8198,7 @@ var commands = [
|
|
|
8172
8198
|
query(["player", "map"], "event.getPlayerMap", "Get the player event map."),
|
|
8173
8199
|
query(["player", "shell"], "event.getPlayerShell", "Get the player application shell."),
|
|
8174
8200
|
query(["player", "station"], "event.getPlayerStation", "Get a playable station."),
|
|
8201
|
+
query(["player", "station", "presence"], "event.getPlayerStationPresence", "Check whether a location is within a station's submit range when the event asks players to stay at the station to submit. Returns a state and rounded distance, never coordinates."),
|
|
8175
8202
|
query(["player", "events"], "event.listJoined", "List events joined by the current user.", { input: "none" }),
|
|
8176
8203
|
query(["player", "broadcasts"], "event.listPlayerBroadcasts", "List broadcasts visible to the current player."),
|
|
8177
8204
|
query(["player", "broadcast"], "event.getPlayerBroadcast", "Get one broadcast visible to the current player."),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@go-labs-sg/gosh",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "GOSH CLI for organizers and AI agents — manage organizations, events, teams, stations, missions, templates, and live operations through the GOSH API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@trpc/client": "^11.19.0",
|
|
22
|
-
"dotenv": "^18.0.
|
|
22
|
+
"dotenv": "^18.0.9",
|
|
23
23
|
"superjson": "^2.2.6"
|
|
24
24
|
},
|
|
25
25
|
"engines": {
|