@go-labs-sg/gosh 0.14.0 → 1.1.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 CHANGED
@@ -65,6 +65,17 @@ Before requesting approval, login verifies write/read/delete capability with a u
65
65
 
66
66
  See the [shared authentication contract](../../cli-auth/README.md) for recovery and verification limits.
67
67
 
68
+ ## Realtime watch reconciliation
69
+
70
+ `gosh player watch` and `gosh submission watch` continue to emit newline-delimited
71
+ JSON. On a v2-enabled server, process-local changes can arrive immediately;
72
+ cross-process changes are reconciled through the existing 15-second resync
73
+ cadence while a watch is active. A player `resync` message or submission
74
+ `resynced: true` message means fetch the current authorized state again, not that
75
+ a complete business-event replay was delivered. Command names, arguments and
76
+ permission checks are unchanged. Browser clients use scoped v2 subscriptions
77
+ instead of this compatibility cadence.
78
+
68
79
  ## Authentication
69
80
 
70
81
  ```bash
@@ -183,10 +194,14 @@ value in that template team's `order` field:
183
194
  Events default to `OPEN` progression, which keeps the existing open-play flow.
184
195
  Sequential progression starts each team or individual on an ordered station
185
196
  route. Group routing is available only for `TEAM` play mode. Create teams and
186
- assign them to routing groups before launching the event; sequential setup
187
- freezes when play starts. Grouped OPEN events lock only a started team's group
188
- assignment, a started group's route and the gameplay settings. A group shares its ordered station route, while each team keeps
189
- independent progress through that route.
197
+ assign them to routing groups before launching the event. Routes, stations
198
+ and missions stay editable after play starts: each edit re-syncs every started
199
+ team's saved progress in the same transaction. Played stations keep their
200
+ progress and order, while unplayed stations follow the new route. An edit that
201
+ would remove the station a team is in the middle of fails with a conflict and
202
+ changes nothing. A started team's group assignment, team creation, play mode
203
+ and progression settings stay locked. A group shares its ordered station route,
204
+ while each team keeps independent progress through that route.
190
205
 
191
206
  Configure gameplay, then manage the event's routing groups and their complete
192
207
  station lists:
@@ -281,7 +296,7 @@ gosh player mission skip \
281
296
  ```
282
297
 
283
298
  Player actions require event enrollment and the configured team submission
284
- permissions. A skipped mission is irreversible and earns zero points; it resolves only that mission,
299
+ permissions. A player cannot undo a skip: it earns zero points and resolves only that mission,
285
300
  preserves points from the station's other submitted missions, and advances the
286
301
  route once all station missions are submitted or skipped. The station timer
287
302
  runs from check-in/start through the final mission submission or skip. It
@@ -289,6 +304,34 @@ measures mission work only: travel between stations and staff review time are
289
304
  excluded. Existing leaderboard and results commands include the resulting
290
305
  timing information.
291
306
 
307
+ A host with `reviewSubmissions` can reopen one submitted or skipped mission for
308
+ a team (`teamId`) or individual player (`eventPlayerId`) on a fixed-order route
309
+ while the event is live:
310
+
311
+ ```bash
312
+ gosh mission reopen \
313
+ --input '{"eventId":"event-id","missionId":"mission-1","teamId":"team-1"}' \
314
+ --target team-1 \
315
+ --allow-state-change
316
+ ```
317
+
318
+ The earlier submission's points keep counting until the team submits again;
319
+ then only the new submission counts, up or down. Station times and the team's
320
+ finish time are kept, and a finished station accepts the reopened mission
321
+ until it is resolved. Pending submissions must be reviewed first, and a
322
+ reopened mission that still holds earlier points cannot be skipped.
323
+
324
+ When reviewing, pass the submission's `updatedAt` from the review queue as
325
+ `expectedUpdatedAt`. If the team resubmitted after you read it, the review is
326
+ refused with `CONFLICT` instead of scoring the new answer blind:
327
+
328
+ ```bash
329
+ gosh submission review \
330
+ --input '{"eventId":"event-id","organizationId":"org-id","submissionId":"submission-1","status":"APPROVED","expectedUpdatedAt":"2026-10-14T07:00:00.000Z"}' \
331
+ --target submission-1 \
332
+ --allow-state-change
333
+ ```
334
+
292
335
  ### Artwork requirements (no login required)
293
336
 
294
337
  Read the bundled upload policy before preparing station, mission, or branding artwork:
@@ -1622,6 +1622,16 @@
1622
1622
  "name"
1623
1623
  ]
1624
1624
  },
1625
+ {
1626
+ "effects": ["state-change"],
1627
+ "input": "json",
1628
+ "operation": "mutation",
1629
+ "path": ["mission", "reopen"],
1630
+ "procedure": "event.reopenMission",
1631
+ "requiresAuth": true,
1632
+ "summary": "Reopen a submitted or skipped mission for one team (teamId) or player (eventPlayerId) on a fixed-order route. Earlier points count until they resubmit; then only the new submission counts. Finish times are kept.",
1633
+ "targetKeys": ["teamId", "eventPlayerId", "missionId"]
1634
+ },
1625
1635
  {
1626
1636
  "effects": ["state-change"],
1627
1637
  "input": "json",
@@ -618,6 +618,14 @@ Review a mission submission.
618
618
  - Input: `--input '<json>'` required
619
619
  - Effects: state-change
620
620
 
621
+ ## `gosh mission reopen`
622
+
623
+ Reopen a submitted or skipped mission for one team (teamId) or player (eventPlayerId) on a fixed-order route. Earlier points count until they resubmit; then only the new submission counts. Finish times are kept.
624
+
625
+ - Authentication: browser-authenticated CLI session required
626
+ - Input: `--input '<json>'` required
627
+ - Effects: state-change
628
+
621
629
  ## `gosh results-share regenerate`
622
630
 
623
631
  Create a new results portal share token.
package/dist/index.js CHANGED
@@ -35,31 +35,31 @@ 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.6/node_modules/dotenv/dist/index.cjs
38
+ // ../../../node_modules/.bun/dotenv@18.0.8/node_modules/dotenv/dist/index.cjs
39
39
  var require_dist = __commonJS(function(exports, module) {
40
- var S = (e, o) => () => {
40
+ var j = (e, n) => () => {
41
41
  try {
42
- return o || e((o = { exports: {} }).exports, o), o.exports;
42
+ return n || e((n = { exports: {} }).exports, n), n.exports;
43
43
  } catch (t) {
44
- throw o = 0, t;
44
+ throw n = 0, t;
45
45
  }
46
46
  };
47
- var j = S((xe, U) => {
47
+ var k = j((xe, U) => {
48
48
  function G(e) {
49
49
  return typeof e == "string" ? !["false", "0", "no", "off", ""].includes(e.toLowerCase()) : !!e;
50
50
  }
51
- function X(e = process.env) {
52
- let o = {};
51
+ function Y(e = process.env) {
52
+ let n = {};
53
53
  for (let t of ["ENCODING", "PATH", "QUIET", "DEBUG", "OVERRIDE", "FAST"]) {
54
- let n = e[`DOTENV_${t}`] != null ? e[`DOTENV_${t}`] : e[`DOTENV_CONFIG_${t}`];
55
- n != null && (o[t.toLowerCase()] = t === "ENCODING" || t === "PATH" ? n : G(n));
54
+ let o = e[`DOTENV_${t}`] != null ? e[`DOTENV_${t}`] : e[`DOTENV_CONFIG_${t}`];
55
+ o != null && (n[t.toLowerCase()] = t === "ENCODING" || t === "PATH" ? o : G(o));
56
56
  }
57
- return o;
57
+ return n;
58
58
  }
59
- U.exports = { parseBoolean: G, optionsFromEnv: X };
59
+ U.exports = { parseBoolean: G, optionsFromEnv: Y };
60
60
  });
61
- var N = S((ye, x) => {
62
- var Y = __require("fs"), k = __require("path"), z = __require("os"), { URL: Z, fileURLToPath: ee } = __require("url"), { parseBoolean: $, optionsFromEnv: B } = j(), te = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg, b = new Uint8Array(256);
61
+ var N = j((ye, x) => {
62
+ var z = __require("fs"), I = __require("path"), Z = __require("os"), { URL: ee, fileURLToPath: te } = __require("url"), { parseBoolean: $, optionsFromEnv: B } = k(), re = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg, b = new Uint8Array(256);
63
63
  for (let e = 48;e <= 57; e++)
64
64
  b[e] = 1;
65
65
  for (let e = 65;e <= 90; e++)
@@ -69,92 +69,92 @@ var require_dist = __commonJS(function(exports, module) {
69
69
  b[45] = 1;
70
70
  b[46] = 1;
71
71
  b[95] = 1;
72
- function re(e) {
73
- let o = {}, t = e.toString();
72
+ function ne(e) {
73
+ let n = {}, t = e.toString();
74
74
  t = t.replace(/\r\n?/mg, `
75
75
  `);
76
- let n;
77
- for (;(n = te.exec(t)) != null; ) {
78
- let r = n[1], s = n[2] || "";
76
+ let o;
77
+ for (;(o = re.exec(t)) != null; ) {
78
+ let r = o[1], s = o[2] || "";
79
79
  s = s.trim();
80
80
  let i = s[0];
81
81
  s = s.replace(/^(['"`])([\s\S]*)\1$/mg, "$2"), i === '"' && (s = s.replace(/\\n/g, `
82
- `), s = s.replace(/\\r/g, "\r")), o[r] = s;
82
+ `), s = s.replace(/\\r/g, "\r")), n[r] = s;
83
83
  }
84
- return o;
84
+ return n;
85
85
  }
86
86
  function w(e) {
87
87
  return e <= 32 ? e === 32 || e >= 9 && e <= 13 : e >= 160 && (e === 160 || e === 5760 || e >= 8192 && e <= 8202 || e === 8232 || e === 8233 || e === 8239 || e === 8287 || e === 12288 || e === 65279);
88
88
  }
89
- function O(e) {
89
+ function q(e) {
90
90
  return e === 10 || e === 8232 || e === 8233;
91
91
  }
92
92
  function oe(e) {
93
- let o = {}, t = typeof e == "string" ? e : e.toString();
93
+ let n = {}, t = typeof e == "string" ? e : e.toString();
94
94
  t.indexOf("\r") !== -1 && (t = t.replace(/\r\n?/g, `
95
95
  `));
96
- let n = t.length, r = 0;
97
- for (;r < n; ) {
96
+ let o = t.length, r = 0;
97
+ for (;r < o; ) {
98
98
  let s = t.charCodeAt(r);
99
- for (;r < n && w(s); )
99
+ for (;r < o && w(s); )
100
100
  r++, s = t.charCodeAt(r);
101
- if (r >= n)
101
+ if (r >= o)
102
102
  break;
103
103
  if (s === 35) {
104
- for (;r < n && !O(t.charCodeAt(r)); )
104
+ for (;r < o && !q(t.charCodeAt(r)); )
105
105
  r++;
106
106
  continue;
107
107
  }
108
108
  let i = -1;
109
- if (s === 101 && r + 6 < n && t.charCodeAt(r + 1) === 120 && t.charCodeAt(r + 2) === 112 && t.charCodeAt(r + 3) === 111 && t.charCodeAt(r + 4) === 114 && t.charCodeAt(r + 5) === 116) {
109
+ if (s === 101 && r + 6 < o && t.charCodeAt(r + 1) === 120 && t.charCodeAt(r + 2) === 112 && t.charCodeAt(r + 3) === 111 && t.charCodeAt(r + 4) === 114 && t.charCodeAt(r + 5) === 116) {
110
110
  let v = t.charCodeAt(r + 6);
111
111
  if (w(v)) {
112
112
  let u = r + 7;
113
- for (;u < n && w(t.charCodeAt(u)); )
113
+ for (;u < o && w(t.charCodeAt(u)); )
114
114
  u++;
115
115
  b[t.charCodeAt(u)] && (i = r + 6, r = u);
116
116
  } else
117
117
  s = t.charCodeAt(r);
118
118
  }
119
119
  let l = r, d = 0;
120
- for (;r < n && (d = t.charCodeAt(r), b[d]); )
120
+ for (;r < o && (d = t.charCodeAt(r), b[d]); )
121
121
  r++;
122
122
  if (r === l) {
123
- for (;r < n && !O(t.charCodeAt(r)); )
123
+ for (;r < o && !q(t.charCodeAt(r)); )
124
124
  r++;
125
125
  continue;
126
126
  }
127
- let p = t.slice(l, r), f = r;
128
- if (r >= n && (d = 0), w(d))
127
+ let h = t.slice(l, r), f = r;
128
+ if (r >= o && (d = 0), w(d))
129
129
  do
130
- r++, d = r < n ? t.charCodeAt(r) : 0;
130
+ r++, d = r < o ? t.charCodeAt(r) : 0;
131
131
  while (w(d));
132
132
  if (d === 61)
133
133
  r++;
134
- else if (d === 58 && r === f && r + 1 < n && w(t.charCodeAt(r + 1)))
134
+ else if (d === 58 && r === f && r + 1 < o && w(t.charCodeAt(r + 1)))
135
135
  r += 2;
136
136
  else {
137
- for (r = i === -1 ? f : i;r < n && !O(t.charCodeAt(r)); )
137
+ for (r = i === -1 ? f : i;r < o && !q(t.charCodeAt(r)); )
138
138
  r++;
139
139
  continue;
140
140
  }
141
141
  let c = r, a = r;
142
- for (;a < n && w(t.charCodeAt(a)); )
142
+ for (;a < o && w(t.charCodeAt(a)); )
143
143
  a++;
144
- let g = t.charCodeAt(a), h, y = false;
144
+ let g = t.charCodeAt(a), p, y = false;
145
145
  if (g === 39 || g === 34 || g === 96) {
146
146
  let v = t[a], u = t.indexOf(v, a + 1), m = -1, C = -1;
147
147
  for (;u !== -1; ) {
148
- let q = t.charCodeAt(u - 1) === 92, E = u + 1;
149
- for (;E < n && !O(t.charCodeAt(E)) && w(t.charCodeAt(E)); )
148
+ let O = t.charCodeAt(u - 1) === 92, E = u + 1;
149
+ for (;E < o && !q(t.charCodeAt(E)) && w(t.charCodeAt(E)); )
150
150
  E++;
151
- if ((E === n || O(t.charCodeAt(E)) || t.charCodeAt(E) === 35) && (m = u, C = E), !q)
151
+ if ((E === o || q(t.charCodeAt(E)) || t.charCodeAt(E) === 35) && (m = u, C = E), !O)
152
152
  break;
153
153
  u = t.indexOf(v, u + 1);
154
154
  }
155
155
  if (m !== -1) {
156
- if (h = t.slice(a + 1, m), r = C, t.charCodeAt(r) === 35)
157
- for (;r < n && !O(t.charCodeAt(r)); )
156
+ if (p = t.slice(a + 1, m), r = C, t.charCodeAt(r) === 35)
157
+ for (;r < o && !q(t.charCodeAt(r)); )
158
158
  r++;
159
159
  y = true;
160
160
  }
@@ -162,9 +162,9 @@ var require_dist = __commonJS(function(exports, module) {
162
162
  if (!y) {
163
163
  let v = t.indexOf(`
164
164
  `, c);
165
- v === -1 && (v = n);
165
+ v === -1 && (v = o);
166
166
  let u;
167
- if (n < 4096)
167
+ if (o < 4096)
168
168
  u = t.indexOf("#", c), (u === -1 || u > v) && (u = v);
169
169
  else
170
170
  for (u = c;u < v && t.charCodeAt(u) !== 35; )
@@ -174,38 +174,41 @@ var require_dist = __commonJS(function(exports, module) {
174
174
  m++;
175
175
  for (;C > m && w(t.charCodeAt(C - 1)); )
176
176
  C--;
177
- let q = t.charCodeAt(m);
178
- if (C - m >= 2 && (q === 39 || q === 34 || q === 96) && t.charCodeAt(C - 1) === q ? h = t.slice(m + 1, C - 1) : h = t.slice(m, C), r = u, u < v)
179
- for (;r < n && !O(t.charCodeAt(r)); )
177
+ let O = t.charCodeAt(m);
178
+ if (p = t.slice(m, C), p.includes("\u2028") || p.includes("\u2029") ? p = p.replace(/^(['"`])([\s\S]*)\1$/mg, "$2") : C - m >= 2 && (O === 39 || O === 34 || O === 96) && t.charCodeAt(C - 1) === O && (p = t.slice(m + 1, C - 1)), r = u, u < v)
179
+ for (;r < o && !q(t.charCodeAt(r)); )
180
180
  r++;
181
181
  }
182
- g === 34 && (y || a < r) && h.indexOf("\\") !== -1 && (h = h.replace(/\\n/g, `
183
- `).replace(/\\r/g, "\r")), o[p] = h;
182
+ g === 34 && (y || a < r) && p.indexOf("\\") !== -1 && (p = p.replace(/\\n/g, `
183
+ `).replace(/\\r/g, "\r")), n[h] = p;
184
184
  }
185
- return o;
185
+ return n;
186
186
  }
187
- function ne(e, o) {
188
- return o && $(o.fast) ? oe(e) : re(e);
187
+ function se(e, n) {
188
+ return n && $(n.fast) ? oe(e) : ne(e);
189
189
  }
190
190
  function T(e) {
191
191
  console.log(`\u2506 ${e}`);
192
192
  }
193
- function se(e) {
193
+ function ie(e) {
194
194
  console.error(`\u25C7 ${e}`);
195
195
  }
196
196
  function V(e) {
197
- return e[0] === "~" ? k.join(z.homedir(), e.slice(1)) : e;
197
+ return e[0] === "~" ? I.join(Z.homedir(), e.slice(1)) : e;
198
198
  }
199
- function ie(e = {}) {
200
- return { ...B(), ...e };
199
+ function ce(e = {}) {
200
+ let n = { ...e };
201
+ for (let t of Object.keys(n))
202
+ n[t] === undefined && delete n[t];
203
+ return { ...B(), ...n };
201
204
  }
202
- function ce(e) {
203
- e = ie(e);
204
- let o = k.resolve(process.cwd(), ".env"), t = "utf8", n = process.env;
205
- e && e.processEnv != null && (n = e.processEnv);
205
+ function ae(e) {
206
+ e = ce(e);
207
+ let n = I.resolve(process.cwd(), ".env"), t = "utf8", o = process.env;
208
+ e && e.processEnv != null && (o = e.processEnv);
206
209
  let r = $(e && e.debug);
207
210
  e && e.encoding ? t = e.encoding : r && T("no encoding is specified (UTF-8 is used by default)");
208
- let s = [o];
211
+ let s = [n];
209
212
  if (e && e.path)
210
213
  if (!Array.isArray(e.path))
211
214
  s = [V(e.path)];
@@ -217,116 +220,116 @@ var require_dist = __commonJS(function(exports, module) {
217
220
  let i, l = {}, d = { fast: e.fast };
218
221
  for (let c of s)
219
222
  try {
220
- let a = A.parse(Y.readFileSync(c, { encoding: t }), d);
223
+ let a = A.parse(z.readFileSync(c, { encoding: t }), d);
221
224
  A.populate(l, a, e);
222
225
  } catch (a) {
223
226
  r && T(`failed to load ${c} ${a.message}`), i = a;
224
227
  }
225
- let p = A.populate(n, l, e), f = $(Object.prototype.hasOwnProperty.call(e, "quiet") ? e.quiet : B(n).quiet);
228
+ let h = A.populate(o, l, e), f = $(Object.prototype.hasOwnProperty.call(e, "quiet") ? e.quiet : B(o).quiet);
226
229
  if (r || !f) {
227
- let c = Object.keys(p).length, a = [];
230
+ let c = Object.keys(h).length, a = [];
228
231
  for (let g of s)
229
232
  try {
230
- let h = k.relative(process.cwd(), g instanceof Z ? ee(g) : g);
231
- a.push(h);
232
- } catch (h) {
233
- r && T(`failed to load ${g} ${h.message}`), i = h;
233
+ let p = I.relative(process.cwd(), g instanceof ee ? te(g) : g);
234
+ a.push(p);
235
+ } catch (p) {
236
+ r && T(`failed to load ${g} ${p.message}`), i = p;
234
237
  }
235
- se(`injected env (${c}) from ${a.join(",")}`);
238
+ ie(`injected env (${c}) from ${a.join(",")}`);
236
239
  }
237
240
  return i ? { parsed: l, error: i } : { parsed: l };
238
241
  }
239
- function ae(e) {
242
+ function le(e) {
240
243
  return A.configDotenv(e);
241
244
  }
242
- function le(e, o, t = {}) {
243
- let n = $(t && t.debug), r = $(t && t.override), s = {};
244
- if (e === null || typeof e != "object" || o === null || typeof o != "object") {
245
+ function fe(e, n, t = {}) {
246
+ let o = $(t && t.debug), r = $(t && t.override), s = {};
247
+ if (e === null || typeof e != "object" || n === null || typeof n != "object") {
245
248
  let i = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
246
249
  throw i.code = "OBJECT_REQUIRED", i;
247
250
  }
248
- for (let i of Object.keys(o))
249
- Object.prototype.hasOwnProperty.call(e, i) ? (r === true && (e[i] = o[i], s[i] = o[i]), n && T(r === true ? `"${i}" is already defined and WAS overwritten` : `"${i}" is already defined and was NOT overwritten`)) : (e[i] = o[i], s[i] = o[i]);
251
+ for (let i of Object.keys(n))
252
+ Object.prototype.hasOwnProperty.call(e, i) ? (r === true && (e[i] = n[i], s[i] = n[i]), o && T(r === true ? `"${i}" is already defined and WAS overwritten` : `"${i}" is already defined and was NOT overwritten`)) : (e[i] = n[i], s[i] = n[i]);
250
253
  return s;
251
254
  }
252
- var A = { configDotenv: ce, config: ae, parse: ne, populate: le };
255
+ var A = { configDotenv: ae, config: le, parse: se, populate: fe };
253
256
  x.exports.configDotenv = A.configDotenv;
254
257
  x.exports.config = A.config;
255
258
  x.exports.parse = A.parse;
256
259
  x.exports.populate = A.populate;
257
260
  x.exports = A;
258
261
  });
259
- var M = S((Te, W) => {
260
- var _ = __require("child_process"), fe = __require("fs"), L = __require("path");
261
- function ue(e) {
262
- let o = ['"'], t = 0;
263
- for (let n of e) {
264
- if (n === "\\") {
262
+ var M = j((Te, W) => {
263
+ var _ = __require("child_process"), ue = __require("fs"), L = __require("path");
264
+ function de(e) {
265
+ let n = ['"'], t = 0;
266
+ for (let o of e) {
267
+ if (o === "\\") {
265
268
  t++;
266
269
  continue;
267
270
  }
268
- n === '"' ? o.push("\\".repeat(t * 2 + 1), '"') : o.push("\\".repeat(t), n), t = 0;
271
+ o === '"' ? n.push("\\".repeat(t * 2 + 1), '"') : n.push("\\".repeat(t), o), t = 0;
269
272
  }
270
- return o.push("\\".repeat(t * 2), '"'), o.join("");
273
+ return n.push("\\".repeat(t * 2), '"'), n.join("");
271
274
  }
272
- function H(e, o = 1) {
273
- for (let t = 0;t < o; t++) {
274
- let n = [];
275
+ function H(e, n = 1) {
276
+ for (let t = 0;t < n; t++) {
277
+ let o = [];
275
278
  for (let r of e) {
276
279
  let s = r.charCodeAt(0), i = s >= 48 && s <= 57 || s >= 65 && s <= 90 || s >= 97 && s <= 122, l = "\\/:._-".includes(r);
277
- !i && !l && s < 128 && n.push("^"), n.push(r);
280
+ !i && !l && s < 128 && o.push("^"), o.push(r);
278
281
  }
279
- e = n.join("");
282
+ e = o.join("");
280
283
  }
281
284
  return e;
282
285
  }
283
- function P(e, o) {
284
- let t = Object.keys(e).reverse().find((n) => n.toUpperCase() === o);
286
+ function P(e, n) {
287
+ let t = Object.keys(e).reverse().find((o) => o.toUpperCase() === n);
285
288
  return t === undefined ? undefined : e[t];
286
289
  }
287
- function de(e, o, t) {
288
- let n = (P(o, "PATHEXT") || ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean), s = n.some((l) => e.toLowerCase().endsWith(l.toLowerCase())) ? ["", ...n] : [...n, ""], i = /[\\/]/.test(e) ? [t] : [t, ...(P(o, "PATH") || "").split(";")];
290
+ function pe(e, n, t) {
291
+ let o = (P(n, "PATHEXT") || ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean), s = o.some((l) => e.toLowerCase().endsWith(l.toLowerCase())) ? ["", ...o] : [...o, ""], i = /[\\/]/.test(e) ? [t] : [t, ...(P(n, "PATH") || "").split(";")];
289
292
  for (let l of i)
290
293
  for (let d of s) {
291
- let p = L.resolve(t, l.replace(/^"|"$/g, ""), e + d);
294
+ let h = L.resolve(t, l.replace(/^"|"$/g, ""), e + d);
292
295
  try {
293
- if (fe.statSync(p).isFile())
294
- return p;
296
+ if (ue.statSync(h).isFile())
297
+ return h;
295
298
  } catch {}
296
299
  }
297
300
  }
298
- function pe(e, o, t) {
301
+ function he(e, n, t) {
299
302
  if (process.platform !== "win32")
300
- return _.spawn(e, o, t);
301
- let n = t.env || process.env, r = de(e, n, t.cwd || process.cwd());
303
+ return _.spawn(e, n, t);
304
+ let o = t.env || process.env, r = pe(e, o, t.cwd || process.cwd());
302
305
  if (r && /\.(?:exe|com)$/i.test(r))
303
- return _.spawn(r, o, t);
306
+ return _.spawn(r, n, t);
304
307
  let s = /\.(?:bat|cmd)$/i.test(r || e), i = [H(L.normalize(r || e))];
305
- for (let d of o)
306
- i.push(H(ue(d), s ? 2 : 1));
308
+ for (let d of n)
309
+ i.push(H(de(d), s ? 2 : 1));
307
310
  let l = i.join(" ");
308
- return _.spawn(P(n, "COMSPEC") || "cmd.exe", ["/d", "/v:off", "/s", "/c", `"${l}"`], { ...t, windowsVerbatimArguments: true });
311
+ return _.spawn(P(o, "COMSPEC") || "cmd.exe", ["/d", "/v:off", "/s", "/c", `"${l}"`], { ...t, windowsVerbatimArguments: true });
309
312
  }
310
- W.exports = pe;
313
+ W.exports = he;
311
314
  });
312
- var K = S(($e, F) => {
313
- var he = __require("fs"), ge = __require("os"), Q = __require("path"), me = __require("child_process"), ve = M(), R = N(), { optionsFromEnv: Ce } = j();
315
+ var X = j(($e, F) => {
316
+ var ge = __require("fs"), me = __require("os"), Q = __require("path"), ve = __require("child_process"), Ce = M(), R = N(), { optionsFromEnv: J } = k();
314
317
  function D() {
315
318
  console.log(["Usage: dotenv run [--help] [-q|--quiet] [--debug] [--override] [--fast] [-f|--file <paths>] [--] <command> [args...]", "", "Run a command with environment variables from a .env file.", "Place dotenv options before the command; all following arguments go to the command.", "", "Options:", " -f, --file <paths> .env paths, comma-separated or repeated (default: .env)", " -q, --quiet suppress the injected env message", " --debug enable debug logging", " --override override existing environment variables", " --fast use the faster character-scanner parser", "", "Environment variables (DOTENV_CONFIG_* names remain as fallbacks):", " DOTENV_PATH, DOTENV_ENCODING, DOTENV_QUIET,", " DOTENV_DEBUG, DOTENV_OVERRIDE,", " DOTENV_FAST"].join(`
316
319
  `));
317
320
  }
318
321
  function we(e) {
319
- let o = [], t = false, n, r, s, i, l = -1;
320
- for (let p = 0;p < e.length; p++) {
321
- let f = e[p];
322
+ let n = [], t = false, o, r, s, i, l = -1;
323
+ for (let h = 0;h < e.length; h++) {
324
+ let f = e[h];
322
325
  if (f === "--") {
323
- l = p + 1;
326
+ l = h + 1;
324
327
  break;
325
328
  }
326
329
  if (f === "--help" || f === "-h")
327
330
  return { help: true };
328
331
  if (f === "--quiet" || f === "-q") {
329
- n = true;
332
+ o = true;
330
333
  continue;
331
334
  }
332
335
  if (f === "--debug") {
@@ -342,51 +345,51 @@ var require_dist = __commonJS(function(exports, module) {
342
345
  continue;
343
346
  }
344
347
  if (f === "-f" || f === "--file" || f.startsWith("-f=") || f.startsWith("--file=")) {
345
- let c = f.indexOf("="), a = c === -1 ? f : f.slice(0, c), g = c === -1 ? e[++p] : f.slice(c + 1);
348
+ let c = f.indexOf("="), a = c === -1 ? f : f.slice(0, c), g = c === -1 ? e[++h] : f.slice(c + 1);
346
349
  if (!g || g === "--")
347
350
  return { error: `${a} requires a path` };
348
- let h = g.split(",").map((y) => y.trim()).filter(Boolean);
349
- if (h.length === 0)
351
+ let p = g.split(",").map((y) => y.trim()).filter(Boolean);
352
+ if (p.length === 0)
350
353
  return { error: `${a} requires a path` };
351
- o.push(...h), t = true;
354
+ n.push(...p), t = true;
352
355
  continue;
353
356
  }
354
357
  if (f.startsWith("-"))
355
358
  return { error: `unknown option: ${f}` };
356
- l = p;
359
+ l = h;
357
360
  break;
358
361
  }
359
362
  let d = l === -1 ? [] : e.slice(l);
360
- return { paths: o, pathSet: t, quiet: n, debug: r, override: s, fast: i, command: d };
363
+ return { paths: n, pathSet: t, quiet: o, debug: r, override: s, fast: i, command: d };
361
364
  }
362
365
  function Ae(e) {
363
- return e[0] === "~" ? Q.join(ge.homedir(), e.slice(1)) : e;
366
+ return e[0] === "~" ? Q.join(me.homedir(), e.slice(1)) : e;
364
367
  }
365
368
  function Ee(e) {
366
- let o = Ce(), t = { encoding: o.encoding || "utf8", quiet: o.quiet === true, debug: o.debug === true, override: o.override === true, fast: o.fast === true, paths: [".env"], defaultPath: true };
367
- return o.path != null && (t.paths = [o.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;
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 != null && (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;
368
371
  }
369
372
  function be(e) {
370
- let o = {}, t = [], n = { override: e.override, debug: e.debug };
373
+ let n = {}, t = [], o = { override: e.override, debug: e.debug };
371
374
  for (let s of e.paths) {
372
375
  let i = Q.resolve(process.cwd(), Ae(s));
373
376
  try {
374
- let l = R.parse(he.readFileSync(i, { encoding: e.encoding }), { fast: e.fast });
375
- R.populate(o, l, n), t.push(s);
377
+ let l = R.parse(ge.readFileSync(i, { encoding: e.encoding }), { fast: e.fast });
378
+ R.populate(n, l, o), t.push(s);
376
379
  } catch (l) {
377
380
  if (e.debug && console.log(`\u2506 failed to load ${s} ${l.message}`), !(e.defaultPath && l.code === "ENOENT"))
378
381
  throw l;
379
382
  }
380
383
  }
381
- return { injected: R.populate(process.env, o, n), loadedPaths: t };
384
+ return { injected: R.populate(process.env, n, o), loadedPaths: t };
382
385
  }
383
- function J(e) {
384
- let o = e[0];
385
- if (o === "--help" || o === "-h") {
386
+ function K(e) {
387
+ let n = e[0];
388
+ if (n === "--help" || n === "-h") {
386
389
  D();
387
390
  return;
388
391
  }
389
- if (o !== "run") {
392
+ if (n !== "run") {
390
393
  D(), process.exitCode = 1;
391
394
  return;
392
395
  }
@@ -403,22 +406,22 @@ var require_dist = __commonJS(function(exports, module) {
403
406
  D(), process.exitCode = 1;
404
407
  return;
405
408
  }
406
- let n = Ee(t);
409
+ let o = Ee(t);
407
410
  try {
408
- let c = be(n);
409
- if (!n.quiet) {
410
- let a = `\u25C7 injected env (${Object.keys(c.injected).length})`;
411
- c.loadedPaths.length > 0 && (a += ` from ${c.loadedPaths.join(", ")}`), console.error(a);
411
+ let c = be(o);
412
+ if (!(o.quiet == null ? J().quiet : o.quiet)) {
413
+ let g = `\u25C7 injected env (${Object.keys(c.injected).length})`;
414
+ c.loadedPaths.length > 0 && (g += ` from ${c.loadedPaths.join(", ")}`), console.error(g);
412
415
  }
413
416
  } catch (c) {
414
417
  console.error(`dotenv: ${c.message}`), process.exitCode = 1;
415
418
  return;
416
419
  }
417
- let r = !!process.stdin.isTTY, s = process.platform !== "win32" && !r, i = ve(t.command[0], t.command.slice(1), { stdio: "inherit", detached: s }), l = new Map, d = 0;
418
- function p(c) {
420
+ let r = !!process.stdin.isTTY, s = process.platform !== "win32" && !r, i = Ce(t.command[0], t.command.slice(1), { stdio: "inherit", detached: s }), l = new Map, d = 0;
421
+ function h(c) {
419
422
  if (!(!i.pid || i.exitCode !== null || i.signalCode !== null)) {
420
423
  if (process.platform === "win32") {
421
- me.spawnSync("taskkill", ["/pid", String(i.pid), "/T", "/F"], { stdio: "ignore" });
424
+ ve.spawnSync("taskkill", ["/pid", String(i.pid), "/T", "/F"], { stdio: "ignore" });
422
425
  return;
423
426
  }
424
427
  try {
@@ -439,11 +442,11 @@ var require_dist = __commonJS(function(exports, module) {
439
442
  if (d++, r && process.platform !== "win32" && d === 1)
440
443
  return;
441
444
  if (d > 1) {
442
- p(d === 2 ? "SIGTERM" : "SIGKILL");
445
+ h(d === 2 ? "SIGTERM" : "SIGKILL");
443
446
  return;
444
447
  }
445
448
  }
446
- p(c);
449
+ h(c);
447
450
  };
448
451
  l.set(c, a), process.on(c, a);
449
452
  }
@@ -453,16 +456,16 @@ var require_dist = __commonJS(function(exports, module) {
453
456
  f(), typeof c == "number" ? process.exit(c) : (setInterval(() => {}, 1000), process.kill(process.pid, a));
454
457
  });
455
458
  }
456
- F.exports = J;
457
- F === __require.main && J(process.argv.slice(2));
459
+ F.exports = K;
460
+ F === __require.main && K(process.argv.slice(2));
458
461
  });
459
- var I = N();
460
- var Oe = K();
461
- module.exports = I;
462
- module.exports.config = I.config;
463
- module.exports.configDotenv = I.configDotenv;
464
- module.exports.parse = I.parse;
465
- module.exports.populate = I.populate;
462
+ var S = N();
463
+ var qe = X();
464
+ module.exports = S;
465
+ module.exports.config = S.config;
466
+ module.exports.configDotenv = S.configDotenv;
467
+ module.exports.parse = S.parse;
468
+ module.exports.populate = S.populate;
466
469
  });
467
470
 
468
471
  // src/load-env.ts
@@ -512,7 +515,7 @@ var createPkcePair = () => {
512
515
  verifier
513
516
  };
514
517
  };
515
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/util.js
518
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/util.js
516
519
  function getEnumValues(entries) {
517
520
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
518
521
  const values = Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -858,6 +861,18 @@ function prefixIssues(path, issues) {
858
861
  function unwrapMessage(message) {
859
862
  return typeof message === "string" ? message : message?.message;
860
863
  }
864
+ function sizeCaps(defChecks) {
865
+ const caps = [];
866
+ for (const ch of defChecks ?? []) {
867
+ const d = ch._zod.def;
868
+ if (!/_(length|size)$|_equals$/.test(d.check))
869
+ break;
870
+ const max = d.maximum ?? d.length ?? d.size;
871
+ if (max >= 0)
872
+ caps.push([max, ch]);
873
+ }
874
+ return caps;
875
+ }
861
876
  function attachSchema(issues, start, inst) {
862
877
  var _a;
863
878
  for (let i = start;i < issues.length; i++) {
@@ -1055,7 +1070,7 @@ function constantCatch(value) {
1055
1070
  return fn;
1056
1071
  }
1057
1072
 
1058
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/core.js
1073
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/core.js
1059
1074
  var _a;
1060
1075
  var _zodDesc = { value: undefined, enumerable: false };
1061
1076
  var _E = "captureStackTrace" in Error ? Error : null;
@@ -1173,7 +1188,7 @@ function config2(newConfig) {
1173
1188
  Object.assign(globalConfig, newConfig);
1174
1189
  return globalConfig;
1175
1190
  }
1176
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/errors.js
1191
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/errors.js
1177
1192
  function _getMessage() {
1178
1193
  const internals = this._zod;
1179
1194
  internals.message ?? (internals.message = JSON.stringify(internals.def, jsonStringifyReplacer, 2));
@@ -1288,7 +1303,7 @@ function formatError(error, mapper = (issue) => issue.message) {
1288
1303
  return fieldErrors;
1289
1304
  }
1290
1305
 
1291
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/parse.js
1306
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/parse.js
1292
1307
  function finalizeParams(callee, params) {
1293
1308
  return { callee: params?.callee ?? callee, Err: params?.Err };
1294
1309
  }
@@ -1435,7 +1450,7 @@ var _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {
1435
1450
  var _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
1436
1451
  return _safeParseAsync(_Err)(schema, value, _ctx);
1437
1452
  };
1438
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/regexes.js
1453
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/regexes.js
1439
1454
  var cuid = /^[cC][0-9a-z]{6,}$/;
1440
1455
  var cuid2 = /^[0-9a-z]+$/;
1441
1456
  var ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;
@@ -1493,7 +1508,7 @@ var _null = /^null$/i;
1493
1508
  var lowercase = /^[^A-Z]*$/;
1494
1509
  var uppercase = /^[^a-z]*$/;
1495
1510
 
1496
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/checks.js
1511
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/checks.js
1497
1512
  var $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
1498
1513
  var _a;
1499
1514
  inst._zod ?? (inst._zod = {});
@@ -1809,7 +1824,7 @@ var $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (ins
1809
1824
  };
1810
1825
  });
1811
1826
 
1812
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/doc.js
1827
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/doc.js
1813
1828
  class Doc {
1814
1829
  constructor(args = [], closed = {}) {
1815
1830
  this.content = [];
@@ -1851,14 +1866,14 @@ ${content.join(`
1851
1866
  }
1852
1867
  }
1853
1868
 
1854
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/versions.js
1869
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/versions.js
1855
1870
  var version = {
1856
1871
  major: 4,
1857
1872
  minor: 6,
1858
- patch: 5
1873
+ patch: 7
1859
1874
  };
1860
1875
 
1861
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/schemas.js
1876
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/schemas.js
1862
1877
  var $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
1863
1878
  var _a;
1864
1879
  inst ?? (inst = {});
@@ -2424,6 +2439,29 @@ var $ZodNever = /* @__PURE__ */ $constructor("$ZodNever", (inst, def) => {
2424
2439
  return payload;
2425
2440
  };
2426
2441
  });
2442
+ function capSize(inst, size) {
2443
+ const caps = sizeCaps(inst._zod.def.checks);
2444
+ if (!caps.length)
2445
+ return;
2446
+ const cap = Math.min(...caps.map((c) => c[0]));
2447
+ const parse = inst._zod.parse;
2448
+ inst._zod.parse = (payload, ctx) => {
2449
+ const n = size(payload.value);
2450
+ if (n > cap && !ctx?.skipChecks && ctx?.direction !== "backward") {
2451
+ for (const [max, ch] of sizeCaps(inst._zod.def.checks)) {
2452
+ if (n > max && ch._zod.def.when(payload)) {
2453
+ const start = payload.issues.length;
2454
+ ch._zod.check(payload);
2455
+ payload.issues[start].continue = false;
2456
+ attachSchema(payload.issues, start, inst);
2457
+ return payload;
2458
+ }
2459
+ }
2460
+ }
2461
+ return parse(payload, ctx);
2462
+ };
2463
+ }
2464
+ var arraySize = (input) => Array.isArray(input) ? input.length : -1;
2427
2465
  function handleArrayResult(result, final, index) {
2428
2466
  if (result.issues.length) {
2429
2467
  final.issues.push(...prefixIssues(index, result.issues));
@@ -2467,6 +2505,7 @@ var $ZodArray = /* @__PURE__ */ $constructor("$ZodArray", (inst, def) => {
2467
2505
  }
2468
2506
  return payload;
2469
2507
  };
2508
+ capSize(inst, arraySize);
2470
2509
  });
2471
2510
  function handlePropertyResult(result, final, key, input, optin, optout) {
2472
2511
  const isPresent = key in input;
@@ -3249,7 +3288,7 @@ function handleRefineResult(result, payload, input, inst) {
3249
3288
  payload.issues.push(issue(_iss));
3250
3289
  }
3251
3290
  }
3252
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/memoizer.js
3291
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/memoizer.js
3253
3292
  class $ZodCyclicError extends Error {
3254
3293
  constructor() {
3255
3294
  super(`Cannot parse a reference cycle that closes through a transform`);
@@ -3518,7 +3557,7 @@ function isBackEdge(ctx, value) {
3518
3557
  const backEdges = ctx[STATE]?.backEdges;
3519
3558
  return backEdges !== undefined && isRef(value) && backEdges.has(value);
3520
3559
  }
3521
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/locales/en.js
3560
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/locales/en.js
3522
3561
  var error = () => {
3523
3562
  const Sizable = {
3524
3563
  string: { unit: "characters", verb: "to have" },
@@ -3640,7 +3679,7 @@ function en_default() {
3640
3679
  localeError: error()
3641
3680
  };
3642
3681
  }
3643
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/registries.js
3682
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/registries.js
3644
3683
  var _a2;
3645
3684
  class $ZodRegistry {
3646
3685
  constructor() {
@@ -3687,7 +3726,7 @@ function registry() {
3687
3726
  }
3688
3727
  (_a2 = globalThis).__zod_globalRegistry ?? (_a2.__zod_globalRegistry = registry());
3689
3728
  var globalRegistry = globalThis.__zod_globalRegistry;
3690
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/api.js
3729
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/api.js
3691
3730
  function snapshotChecks(def) {
3692
3731
  if (def.checks)
3693
3732
  def.checks = [...def.checks];
@@ -4141,7 +4180,7 @@ function _check(fn, params) {
4141
4180
  ch._zod.check = fn;
4142
4181
  return ch;
4143
4182
  }
4144
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/to-json-schema.js
4183
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/to-json-schema.js
4145
4184
  function assignProps(target, ...sources) {
4146
4185
  for (const source of sources) {
4147
4186
  for (const key of Reflect.ownKeys(source)) {
@@ -4664,7 +4703,7 @@ var createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) =
4664
4703
  extractDefs(ctx, schema);
4665
4704
  return finalize(ctx, schema);
4666
4705
  };
4667
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/json-schema-processors.js
4706
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/core/json-schema-processors.js
4668
4707
  var narrowMin = (agg, key, value) => {
4669
4708
  if (agg[key] === undefined || value > agg[key])
4670
4709
  agg[key] = value;
@@ -5093,7 +5132,7 @@ var optionalProcessor = (schema, ctx, _json, params) => {
5093
5132
  const seen = ctx.seen.get(schema);
5094
5133
  seen.ref = def.innerType;
5095
5134
  };
5096
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/classic/errors.js
5135
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/classic/errors.js
5097
5136
  var _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);
5098
5137
  function _lazyMethod(proto, key, make) {
5099
5138
  Object.defineProperty(proto, key, {
@@ -5138,7 +5177,7 @@ var ZodRealError = /* @__PURE__ */ $constructor("ZodError", initializer2, undefi
5138
5177
  Parent: Error
5139
5178
  });
5140
5179
 
5141
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/classic/parse.js
5180
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/classic/parse.js
5142
5181
  var parse2 = /* @__PURE__ */ _parse(ZodRealError);
5143
5182
  var parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
5144
5183
  var safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -5152,7 +5191,7 @@ var safeDecode = /* @__PURE__ */ _safeDecode(ZodRealError);
5152
5191
  var safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
5153
5192
  var safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
5154
5193
 
5155
- // ../../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/classic/schemas.js
5194
+ // ../../../node_modules/.bun/zod@4.6.7/node_modules/zod/v4/classic/schemas.js
5156
5195
  function _ensureDefaultLocale() {
5157
5196
  if (!globalConfig.localeError)
5158
5197
  config2(en_default());
@@ -7537,6 +7576,10 @@ var typedOperations = {
7537
7576
  kind: "mutation",
7538
7577
  invoke: (client, input) => client.event.reviewSubmission.mutate(input)
7539
7578
  },
7579
+ "event.reopenMission": {
7580
+ kind: "mutation",
7581
+ invoke: (client, input) => client.event.reopenMission.mutate(input)
7582
+ },
7540
7583
  "event.regenerateResultsPortalShare": {
7541
7584
  kind: "mutation",
7542
7585
  invoke: (client, input) => client.event.regenerateResultsPortalShare.mutate(input)
@@ -7882,6 +7925,7 @@ var mutationTargetKeys = {
7882
7925
  "team.assignTeamRoutingGroup": ["teamId"],
7883
7926
  "event.startStation": ["stationId"],
7884
7927
  "event.skipMission": ["missionId"],
7928
+ "event.reopenMission": ["teamId", "eventPlayerId", "missionId"],
7885
7929
  "event.create": ["organizationId", "name"],
7886
7930
  "event.createFromTemplate": ["organizationId", "templateId"],
7887
7931
  "event.requestLoginEmailOtp": ["eventId", "email"],
@@ -8018,6 +8062,7 @@ var commands = [
8018
8062
  mutation(["reward", "update"], "event.updateReward", "Update an event reward.", ["state-change"]),
8019
8063
  mutation(["score", "adjust"], "event.createScoreAdjustment", "Create a manual score adjustment.", ["state-change"]),
8020
8064
  mutation(["submission", "review"], "event.reviewSubmission", "Review a mission submission.", ["state-change"]),
8065
+ mutation(["mission", "reopen"], "event.reopenMission", "Reopen a submitted or skipped mission for one team (teamId) or player (eventPlayerId) on a fixed-order route. Earlier points count until they resubmit; then only the new submission counts. Finish times are kept.", ["state-change"]),
8021
8066
  mutation(["results-share", "regenerate"], "event.regenerateResultsPortalShare", "Create a new results portal share token.", ["state-change"]),
8022
8067
  mutation(["results-share", "revoke"], "event.revokeResultsPortalShare", "Revoke the current results portal share token.", ["state-change", "delete"]),
8023
8068
  query(["event", "analytics-shell"], "event.getAdminAnalyticsShell", "Get the organizer analytics shell."),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@go-labs-sg/gosh",
3
- "version": "0.14.0",
3
+ "version": "1.1.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.6",
22
+ "dotenv": "^18.0.8",
23
23
  "superjson": "^2.2.6"
24
24
  },
25
25
  "engines": {