dsh-cliworker-now 0.0.0-stage → 0.7.7

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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +364 -0
  3. package/README.md +368 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/account-models.mjs +262 -0
  6. package/lib/client.js +22139 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/grok-catalog.mjs +145 -0
  9. package/lib/hermes-native-entry.py +96 -0
  10. package/lib/hermes-nous-refresh.py +331 -0
  11. package/lib/index.js +14544 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/native-launch.mjs +234 -0
  14. package/lib/native-spawn.mjs +32 -0
  15. package/lib/own-account-lease.mjs +105 -0
  16. package/lib/pi-installation.mjs +87 -0
  17. package/lib/pi-login.mjs +80 -0
  18. package/lib/pi-native-catalog.mjs +417 -0
  19. package/lib/pi-omp-bridge.mjs +602 -0
  20. package/lib/pi-omp-environment.mjs +15 -0
  21. package/lib/pi-omp-refresh.mjs +324 -0
  22. package/lib/private-launch.mjs +23 -0
  23. package/lib/terminal-bridge.mjs +18 -0
  24. package/lib/typert.host.d.ts +3 -0
  25. package/lib/typert.host.js +1430 -0
  26. package/lib/typert.remote-client.d.ts +72 -0
  27. package/lib/typert.remote-client.d.ts.map +1 -0
  28. package/lib/typert.remote-client.js +1256 -0
  29. package/lib/types/client/account-query-queue.d.ts +16 -0
  30. package/lib/types/client/account-query-queue.js +61 -0
  31. package/lib/types/client/account-query-queue.js.map +1 -0
  32. package/lib/types/client/account-terminal-css.d.ts +1 -0
  33. package/lib/types/client/account-terminal-css.js +3 -0
  34. package/lib/types/client/account-terminal-css.js.map +1 -0
  35. package/lib/types/client/account-terminal.d.ts +17 -0
  36. package/lib/types/client/account-terminal.js +525 -0
  37. package/lib/types/client/account-terminal.js.map +1 -0
  38. package/lib/types/client/assets/antigravity.png +0 -0
  39. package/lib/types/client/assets/claude-code.png +0 -0
  40. package/lib/types/client/assets/cliworker-now-logo.png +0 -0
  41. package/lib/types/client/assets/codex.png +0 -0
  42. package/lib/types/client/assets/grok.png +0 -0
  43. package/lib/types/client/assets/hermes.png +0 -0
  44. package/lib/types/client/assets/kimi-dark.png +0 -0
  45. package/lib/types/client/assets/kimi-light.png +0 -0
  46. package/lib/types/client/assets/mimo-code.png +0 -0
  47. package/lib/types/client/assets/omp.png +0 -0
  48. package/lib/types/client/assets/opencode.png +0 -0
  49. package/lib/types/client/assets/pi.png +0 -0
  50. package/lib/types/client/assets/zcode.png +0 -0
  51. package/lib/types/client/composer-keymap.d.ts +18 -0
  52. package/lib/types/client/composer-keymap.js +49 -0
  53. package/lib/types/client/composer-keymap.js.map +1 -0
  54. package/lib/types/client/conversation-timeline.d.ts +6 -0
  55. package/lib/types/client/conversation-timeline.js +65 -0
  56. package/lib/types/client/conversation-timeline.js.map +1 -0
  57. package/lib/types/client/copy-text.d.ts +5 -0
  58. package/lib/types/client/copy-text.js +45 -0
  59. package/lib/types/client/copy-text.js.map +1 -0
  60. package/lib/types/client/icons.d.ts +21 -0
  61. package/lib/types/client/icons.js +68 -0
  62. package/lib/types/client/icons.js.map +1 -0
  63. package/lib/types/client/index.d.ts +3 -0
  64. package/lib/types/client/index.js +124 -0
  65. package/lib/types/client/index.js.map +1 -0
  66. package/lib/types/client/management-styles.d.ts +1 -0
  67. package/lib/types/client/management-styles.js +17 -0
  68. package/lib/types/client/management-styles.js.map +1 -0
  69. package/lib/types/client/name-copy.d.ts +5 -0
  70. package/lib/types/client/name-copy.js +107 -0
  71. package/lib/types/client/name-copy.js.map +1 -0
  72. package/lib/types/client/native-job-overlay.d.ts +11 -0
  73. package/lib/types/client/native-job-overlay.js +129 -0
  74. package/lib/types/client/native-job-overlay.js.map +1 -0
  75. package/lib/types/client/operation-error.d.ts +2 -0
  76. package/lib/types/client/operation-error.js +12 -0
  77. package/lib/types/client/operation-error.js.map +1 -0
  78. package/lib/types/client/panel.d.ts +8 -0
  79. package/lib/types/client/panel.js +310 -0
  80. package/lib/types/client/panel.js.map +1 -0
  81. package/lib/types/client/rename-copy-styles.d.ts +1 -0
  82. package/lib/types/client/rename-copy-styles.js +21 -0
  83. package/lib/types/client/rename-copy-styles.js.map +1 -0
  84. package/lib/types/client/rename-worker.d.ts +9 -0
  85. package/lib/types/client/rename-worker.js +53 -0
  86. package/lib/types/client/rename-worker.js.map +1 -0
  87. package/lib/types/client/role-presets.d.ts +6 -0
  88. package/lib/types/client/role-presets.js +111 -0
  89. package/lib/types/client/role-presets.js.map +1 -0
  90. package/lib/types/client/settings-dialog.d.ts +13 -0
  91. package/lib/types/client/settings-dialog.js +442 -0
  92. package/lib/types/client/settings-dialog.js.map +1 -0
  93. package/lib/types/client/stat-popover.d.ts +10 -0
  94. package/lib/types/client/stat-popover.js +32 -0
  95. package/lib/types/client/stat-popover.js.map +1 -0
  96. package/lib/types/client/styles.d.ts +9 -0
  97. package/lib/types/client/styles.js +221 -0
  98. package/lib/types/client/styles.js.map +1 -0
  99. package/lib/types/client/telemetry.d.ts +11 -0
  100. package/lib/types/client/telemetry.js +24 -0
  101. package/lib/types/client/telemetry.js.map +1 -0
  102. package/lib/types/client/worker-card.d.ts +10 -0
  103. package/lib/types/client/worker-card.js +75 -0
  104. package/lib/types/client/worker-card.js.map +1 -0
  105. package/lib/types/client/worker-model-menu.d.ts +9 -0
  106. package/lib/types/client/worker-model-menu.js +136 -0
  107. package/lib/types/client/worker-model-menu.js.map +1 -0
  108. package/lib/types/client/workers.d.ts +21 -0
  109. package/lib/types/client/workers.js +59 -0
  110. package/lib/types/client/workers.js.map +1 -0
  111. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  112. package/lib/types/client/zcode-login-link-provider.js +105 -0
  113. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  114. package/lib/types/client/zcode-login-link.d.ts +16 -0
  115. package/lib/types/client/zcode-login-link.js +194 -0
  116. package/lib/types/client/zcode-login-link.js.map +1 -0
  117. package/lib/types/host/account-identity.d.ts +16 -0
  118. package/lib/types/host/account-identity.js +126 -0
  119. package/lib/types/host/account-identity.js.map +1 -0
  120. package/lib/types/host/account-login.d.ts +10 -0
  121. package/lib/types/host/account-login.js +126 -0
  122. package/lib/types/host/account-login.js.map +1 -0
  123. package/lib/types/host/account-models.d.mts +21 -0
  124. package/lib/types/host/account-models.mjs +262 -0
  125. package/lib/types/host/accounts.d.ts +42 -0
  126. package/lib/types/host/accounts.js +945 -0
  127. package/lib/types/host/accounts.js.map +1 -0
  128. package/lib/types/host/adapters.d.ts +24 -0
  129. package/lib/types/host/adapters.js +380 -0
  130. package/lib/types/host/adapters.js.map +1 -0
  131. package/lib/types/host/agy-context.d.ts +8 -0
  132. package/lib/types/host/agy-context.js +122 -0
  133. package/lib/types/host/agy-context.js.map +1 -0
  134. package/lib/types/host/agy-models.d.ts +5 -0
  135. package/lib/types/host/agy-models.js +37 -0
  136. package/lib/types/host/agy-models.js.map +1 -0
  137. package/lib/types/host/agy-windows-account.d.ts +14 -0
  138. package/lib/types/host/agy-windows-account.js +104 -0
  139. package/lib/types/host/agy-windows-account.js.map +1 -0
  140. package/lib/types/host/authorized-catalog.d.ts +14 -0
  141. package/lib/types/host/authorized-catalog.js +35 -0
  142. package/lib/types/host/authorized-catalog.js.map +1 -0
  143. package/lib/types/host/bridge-protocol.d.ts +15 -0
  144. package/lib/types/host/bridge-protocol.js +80 -0
  145. package/lib/types/host/bridge-protocol.js.map +1 -0
  146. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  147. package/lib/types/host/claude-native-oauth.js +272 -0
  148. package/lib/types/host/claude-native-oauth.js.map +1 -0
  149. package/lib/types/host/claude-own-route.d.ts +33 -0
  150. package/lib/types/host/claude-own-route.js +250 -0
  151. package/lib/types/host/claude-own-route.js.map +1 -0
  152. package/lib/types/host/cli-account-binding.d.ts +33 -0
  153. package/lib/types/host/cli-account-binding.js +540 -0
  154. package/lib/types/host/cli-account-binding.js.map +1 -0
  155. package/lib/types/host/cli-protocol.d.ts +27 -0
  156. package/lib/types/host/cli-protocol.js +212 -0
  157. package/lib/types/host/cli-protocol.js.map +1 -0
  158. package/lib/types/host/codex-account.d.ts +8 -0
  159. package/lib/types/host/codex-account.js +143 -0
  160. package/lib/types/host/codex-account.js.map +1 -0
  161. package/lib/types/host/codex-models.d.ts +6 -0
  162. package/lib/types/host/codex-models.js +169 -0
  163. package/lib/types/host/codex-models.js.map +1 -0
  164. package/lib/types/host/extended-adapters.d.ts +44 -0
  165. package/lib/types/host/extended-adapters.js +207 -0
  166. package/lib/types/host/extended-adapters.js.map +1 -0
  167. package/lib/types/host/first-party-account-context.d.ts +26 -0
  168. package/lib/types/host/first-party-account-context.js +55 -0
  169. package/lib/types/host/first-party-account-context.js.map +1 -0
  170. package/lib/types/host/first-party-models.d.ts +29 -0
  171. package/lib/types/host/first-party-models.js +459 -0
  172. package/lib/types/host/first-party-models.js.map +1 -0
  173. package/lib/types/host/grok-adapter.d.ts +44 -0
  174. package/lib/types/host/grok-adapter.js +293 -0
  175. package/lib/types/host/grok-adapter.js.map +1 -0
  176. package/lib/types/host/grok-models.d.ts +47 -0
  177. package/lib/types/host/grok-models.js +320 -0
  178. package/lib/types/host/grok-models.js.map +1 -0
  179. package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
  180. package/lib/types/host/harness-opencode-accounts.js +80 -0
  181. package/lib/types/host/harness-opencode-accounts.js.map +1 -0
  182. package/lib/types/host/hermes-account-context.d.ts +8 -0
  183. package/lib/types/host/hermes-account-context.js +99 -0
  184. package/lib/types/host/hermes-account-context.js.map +1 -0
  185. package/lib/types/host/hermes-accounts.d.ts +19 -0
  186. package/lib/types/host/hermes-accounts.js +356 -0
  187. package/lib/types/host/hermes-accounts.js.map +1 -0
  188. package/lib/types/host/hermes-adapter.d.ts +93 -0
  189. package/lib/types/host/hermes-adapter.js +455 -0
  190. package/lib/types/host/hermes-adapter.js.map +1 -0
  191. package/lib/types/host/hermes-env.d.ts +4 -0
  192. package/lib/types/host/hermes-env.js +22 -0
  193. package/lib/types/host/hermes-env.js.map +1 -0
  194. package/lib/types/host/hermes-installation.d.ts +10 -0
  195. package/lib/types/host/hermes-installation.js +181 -0
  196. package/lib/types/host/hermes-installation.js.map +1 -0
  197. package/lib/types/host/hermes-models.d.ts +26 -0
  198. package/lib/types/host/hermes-models.js +328 -0
  199. package/lib/types/host/hermes-models.js.map +1 -0
  200. package/lib/types/host/hermes-native-entry.py +96 -0
  201. package/lib/types/host/hermes-nous-refresh.py +331 -0
  202. package/lib/types/host/hermes-nous.d.ts +53 -0
  203. package/lib/types/host/hermes-nous.js +343 -0
  204. package/lib/types/host/hermes-nous.js.map +1 -0
  205. package/lib/types/host/hermes-renewal.d.ts +27 -0
  206. package/lib/types/host/hermes-renewal.js +292 -0
  207. package/lib/types/host/hermes-renewal.js.map +1 -0
  208. package/lib/types/host/hermes-suppression.d.ts +7 -0
  209. package/lib/types/host/hermes-suppression.js +69 -0
  210. package/lib/types/host/hermes-suppression.js.map +1 -0
  211. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  212. package/lib/types/host/hermes-windows-installation.js +91 -0
  213. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  214. package/lib/types/host/index.d.ts +140 -0
  215. package/lib/types/host/index.js +947 -0
  216. package/lib/types/host/index.js.map +1 -0
  217. package/lib/types/host/kimi-accounts.d.ts +17 -0
  218. package/lib/types/host/kimi-accounts.js +220 -0
  219. package/lib/types/host/kimi-accounts.js.map +1 -0
  220. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  221. package/lib/types/host/kimi-oauth-models.js +246 -0
  222. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  223. package/lib/types/host/managed-agent.d.ts +4 -0
  224. package/lib/types/host/managed-agent.js +127 -0
  225. package/lib/types/host/managed-agent.js.map +1 -0
  226. package/lib/types/host/mimo-configuration.d.ts +22 -0
  227. package/lib/types/host/mimo-configuration.js +258 -0
  228. package/lib/types/host/mimo-configuration.js.map +1 -0
  229. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  230. package/lib/types/host/mimo-metadata-cache.js +121 -0
  231. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  232. package/lib/types/host/native-capability-cache.d.ts +11 -0
  233. package/lib/types/host/native-capability-cache.js +94 -0
  234. package/lib/types/host/native-capability-cache.js.map +1 -0
  235. package/lib/types/host/native-launch.d.mts +2 -0
  236. package/lib/types/host/native-launch.mjs +234 -0
  237. package/lib/types/host/native-process.d.ts +5 -0
  238. package/lib/types/host/native-process.js +41 -0
  239. package/lib/types/host/native-process.js.map +1 -0
  240. package/lib/types/host/native-spawn.mjs +32 -0
  241. package/lib/types/host/opencode-adapter.d.ts +94 -0
  242. package/lib/types/host/opencode-adapter.js +507 -0
  243. package/lib/types/host/opencode-adapter.js.map +1 -0
  244. package/lib/types/host/opencode-native.d.ts +27 -0
  245. package/lib/types/host/opencode-native.js +403 -0
  246. package/lib/types/host/opencode-native.js.map +1 -0
  247. package/lib/types/host/own-account-lease.d.mts +5 -0
  248. package/lib/types/host/own-account-lease.mjs +105 -0
  249. package/lib/types/host/pi-installation.d.mts +7 -0
  250. package/lib/types/host/pi-installation.mjs +87 -0
  251. package/lib/types/host/pi-omp-accounts.d.ts +28 -0
  252. package/lib/types/host/pi-omp-accounts.js +175 -0
  253. package/lib/types/host/pi-omp-accounts.js.map +1 -0
  254. package/lib/types/host/pi-omp-adapter.d.ts +32 -0
  255. package/lib/types/host/pi-omp-adapter.js +190 -0
  256. package/lib/types/host/pi-omp-adapter.js.map +1 -0
  257. package/lib/types/host/pi-omp-environment.d.mts +1 -0
  258. package/lib/types/host/pi-omp-environment.mjs +15 -0
  259. package/lib/types/host/pi-omp-identity.d.ts +2 -0
  260. package/lib/types/host/pi-omp-identity.js +142 -0
  261. package/lib/types/host/pi-omp-identity.js.map +1 -0
  262. package/lib/types/host/pi-omp-logout.d.ts +3 -0
  263. package/lib/types/host/pi-omp-logout.js +152 -0
  264. package/lib/types/host/pi-omp-logout.js.map +1 -0
  265. package/lib/types/host/pi-omp-native.d.ts +71 -0
  266. package/lib/types/host/pi-omp-native.js +753 -0
  267. package/lib/types/host/pi-omp-native.js.map +1 -0
  268. package/lib/types/host/pi-omp-refresh.d.mts +7 -0
  269. package/lib/types/host/pi-omp-refresh.mjs +324 -0
  270. package/lib/types/host/private-launch.mjs +23 -0
  271. package/lib/types/host/process.d.ts +43 -0
  272. package/lib/types/host/process.js +134 -0
  273. package/lib/types/host/process.js.map +1 -0
  274. package/lib/types/host/protocol.d.ts +23 -0
  275. package/lib/types/host/protocol.js +112 -0
  276. package/lib/types/host/protocol.js.map +1 -0
  277. package/lib/types/host/roles.d.ts +34 -0
  278. package/lib/types/host/roles.js +80 -0
  279. package/lib/types/host/roles.js.map +1 -0
  280. package/lib/types/host/routing.d.ts +31 -0
  281. package/lib/types/host/routing.js +248 -0
  282. package/lib/types/host/routing.js.map +1 -0
  283. package/lib/types/host/runtime.d.ts +60 -0
  284. package/lib/types/host/runtime.js +598 -0
  285. package/lib/types/host/runtime.js.map +1 -0
  286. package/lib/types/host/storage.d.ts +48 -0
  287. package/lib/types/host/storage.js +449 -0
  288. package/lib/types/host/storage.js.map +1 -0
  289. package/lib/types/host/telemetry.d.ts +17 -0
  290. package/lib/types/host/telemetry.js +158 -0
  291. package/lib/types/host/telemetry.js.map +1 -0
  292. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  293. package/lib/types/host/windows-account-launch.mjs +47 -0
  294. package/lib/types/host/windows-account-owner.ps1 +137 -0
  295. package/lib/types/host/windows-account-stdio.mjs +19 -0
  296. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  297. package/lib/types/host/windows-account-terminal.js +208 -0
  298. package/lib/types/host/windows-account-terminal.js.map +1 -0
  299. package/lib/types/host/windows-agy-account.ps1 +81 -0
  300. package/lib/types/host/windows-cli-installation.d.ts +31 -0
  301. package/lib/types/host/windows-cli-installation.js +157 -0
  302. package/lib/types/host/windows-cli-installation.js.map +1 -0
  303. package/lib/types/host/windows-hidden-launch.mjs +49 -0
  304. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  305. package/lib/types/host/windows-hidden-process.js +116 -0
  306. package/lib/types/host/windows-hidden-process.js.map +1 -0
  307. package/lib/types/host/zcode-account-models.d.ts +16 -0
  308. package/lib/types/host/zcode-account-models.js +114 -0
  309. package/lib/types/host/zcode-account-models.js.map +1 -0
  310. package/lib/types/host/zcode-adapter.d.ts +93 -0
  311. package/lib/types/host/zcode-adapter.js +808 -0
  312. package/lib/types/host/zcode-adapter.js.map +1 -0
  313. package/lib/types/host/zcode-grok-accounts.d.ts +30 -0
  314. package/lib/types/host/zcode-grok-accounts.js +408 -0
  315. package/lib/types/host/zcode-grok-accounts.js.map +1 -0
  316. package/lib/types/shared/accounts.d.ts +47 -0
  317. package/lib/types/shared/accounts.js +2 -0
  318. package/lib/types/shared/accounts.js.map +1 -0
  319. package/lib/types/shared/builtin-presets.d.ts +2 -0
  320. package/lib/types/shared/builtin-presets.js +231 -0
  321. package/lib/types/shared/builtin-presets.js.map +1 -0
  322. package/lib/types/shared/cli-settings.d.ts +5 -0
  323. package/lib/types/shared/cli-settings.js +2 -0
  324. package/lib/types/shared/cli-settings.js.map +1 -0
  325. package/lib/types/shared/model-presentation.d.ts +10 -0
  326. package/lib/types/shared/model-presentation.js +95 -0
  327. package/lib/types/shared/model-presentation.js.map +1 -0
  328. package/lib/types/shared/models.d.ts +7 -0
  329. package/lib/types/shared/models.js +35 -0
  330. package/lib/types/shared/models.js.map +1 -0
  331. package/lib/types/shared/telemetry.d.ts +18 -0
  332. package/lib/types/shared/telemetry.js +16 -0
  333. package/lib/types/shared/telemetry.js.map +1 -0
  334. package/lib/types/shared/types.d.ts +127 -0
  335. package/lib/types/shared/types.js +147 -0
  336. package/lib/types/shared/types.js.map +1 -0
  337. package/lib/windows-account-bootstrap.ps1 +44 -0
  338. package/lib/windows-account-launch.mjs +47 -0
  339. package/lib/windows-account-owner.ps1 +137 -0
  340. package/lib/windows-account-stdio.mjs +19 -0
  341. package/lib/windows-agy-account.ps1 +81 -0
  342. package/lib/windows-hidden-launch.mjs +49 -0
  343. package/lib/zcode-resume.mjs +423 -0
  344. package/package.json +109 -4
@@ -0,0 +1,181 @@
1
+ import { constants } from 'node:fs';
2
+ import { access, open, realpath } from 'node:fs/promises';
3
+ import { createHash } from 'node:crypto';
4
+ import { dirname, join, sep } from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { nativeLaunchArgv } from './native-launch.mjs';
7
+ import { windowsHermesCheckout } from "./hermes-windows-installation.js";
8
+ export class HermesExecutableError extends Error {
9
+ }
10
+ export function hermesCommandInstallationHome(argv) {
11
+ return argv[2] === fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)) && argv[4]
12
+ ? dirname(dirname(dirname(argv[4])))
13
+ : undefined;
14
+ }
15
+ /** Reuse the current official checkout's committed dependency environment, not a
16
+ * directory selected by recency/hash guessing. A clean account home must not run
17
+ * the installer's borrowed-home sync. Older/self-contained entries retain their
18
+ * native launcher contract. The child rechecks this selection under its native lock. */
19
+ export async function hermesNativeCommand(executable, args, signal) {
20
+ let current = executable;
21
+ const read = async (path, limit) => {
22
+ const file = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
23
+ try {
24
+ const info = await file.stat();
25
+ if (!info.isFile() || info.nlink !== 1 || info.size > limit)
26
+ throw new Error('Unsafe Hermes installation record');
27
+ const result = await file.readFile('utf8');
28
+ if (Buffer.byteLength(result) > limit)
29
+ throw new Error('Oversized Hermes installation record');
30
+ signal?.throwIfAborted();
31
+ return result;
32
+ }
33
+ finally {
34
+ await file.close();
35
+ }
36
+ };
37
+ const pinned = async (checkout) => {
38
+ const owner = dirname(checkout), key = createHash('sha256').update(checkout).digest('hex').slice(0, 16);
39
+ const install = join(owner, 'installs', key), facts = join(install, 'facts.json');
40
+ try {
41
+ const data = JSON.parse(await read(facts, 4 * 1024 * 1024));
42
+ const environment = data?.packages?.venv?.environment;
43
+ if (typeof environment !== 'string' ||
44
+ !environment.startsWith(join(install, 'environments') + sep) ||
45
+ (await realpath(environment)) !== environment)
46
+ throw new Error('Invalid Hermes dependency selection');
47
+ await read(join(environment, 'pyvenv.cfg'), 64 * 1024);
48
+ const python = join(environment, ...(process.platform === 'win32' ? ['Scripts', 'python.exe'] : ['bin', 'python']));
49
+ await access(python, process.platform === 'win32' ? constants.R_OK : constants.X_OK);
50
+ for (const file of [
51
+ 'hermes_bootstrap.py',
52
+ 'hermes_cli/main.py',
53
+ 'pm/environments.py',
54
+ ...(process.platform === 'win32' ? ['pm/filesystem.py'] : []),
55
+ ])
56
+ await access(join(checkout, file), constants.R_OK);
57
+ return [
58
+ python,
59
+ '-I',
60
+ fileURLToPath(new URL('./hermes-native-entry.py', import.meta.url)),
61
+ checkout,
62
+ facts,
63
+ environment,
64
+ ...args,
65
+ ];
66
+ }
67
+ catch {
68
+ signal?.throwIfAborted();
69
+ throw new HermesExecutableError('Hermes 当前安装依赖不可用,请在原生终端修复安装');
70
+ }
71
+ };
72
+ if (process.platform === 'win32') {
73
+ signal?.throwIfAborted();
74
+ try {
75
+ const command = nativeLaunchArgv([executable, ...args]);
76
+ await access(command[0], constants.R_OK);
77
+ const checkout = await windowsHermesCheckout(executable, command, signal);
78
+ // A native source-install launcher records its checkout. Pin that install's
79
+ // committed venv while retaining the isolated HERMES_HOME. Other native
80
+ // installations keep their own launch contract; never guess a generation.
81
+ return checkout ? await pinned(checkout) : command;
82
+ }
83
+ catch (error) {
84
+ signal?.throwIfAborted();
85
+ if (error instanceof HermesExecutableError)
86
+ throw error;
87
+ throw new HermesExecutableError('启动入口不可用,请修复安装');
88
+ }
89
+ }
90
+ for (let depth = 0; depth < 4; depth++) {
91
+ signal?.throwIfAborted();
92
+ let path, source;
93
+ try {
94
+ path = await realpath(current);
95
+ source = await read(path, 128 * 1024);
96
+ }
97
+ catch (error) {
98
+ signal?.throwIfAborted();
99
+ if (error.code === 'ENOENT')
100
+ return [executable, ...args];
101
+ throw new HermesExecutableError('启动入口不可用,请修复安装');
102
+ }
103
+ const shim = /^#![^\r\n]*\b(?:sh|bash|zsh)\s*\r?\n\s*exec\s+(?:"(\/[^"\r\n$`]+)"|(\/[^\s$`"'\\;|&<>]+))\s+"\$@"\s*$/.exec(source);
104
+ if (shim) {
105
+ current = shim[1] ?? shim[2];
106
+ continue;
107
+ }
108
+ if (!path.endsWith(`${sep}.hermes${sep}bin${sep}hermes`) || !source.includes('hermes_bootstrap'))
109
+ return [executable, ...args];
110
+ const checkout = dirname(dirname(dirname(path)));
111
+ if (!source.includes(checkout))
112
+ throw new HermesExecutableError('Hermes 安装入口与源码不匹配');
113
+ return pinned(checkout);
114
+ }
115
+ throw new HermesExecutableError('启动脚本异常,请修复安装');
116
+ }
117
+ /** Inspect the installed fixed exec shim without invoking its installer or auth UI. */
118
+ export async function verifyHermesExecutable(executable, signal) {
119
+ signal.throwIfAborted();
120
+ if (process.platform === 'win32') {
121
+ try {
122
+ const command = nativeLaunchArgv([executable]);
123
+ await access(command[0], constants.R_OK);
124
+ if (!(await open(command[0], 'r').then(async (file) => {
125
+ try {
126
+ return (await file.stat()).isFile();
127
+ }
128
+ finally {
129
+ await file.close();
130
+ }
131
+ })))
132
+ throw new Error('Invalid Hermes entry');
133
+ signal.throwIfAborted();
134
+ return;
135
+ }
136
+ catch {
137
+ signal.throwIfAborted();
138
+ throw new HermesExecutableError('启动入口不可用,请修复安装');
139
+ }
140
+ }
141
+ let current = executable;
142
+ for (let depth = 0; depth < 4; depth++) {
143
+ let file;
144
+ try {
145
+ await access(current, constants.X_OK);
146
+ // Official per-user launchers may themselves be symbolic links.
147
+ file = await open(await realpath(current), constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
148
+ const info = await file.stat();
149
+ if (!info.isFile())
150
+ throw new Error('Invalid Hermes entry');
151
+ if (info.size > 16 * 1024)
152
+ return;
153
+ const bytes = Buffer.alloc(16 * 1024 + 1);
154
+ let source;
155
+ try {
156
+ const { bytesRead } = await file.read(bytes, 0, bytes.length, 0);
157
+ const after = await file.stat();
158
+ if (bytesRead !== info.size || after.size !== info.size || after.mtimeMs !== info.mtimeMs)
159
+ throw new Error('Hermes entry changed during inspection');
160
+ source = bytes.subarray(0, bytesRead).toString('utf8');
161
+ }
162
+ finally {
163
+ bytes.fill(0);
164
+ }
165
+ signal.throwIfAborted();
166
+ const shim = /^#![^\r\n]*\b(?:sh|bash|zsh)\s*\r?\n\s*exec\s+(?:"(\/[^"\r\n$`]+)"|(\/[^\s$`"'\\;|&<>]+))\s+"\$@"\s*$/.exec(source);
167
+ if (!shim)
168
+ return;
169
+ current = shim[1] ?? shim[2];
170
+ }
171
+ catch {
172
+ signal.throwIfAborted();
173
+ throw new HermesExecutableError('启动入口不可用,请修复安装');
174
+ }
175
+ finally {
176
+ await file?.close();
177
+ }
178
+ }
179
+ throw new HermesExecutableError('启动脚本异常,请修复安装');
180
+ }
181
+ //# sourceMappingURL=hermes-installation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-installation.js","sourceRoot":"","sources":["../../../src/host/hermes-installation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type AccountModelScope } from './account-models.mjs';
2
+ /** Native PooledCredential fields; a successful catalog cannot erase a native
3
+ * dead account, active exhaustion window or model-specific entitlement bench. */
4
+ export declare function hermesPoolEntryUnavailable(entry: Record<string, any>, model?: string): boolean;
5
+ /** Internal source material; callers must never publish or log the returned values. */
6
+ export declare function readHermesAccountMaterial(home: string, signal?: AbortSignal): Promise<{
7
+ config: Record<string, any>;
8
+ auth: Record<string, any>;
9
+ env: Record<string, string>;
10
+ sourceIds: string[];
11
+ }>;
12
+ /** Native own stores only; never accept a broad manual:* prefix. */
13
+ export declare function assertHermesOwnAccounts(home: string, signal?: AbortSignal): Promise<{
14
+ config: Record<string, any>;
15
+ auth: Record<string, any>;
16
+ env: Record<string, string>;
17
+ sourceIds: string[];
18
+ }>;
19
+ /** Current selected-provider account scope. Unknown provider/auth schemas fail closed.
20
+ * Route precedence follows Hermes runtime_provider_backends / credential_pool;
21
+ * only the canonical OpenRouter route and native Codex OAuth store are supported
22
+ * without an explicit endpoint. Ambiguous mirrors/custom pools are not guessed. */
23
+ export declare function hermesAccountModels(home: string, provider: string, options?: {
24
+ signal?: AbortSignal;
25
+ fetch?: typeof fetch;
26
+ }): Promise<AccountModelScope>;
@@ -0,0 +1,328 @@
1
+ import { constants } from 'node:fs';
2
+ import { lstat, open } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { parse } from 'yaml';
5
+ import { parseHermesOwnEnvironment } from "./hermes-env.js";
6
+ import { hermesUnsuppressedEnvironment, projectHermesUnsuppressedAuth } from "./hermes-suppression.js";
7
+ import { beginHermesNousCapabilities, fetchHermesNousModels, forgetHermesNousCapabilities, HermesNousError, selectHermesNousSource, } from "./hermes-nous.js";
8
+ import { probeAccountModels } from './account-models.mjs';
9
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
10
+ const literal = (value) => typeof value === 'string' &&
11
+ !!value.trim() &&
12
+ !/[\x00-\x1f]/.test(value) &&
13
+ !/^(?:op:\/\/|!|\$|<|your[_ -]|placeholder|changeme)/i.test(value.trim());
14
+ const unknown = () => ({ state: 'unknown', source: 'unknown', models: [] });
15
+ /** Native PooledCredential fields; a successful catalog cannot erase a native
16
+ * dead account, active exhaustion window or model-specific entitlement bench. */
17
+ export function hermesPoolEntryUnavailable(entry, model) {
18
+ if (entry.disabled === true || entry.status === 'exhausted' || entry.last_status === 'dead')
19
+ return true;
20
+ if (entry.last_status === 'exhausted') {
21
+ const until = Number(entry.last_error_reset_at);
22
+ if (!Number.isFinite(until) || until <= 0 || until > Date.now() / 1000)
23
+ return true;
24
+ }
25
+ const cooldowns = object(entry.model_cooldowns) ? entry.model_cooldowns : {};
26
+ const values = model ? [cooldowns[model]] : Object.values(cooldowns);
27
+ return values.some((until) => typeof until === 'number' && until > Date.now() / 1000);
28
+ }
29
+ /** Private source reads only. Do not execute secret commands, expand arbitrary env,
30
+ * refresh OAuth, print native config, or import Hermes' side-effectful runtime. */
31
+ async function read(path, signal) {
32
+ signal?.throwIfAborted();
33
+ let handle;
34
+ try {
35
+ handle = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
36
+ const info = await handle.stat();
37
+ if (!info.isFile() || info.nlink !== 1 || info.size > 1024 * 1024)
38
+ throw new Error('Unsafe metadata');
39
+ const buffer = Buffer.alloc(info.size + 1);
40
+ try {
41
+ let length = 0;
42
+ while (length < buffer.length) {
43
+ signal?.throwIfAborted();
44
+ const { bytesRead } = await handle.read(buffer, length, buffer.length - length, length);
45
+ if (!bytesRead)
46
+ break;
47
+ length += bytesRead;
48
+ }
49
+ if (length > info.size)
50
+ throw new Error('Metadata changed');
51
+ return buffer.subarray(0, length).toString('utf8');
52
+ }
53
+ finally {
54
+ buffer.fill(0);
55
+ }
56
+ }
57
+ catch (error) {
58
+ if (error.code === 'ENOENT')
59
+ return;
60
+ signal?.throwIfAborted();
61
+ throw new Error('Hermes 账号配置无法安全读取,请在原生登录设置中检查');
62
+ }
63
+ finally {
64
+ await handle?.close();
65
+ }
66
+ }
67
+ function dotenv(text) {
68
+ return parseHermesOwnEnvironment(text);
69
+ }
70
+ /** Internal source material; callers must never publish or log the returned values. */
71
+ export async function readHermesAccountMaterial(home, signal) {
72
+ const config = parse((await read(join(home, 'config.yaml'), signal)) ?? '');
73
+ const auth = JSON.parse((await read(join(home, 'auth.json'), signal)) ?? '{}');
74
+ const env = dotenv((await read(join(home, '.env'), signal)) ?? '');
75
+ if (!object(config) || !object(auth))
76
+ throw new Error('Hermes 账号配置无效');
77
+ return { config, auth, env, sourceIds: [home] };
78
+ }
79
+ /** Exact native source/provider pairs from auth_commands and credential_pool.
80
+ * In particular manual:qwen_cli is still a foreign login, not a Hermes OAuth flow. */
81
+ function ownPoolSource(provider, entry, material) {
82
+ const source = entry.source;
83
+ if ((!source || source === 'manual' || source === 'config') && entry.auth_type === 'api_key')
84
+ return true;
85
+ if (typeof source !== 'string')
86
+ return false;
87
+ if (source.startsWith('env:'))
88
+ return literal(material.env[source.slice(4)]);
89
+ const ownOAuth = {
90
+ anthropic: ['manual:hermes_pkce', 'hermes_pkce'],
91
+ 'openai-codex': ['manual:device_code', 'manual:loopback_pkce', 'device_code'],
92
+ 'xai-oauth': ['manual:device_code', 'device_code'],
93
+ 'minimax-oauth': ['manual:minimax_oauth', 'oauth'],
94
+ nous: ['manual:device_code', 'device_code'],
95
+ };
96
+ if (entry.auth_type === 'oauth' && ownOAuth[provider]?.includes(source))
97
+ return true;
98
+ return provider === 'openrouter' && entry.auth_type === 'api_key' && source === 'manual:openrouter_pkce';
99
+ }
100
+ /** Native own stores only; never accept a broad manual:* prefix. */
101
+ export async function assertHermesOwnAccounts(home, signal) {
102
+ const material = await readHermesAccountMaterial(home, signal);
103
+ try {
104
+ await lstat(join(home, '.cliworker-managed'));
105
+ throw new Error('Hermes 插件账号不能使用额外的托管配置');
106
+ }
107
+ catch (error) {
108
+ if (error.code !== 'ENOENT')
109
+ throw error;
110
+ }
111
+ try {
112
+ await lstat(join(home, '.op.env'));
113
+ throw new Error('Hermes 请使用自身 .env,暂不支持外部密码库配置');
114
+ }
115
+ catch (error) {
116
+ if (error.code !== 'ENOENT')
117
+ throw error;
118
+ }
119
+ if (Object.values(material.env).some((value) => /^(?:op:\/\/|!|\$\{|__BITWARDEN_MANAGED__)/.test(value)))
120
+ throw new Error('Hermes 请使用自身 API 配置,暂不支持外部密码库引用');
121
+ if (material.config.auth?.adopt_external_logins !== false)
122
+ throw new Error('请先关闭 Hermes 的 auth.adopt_external_logins');
123
+ if (material.config.model?.openai_runtime === 'codex_app_server' ||
124
+ material.config.model?.api_mode === 'codex_app_server')
125
+ throw new Error('Hermes 当前使用外部 Codex 登录,请改用自身账号');
126
+ // Native dotenv has override=True. Selector assignments would invalidate the
127
+ // account source selected by the Host, even when no API-key value is inherited.
128
+ for (const [provider, entries] of Object.entries(material.auth.credential_pool ?? {})) {
129
+ if (!Array.isArray(entries))
130
+ throw new Error('Hermes 账号来源无法确认');
131
+ for (const entry of entries) {
132
+ if (!object(entry))
133
+ throw new Error('Hermes 账号来源无法确认');
134
+ if (!ownPoolSource(provider, entry, material))
135
+ throw new Error('Hermes 含外部账号来源,请使用自身登录');
136
+ }
137
+ }
138
+ return material;
139
+ }
140
+ /** Current selected-provider account scope. Unknown provider/auth schemas fail closed.
141
+ * Route precedence follows Hermes runtime_provider_backends / credential_pool;
142
+ * only the canonical OpenRouter route and native Codex OAuth store are supported
143
+ * without an explicit endpoint. Ambiguous mirrors/custom pools are not guessed. */
144
+ export async function hermesAccountModels(home, provider, options = {}) {
145
+ try {
146
+ const currentMaterial = async () => {
147
+ const raw = await assertHermesOwnAccounts(home, options.signal);
148
+ return {
149
+ ...raw,
150
+ auth: projectHermesUnsuppressedAuth(raw.auth),
151
+ env: hermesUnsuppressedEnvironment(raw.auth, raw.env, provider),
152
+ };
153
+ };
154
+ const material = await currentMaterial();
155
+ const { config, auth, env } = material;
156
+ if (!object(config) || !object(config.model) || config.model.provider !== provider)
157
+ return unknown();
158
+ if (config.providers?.[provider]?.enabled === false)
159
+ return unknown();
160
+ const cfg = config.model;
161
+ if (!object(auth))
162
+ return unknown();
163
+ // Extra headers, command secrets, endpoint overrides and unknown pool routes
164
+ // cannot be reconstructed faithfully from a public model catalog.
165
+ if (cfg.extra_headers && Object.keys(cfg.extra_headers).length)
166
+ return unknown();
167
+ const inputs = [];
168
+ if (provider === 'nous') {
169
+ const source = selectHermesNousSource(material);
170
+ const generation = beginHermesNousCapabilities(home, source);
171
+ try {
172
+ const result = await fetchHermesNousModels(home, source, options, generation);
173
+ options.signal?.throwIfAborted();
174
+ const current = selectHermesNousSource(await currentMaterial());
175
+ // A query never authorizes a credential that appeared while it was in flight.
176
+ // Stable task bindings intentionally ignore ordinary token rotation separately.
177
+ if (current.agentKey !== source.agentKey ||
178
+ JSON.stringify(current.principal) !== JSON.stringify(source.principal) ||
179
+ JSON.stringify(current.route) !== JSON.stringify(source.route) ||
180
+ JSON.stringify(current.modelCooldowns) !== JSON.stringify(source.modelCooldowns))
181
+ throw new HermesNousError('Nous 账号已变化,请重新刷新模型');
182
+ return result;
183
+ }
184
+ catch (error) {
185
+ forgetHermesNousCapabilities(home, source, generation);
186
+ throw error;
187
+ }
188
+ }
189
+ else if (provider === 'openai-codex') {
190
+ // This transport authenticates via a separate Codex app-server session;
191
+ // Hermes' OAuth store cannot prove that other account's model scope.
192
+ if (cfg.openai_runtime === 'codex_app_server' || cfg.api_mode === 'codex_app_server')
193
+ return unknown();
194
+ if (env.HERMES_CODEX_BASE_URL &&
195
+ env.HERMES_CODEX_BASE_URL.replace(/\/+$/, '') !== 'https://chatgpt.com/backend-api')
196
+ return unknown();
197
+ if (cfg.base_url && cfg.base_url.replace(/\/+$/, '') !== 'https://chatgpt.com/backend-api')
198
+ return unknown();
199
+ const state = auth.providers?.[provider], tokens = state?.tokens;
200
+ if (state?.auth_mode !== 'chatgpt' || !literal(tokens?.access_token))
201
+ return unknown();
202
+ // Native load_pool seeds this exact singleton as device_code. Additional
203
+ // accounts require their own proven scope, so do not authorize them via it.
204
+ const pool = auth.credential_pool?.[provider] ?? [];
205
+ if (!Array.isArray(pool) ||
206
+ pool.some((entry) => !object(entry) ||
207
+ entry.source !== 'device_code' ||
208
+ entry.auth_type !== 'oauth' ||
209
+ hermesPoolEntryUnavailable(entry, cfg.default) ||
210
+ entry.access_token !== tokens.access_token ||
211
+ (entry.base_url && entry.base_url.replace(/\/+$/, '') !== 'https://chatgpt.com/backend-api')))
212
+ return unknown();
213
+ let expiry = typeof tokens.expires_at === 'number' ? tokens.expires_at : Date.parse(tokens.expires_at);
214
+ if (!Number.isFinite(expiry)) {
215
+ // Hermes' native Codex store uses the access JWT exp claim.
216
+ try {
217
+ expiry = JSON.parse(Buffer.from(tokens.access_token.split('.')[1] ?? '', 'base64url').toString()).exp;
218
+ }
219
+ catch {
220
+ return unknown();
221
+ }
222
+ }
223
+ inputs.push({
224
+ provider,
225
+ credential: {
226
+ type: 'oauth',
227
+ access: tokens.access_token,
228
+ expires: expiry < 1e12 ? expiry * 1000 : expiry,
229
+ accountId: tokens.account_id,
230
+ },
231
+ });
232
+ }
233
+ else if (provider === 'openrouter') {
234
+ const canonical = 'https://openrouter.ai/api/v1';
235
+ if ([cfg.base_url, env.OPENROUTER_BASE_URL, env.CUSTOM_BASE_URL].some((url) => url && (typeof url !== 'string' || url.replace(/\/+$/, '') !== canonical)) ||
236
+ env.OPENAI_BASE_URL)
237
+ return unknown();
238
+ const pool = auth.credential_pool?.openrouter;
239
+ const keys = new Set();
240
+ const envNames = new Set(['OPENROUTER_API_KEY']);
241
+ for (const name of Object.keys(env))
242
+ if (/^OPENROUTER_API_KEY_\d+$/.test(name))
243
+ envNames.add(name);
244
+ if (Array.isArray(pool) && pool.length) {
245
+ if (pool.length > 8)
246
+ return unknown();
247
+ // Native pool selection may rotate. Every potential credential must support
248
+ // the choice. Do not expose exhausted/expired/unknown entries via another key.
249
+ for (const entry of pool) {
250
+ if (!object(entry) ||
251
+ entry.auth_type !== 'api_key' ||
252
+ hermesPoolEntryUnavailable(entry, cfg.default) ||
253
+ (entry.base_url && entry.base_url.replace(/\/+$/, '') !== canonical))
254
+ return unknown();
255
+ if (typeof entry.source === 'string' && entry.source.startsWith('env:')) {
256
+ const name = entry.source.slice(4);
257
+ if (!/^[A-Z][A-Z0-9_]*$/.test(name) || !literal(env[name]))
258
+ return unknown();
259
+ envNames.add(name);
260
+ continue;
261
+ }
262
+ if (!ownPoolSource(provider, entry, { config, auth, env, sourceIds: [home] }))
263
+ return unknown();
264
+ const key = entry.runtime_api_key || entry.access_token;
265
+ if (!literal(key))
266
+ return unknown();
267
+ keys.add(key);
268
+ }
269
+ }
270
+ // Native pool loader seeds numbered environment keys and rehydrates env:
271
+ // rows on each load. A saved token cannot override its current env source.
272
+ for (const name of envNames)
273
+ if (env[name]) {
274
+ if (!literal(env[name]) || env[name].includes('${'))
275
+ return unknown();
276
+ keys.add(env[name]);
277
+ }
278
+ if (!keys.size || keys.size > 8)
279
+ return unknown();
280
+ for (const key of keys)
281
+ inputs.push({ provider, baseUrl: canonical, credential: { type: 'api', key } });
282
+ }
283
+ else {
284
+ // Do not fabricate endpoint/key mappings for arbitrary provider plugins.
285
+ return unknown();
286
+ }
287
+ const scopes = [];
288
+ const deadline = AbortSignal.timeout(15000);
289
+ const probeOptions = {
290
+ ...options,
291
+ signal: options.signal ? AbortSignal.any([options.signal, deadline]) : deadline,
292
+ };
293
+ for (const input of inputs) {
294
+ options.signal?.throwIfAborted();
295
+ const scope = await probeAccountModels(input, probeOptions);
296
+ options.signal?.throwIfAborted();
297
+ if (scope.state !== 'supported')
298
+ return scope;
299
+ scopes.push(scope);
300
+ }
301
+ if (!scopes.length)
302
+ return unknown();
303
+ return {
304
+ state: 'supported',
305
+ source: 'account-models',
306
+ models: scopes[0].models.flatMap((model) => {
307
+ const matches = scopes.map((scope) => scope.models.find((candidate) => candidate.id === model.id));
308
+ // Native setup selected this model; public/account catalogs may also contain
309
+ // embeddings or other endpoints that Hermes chat cannot execute.
310
+ if (model.id !== cfg.default || matches.some((match) => !match))
311
+ return [];
312
+ const cost = matches.every((match) => match.cost === 'free')
313
+ ? 'free'
314
+ : matches.every((match) => match.cost === 'paid')
315
+ ? 'paid'
316
+ : 'unknown';
317
+ return [{ ...model, cost }];
318
+ }),
319
+ };
320
+ }
321
+ catch (error) {
322
+ options.signal?.throwIfAborted();
323
+ if (error instanceof HermesNousError)
324
+ throw error;
325
+ return unknown();
326
+ }
327
+ }
328
+ //# sourceMappingURL=hermes-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes-models.js","sourceRoot":"","sources":["../../../src/host/hermes-models.ts"],"names":[],"mappings":"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"}