@claudinite/cli 1.61009.3 → 1.61011.2

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/launch CHANGED
@@ -19,11 +19,11 @@
19
19
  # blocks the stop, and the next stop attempt hits it again, in a loop.
20
20
  #
21
21
  # Bootstrap: the @claudinite/cli packages carry this file as their bin, so
22
- # `npx --yes @claudinite/cli init --packs ...` runs it from the package
23
- # npx unpacked, through a symlink. Run with init and no settings file beside
24
- # it, it takes the version and the binary's hash from the package's own
25
- # manifest.json, fetches and checks the binary as above, caches it with the
26
- # manifest and manifest.sig.json, and execs cn init, which verifies that
22
+ # `npx --yes @claudinite/cli adopt <packs>` runs it from the package
23
+ # npx unpacked, through a symlink. Run with adopt in a repository holding no
24
+ # settings file (or with the retired init), it takes the version and the
25
+ # binary's hash from the package's own manifest.json, fetches and checks the binary as above, caches it with the
26
+ # manifest and manifest.sig.json, and execs cn adopt, which verifies that
27
27
  # signature before it writes anything. Windows is not covered: npm's shim
28
28
  # for a sh script there is the desktop work.
29
29
  # Any other command run through that bin runs the member's own pin, the
@@ -93,13 +93,41 @@ unreachable() {
93
93
  esac
94
94
  }
95
95
 
96
- matches() {
97
- printf '%s\n' "$1" | grep -Eqx "$2"
96
+ # The shapes a value must have, by shell patterns alone: the launcher runs
97
+ # once per session and per workflow step, and each tool it starts costs a
98
+ # process.
99
+ digits() {
100
+ case $1 in '' | *[!0-9]*) return 1 ;; esac
101
+ }
102
+ is_version() {
103
+ case $1 in *.*.*) ;; *) return 1 ;; esac
104
+ set -- "${1%%.*}" "${1#*.}"
105
+ set -- "$1" "${2%%.*}" "${2#*.}"
106
+ digits "$1" && digits "$2" && digits "$3"
107
+ }
108
+ is_package() {
109
+ case $1 in @claudinite/cli | @claudinite/cli-rc) ;; *) return 1 ;; esac
110
+ }
111
+ is_pin() {
112
+ case $1 in sha512-*==) ;; *) return 1 ;; esac
113
+ set -- "${1#sha512-}"
114
+ set -- "${1%==}"
115
+ [ "${#1}" -eq 86 ] || return 1
116
+ case $1 in *[!A-Za-z0-9+/]*) return 1 ;; esac
117
+ }
118
+
119
+ # dir_of PATH sets dir to PATH's folder, as dirname would.
120
+ dir_of() {
121
+ case $1 in
122
+ */*) dir=${1%/*}; [ -n "$dir" ] || dir=/ ;;
123
+ *) dir=. ;;
124
+ esac
98
125
  }
99
126
 
100
127
  # Step 1: the pin, from exactly one settings file.
101
128
 
102
- here=$(cd "$(dirname "$0")" && pwd) || refuse "cannot locate the .claudinite folder"
129
+ dir_of "$0"
130
+ here=$(cd "$dir" && pwd) || refuse "cannot locate the .claudinite folder"
103
131
 
104
132
  # Run as the npm package's bin, through the symlink npm made.
105
133
  self=$0
@@ -107,10 +135,11 @@ while [ -L "$self" ]; do
107
135
  link=$(readlink "$self") || break
108
136
  case $link in
109
137
  /*) self=$link ;;
110
- *) self=$(dirname "$self")/$link ;;
138
+ *) dir_of "$self"; self=$dir/$link ;;
111
139
  esac
112
140
  done
113
- pkgdir=$(cd "$(dirname "$self")" && pwd) || refuse "cannot locate the launcher's folder"
141
+ dir_of "$self"
142
+ pkgdir=$(cd "$dir" && pwd) || refuse "cannot locate the launcher's folder"
114
143
  bootstrap=
115
144
  if [ -f "$pkgdir/manifest.json" ] && [ -f "$pkgdir/package.json" ]; then
116
145
  if [ "${1:-}" = init ]; then
@@ -131,6 +160,9 @@ if [ -f "$pkgdir/manifest.json" ] && [ -f "$pkgdir/package.json" ]; then
131
160
  esac
132
161
  done
133
162
  here=$(cd "$repo" && pwd)/.claudinite || refuse "cannot locate the repository $repo"
163
+ if [ "${1:-}" = adopt ] && [ ! -f "$here/settings.yaml" ] && [ ! -f "$here/settings.toml" ] && [ ! -f "$here/settings.json" ]; then
164
+ bootstrap=1
165
+ fi
134
166
  fi
135
167
  fi
136
168
 
@@ -145,37 +177,82 @@ done
145
177
 
146
178
  if [ -n "$bootstrap" ]; then
147
179
  settings=$pkgdir/manifest.json
148
- [ -f "$pkgdir/manifest.sig.json" ] || refuse "$pkgdir holds no manifest.sig.json, and cn init never runs from an unsigned manifest"
180
+ [ -f "$pkgdir/manifest.sig.json" ] || refuse "$pkgdir holds no manifest.sig.json, and cn adopt never runs from an unsigned manifest"
149
181
  else
150
182
  [ "$count" -eq 1 ] || refuse "exactly one of .claudinite/settings.yaml, .claudinite/settings.toml or .claudinite/settings.json must exist, found $count in ${here%/.claudinite}"
151
183
  settings=$here/settings.$format
152
184
  fi
153
185
 
154
- if [ "$format" = json ] && [ -z "$bootstrap" ]; then
155
- engines=$(tr -d '\r\n' < "$settings" | grep -o '"engine"[[:blank:]]*:' | wc -l | tr -d ' ')
156
- [ "$engines" -eq 1 ] || refuse "$settings must hold exactly one \"engine\" object, found $engines"
157
- fi
158
-
159
- # The lines of the engine block, one key per line. No parser: the values the
160
- # launcher needs are plain quoted strings, read with a strict pattern.
161
- engine_block() {
162
- case $format in
163
- yaml) awk '/^engine:[ \t]*$/ { inb = 1; next } inb && /^[^ \t]/ { inb = 0 } inb { print }' "$settings" ;;
164
- toml) awk '/^\[engine\][ \t]*$/ { inb = 1; next } inb && /^[ \t]*\[/ { inb = 0 } inb { print }' "$settings" ;;
165
- json) tr -d '\r\n' < "$settings" | sed -n 's/.*"engine"[[:blank:]]*:[[:blank:]]*{\([^{}]*\)}.*/\1/p' | tr ',' '\n' ;;
166
- esac
167
- }
168
-
169
- # engine_value KEY: the key's quoted string, or empty when the key is absent.
170
- # A key present twice, or not holding a plain quoted string, is refused.
171
- engine_value() {
172
- case $format in toml) sep='=' ;; *) sep=':' ;; esac
173
- lines=$(engine_block | grep -E "^[[:blank:]]*\"?$1\"?[[:blank:]]*${sep}")
174
- [ -z "$lines" ] && return 0
175
- [ "$(printf '%s\n' "$lines" | wc -l | tr -d ' ')" -eq 1 ] || { echo "duplicate"; return 0; }
176
- value=$(printf '%s\n' "$lines" | sed -n "s/^[[:blank:]]*\"\{0,1\}$1\"\{0,1\}[[:blank:]]*${sep}[[:blank:]]*\"\([^\"]*\)\"[[:blank:]]*\$/\1/p")
177
- [ -n "$value" ] || value=malformed
178
- printf '%s\n' "$value"
186
+ # The engine block's values, read in one pass. No parser: the values the
187
+ # launcher needs are plain quoted strings, read with a strict pattern. A key
188
+ # absent reads empty; a key present twice reads "duplicate", and one not
189
+ # holding a plain quoted string, or a releases value not naming a GitHub
190
+ # repository, "malformed". The pass also counts a JSON file's engine keys and
191
+ # decodes the pin to the lowercase hex the hash tools print.
192
+ read_pin() {
193
+ awk -v format="$format" -v repo='[A-Za-z0-9-]+/[A-Za-z0-9_-][A-Za-z0-9._-]*' '
194
+ function value(key, sep, n, i, line, v, found) {
195
+ sep = (format == "toml") ? "=" : ":"
196
+ n = 0
197
+ for (i = 1; i <= nlines; i++) {
198
+ line = lines[i]
199
+ if (line ~ ("^[ \t]*\"?" key "\"?[ \t]*" sep)) { n++; found = line }
200
+ }
201
+ if (n == 0) return ""
202
+ if (n > 1) return "duplicate"
203
+ if (found !~ ("^[ \t]*\"?" key "\"?[ \t]*" sep "[ \t]*\"[^\"]*\"[ \t]*$")) return "malformed"
204
+ v = found
205
+ sub("^[ \t]*\"?" key "\"?[ \t]*" sep "[ \t]*\"", "", v)
206
+ sub("\"[ \t]*$", "", v)
207
+ return (v == "") ? "malformed" : v
208
+ }
209
+ function hex(b64, a, h, i, c, bits, nb, p, byte, out) {
210
+ a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
211
+ for (i = 0; i < 64; i++) dv[substr(a, i + 1, 1)] = i
212
+ h = "0123456789abcdef"
213
+ bits = 0; nb = 0; out = ""
214
+ for (i = 1; i <= length(b64); i++) {
215
+ c = substr(b64, i, 1)
216
+ if (c == "=") break
217
+ bits = bits * 64 + dv[c]; nb += 6
218
+ if (nb >= 8) {
219
+ nb -= 8; p = 2 ^ nb
220
+ byte = int(bits / p); bits -= byte * p
221
+ out = out substr(h, int(byte / 16) + 1, 1) substr(h, byte % 16 + 1, 1)
222
+ }
223
+ }
224
+ return out
225
+ }
226
+ { all = all $0 }
227
+ format == "yaml" && /^engine:[ \t]*$/ { inb = 1; next }
228
+ format == "yaml" && inb && /^[^ \t]/ { inb = 0 }
229
+ format == "toml" && /^\[engine\][ \t]*$/ { inb = 1; next }
230
+ format == "toml" && inb && /^[ \t]*\[/ { inb = 0 }
231
+ format != "json" && inb { lines[++nlines] = $0 }
232
+ END {
233
+ engines = 0
234
+ if (format == "json") {
235
+ gsub(/\r/, "", all)
236
+ rest = all
237
+ while (match(rest, /"engine"[ \t]*:/)) { engines++; rest = substr(rest, RSTART + RLENGTH) }
238
+ block = ""
239
+ rest = all
240
+ while (match(rest, /"engine"[ \t]*:[ \t]*\{[^{}]*\}/)) {
241
+ block = substr(rest, RSTART, RLENGTH); rest = substr(rest, RSTART + RLENGTH)
242
+ }
243
+ sub(/^"engine"[ \t]*:[ \t]*\{/, "", block); sub(/\}$/, "", block)
244
+ nlines = split(block, lines, ",")
245
+ }
246
+ pin = value("manifest")
247
+ print engines
248
+ print value("version")
249
+ print pin
250
+ print value("package")
251
+ releases = value("releases")
252
+ if (releases != "" && releases !~ ("^" repo "$")) releases = "malformed"
253
+ print releases
254
+ print (pin ~ /^sha512-/) ? hex(substr(pin, 8)) : ""
255
+ }' "$settings"
179
256
  }
180
257
 
181
258
  if [ -n "$bootstrap" ]; then
@@ -183,36 +260,43 @@ if [ -n "$bootstrap" ]; then
183
260
  # manifest's own hash stands in for the pin.
184
261
  version=$(sed -n 's/^ *"version": *"\([0-9]*\.[0-9]*\.[0-9]*\)",\{0,1\}$/\1/p' "$pkgdir/manifest.json" | head -n 1)
185
262
  package=$(sed -n 's/^ *"name": *"\(@claudinite\/cli[-a-z]*\)",\{0,1\}$/\1/p' "$pkgdir/package.json" | head -n 1)
186
- matches "$version" '[0-9]+\.[0-9]+\.[0-9]+' || refuse "$pkgdir/manifest.json names no version"
187
- matches "$package" '@claudinite/cli(-rc)?' \
263
+ is_version "$version" || refuse "$pkgdir/manifest.json names no version"
264
+ is_package "$package" \
188
265
  || refuse "$pkgdir/package.json must name \"@claudinite/cli\" or \"@claudinite/cli-rc\""
189
266
  else
190
- version=$(engine_value version)
191
- manifest_pin=$(engine_value manifest)
192
- package=$(engine_value package)
267
+ pinned=$(read_pin) || refuse "cannot read $settings"
268
+ engines=0 version='' manifest_pin='' package='' releases='' pin_hex=''
269
+ { read -r engines; read -r version; read -r manifest_pin; read -r package; read -r releases; read -r pin_hex; } <<EOF
270
+ $pinned
271
+ EOF
272
+ if [ "$format" = json ]; then
273
+ [ "$engines" -eq 1 ] || refuse "$settings must hold exactly one \"engine\" object, found $engines"
274
+ fi
193
275
  [ -n "$package" ] || package=@claudinite/cli
194
- releases=$(engine_value releases)
195
276
 
196
- matches "$version" '[0-9]+\.[0-9]+\.[0-9]+' \
277
+ is_version "$version" \
197
278
  || refuse "engine.version in $settings must be a quoted version like \"1.60928.1\""
198
- matches "$manifest_pin" 'sha512-[A-Za-z0-9+/]{86}==' \
279
+ is_pin "$manifest_pin" \
199
280
  || refuse "engine.manifest in $settings must be a quoted sha512-... integrity string"
200
- matches "$package" '@claudinite/cli(-rc)?' \
281
+ is_package "$package" \
201
282
  || refuse "engine.package in $settings must be \"@claudinite/cli\" or \"@claudinite/cli-rc\""
202
- [ -z "$releases" ] || matches "$releases" '[A-Za-z0-9-]+/[A-Za-z0-9_-][A-Za-z0-9._-]*' \
203
- || refuse "engine.releases in $settings must be a quoted GitHub repository like \"owner/name\""
283
+ case $releases in
284
+ '' | */*) ;;
285
+ *) refuse "engine.releases in $settings must be a quoted GitHub repository like \"owner/name\"" ;;
286
+ esac
204
287
  fi
205
288
 
206
- case $(uname -s) in
289
+ uname=$(uname -s -m)
290
+ case ${uname% *} in
207
291
  Linux) os=linux ;;
208
292
  Darwin) os=darwin ;;
209
293
  MINGW*|MSYS*|CYGWIN*) os=windows ;;
210
- *) refuse "unsupported operating system $(uname -s)" ;;
294
+ *) refuse "unsupported operating system ${uname% *}" ;;
211
295
  esac
212
- case $(uname -m) in
296
+ case ${uname##* } in
213
297
  x86_64|amd64) arch=x64 ;;
214
298
  aarch64|arm64) arch=arm64 ;;
215
- *) refuse "unsupported processor $(uname -m)" ;;
299
+ *) refuse "unsupported processor ${uname##* }" ;;
216
300
  esac
217
301
  bin=cn
218
302
  bin_re=cn
@@ -224,14 +308,14 @@ fi
224
308
  platform=$os-$arch
225
309
 
226
310
  if command -v sha256sum >/dev/null 2>&1; then
227
- sha256() { sha256sum < "$1" | cut -d' ' -f1; }
228
- sha512() { sha512sum < "$1" | cut -d' ' -f1; }
311
+ sha256() { set -- "$(sha256sum < "$1")"; printf '%s\n' "${1%% *}"; }
312
+ sha512() { set -- "$(sha512sum < "$1")"; printf '%s\n' "${1%% *}"; }
229
313
  elif command -v shasum >/dev/null 2>&1; then
230
- sha256() { shasum -a 256 < "$1" | cut -d' ' -f1; }
231
- sha512() { shasum -a 512 < "$1" | cut -d' ' -f1; }
314
+ sha256() { set -- "$(shasum -a 256 < "$1")"; printf '%s\n' "${1%% *}"; }
315
+ sha512() { set -- "$(shasum -a 512 < "$1")"; printf '%s\n' "${1%% *}"; }
232
316
  elif command -v openssl >/dev/null 2>&1; then
233
- sha256() { openssl dgst -sha256 < "$1" | sed 's/.*= *//'; }
234
- sha512() { openssl dgst -sha512 < "$1" | sed 's/.*= *//'; }
317
+ sha256() { set -- "$(openssl dgst -sha256 < "$1")"; printf '%s\n' "${1##* }"; }
318
+ sha512() { set -- "$(openssl dgst -sha512 < "$1")"; printf '%s\n' "${1##* }"; }
235
319
  else
236
320
  refuse "no SHA-256 tool found (sha256sum, shasum or openssl)"
237
321
  fi
@@ -239,31 +323,11 @@ for tool in curl tar; do
239
323
  command -v "$tool" >/dev/null 2>&1 || refuse "$tool is not installed; the launcher needs it to fetch the engine"
240
324
  done
241
325
 
242
- # The pin's SHA-512 as lowercase hex, to compare with the hash tools' output;
243
- # the bootstrap's pin is the hash of the manifest npx unpacked.
326
+ # The bootstrap's pin is the hash of the manifest npx unpacked, as the
327
+ # lowercase hex the hash tools print; a settings file's pin was decoded to
328
+ # that hex as it was read.
244
329
  if [ -n "$bootstrap" ]; then
245
330
  pin_hex=$(sha512 "$pkgdir/manifest.json")
246
- else
247
- pin_hex=$(printf '%s\n' "${manifest_pin#sha512-}" | awk '
248
- BEGIN {
249
- a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
250
- for (i = 0; i < 64; i++) v[substr(a, i + 1, 1)] = i
251
- h = "0123456789abcdef"
252
- }
253
- {
254
- bits = 0; nb = 0; out = ""
255
- for (i = 1; i <= length($0); i++) {
256
- c = substr($0, i, 1)
257
- if (c == "=") break
258
- bits = bits * 64 + v[c]; nb += 6
259
- if (nb >= 8) {
260
- nb -= 8; p = 2 ^ nb
261
- byte = int(bits / p); bits -= byte * p
262
- out = out substr(h, int(byte / 16) + 1, 1) substr(h, byte % 16 + 1, 1)
263
- }
264
- }
265
- print out
266
- }')
267
331
  fi
268
332
 
269
333
  # This platform's SHA-256 from a manifest.json whose hash matched the pin.
@@ -285,15 +349,33 @@ private_dir() {
285
349
  fi
286
350
  [ -L "$1" ] && refuse "the cache directory $1 is a symbolic link"
287
351
  [ "$os" = windows ] && return 0
352
+ # shellcheck disable=SC3067 # -O is in every sh the launcher runs under (dash, bash, busybox, zsh)
353
+ [ -O "$1" ] || private_refused "$1"
354
+ }
355
+ # private_refused names the mode and owner found on a cache folder that is
356
+ # not mode 0700 and owned by you.
357
+ private_refused() {
288
358
  # shellcheck disable=SC2012 # ls -ldn is the portable way to read mode and uid
289
359
  set -- "$1" "$(ls -ldn "$1" | awk '{ print $1 " " $3 }')"
290
- case $2 in
291
- "drwx------ $(id -u)"|"drwx------. $(id -u)"|"drwx------+ $(id -u)"|"drwx------@ $(id -u)") ;;
292
- *) refuse "the cache directory $1 must be mode 0700 and owned by you (found ${2% *})" ;;
293
- esac
360
+ refuse "the cache directory $1 must be mode 0700 and owned by you (found ${2% *})"
294
361
  }
295
362
  private_dir "$cache_root"
296
363
  private_dir "$vdir"
364
+ # One find answers both folders' modes, printing each one that is exactly
365
+ # 0700.
366
+ if [ "$os" != windows ]; then
367
+ private=$(find "$cache_root" "$vdir" -prune -perm 0700)
368
+ for d in "$cache_root" "$vdir"; do
369
+ case "
370
+ $private
371
+ " in
372
+ *"
373
+ $d
374
+ "*) ;;
375
+ *) private_refused "$d" ;;
376
+ esac
377
+ done
378
+ fi
297
379
 
298
380
  cached_ok() {
299
381
  [ -f "$vdir/manifest.json" ] && [ -f "$vdir/$bin" ] || return 1
@@ -308,7 +390,7 @@ if ! cached_ok; then
308
390
 
309
391
  # Step 3: download by exact tarball URL, HTTPS only, with a size cap.
310
392
 
311
- matches "$max_bytes" '[0-9]+' || refuse "CLAUDINITE_MAX_DOWNLOAD_BYTES must be a number"
393
+ digits "$max_bytes" || refuse "CLAUDINITE_MAX_DOWNLOAD_BYTES must be a number"
312
394
  # A whole transfer may take as long as the cap at about 220 kB/s, and never
313
395
  # less than 30 s: the 64 MiB default allows about 300 s. --max-filesize
314
396
  # bounds only the compressed size, so the wall clock is what stops a
@@ -378,10 +460,13 @@ fi
378
460
 
379
461
  # Step 5: link, unpack, run.
380
462
 
381
- mkdir -p "$here/bin" || refuse "cannot create $here/bin"
382
- if ! ln -sfn "$vdir/$bin" "$here/bin/$bin" 2>/dev/null; then
383
- rm -f "$here/bin/$bin"
384
- cp "$vdir/$bin" "$here/bin/$bin" || refuse "cannot link or copy the engine into $here/bin"
463
+ # shellcheck disable=SC3013 # -ef is in every sh the launcher runs under (dash, bash, busybox, zsh)
464
+ if [ ! "$here/bin/$bin" -ef "$vdir/$bin" ]; then
465
+ mkdir -p "$here/bin" || refuse "cannot create $here/bin"
466
+ if ! ln -sfn "$vdir/$bin" "$here/bin/$bin" 2>/dev/null; then
467
+ rm -f "$here/bin/$bin"
468
+ cp "$vdir/$bin" "$here/bin/$bin" || refuse "cannot link or copy the engine into $here/bin"
469
+ fi
385
470
  fi
386
471
  # Unpacking the embedded runner script and SDK beside the binary is a no-op
387
472
  # until the engine embeds them (no pack JavaScript runs yet).
package/manifest.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "v": 1,
3
- "version": "1.61009.3",
4
- "builtAt": "2026-10-09T17:12:30Z",
5
- "commit": "d8c6f57",
3
+ "version": "1.61011.2",
4
+ "builtAt": "2026-10-11T14:28:33Z",
5
+ "commit": "be76a87",
6
6
  "goVersion": "go1.24.13",
7
- "updaterDigest": "17d1c0633fb74986490cd291b8e55248a9c8cbf9b76f039252f744c3e76ecc74",
7
+ "updaterDigest": "ad53cefad388e31a7059dfbe5afc71479991a7aaa182d36cb9accde4f06a512b",
8
8
  "binaries": {
9
- "linux-x64": {"file": "cn", "sha256": "faa12311d2006f7c1a959de09a4484894d915068e0ba16e5be86d7f5df6a1da6", "size": 12746936}
9
+ "linux-x64": {"file": "cn", "sha256": "1cd66e025719de0d03185b5821674e4d41e2faa38bf94d7c131927cbe086cdcc", "size": 12845240}
10
10
  },
11
- "launcher": "82defc0fd3c22332d24bbc9ba207723bf6c88962bb5213afc79660fefa09c9bb",
11
+ "launcher": "314f37fe7a4a1d2fdc59de14d5e8903959d9bd1bc03971e36d6340ed805129cd",
12
12
  "testedPacks": {}
13
13
  }
package/manifest.sig.json CHANGED
@@ -3,5 +3,5 @@
3
3
  "payload": "eyJ2IjoxLCJrZXlJZCI6ImM3NzQwNWM2ZDA4NzExODYiLCJwdWJsaWNLZXkiOiI0UHlTQzRTbG5MakJ1cVY2Qll4eU9XWUtLOWkzV295NkZCQ1ZNckF6clRzIiwidXNlIjoibWFuaWZlc3QiLCJpc3N1ZXIiOiJlYTg1ZjM1NDIxZjM3NWZjIiwibm90QmVmb3JlIjoiMjAyNi0xMC0wM1QxNjozNjozN1oiLCJub3RBZnRlciI6IjIwMjctMTAtMDNUMTY6MzY6MzdaIn0",
4
4
  "signature": "ex4GNEE3PIUj3Ue6X2TZnbB5E6G-DVrGNaYdvI13NuOauoJYilB_54TyAH490IS9-IZiu3BKVYpigm3uDTXSBw"
5
5
  },
6
- "signature": "Sek2B4pBVaq1XH-pbXcaegAjV1qvdf3BCf9QS9kDU5_5TbJmz224xHm53wqYRt-gaPUjYraY5IWDV08ELbzCCQ"
6
+ "signature": "3HyvS912FAg422uoe47eY3D9_-a5SQ9GTMj5Bc8ctlr9-ACFcPXd-WVfLlLLVTEW5UnbpMdwNwzOSFKYxso6BQ"
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudinite/cli",
3
- "version": "1.61009.3",
3
+ "version": "1.61011.2",
4
4
  "description": "Claudinite engine release manifest and launcher",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {"type": "git", "url": "git+https://github.com/missingbulb/ClaudiniteEngine.git"},