@runeya/runeya 2.0.48 → 2.0.49

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/index.js CHANGED
@@ -201,7 +201,7 @@ function listenWithRetry(server, port, host, wss, maxRetries = 20, delay = 500)
201
201
  });
202
202
  }
203
203
  async function main() {
204
- const { createLocalServer, pullEnv, PullEnvError } = await import("./src-GMWPTVN2.js");
204
+ const { createLocalServer, pullEnv, PullEnvError } = await import("./src-WVK4WUI3.js");
205
205
  if (isPullEnv) {
206
206
  if (!serviceArg) {
207
207
  console.error("Error: --service (-s) is required with --pull-env");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runeya/runeya",
3
- "version": "2.0.48",
3
+ "version": "2.0.49",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "runeya": "./index.js"
@@ -84,7 +84,7 @@ import {
84
84
  traefikManager,
85
85
  vaultFor,
86
86
  writeEntity
87
- } from "./chunk-JUOZ4L4Y.js";
87
+ } from "./chunk-4AGTVGSH.js";
88
88
 
89
89
  // ../server/src/create-server.ts
90
90
  import express from "express";
@@ -908,6 +908,14 @@ var EnvironmentOverridesStore = class {
908
908
  data = {};
909
909
  loaded = false;
910
910
  diskEncryptedSlots = {};
911
+ /**
912
+ * Les surcharges dont le secret ne s'est pas ouvert.
913
+ *
914
+ * Vides en mémoire, elles doivent repartir chiffrées : sans cela, la
915
+ * sauvegarde suivante remplacerait par du blanc une valeur dont il ne
916
+ * manquait que la clé.
917
+ */
918
+ unreadableSecrets = /* @__PURE__ */ new Set();
911
919
  saveQueue = Promise.resolve();
912
920
  /** Which vault each override was read from, until its project is known. */
913
921
  roots = /* @__PURE__ */ new Map();
@@ -963,7 +971,8 @@ var EnvironmentOverridesStore = class {
963
971
  );
964
972
  const decrypted = decryptVariableSlots(
965
973
  parsed,
966
- "environment-overrides"
974
+ "environment-overrides",
975
+ (variableId) => this.unreadableSecrets.add(variableId)
967
976
  );
968
977
  for (const [id, override] of Object.entries(decrypted)) {
969
978
  this.data[id] = { value: override.value };
@@ -993,10 +1002,10 @@ var EnvironmentOverridesStore = class {
993
1002
  byRoot.set(root, bucket);
994
1003
  }
995
1004
  for (const [root, overrides] of byRoot) {
996
- const encrypted = encryptVariableSlots(
1005
+ const encrypted = this.keepUnreadableSecrets(encryptVariableSlots(
997
1006
  overrides,
998
1007
  this.diskEncryptedSlots
999
- );
1008
+ ));
1000
1009
  Object.assign(
1001
1010
  this.diskEncryptedSlots,
1002
1011
  extractEncryptedVariableSlots(encrypted)
@@ -1009,6 +1018,24 @@ var EnvironmentOverridesStore = class {
1009
1018
  await chmod3(path, 384);
1010
1019
  }
1011
1020
  }
1021
+ /**
1022
+ * Rendre au disque le chiffré d'une surcharge illisible, plutôt qu'un blanc.
1023
+ *
1024
+ * Pendant du garde-fou du store des environnements : tant que la valeur en
1025
+ * mémoire est vide, c'est que personne n'a retouché la variable et que son
1026
+ * chiffré fait toujours foi.
1027
+ */
1028
+ keepUnreadableSecrets(overrides) {
1029
+ if (this.unreadableSecrets.size === 0) return overrides;
1030
+ const result = { ...overrides };
1031
+ for (const variableId of this.unreadableSecrets) {
1032
+ const ciphertext = this.diskEncryptedSlots[variableId];
1033
+ const override = result[variableId];
1034
+ if (!ciphertext || !override || override.value.value) continue;
1035
+ result[variableId] = { ...override, value: { ...override.value, value: ciphertext } };
1036
+ }
1037
+ return result;
1038
+ }
1012
1039
  async getOverride(variableId) {
1013
1040
  await this.load();
1014
1041
  return this.data[variableId] ?? null;
@@ -1022,6 +1049,7 @@ var EnvironmentOverridesStore = class {
1022
1049
  await this.load();
1023
1050
  if (!this.data[variableId]) return;
1024
1051
  delete this.data[variableId];
1052
+ this.unreadableSecrets.delete(variableId);
1025
1053
  await this.save();
1026
1054
  }
1027
1055
  async getAll() {
@@ -1034,6 +1062,7 @@ var EnvironmentOverridesStore = class {
1034
1062
  for (const id of variableIds) {
1035
1063
  if (this.data[id]) {
1036
1064
  delete this.data[id];
1065
+ this.unreadableSecrets.delete(id);
1037
1066
  changed = true;
1038
1067
  }
1039
1068
  }
@@ -6958,7 +6987,7 @@ function tailTranscript(opts) {
6958
6987
 
6959
6988
  // ../server/src/services/ai-runners/claude-pty-runner.ts
6960
6989
  async function getAgentManager() {
6961
- const { agentManager: agentManager2 } = await import("./agent-manager-3VUZZC3X.js");
6990
+ const { agentManager: agentManager2 } = await import("./agent-manager-JNA5ZALK.js");
6962
6991
  return agentManager2;
6963
6992
  }
6964
6993
  function buildPtyArgs(params, sessionId, opts) {
@@ -7611,7 +7640,7 @@ async function shutdownCodexAppServer() {
7611
7640
  }
7612
7641
  }
7613
7642
  async function getAgentManager2() {
7614
- const { agentManager: agentManager2 } = await import("./agent-manager-3VUZZC3X.js");
7643
+ const { agentManager: agentManager2 } = await import("./agent-manager-JNA5ZALK.js");
7615
7644
  return agentManager2;
7616
7645
  }
7617
7646
  function parseRuneyaCurlCommand(command) {
@@ -15933,4 +15962,4 @@ export {
15933
15962
  createLocalServer,
15934
15963
  pullEnv
15935
15964
  };
15936
- //# sourceMappingURL=src-GMWPTVN2.js.map
15965
+ //# sourceMappingURL=src-WVK4WUI3.js.map