@mnemonik/cli 7.100.0 → 7.101.4

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.
Files changed (93) hide show
  1. package/dist/auth/pkce.d.ts +2 -0
  2. package/dist/auth/pkce.d.ts.map +1 -1
  3. package/dist/auth/pkce.js +57 -6
  4. package/dist/auth/pkce.js.map +1 -1
  5. package/dist/auth/status.d.ts +1 -5
  6. package/dist/auth/status.d.ts.map +1 -1
  7. package/dist/auth/status.js +1 -71
  8. package/dist/auth/status.js.map +1 -1
  9. package/dist/digests.json +91 -91
  10. package/dist/install/hosts.d.ts +2 -12
  11. package/dist/install/hosts.d.ts.map +1 -1
  12. package/dist/install/hosts.js +57 -356
  13. package/dist/install/hosts.js.map +1 -1
  14. package/dist/install/journal.d.ts +2 -10
  15. package/dist/install/journal.d.ts.map +1 -1
  16. package/dist/install/journal.js +0 -4
  17. package/dist/install/journal.js.map +1 -1
  18. package/dist/install/journey.d.ts.map +1 -1
  19. package/dist/install/journey.js +185 -158
  20. package/dist/install/journey.js.map +1 -1
  21. package/dist/install/transaction.d.ts +2 -3
  22. package/dist/install/transaction.d.ts.map +1 -1
  23. package/dist/install/transaction.js +1 -90
  24. package/dist/install/transaction.js.map +1 -1
  25. package/dist/install/ui.d.ts.map +1 -1
  26. package/dist/install/ui.js +15 -33
  27. package/dist/install/ui.js.map +1 -1
  28. package/dist/installSession.js +0 -4
  29. package/dist/launcher.d.ts.map +1 -1
  30. package/dist/launcher.js +16 -7
  31. package/dist/launcher.js.map +1 -1
  32. package/dist/output.d.ts +1 -0
  33. package/dist/output.d.ts.map +1 -1
  34. package/dist/output.js +3 -0
  35. package/dist/output.js.map +1 -1
  36. package/dist/preflight.d.ts +2 -0
  37. package/dist/preflight.d.ts.map +1 -1
  38. package/dist/preflight.js +64 -209
  39. package/dist/preflight.js.map +1 -1
  40. package/dist/project/eligibility.d.ts +11 -1
  41. package/dist/project/eligibility.d.ts.map +1 -1
  42. package/dist/project/eligibility.js +12 -1
  43. package/dist/project/eligibility.js.map +1 -1
  44. package/dist/project.d.ts +3 -0
  45. package/dist/project.d.ts.map +1 -1
  46. package/dist/project.js +56 -21
  47. package/dist/project.js.map +1 -1
  48. package/dist/router.d.ts +5 -1
  49. package/dist/router.d.ts.map +1 -1
  50. package/dist/router.js +201 -93
  51. package/dist/router.js.map +1 -1
  52. package/dist/runtime/releaseSource.d.ts +10 -0
  53. package/dist/runtime/releaseSource.d.ts.map +1 -1
  54. package/dist/runtime/releaseSource.js +82 -6
  55. package/dist/runtime/releaseSource.js.map +1 -1
  56. package/dist/runtime/selfUpdate.d.ts +4 -1
  57. package/dist/runtime/selfUpdate.d.ts.map +1 -1
  58. package/dist/runtime/selfUpdate.js +12 -6
  59. package/dist/runtime/selfUpdate.js.map +1 -1
  60. package/dist/runtime/signers.js +15 -7
  61. package/dist/runtime/store.d.ts +2 -1
  62. package/dist/runtime/store.d.ts.map +1 -1
  63. package/dist/runtime/store.js +20 -9
  64. package/dist/runtime/store.js.map +1 -1
  65. package/dist/sbom.json +21 -23
  66. package/dist/scanner/discover.d.ts +12 -1
  67. package/dist/scanner/discover.d.ts.map +1 -1
  68. package/dist/scanner/discover.js +48 -14
  69. package/dist/scanner/discover.js.map +1 -1
  70. package/dist/scanner/enable.d.ts +23 -5
  71. package/dist/scanner/enable.d.ts.map +1 -1
  72. package/dist/scanner/enable.js +93 -21
  73. package/dist/scanner/enable.js.map +1 -1
  74. package/dist/scanner/picker.d.ts +7 -1
  75. package/dist/scanner/picker.d.ts.map +1 -1
  76. package/dist/scanner/picker.js +64 -13
  77. package/dist/scanner/picker.js.map +1 -1
  78. package/dist/scanner-release.json +25 -25
  79. package/dist/screens/journey.d.ts +13 -3
  80. package/dist/screens/journey.d.ts.map +1 -1
  81. package/dist/screens/journey.js +145 -53
  82. package/dist/screens/journey.js.map +1 -1
  83. package/dist/screens.d.ts +2 -3
  84. package/dist/screens.d.ts.map +1 -1
  85. package/dist/screens.js +6 -16
  86. package/dist/screens.js.map +1 -1
  87. package/dist/status.d.ts +5 -3
  88. package/dist/status.d.ts.map +1 -1
  89. package/dist/status.js +194 -110
  90. package/dist/status.js.map +1 -1
  91. package/dist/vendor/local-setup.js +124 -27
  92. package/dist/vendor/shared/runtimeSigners.js +11 -6
  93. package/package.json +45 -41
@@ -6394,7 +6394,7 @@ init_repositoryRoot();
6394
6394
 
6395
6395
  // packages/local-setup/src/index.ts
6396
6396
  import { realpath, unlink as unlink2 } from "node:fs/promises";
6397
- import { basename as basename2, dirname as dirname4, join as join4 } from "node:path";
6397
+ import { basename as basename2, dirname as dirname4, join as join5 } from "node:path";
6398
6398
 
6399
6399
  // packages/local-setup/src/contracts.ts
6400
6400
  var actionRequired = (state) => ({
@@ -6652,6 +6652,92 @@ $result = [UIntPtr]::Zero
6652
6652
  );
6653
6653
  }
6654
6654
 
6655
+ // packages/local-setup/src/automaticUpdate.ts
6656
+ import { spawn as nodeSpawn } from "node:child_process";
6657
+ import { stat as nodeStat, utimes } from "node:fs/promises";
6658
+ import { homedir as homedir2 } from "node:os";
6659
+ import { join as join4 } from "node:path";
6660
+ var DAY_MS = 864e5;
6661
+ var statePath = (stateDir) => join4(stateDir, "automatic-update.json");
6662
+ function cliLauncherPath(options = {}) {
6663
+ const platform = options.platform ?? process.platform;
6664
+ const home = options.home ?? homedir2();
6665
+ return platform === "win32" ? join4(
6666
+ options.env?.LOCALAPPDATA || join4(home, "AppData", "Local"),
6667
+ "Mnemonik",
6668
+ "bin",
6669
+ "mnemonik.cmd"
6670
+ ) : join4(home, ".local", "bin", "mnemonik");
6671
+ }
6672
+ async function readState(path) {
6673
+ const bytes = await readBytes(path);
6674
+ if (!bytes) return {};
6675
+ const value = JSON.parse(bytes.toString());
6676
+ if (!value || typeof value !== "object" || value.lastAttempt !== void 0 && (!Number.isFinite(value.lastAttempt) || value.lastAttempt < 0))
6677
+ throw new Error("automatic_update_state_invalid");
6678
+ return value.lastAttempt === void 0 ? {} : { lastAttempt: value.lastAttempt };
6679
+ }
6680
+ async function maybeStartAutomaticUpdate(options = {}) {
6681
+ const stateDir = options.stateDir ?? stateDirectory(options.platform, options.env, options.home);
6682
+ const path = statePath(stateDir);
6683
+ try {
6684
+ const now = (options.now ?? Date.now)();
6685
+ const stat = options.stat ?? nodeStat;
6686
+ try {
6687
+ if (now - (await stat(path)).mtimeMs < DAY_MS) return false;
6688
+ } catch (error) {
6689
+ if (error.code !== "ENOENT") throw error;
6690
+ }
6691
+ if (!options.spawn && !(await stat(cliLauncherPath(options))).isFile()) return false;
6692
+ return await withLock(path, 0, async (assertOwned) => {
6693
+ const state = await readState(path);
6694
+ if (state.lastAttempt !== void 0 && now - state.lastAttempt < DAY_MS) return false;
6695
+ await atomicWrite(
6696
+ path,
6697
+ Buffer.from(`${JSON.stringify({ lastAttempt: now })}
6698
+ `),
6699
+ void 0,
6700
+ assertOwned
6701
+ );
6702
+ await utimes(path, now / 1e3, now / 1e3);
6703
+ const platform = options.platform ?? process.platform;
6704
+ const launcher = cliLauncherPath(options);
6705
+ const command = platform === "win32" ? {
6706
+ file: options.env?.ComSpec || "cmd.exe",
6707
+ args: ["/d", "/s", "/c", `""${launcher}" update --automatic"`],
6708
+ windowsVerbatimArguments: true
6709
+ } : { file: launcher, args: ["update", "--automatic"] };
6710
+ const child = (options.spawn ?? nodeSpawn)(command.file, command.args, {
6711
+ detached: true,
6712
+ stdio: "ignore",
6713
+ windowsHide: true,
6714
+ ..."windowsVerbatimArguments" in command ? { windowsVerbatimArguments: command.windowsVerbatimArguments } : {}
6715
+ });
6716
+ child.once("error", () => {
6717
+ });
6718
+ child.unref();
6719
+ return true;
6720
+ });
6721
+ } catch {
6722
+ return false;
6723
+ }
6724
+ }
6725
+ async function startAutomaticUpdateForSession(start2 = maybeStartAutomaticUpdate, timeoutMs = 50) {
6726
+ let timer;
6727
+ try {
6728
+ await Promise.race([
6729
+ Promise.resolve().then(start2).catch(() => {
6730
+ }),
6731
+ new Promise((resolve2) => {
6732
+ timer = setTimeout(resolve2, timeoutMs);
6733
+ })
6734
+ ]);
6735
+ } catch {
6736
+ } finally {
6737
+ if (timer) clearTimeout(timer);
6738
+ }
6739
+ }
6740
+
6655
6741
  // packages/local-setup/src/index.ts
6656
6742
  var MAX_ORIGINAL_BYTES = 64 * 1024;
6657
6743
  var validDisplayName = (value) => typeof value === "string" && value.length <= 200 && !/[\p{C}\p{Zl}\p{Zp}@]/u.test(value);
@@ -6708,11 +6794,26 @@ function createProjectSetupExecutor(deps) {
6708
6794
  if (fresh.kind !== "ok" && fresh.kind !== "absent") return actionRequired(fresh.kind);
6709
6795
  if (await realpath(fresh.root) !== root) return actionRequired("identity_changed");
6710
6796
  resolution = fresh;
6711
- const file = join4(root, ".mnemonik.json");
6797
+ const file = join5(root, ".mnemonik.json");
6712
6798
  const bytes = await readBytes(file);
6713
6799
  const diskHash = digest(bytes);
6714
6800
  const saved = await readBytes(path);
6801
+ const freshRecord = () => ({
6802
+ schemaVersion: 1,
6803
+ operationId: randomUUID2(),
6804
+ root,
6805
+ scopeKey: hash2(deps.scopeKey),
6806
+ owner: options.owner,
6807
+ ...resolution.kind !== "git_unavailable" && resolution.repository.kind === "plain" && options.nonGitSelected ? { nonGitSelected: true } : {},
6808
+ ...options.intent ? { intent: options.intent } : {},
6809
+ before: {
6810
+ base64: bytes && bytes.length <= MAX_ORIGINAL_BYTES ? bytes.toString("base64") : null,
6811
+ hash: diskHash
6812
+ },
6813
+ steps: { remote: step(diskHash), identity: step(diskHash), rollback: step(diskHash) }
6814
+ });
6715
6815
  let record;
6816
+ let recordIsNew = !saved;
6716
6817
  if (saved) {
6717
6818
  try {
6718
6819
  record = JSON.parse(saved.toString());
@@ -6724,33 +6825,26 @@ function createProjectSetupExecutor(deps) {
6724
6825
  if (record.before.base64 !== null && record.before.hash !== hash2(Buffer.from(record.before.base64, "base64")) || record.before.base64 !== null && Buffer.from(record.before.base64, "base64").length > MAX_ORIGINAL_BYTES || record.staged && hash2(record.staged.content) !== record.staged.hash || record.remote && hash2(JSON.stringify(record.remote)) !== record.steps.remote.afterHash)
6725
6826
  return actionRequired("record_invalid");
6726
6827
  if (record.scopeKey !== hash2(deps.scopeKey) || options.owner !== void 0 && JSON.stringify(record.owner) !== JSON.stringify(options.owner) || JSON.stringify(record.intent) !== JSON.stringify(options.intent)) {
6727
- if (record.ignored) {
6728
- delete record.ignored;
6729
- await atomicWrite(
6730
- path,
6731
- Buffer.from(JSON.stringify(record, null, 2) + "\n"),
6732
- void 0,
6733
- assertOwned
6734
- );
6828
+ const replaceable = !record.remote && !record.staged && !record.steps.remote.started && !record.steps.identity.started && !record.steps.rollback.started && diskHash === record.before.hash;
6829
+ if (replaceable) {
6830
+ record = freshRecord();
6831
+ recordIsNew = true;
6832
+ } else {
6833
+ if (record.ignored) {
6834
+ delete record.ignored;
6835
+ await atomicWrite(
6836
+ path,
6837
+ Buffer.from(JSON.stringify(record, null, 2) + "\n"),
6838
+ void 0,
6839
+ assertOwned
6840
+ );
6841
+ }
6842
+ return actionRequired("operation_context_changed");
6735
6843
  }
6736
- return actionRequired("operation_context_changed");
6737
6844
  }
6738
6845
  } else {
6739
6846
  if (mode === "apply" || mode === "rollback") return actionRequired("record_missing");
6740
- record = {
6741
- schemaVersion: 1,
6742
- operationId: randomUUID2(),
6743
- root,
6744
- scopeKey: hash2(deps.scopeKey),
6745
- owner: options.owner,
6746
- ...resolution.repository.kind === "plain" && options.nonGitSelected ? { nonGitSelected: true } : {},
6747
- ...options.intent ? { intent: options.intent } : {},
6748
- before: {
6749
- base64: bytes && bytes.length <= MAX_ORIGINAL_BYTES ? bytes.toString("base64") : null,
6750
- hash: diskHash
6751
- },
6752
- steps: { remote: step(diskHash), identity: step(diskHash), rollback: step(diskHash) }
6753
- };
6847
+ record = freshRecord();
6754
6848
  }
6755
6849
  if (resolution.repository.kind === "plain" && record.nonGitSelected !== true) {
6756
6850
  return nonGitSelectionRequired();
@@ -6797,7 +6891,7 @@ function createProjectSetupExecutor(deps) {
6797
6891
  return response;
6798
6892
  };
6799
6893
  if (bytes && bytes.length > MAX_ORIGINAL_BYTES || record.before.base64 === null && record.before.hash !== null) {
6800
- if (!saved) await save();
6894
+ if (recordIsNew) await save();
6801
6895
  return actionRequired("identity_too_large");
6802
6896
  }
6803
6897
  if (record.ignored && record.ignored.identityHash !== diskHash) {
@@ -6849,7 +6943,7 @@ function createProjectSetupExecutor(deps) {
6849
6943
  }
6850
6944
  if (!resumingWithoutIdentity && record.steps.identity.complete && diskHash !== record.staged?.hash)
6851
6945
  return actionRequired("identity_changed");
6852
- if (!saved) await save();
6946
+ if (recordIsNew) await save();
6853
6947
  if (record.evidence && JSON.stringify(record.evidence) !== JSON.stringify(evidence))
6854
6948
  return actionRequired("operation_context_changed");
6855
6949
  if (record.steps.identity.complete && mode === "ensure" && record.remote) {
@@ -6957,11 +7051,14 @@ export {
6957
7051
  actionRequired,
6958
7052
  appendWindowsPath,
6959
7053
  atomicWrite,
7054
+ cliLauncherPath,
6960
7055
  createProjectSetupExecutor,
7056
+ maybeStartAutomaticUpdate,
6961
7057
  protectStateFile,
6962
7058
  readWindowsUserPath,
6963
7059
  recordPath,
6964
7060
  removeWindowsPathEntry,
7061
+ startAutomaticUpdateForSession,
6965
7062
  stateDirectory,
6966
7063
  windowsCurrentAccount,
6967
7064
  windowsCurrentUserAcl,
@@ -21,11 +21,9 @@ function decodeBase64(text, length) {
21
21
  throw new Error('unsigned');
22
22
  return bytes;
23
23
  }
24
- async function verifyMinisign(path, signaturePath, identity) {
25
- const [message, signatureText] = await Promise.all([
26
- readFile(path),
27
- readFile(signaturePath, 'utf8'),
28
- ]);
24
+ /** Pinned release identity; a downloaded manifest can never replace its own trust anchor. */
25
+ export const RELEASE_MINISIGN_PUBLIC_KEY = 'RWSBYwgbjz0qKB4/ToA3dywBiAlQeBjoQpib4OHdjP2nDbpQnOVqpPm0';
26
+ export function verifyMinisign(message, signatureText, identity = RELEASE_MINISIGN_PUBLIC_KEY) {
29
27
  const publicPacket = decodeBase64(identity, 42);
30
28
  const lines = signatureText.trimEnd().split(/\r?\n/);
31
29
  const [untrustedComment, encodedSignature, trustedLine, encodedGlobalSignature] = lines;
@@ -54,6 +52,13 @@ async function verifyMinisign(path, signaturePath, identity) {
54
52
  !verifySignature(null, Buffer.concat([fileSignature, Buffer.from(trustedComment)]), publicKey, globalSignature))
55
53
  throw new Error('unsigned');
56
54
  }
55
+ async function verifyMinisignFile(path, signaturePath, identity) {
56
+ const [message, signatureText] = await Promise.all([
57
+ readFile(path),
58
+ readFile(signaturePath, 'utf8'),
59
+ ]);
60
+ verifyMinisign(message, signatureText, identity);
61
+ }
57
62
  /** Release tooling supplies the real identity and artifacts. These checks do not sign anything. */
58
63
  export async function verifySigner(path, signer, run = execute) {
59
64
  if (signer.platform === 'darwin' && /^[A-Z0-9]{10}$/.test(signer.identity)) {
@@ -81,7 +86,7 @@ export async function verifySigner(path, signer, run = execute) {
81
86
  }
82
87
  else if (signer.platform === 'linux') {
83
88
  try {
84
- await verifyMinisign(path, signer.signature, signer.identity);
89
+ await verifyMinisignFile(path, signer.signature, signer.identity);
85
90
  }
86
91
  catch {
87
92
  throw new Error('unsigned');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnemonik/cli",
3
- "version": "7.100.0",
3
+ "version": "7.101.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/JayDeeCo-Limited/mnemonik-cli.git"
@@ -34,27 +34,27 @@
34
34
  "hosts": {
35
35
  "claude-code": {
36
36
  "package": "@mnemonik/claude-code-hooks",
37
- "version": "0.9.197",
37
+ "version": "0.9.202",
38
38
  "closure": [
39
39
  {
40
40
  "name": "@mnemonik/claude-code-hooks",
41
- "version": "0.9.197",
42
- "integrity": "sha512-CKWyYJ20e6y4f/xilqtEPcWZ+EaZ9NTBBSsKz4H/mvWJMxcLWLUW6p+PfWWnyM5XB6jmnhErfxjlOLfSs4uTxg=="
41
+ "version": "0.9.202",
42
+ "integrity": "sha512-NXIhicxVHRR94YFMWQ5UitOG6VQ7BRbXPbbw14ZHKF1zcEl/gNLpq23Ys2f1QYMiobxZOHVmSkA5HX1P5Wlasg=="
43
43
  },
44
44
  {
45
45
  "name": "@mnemonik/credentials",
46
- "version": "0.1.18",
47
- "integrity": "sha512-zibbf7R+ECl7I9lSICVwqgGk/43GPtaEOHDHna7+i9LEXjnvqnzCv93+l/yJvYSFtVOr3qdGZh9IroC8pEaQLQ=="
46
+ "version": "0.1.23",
47
+ "integrity": "sha512-Mr39iinSasXnR35pMCcP5+9OHGihts93TNm3NyPbbw4sE4KPy3VNYAXB/JdV9fvLPTTq5gfm/ByIRQZ+nM8SjQ=="
48
48
  },
49
49
  {
50
50
  "name": "@mnemonik/local-setup",
51
- "version": "0.1.18",
52
- "integrity": "sha512-8xN9Yr/bmvcWJGqOa91cRO4Bu1D+ynaM3ep0foRndcnT9hIDiFVr5gedGAZ2yMIgFowaFY2hebB4hBjpeKqsug=="
51
+ "version": "0.1.23",
52
+ "integrity": "sha512-DNUEfedzYr7WJBqDMroJGjHAk5hnaDOprgiHKstYcWINyWS6buJIME6XdupE71OW8/uAS8URDCN0+9YI3GAWUQ=="
53
53
  },
54
54
  {
55
55
  "name": "@mnemonik/shared",
56
- "version": "7.100.0",
57
- "integrity": "sha512-cdBoMnpxl+jqI93/gz7gTpLJliJj92mtRBh7VvedaG7z13Im9aI9cfgsg2ZO8hfry5t0+q8satuToWQQkPIdQA=="
56
+ "version": "7.101.4",
57
+ "integrity": "sha512-2Q4G+epezRjtyK74bAACLt/nfV9oa4NWz73mcO3scPkqLa9hA+a1EUDTIHKm343uxHoYjk71J5s1pg5xxQ3TlA=="
58
58
  },
59
59
  {
60
60
  "name": "ignore",
@@ -86,31 +86,32 @@
86
86
  "version": "3.0.7",
87
87
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
88
88
  }
89
- ]
89
+ ],
90
+ "releaseVersion": "7.101.4"
90
91
  },
91
92
  "codex": {
92
93
  "package": "@mnemonik/codex-hooks",
93
- "version": "0.8.166",
94
+ "version": "0.8.171",
94
95
  "closure": [
95
96
  {
96
97
  "name": "@mnemonik/codex-hooks",
97
- "version": "0.8.166",
98
- "integrity": "sha512-Ptjf8n8f0OUM296WMWQtBUKmylsJy574fQCB3BhD2NauBM5m3SkQb51O5eSORL4sSY558nxY6gaqWZgDySpFrA=="
98
+ "version": "0.8.171",
99
+ "integrity": "sha512-ZePQUQupSVm5JOn7dCyr83Zch99v7GwAtfRdN9FjX90sgZbez5CecDMt/TaTPMQ5MtrWnMJ8ZaFmn8kOAP82bQ=="
99
100
  },
100
101
  {
101
102
  "name": "@mnemonik/credentials",
102
- "version": "0.1.18",
103
- "integrity": "sha512-zibbf7R+ECl7I9lSICVwqgGk/43GPtaEOHDHna7+i9LEXjnvqnzCv93+l/yJvYSFtVOr3qdGZh9IroC8pEaQLQ=="
103
+ "version": "0.1.23",
104
+ "integrity": "sha512-Mr39iinSasXnR35pMCcP5+9OHGihts93TNm3NyPbbw4sE4KPy3VNYAXB/JdV9fvLPTTq5gfm/ByIRQZ+nM8SjQ=="
104
105
  },
105
106
  {
106
107
  "name": "@mnemonik/local-setup",
107
- "version": "0.1.18",
108
- "integrity": "sha512-8xN9Yr/bmvcWJGqOa91cRO4Bu1D+ynaM3ep0foRndcnT9hIDiFVr5gedGAZ2yMIgFowaFY2hebB4hBjpeKqsug=="
108
+ "version": "0.1.23",
109
+ "integrity": "sha512-DNUEfedzYr7WJBqDMroJGjHAk5hnaDOprgiHKstYcWINyWS6buJIME6XdupE71OW8/uAS8URDCN0+9YI3GAWUQ=="
109
110
  },
110
111
  {
111
112
  "name": "@mnemonik/shared",
112
- "version": "7.100.0",
113
- "integrity": "sha512-cdBoMnpxl+jqI93/gz7gTpLJliJj92mtRBh7VvedaG7z13Im9aI9cfgsg2ZO8hfry5t0+q8satuToWQQkPIdQA=="
113
+ "version": "7.101.4",
114
+ "integrity": "sha512-2Q4G+epezRjtyK74bAACLt/nfV9oa4NWz73mcO3scPkqLa9hA+a1EUDTIHKm343uxHoYjk71J5s1pg5xxQ3TlA=="
114
115
  },
115
116
  {
116
117
  "name": "ignore",
@@ -142,31 +143,32 @@
142
143
  "version": "3.0.7",
143
144
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
144
145
  }
145
- ]
146
+ ],
147
+ "releaseVersion": "7.101.4"
146
148
  },
147
149
  "cursor": {
148
150
  "package": "@mnemonik/cursor-hooks",
149
- "version": "0.7.153",
151
+ "version": "0.7.158",
150
152
  "closure": [
151
153
  {
152
154
  "name": "@mnemonik/cursor-hooks",
153
- "version": "0.7.153",
154
- "integrity": "sha512-h3SlYqpinGcpwHKthzOZQJjB5dR4aNx8zijBfM9Hm1orXzIr6Ek8EAAtWWVh4lrAERPBx6PR5EWVZNPfk5d6lA=="
155
+ "version": "0.7.158",
156
+ "integrity": "sha512-hZVk2lIB+avi7r1vOEFuFjroIsH5tBDUKpWJj4o7VfttDUliofAVWo834KRVEBm2uHFHMhM4laDli3JMK9z2VA=="
155
157
  },
156
158
  {
157
159
  "name": "@mnemonik/credentials",
158
- "version": "0.1.18",
159
- "integrity": "sha512-zibbf7R+ECl7I9lSICVwqgGk/43GPtaEOHDHna7+i9LEXjnvqnzCv93+l/yJvYSFtVOr3qdGZh9IroC8pEaQLQ=="
160
+ "version": "0.1.23",
161
+ "integrity": "sha512-Mr39iinSasXnR35pMCcP5+9OHGihts93TNm3NyPbbw4sE4KPy3VNYAXB/JdV9fvLPTTq5gfm/ByIRQZ+nM8SjQ=="
160
162
  },
161
163
  {
162
164
  "name": "@mnemonik/local-setup",
163
- "version": "0.1.18",
164
- "integrity": "sha512-8xN9Yr/bmvcWJGqOa91cRO4Bu1D+ynaM3ep0foRndcnT9hIDiFVr5gedGAZ2yMIgFowaFY2hebB4hBjpeKqsug=="
165
+ "version": "0.1.23",
166
+ "integrity": "sha512-DNUEfedzYr7WJBqDMroJGjHAk5hnaDOprgiHKstYcWINyWS6buJIME6XdupE71OW8/uAS8URDCN0+9YI3GAWUQ=="
165
167
  },
166
168
  {
167
169
  "name": "@mnemonik/shared",
168
- "version": "7.100.0",
169
- "integrity": "sha512-cdBoMnpxl+jqI93/gz7gTpLJliJj92mtRBh7VvedaG7z13Im9aI9cfgsg2ZO8hfry5t0+q8satuToWQQkPIdQA=="
170
+ "version": "7.101.4",
171
+ "integrity": "sha512-2Q4G+epezRjtyK74bAACLt/nfV9oa4NWz73mcO3scPkqLa9hA+a1EUDTIHKm343uxHoYjk71J5s1pg5xxQ3TlA=="
170
172
  },
171
173
  {
172
174
  "name": "ignore",
@@ -198,31 +200,32 @@
198
200
  "version": "3.0.7",
199
201
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
200
202
  }
201
- ]
203
+ ],
204
+ "releaseVersion": "7.101.4"
202
205
  },
203
206
  "grok": {
204
207
  "package": "@mnemonik/grok-hooks",
205
- "version": "0.1.39",
208
+ "version": "0.1.44",
206
209
  "closure": [
207
210
  {
208
211
  "name": "@mnemonik/grok-hooks",
209
- "version": "0.1.39",
210
- "integrity": "sha512-MhFW7de0sdHGlY8sLThVTVXcyNo1+vYFMCFhYVCNxnLscHRTCU6PAgPGkqz9ME1jp2cMXydAOMEhvTP6VtPfww=="
212
+ "version": "0.1.44",
213
+ "integrity": "sha512-gY6xMFtdPcz9Yfc6dGcNksgjQus0dQ6Zr8Ku6WhQaj4YT0Wfw+Cyiw8pXZOl2t1HLfXG3rJ0Vkuf9nCECR+wFQ=="
211
214
  },
212
215
  {
213
216
  "name": "@mnemonik/credentials",
214
- "version": "0.1.18",
215
- "integrity": "sha512-zibbf7R+ECl7I9lSICVwqgGk/43GPtaEOHDHna7+i9LEXjnvqnzCv93+l/yJvYSFtVOr3qdGZh9IroC8pEaQLQ=="
217
+ "version": "0.1.23",
218
+ "integrity": "sha512-Mr39iinSasXnR35pMCcP5+9OHGihts93TNm3NyPbbw4sE4KPy3VNYAXB/JdV9fvLPTTq5gfm/ByIRQZ+nM8SjQ=="
216
219
  },
217
220
  {
218
221
  "name": "@mnemonik/local-setup",
219
- "version": "0.1.18",
220
- "integrity": "sha512-8xN9Yr/bmvcWJGqOa91cRO4Bu1D+ynaM3ep0foRndcnT9hIDiFVr5gedGAZ2yMIgFowaFY2hebB4hBjpeKqsug=="
222
+ "version": "0.1.23",
223
+ "integrity": "sha512-DNUEfedzYr7WJBqDMroJGjHAk5hnaDOprgiHKstYcWINyWS6buJIME6XdupE71OW8/uAS8URDCN0+9YI3GAWUQ=="
221
224
  },
222
225
  {
223
226
  "name": "@mnemonik/shared",
224
- "version": "7.100.0",
225
- "integrity": "sha512-cdBoMnpxl+jqI93/gz7gTpLJliJj92mtRBh7VvedaG7z13Im9aI9cfgsg2ZO8hfry5t0+q8satuToWQQkPIdQA=="
227
+ "version": "7.101.4",
228
+ "integrity": "sha512-2Q4G+epezRjtyK74bAACLt/nfV9oa4NWz73mcO3scPkqLa9hA+a1EUDTIHKm343uxHoYjk71J5s1pg5xxQ3TlA=="
226
229
  },
227
230
  {
228
231
  "name": "ignore",
@@ -254,7 +257,8 @@
254
257
  "version": "3.0.7",
255
258
  "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
256
259
  }
257
- ]
260
+ ],
261
+ "releaseVersion": "7.101.4"
258
262
  }
259
263
  }
260
264
  }