@runeya/runeya 2.0.144 → 2.0.145

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 (135) hide show
  1. package/agent/index.js +7 -1
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-THV3LJOF.js +11 -0
  4. package/{chat-X3X527EX.js → chat-XYCHMTFE.js} +9 -9
  5. package/{chunk-7HIPFSOA.js → chunk-57P45FNY.js} +11 -3
  6. package/chunk-57P45FNY.js.map +1 -0
  7. package/{chunk-UR3HL373.js → chunk-FE53XX4M.js} +8 -8
  8. package/{chunk-IXO5KIO5.js → chunk-KS7A5CTW.js} +12 -1
  9. package/{chunk-IXO5KIO5.js.map → chunk-KS7A5CTW.js.map} +1 -1
  10. package/{chunk-XAFOP677.js → chunk-MZSDTA4A.js} +480 -233
  11. package/chunk-MZSDTA4A.js.map +1 -0
  12. package/{chunk-7L6AQUBR.js → chunk-NCO4OOYT.js} +6 -2
  13. package/{chunk-7L6AQUBR.js.map → chunk-NCO4OOYT.js.map} +1 -1
  14. package/{chunk-P73PTVII.js → chunk-ONVAH65J.js} +103 -33
  15. package/chunk-ONVAH65J.js.map +1 -0
  16. package/{chunk-NSS47H26.js → chunk-Q4RPY3VW.js} +330 -74
  17. package/chunk-Q4RPY3VW.js.map +1 -0
  18. package/{chunk-GXE5TLLJ.js → chunk-QF56Z6LI.js} +17 -17
  19. package/{companion-2LHKU577.js → companion-HBYSY2D5.js} +11 -7
  20. package/{desktop-installer-page-6JDSXK2E.js → desktop-installer-page-I5FHFDES.js} +11 -8
  21. package/desktop-installer-page-I5FHFDES.js.map +1 -0
  22. package/{desktop-launcher-YPNRQMIS.js → desktop-launcher-GD4QPM66.js} +3 -3
  23. package/index.js +25 -12
  24. package/index.js.map +1 -1
  25. package/{install-gate-2NNH7RM2.js → install-gate-JAEK4BDZ.js} +2 -2
  26. package/mcp-server/index.js +7 -1
  27. package/mcp-server/index.js.map +1 -1
  28. package/package.json +1 -1
  29. package/settings-manager-QVQRJO6V.js +10 -0
  30. package/src-DCCEUWE6.js +385 -0
  31. package/{src-5TEXF3SU.js → src-IODFUZ7A.js} +100 -59
  32. package/src-IODFUZ7A.js.map +1 -0
  33. package/{vault-resolver-VK6W5J6W.js → vault-resolver-PN3TYCLJ.js} +3 -2
  34. package/vault-resolver-PN3TYCLJ.js.map +1 -0
  35. package/web/assets/{AgentScalarChatInterface.vue-B-SjOsdj.js → AgentScalarChatInterface.vue-npQgDxeP.js} +1 -1
  36. package/web/assets/{AgentTerminalPage-JzC8DUgu.js → AgentTerminalPage-BTH3yCS2.js} +1 -1
  37. package/web/assets/{AiChatModals-D1928AxG.js → AiChatModals-It9jnB26.js} +1 -1
  38. package/web/assets/AppLayout-BTg2CADo.js +1 -0
  39. package/web/assets/{AppLayout-8sBPr3od.css → AppLayout-tsw5Ow0w.css} +1 -1
  40. package/web/assets/{AuditPage-BZIJ3_Kr.js → AuditPage-2PKKGLZs.js} +1 -1
  41. package/web/assets/{CloudAccountPage-DBv470sT.js → CloudAccountPage-CHL61gLe.js} +1 -1
  42. package/web/assets/{CloudMessagingPage-qCI8-UDL.js → CloudMessagingPage-cgKnABPH.js} +1 -1
  43. package/web/assets/DashboardPage-CRntTMKY.js +1 -0
  44. package/web/assets/{DashboardPage-D9-PpC3F.css → DashboardPage-FvNuC_e4.css} +1 -1
  45. package/web/assets/{DirectoryPickerDialog-B5DvDfQP.js → DirectoryPickerDialog-DCyhT3-W.js} +1 -1
  46. package/web/assets/{EnvironmentForm-Bw8Djnqm.js → EnvironmentForm-C96PFWRE.js} +1 -1
  47. package/web/assets/{EnvironmentFormPage-B59uiYtp.js → EnvironmentFormPage-ChorAd63.js} +1 -1
  48. package/web/assets/{EnvironmentListPage-W9zLDZAg.js → EnvironmentListPage-Dw9ziaI8.js} +1 -1
  49. package/web/assets/KanbanBoardPage-BZHbEj-q.js +4 -0
  50. package/web/assets/KanbanBoardPage-eHmsrFGA.css +1 -0
  51. package/web/assets/{KanbanListPage-Bn9k8Rpc.js → KanbanListPage-B0jlfKqs.js} +1 -1
  52. package/web/assets/{LaunchProjectPage-Dc7v1UjQ.js → LaunchProjectPage-BVs1JwbV.js} +1 -1
  53. package/web/assets/LaunchServicesPage-DoLDPqQq.css +1 -0
  54. package/web/assets/LaunchServicesPage-PBYJly9N.js +1 -0
  55. package/web/assets/{LaunchShell-LonTJpb3.js → LaunchShell-CGNYr-do.js} +1 -1
  56. package/web/assets/{LogViewer-DkuqWYkQ.js → LogViewer-BDObx29F.js} +1 -1
  57. package/web/assets/{OrgKeyPrompt-By1VjlSN.js → OrgKeyPrompt-BbcwiwGw.js} +1 -1
  58. package/web/assets/{ProcessControls-C0skzKGL.js → ProcessControls-DY0HTKde.js} +1 -1
  59. package/web/assets/{ProcessDetailPage-BvPX6z_X.js → ProcessDetailPage-BZ9kIQqn.js} +1 -1
  60. package/web/assets/{ProjectCreateDialog-C4o9u15L.js → ProjectCreateDialog-C1wVDPcK.js} +1 -1
  61. package/web/assets/{ProjectLocationGate-BJ1CSQt0.js → ProjectLocationGate-bUd_tFpI.js} +1 -1
  62. package/web/assets/{ProjectPublishDialog-Cp-zXdGm.js → ProjectPublishDialog-APUS1WEN.js} +1 -1
  63. package/web/assets/{RandomJobTestPage-DF4a1U13.js → RandomJobTestPage-BFNC827R.js} +1 -1
  64. package/web/assets/ScenarioEditorPage-DFVsMVu5.js +14 -0
  65. package/web/assets/{SendToChatDialog-Dg2SHkVD.js → SendToChatDialog-QHIkxNio.js} +1 -1
  66. package/web/assets/{ServiceControlsBar-q2VHWaxK.js → ServiceControlsBar-_UQXb6g0.js} +1 -1
  67. package/web/assets/ServiceDetailPage-DGIXgHwR.js +2 -0
  68. package/web/assets/{ServiceFormPage-tT_n7WUy.js → ServiceFormPage-RliAfS3_.js} +1 -1
  69. package/web/assets/SettingsPage-BSSHxxjM.js +2086 -0
  70. package/web/assets/{SettingsPage-aGSxZw1n.css → SettingsPage-W8YszhUL.css} +1 -1
  71. package/web/assets/{UnlockPage-BKAdMJkb.js → UnlockPage-17EgfpJs.js} +1 -1
  72. package/web/assets/{VaultMigrationPage-D9KUTTss.js → VaultMigrationPage-DeMxpXXJ.js} +1 -1
  73. package/web/assets/{VersionBadge-moKP5bAv.js → VersionBadge-DBquJl76.js} +1 -1
  74. package/web/assets/{WikiPage-hLUndDxo.js → WikiPage-GtwpJPqf.js} +1 -1
  75. package/web/assets/{WikiView-rrjXRR72.js → WikiView-BqaqxMxW.js} +1 -1
  76. package/web/assets/{add-scalar-classes-CBfRr8B2.js → add-scalar-classes-DhSSqZ5l.js} +2 -2
  77. package/web/assets/{agent.store-B3dVemmT.js → agent.store-Co44dMZf.js} +1 -1
  78. package/web/assets/app-mode-BVpTuh0i.js +1 -0
  79. package/web/assets/auth-Bk1GP5sB.js +2 -0
  80. package/web/assets/{cloud-chat.store-Wg1poFem.js → cloud-chat.store-CadB14dZ.js} +1 -1
  81. package/web/assets/{cloud-client-DQlUaoAw.js → cloud-client-0zD_NI6q.js} +2 -2
  82. package/web/assets/{cloud-session-DRUqcSGP.js → cloud-session-Cjw54Y--.js} +2 -2
  83. package/web/assets/dist-N4nrnbnA.js +1 -0
  84. package/web/assets/{editor.store-SoH48ux2.js → editor.store-DmM6ZlTm.js} +1 -1
  85. package/web/assets/i18n-8FjeJaKW.js +1 -0
  86. package/web/assets/{index-D_x2s8Ut.js → index-B9DJf2V0.js} +101 -101
  87. package/web/assets/{index-C_JV7fYy.css → index-teBqdnuv.css} +1 -1
  88. package/web/assets/{modal-CpsVK_dA.js → modal-UK8xRSnh.js} +1 -1
  89. package/web/assets/{project-launch.store-C3fZeRGb.js → project-launch.store-B5nhdGdh.js} +1 -1
  90. package/web/assets/{project.store-BEk4fciH.js → project.store-Bm2JWNbd.js} +1 -1
  91. package/web/assets/{scenario.store-D-JrRiVO.js → scenario.store-88w6P6s2.js} +2 -2
  92. package/web/assets/{service.store-B5uYZtyM.js → service.store-XS50iGKo.js} +1 -1
  93. package/web/assets/{settings-scope-Blnwj3rR.js → settings-scope-CKPq86HZ.js} +1 -1
  94. package/web/assets/{settings.store-Bo3FYs1o.js → settings.store-BCJ0LJQA.js} +1 -1
  95. package/web/assets/src-BDZKZr9n.css +1 -0
  96. package/web/assets/{src-DValZNJU.js → src-Cgix2VOi.js} +5 -5
  97. package/web/assets/{src-CAwAaB5j.js → src-DBipSD56.js} +1 -1
  98. package/web/assets/{trpc-DbsE5GvQ.js → trpc-CfuFkKgp.js} +3 -3
  99. package/web/assets/{useCloudOrg-DygUBG1a.js → useCloudOrg-J8DAnocE.js} +1 -1
  100. package/web/assets/{useEnvVarAutocomplete-DmYNOXgd.js → useEnvVarAutocomplete-C6zOXYqi.js} +1 -1
  101. package/web/assets/{useProjectCatalog-D2mHB7dg.js → useProjectCatalog-BB5IR6o8.js} +1 -1
  102. package/web/assets/{useProjectCloudOrg-avTCVold.js → useProjectCloudOrg-BnlKts7x.js} +1 -1
  103. package/web/assets/{useServiceUrlHost-Q3fzGox3.js → useServiceUrlHost-hKbKtPMu.js} +1 -1
  104. package/web/assets/{vue-draggable-plus-WgrMXXmE.js → vue-draggable-plus-D5ni4jMk.js} +1 -1
  105. package/web/index.html +19 -18
  106. package/agent-manager-M4NA5YFD.js +0 -11
  107. package/chunk-7HIPFSOA.js.map +0 -1
  108. package/chunk-NSS47H26.js.map +0 -1
  109. package/chunk-P73PTVII.js.map +0 -1
  110. package/chunk-XAFOP677.js.map +0 -1
  111. package/desktop-installer-page-6JDSXK2E.js.map +0 -1
  112. package/settings-manager-32SVMAFN.js +0 -10
  113. package/src-5TEXF3SU.js.map +0 -1
  114. package/web/assets/AppLayout-CVQIBYqg.js +0 -1
  115. package/web/assets/DashboardPage-D0UZM0mr.js +0 -1
  116. package/web/assets/KanbanBoardPage-DRACMk_D.css +0 -1
  117. package/web/assets/KanbanBoardPage-DwPqoJDJ.js +0 -4
  118. package/web/assets/LaunchServicesPage-CXUS9O3y.js +0 -1
  119. package/web/assets/LaunchServicesPage-DJDIN8HU.css +0 -1
  120. package/web/assets/ScenarioEditorPage-Dl-gEkJI.js +0 -14
  121. package/web/assets/ServiceDetailPage-CJ8WaFod.js +0 -2
  122. package/web/assets/SettingsPage-CWakkv0V.js +0 -2086
  123. package/web/assets/auth-BCrvnP1U.js +0 -2
  124. package/web/assets/dist-DoChtT9t.js +0 -1
  125. package/web/assets/i18n-BszFg0ko.js +0 -1
  126. package/web/assets/src-DuBXN1hu.css +0 -1
  127. /package/{agent-manager-M4NA5YFD.js.map → agent-manager-THV3LJOF.js.map} +0 -0
  128. /package/{chat-X3X527EX.js.map → chat-XYCHMTFE.js.map} +0 -0
  129. /package/{chunk-UR3HL373.js.map → chunk-FE53XX4M.js.map} +0 -0
  130. /package/{chunk-GXE5TLLJ.js.map → chunk-QF56Z6LI.js.map} +0 -0
  131. /package/{companion-2LHKU577.js.map → companion-HBYSY2D5.js.map} +0 -0
  132. /package/{desktop-launcher-YPNRQMIS.js.map → desktop-launcher-GD4QPM66.js.map} +0 -0
  133. /package/{install-gate-2NNH7RM2.js.map → install-gate-JAEK4BDZ.js.map} +0 -0
  134. /package/{settings-manager-32SVMAFN.js.map → settings-manager-QVQRJO6V.js.map} +0 -0
  135. /package/{vault-resolver-VK6W5J6W.js.map → src-DCCEUWE6.js.map} +0 -0
@@ -62,13 +62,15 @@ import {
62
62
  soleAccountScope,
63
63
  startCliSession,
64
64
  vaultOfProject
65
- } from "./chunk-P73PTVII.js";
65
+ } from "./chunk-ONVAH65J.js";
66
66
  import {
67
67
  settingsManager
68
- } from "./chunk-UR3HL373.js";
68
+ } from "./chunk-FE53XX4M.js";
69
69
  import {
70
+ CONVERSATIONS_DIRNAME,
70
71
  LocalProjectRefusedError,
71
72
  activeSessionRegistry,
73
+ companionCreateDefaults,
72
74
  companionDefaultPrompt,
73
75
  companionSettings,
74
76
  conversationStore,
@@ -87,7 +89,7 @@ import {
87
89
  stopClaudeTranscriptWatcher,
88
90
  stopCodexTranscriptWatcher,
89
91
  verifyJwt
90
- } from "./chunk-NSS47H26.js";
92
+ } from "./chunk-Q4RPY3VW.js";
91
93
  import {
92
94
  agentManager,
93
95
  agentSpawner,
@@ -126,14 +128,46 @@ import {
126
128
  stableEncryptValue,
127
129
  traefikManager,
128
130
  unregisterInstance
129
- } from "./chunk-GXE5TLLJ.js";
131
+ } from "./chunk-QF56Z6LI.js";
132
+ import {
133
+ decryptValueWith,
134
+ encryptValueWith,
135
+ resolveCliInvocation,
136
+ whichCommand
137
+ } from "./chunk-OZBSOSAS.js";
130
138
  import {
131
139
  atomicWriteSecure,
132
140
  renameWithRetry,
133
141
  resolveConversationRunDir,
134
142
  sweepStaleTempFiles
135
- } from "./chunk-7L6AQUBR.js";
143
+ } from "./chunk-NCO4OOYT.js";
136
144
  import "./chunk-MD3VW4HQ.js";
145
+ import {
146
+ allVaultRoots,
147
+ backfillOrgCloud,
148
+ env,
149
+ forgetOrgLogo,
150
+ keyRoot,
151
+ legacyMachineFilePath,
152
+ legacyVaultRoot,
153
+ listCloudVaults,
154
+ listOrgVaults,
155
+ localVaultCollidesWithMachineRoot,
156
+ machineFilePath,
157
+ machineRoot,
158
+ orgVaultRoot,
159
+ projectVaultRoot,
160
+ readOrgAccounts,
161
+ readOrgClouds,
162
+ readOrgLogo,
163
+ readOrgLogos,
164
+ readOrgNames,
165
+ rememberOrgAccount,
166
+ rememberOrgLogo,
167
+ rememberOrgName,
168
+ stampOrgCloud,
169
+ vaultFor
170
+ } from "./chunk-KS7A5CTW.js";
137
171
  import {
138
172
  AGENT_LONG_FETCH_TIMEOUT,
139
173
  AGENT_STOP_FETCH_TIMEOUT,
@@ -146,6 +180,7 @@ import {
146
180
  EDITOR_BY_KEY,
147
181
  JSLogParser,
148
182
  JSLogParserSchema,
183
+ LAUNCHER_PROJECT_ID_PATTERN,
149
184
  LOG_BUFFER_SIZE,
150
185
  MissingVariableReasonSchema,
151
186
  NotificationPreferencesSchema,
@@ -170,45 +205,13 @@ import {
170
205
  serviceSlug,
171
206
  suggestBuiltinReferences,
172
207
  writeEntity
173
- } from "./chunk-XAFOP677.js";
174
- import {
175
- allVaultRoots,
176
- backfillOrgCloud,
177
- env,
178
- forgetOrgLogo,
179
- keyRoot,
180
- legacyMachineFilePath,
181
- legacyVaultRoot,
182
- listCloudVaults,
183
- listOrgVaults,
184
- localVaultCollidesWithMachineRoot,
185
- machineFilePath,
186
- machineRoot,
187
- orgVaultRoot,
188
- projectVaultRoot,
189
- readOrgAccounts,
190
- readOrgClouds,
191
- readOrgLogo,
192
- readOrgLogos,
193
- readOrgNames,
194
- rememberOrgAccount,
195
- rememberOrgLogo,
196
- rememberOrgName,
197
- stampOrgCloud,
198
- vaultFor
199
- } from "./chunk-IXO5KIO5.js";
200
- import {
201
- decryptValueWith,
202
- encryptValueWith,
203
- resolveCliInvocation,
204
- whichCommand
205
- } from "./chunk-OZBSOSAS.js";
208
+ } from "./chunk-MZSDTA4A.js";
206
209
 
207
210
  // ../server/src/create-server.ts
208
211
  import express from "express";
209
212
  import cors from "cors";
210
213
  import { createServer } from "http";
211
- import { resolve as resolve3 } from "path";
214
+ import { join as join17, resolve as resolve3 } from "path";
212
215
  import { WebSocketServer } from "ws";
213
216
  import { createExpressMiddleware } from "@trpc/server/adapters/express";
214
217
  import { applyWSSHandler } from "@trpc/server/adapters/ws";
@@ -2553,6 +2556,10 @@ var ScopeShape = {
2553
2556
  async function scopeOf(input) {
2554
2557
  return input?.orgId ?? await vaultOfProject(input?.projectId);
2555
2558
  }
2559
+ function keepOrReplace(key, current2, next) {
2560
+ const value = next === void 0 ? current2 : next || void 0;
2561
+ return value ? { [key]: value } : {};
2562
+ }
2556
2563
  var settingsRouter = router({
2557
2564
  /**
2558
2565
  * Get all settings
@@ -2772,6 +2779,10 @@ var settingsRouter = router({
2772
2779
  return {
2773
2780
  enabledByDefault: c.enabledByDefault ?? false,
2774
2781
  prompt: c.prompt ?? "",
2782
+ /** Chaîne vide = pas de runner imposé : celui de la conversation. */
2783
+ runner: c.runner ?? "",
2784
+ model: c.model ?? "",
2785
+ effort: c.effort ?? "",
2775
2786
  /**
2776
2787
  * Conservé dans la réponse pour ne pas casser un client déjà construit,
2777
2788
  * mais l'écran n'en fait plus un texte à modifier : le réglage ajoute
@@ -2784,7 +2795,11 @@ var settingsRouter = router({
2784
2795
  enabledByDefault: z11.boolean().optional(),
2785
2796
  // Rejeté au-delà, jamais tronqué : un prompt coupé produirait des
2786
2797
  // relectures incohérentes sans rien signaler.
2787
- prompt: z11.string().max(2e4).optional()
2798
+ prompt: z11.string().max(2e4).optional(),
2799
+ /** Chaîne vide = retirer le défaut. */
2800
+ runner: z11.enum(["claude-code", "codex", ""]).optional(),
2801
+ model: z11.string().max(200).optional(),
2802
+ effort: z11.enum(["low", "normal", "high", ""]).optional()
2788
2803
  })).mutation(async ({ input }) => {
2789
2804
  const settings = await settingsManager.getSettings();
2790
2805
  const current2 = settings.companion ?? { enabledByDefault: false };
@@ -2795,7 +2810,10 @@ var settingsRouter = router({
2795
2810
  enabledByDefault: input.enabledByDefault ?? current2.enabledByDefault ?? false,
2796
2811
  // Vide = « celles de Runeya » : on efface le réglage plutôt que d'y
2797
2812
  // ranger une chaîne vide qui signifierait « aucune consigne ».
2798
- ...input.prompt === void 0 ? current2.prompt ? { prompt: current2.prompt } : {} : prompt ? { prompt } : {}
2813
+ ...input.prompt === void 0 ? current2.prompt ? { prompt: current2.prompt } : {} : prompt ? { prompt } : {},
2814
+ ...keepOrReplace("runner", current2.runner, input.runner),
2815
+ ...keepOrReplace("model", current2.model, input.model?.trim()),
2816
+ ...keepOrReplace("effort", current2.effort, input.effort)
2799
2817
  }
2800
2818
  });
2801
2819
  return { ok: true };
@@ -5909,7 +5927,7 @@ var KanbanQueueService = class extends EventEmitter2 {
5909
5927
  this.tick();
5910
5928
  return;
5911
5929
  }
5912
- const companionByDefault = (await companionSettings()).enabledByDefault;
5930
+ const companionDefaults = companionCreateDefaults(await companionSettings(), item.runner);
5913
5931
  const conv = await conversationStore.create(
5914
5932
  `Queue: ${card.title}`,
5915
5933
  !!item.runner,
@@ -5921,7 +5939,7 @@ var KanbanQueueService = class extends EventEmitter2 {
5921
5939
  void 0,
5922
5940
  item.projectId,
5923
5941
  item.orgId,
5924
- companionByDefault ? { companionEnabled: true } : void 0
5942
+ Object.keys(companionDefaults).length > 0 ? companionDefaults : void 0
5925
5943
  );
5926
5944
  const cardContent = card.title + (card.markdown ? "\n\n" + card.markdown : "");
5927
5945
  if (item.scenarioId) {
@@ -6878,7 +6896,9 @@ var configRouter = router({
6878
6896
  /** How this instance was launched, and where it answers. */
6879
6897
  app: publicProcedure.query(() => ({
6880
6898
  fromDesktop: env.FROM_DESKTOP,
6881
- port: env.PORT
6899
+ port: env.PORT,
6900
+ /** Projet figé par `--project`, ou null. */
6901
+ projectId: env.PROJECT_ID
6882
6902
  }))
6883
6903
  });
6884
6904
 
@@ -7989,7 +8009,7 @@ var cloudSyncBridge = new CloudSyncBridge();
7989
8009
 
7990
8010
  // ../server/src/services/key-adoption.ts
7991
8011
  import { readdir as readdir3, readFile as readFile5, writeFile as writeFile6, mkdir as mkdir8, copyFile, rename as rename2, stat as stat5 } from "fs/promises";
7992
- import { join as join11 } from "path";
8012
+ import { dirname as dirname6, join as join11 } from "path";
7993
8013
  import { createCipheriv as createCipheriv2, createDecipheriv as createDecipheriv2, randomBytes as randomBytes2 } from "crypto";
7994
8014
  var ALGORITHM = "aes-256-gcm";
7995
8015
  function isAgentTriplet(value) {
@@ -8044,14 +8064,22 @@ async function rootsOfOrg(orgId) {
8044
8064
  }
8045
8065
  return Array.from(roots);
8046
8066
  }
8047
- async function jsonFilesIn(root) {
8067
+ var ENCRYPTED_SUBDIRS = [CONVERSATIONS_DIRNAME];
8068
+ async function jsonNamesIn(dir) {
8048
8069
  try {
8049
- const entries2 = await readdir3(root, { withFileTypes: true });
8070
+ const entries2 = await readdir3(dir, { withFileTypes: true });
8050
8071
  return entries2.filter((e) => e.isFile() && e.name.endsWith(".json")).map((e) => e.name);
8051
8072
  } catch {
8052
8073
  return [];
8053
8074
  }
8054
8075
  }
8076
+ async function jsonFilesIn(root) {
8077
+ const names = await jsonNamesIn(root);
8078
+ for (const sub of ENCRYPTED_SUBDIRS) {
8079
+ names.push(...(await jsonNamesIn(join11(root, sub))).map((n) => join11(sub, n)));
8080
+ }
8081
+ return names;
8082
+ }
8055
8083
  async function exists(path) {
8056
8084
  return stat5(path).then(() => true, () => false);
8057
8085
  }
@@ -8106,6 +8134,7 @@ async function adoptOrgKey(orgId, newKey, masterPassword, now) {
8106
8134
  const backupDir = join11(vaultRoot, `backup-key-${stamp}`);
8107
8135
  await mkdir8(backupDir, { recursive: true });
8108
8136
  for (const name of await jsonFilesIn(vaultRoot)) {
8137
+ await mkdir8(dirname6(join11(backupDir, name)), { recursive: true });
8109
8138
  await copyFile(join11(vaultRoot, name), join11(backupDir, name));
8110
8139
  }
8111
8140
  for (const name of [".encryption.key.enc", ".runeya-verify"]) {
@@ -8609,7 +8638,7 @@ var cloudSyncRouter = router({
8609
8638
  // ../server/src/trpc/routers/filesystem.ts
8610
8639
  import { readdir as readdir4, stat as stat6 } from "fs/promises";
8611
8640
  import { homedir as homedir3 } from "os";
8612
- import { isAbsolute as isAbsolute3, join as join12, resolve as resolve2, dirname as dirname6, basename } from "path";
8641
+ import { isAbsolute as isAbsolute3, join as join12, resolve as resolve2, dirname as dirname7, basename } from "path";
8613
8642
  import { z as z25 } from "zod";
8614
8643
  var MAX_ENTRIES2 = 500;
8615
8644
  var PATH_SCHEMA = z25.string().min(1).max(4096);
@@ -8657,7 +8686,7 @@ var filesystemRouter = router({
8657
8686
  return {
8658
8687
  path: dir,
8659
8688
  // Null at the filesystem root, which is what stops "up" from looping.
8660
- parent: dirname6(dir) === dir ? null : dirname6(dir),
8689
+ parent: dirname7(dir) === dir ? null : dirname7(dir),
8661
8690
  name: basename(dir) || dir,
8662
8691
  entries: entries2,
8663
8692
  truncated,
@@ -8742,7 +8771,8 @@ async function installLauncher(input) {
8742
8771
  "--port",
8743
8772
  String(input.port),
8744
8773
  "--agent-port",
8745
- String(input.agentPort)
8774
+ String(input.agentPort),
8775
+ ...input.projectId ? ["--project", input.projectId] : []
8746
8776
  ];
8747
8777
  const { stdout, stderr } = await exec(cli.execPath, args, {
8748
8778
  timeout: INSTALL_TIMEOUT_MS2,
@@ -8806,7 +8836,9 @@ var desktopRouter = router({
8806
8836
  message: "Le dossier de travail doit \xEAtre un chemin absolu."
8807
8837
  }).nullable(),
8808
8838
  port: z26.number().int().min(1).max(65535),
8809
- agentPort: z26.number().int().min(1).max(65535)
8839
+ agentPort: z26.number().int().min(1).max(65535),
8840
+ /** Projet ouvert directement par le raccourci (`--project`). Absent : liste des projets. */
8841
+ projectId: z26.string().max(128).regex(LAUNCHER_PROJECT_ID_PATTERN).nullable().optional()
8810
8842
  })).mutation(async ({ input }) => {
8811
8843
  try {
8812
8844
  return await installLauncher(input);
@@ -9076,7 +9108,7 @@ import {
9076
9108
  access as access2,
9077
9109
  readdir as readdir6
9078
9110
  } from "fs/promises";
9079
- import { join as join15, dirname as dirname7 } from "path";
9111
+ import { join as join15, dirname as dirname8 } from "path";
9080
9112
  var _require = createRequire(import.meta.url);
9081
9113
  var PARSER_ID_MAP = {
9082
9114
  "stack-monitor-parser-jsons": "native:json",
@@ -9685,7 +9717,7 @@ async function runOverrideOnlyMigration(dataDir) {
9685
9717
  const { resolve: resolve4 } = await import("path");
9686
9718
  const abDataDir = resolve4(dataDir);
9687
9719
  const candidateDirs = [
9688
- join15(dirname7(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9720
+ join15(dirname8(env.DATA_DIR), ".runeya", "dbs", "overrides"),
9689
9721
  join15(abDataDir, "dbs", "overrides")
9690
9722
  ];
9691
9723
  let overridesDir = null;
@@ -10394,9 +10426,18 @@ async function createLocalServer() {
10394
10426
  await serviceStore.list().catch((err) => {
10395
10427
  console.warn("[server] Failed to preload services:", err);
10396
10428
  });
10429
+ void conversationStore.list().catch((err) => {
10430
+ console.warn("[server] Failed to preload conversations:", err);
10431
+ });
10397
10432
  void (async () => {
10398
10433
  const orgRoots = (await listOrgVaults()).map((orgId) => orgVaultRoot(orgId));
10399
- const removed = await sweepStaleTempFiles([machineRoot(), ...orgRoots, ...await allVaultRoots()]);
10434
+ const vaultRoots = await allVaultRoots();
10435
+ const removed = await sweepStaleTempFiles([
10436
+ machineRoot(),
10437
+ ...orgRoots,
10438
+ ...vaultRoots,
10439
+ ...[machineRoot(), ...vaultRoots].map((root) => join17(root, CONVERSATIONS_DIRNAME))
10440
+ ]);
10400
10441
  if (removed > 0) console.log(`[server] ${removed} fichier(s) temporaire(s) orphelin(s) retir\xE9(s)`);
10401
10442
  })().catch((err) => console.warn("[server] Temp file sweep failed:", err));
10402
10443
  cloudSyncBridge.start().catch((err) => {
@@ -11052,7 +11093,7 @@ async function createLocalServer() {
11052
11093
  ]);
11053
11094
  console.log("[server] Shutdown complete");
11054
11095
  };
11055
- const { initCompanion } = await import("./companion-2LHKU577.js");
11096
+ const { initCompanion } = await import("./companion-HBYSY2D5.js");
11056
11097
  initCompanion();
11057
11098
  return { app, server, wss, shutdown };
11058
11099
  }
@@ -11183,7 +11224,7 @@ function onTrayServicesChanged(listener) {
11183
11224
 
11184
11225
  // ../server/src/services/tray-icon.ts
11185
11226
  import { mkdir as mkdir12, writeFile as writeFile10, rename as rename6 } from "fs/promises";
11186
- import { join as join17 } from "path";
11227
+ import { join as join18 } from "path";
11187
11228
 
11188
11229
  // ../server/src/services/png-to-ico.ts
11189
11230
  function isPng(bytes) {
@@ -11343,7 +11384,7 @@ var FETCH_TIMEOUT_MS = 3e3;
11343
11384
  var CACHE_TTL_MS = 10 * 6e4;
11344
11385
  var cache2 = /* @__PURE__ */ new Map();
11345
11386
  function trayIconDir() {
11346
- return join17(machineRoot(), "tray-icons");
11387
+ return join18(machineRoot(), "tray-icons");
11347
11388
  }
11348
11389
  async function resolveTrayIcon(platform = process.platform) {
11349
11390
  const orgId = getCurrentProject()?.orgId;
@@ -11372,7 +11413,7 @@ async function renderThemedIcon(platform) {
11372
11413
  async function writeTrayIcon(stem, png, platform) {
11373
11414
  const dir = trayIconDir();
11374
11415
  await mkdir12(dir, { recursive: true });
11375
- const path = join17(dir, stem);
11416
+ const path = join18(dir, stem);
11376
11417
  if (platform === "win32") {
11377
11418
  const ico = pngToIco(png);
11378
11419
  return ico ? writeAtomic(`${path}.ico`, ico) : null;
@@ -11507,4 +11548,4 @@ export {
11507
11548
  stopProcess,
11508
11549
  userPrefix
11509
11550
  };
11510
- //# sourceMappingURL=src-5TEXF3SU.js.map
11551
+ //# sourceMappingURL=src-IODFUZ7A.js.map