wherdr 0.0.0-stage → 1.2.0

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 (828) hide show
  1. package/.output/nitro.json +15 -0
  2. package/.output/public/_nuxt/AgentView.DE2GDt4O.css +1 -0
  3. package/.output/public/_nuxt/BDI8xNSb.js +2 -0
  4. package/.output/public/_nuxt/BDNMzG2s.js +1 -0
  5. package/.output/public/_nuxt/BIA9pZvC.js +1 -0
  6. package/.output/public/_nuxt/Bd17z0YL.js +2 -0
  7. package/.output/public/_nuxt/BevNMnQ2.js +83 -0
  8. package/.output/public/_nuxt/BpQH8Ho1.js +1 -0
  9. package/.output/public/_nuxt/Bta8at9w.js +6 -0
  10. package/.output/public/_nuxt/CA9mI3eg.js +23 -0
  11. package/.output/public/_nuxt/CWwyK2XK.js +2 -0
  12. package/.output/public/_nuxt/CXG-cOdh.js +1 -0
  13. package/.output/public/_nuxt/Ci8N4mWR.js +1 -0
  14. package/.output/public/_nuxt/CjKICX3g.js +17 -0
  15. package/.output/public/_nuxt/D903WmCE.js +65 -0
  16. package/.output/public/_nuxt/DBu2-cEy.js +30 -0
  17. package/.output/public/_nuxt/DJE_XMLO.js +1 -0
  18. package/.output/public/_nuxt/DLLQgP0d.js +1 -0
  19. package/.output/public/_nuxt/DxO1TBoK.js +1 -0
  20. package/.output/public/_nuxt/SiL1FJ5s.js +3 -0
  21. package/.output/public/_nuxt/archivo-latin-ext-wght-normal.C4zznr8T.woff2 +0 -0
  22. package/.output/public/_nuxt/archivo-latin-wght-normal.E0tuGl4L.woff2 +0 -0
  23. package/.output/public/_nuxt/archivo-vietnamese-wght-normal.XAtsl5Q_.woff2 +0 -0
  24. package/.output/public/_nuxt/bLP7Jj-b.js +1 -0
  25. package/.output/public/_nuxt/builds/latest.json +1 -0
  26. package/.output/public/_nuxt/builds/meta/211609c0-be04-46c5-a6b0-566bc0c4a3dd.json +1 -0
  27. package/.output/public/_nuxt/e5N4AqCN.js +93 -0
  28. package/.output/public/_nuxt/entry.SHBiCXBL.css +2 -0
  29. package/.output/public/_nuxt/error-404.Bb87HomL.css +1 -0
  30. package/.output/public/_nuxt/error-500.Bwd7zAaE.css +1 -0
  31. package/.output/public/_nuxt/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2 +0 -0
  32. package/.output/public/_nuxt/inter-cyrillic-wght-normal.DqGufNeO.woff2 +0 -0
  33. package/.output/public/_nuxt/inter-greek-ext-wght-normal.DlzME5K_.woff2 +0 -0
  34. package/.output/public/_nuxt/inter-greek-wght-normal.CkhJZR-_.woff2 +0 -0
  35. package/.output/public/_nuxt/inter-latin-ext-wght-normal.DO1Apj_S.woff2 +0 -0
  36. package/.output/public/_nuxt/inter-latin-wght-normal.Dx4kXJAl.woff2 +0 -0
  37. package/.output/public/_nuxt/inter-vietnamese-wght-normal.CBcvBZtf.woff2 +0 -0
  38. package/.output/public/_nuxt/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2 +0 -0
  39. package/.output/public/_nuxt/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2 +0 -0
  40. package/.output/public/_nuxt/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2 +0 -0
  41. package/.output/public/_nuxt/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2 +0 -0
  42. package/.output/public/_nuxt/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2 +0 -0
  43. package/.output/public/_nuxt/wherdr-nerd-awesome.DQ3_iAfa.woff2 +0 -0
  44. package/.output/public/_nuxt/wherdr-nerd-codicons.CtEsfSAf.woff2 +0 -0
  45. package/.output/public/_nuxt/wherdr-nerd-devicons.ZMSFX1sW.woff2 +0 -0
  46. package/.output/public/_nuxt/wherdr-nerd-extension.Dai_ky39.woff2 +0 -0
  47. package/.output/public/_nuxt/wherdr-nerd-material-1.BdvqkCqW.woff2 +0 -0
  48. package/.output/public/_nuxt/wherdr-nerd-material-2.C_flbBWO.woff2 +0 -0
  49. package/.output/public/_nuxt/wherdr-nerd-material-3.8xz7iX-Y.woff2 +0 -0
  50. package/.output/public/_nuxt/wherdr-nerd-material-4.CO_PudDR.woff2 +0 -0
  51. package/.output/public/_nuxt/wherdr-nerd-octicons.Hl4VEx8m.woff2 +0 -0
  52. package/.output/public/_nuxt/wherdr-nerd-powerline.B_kAMxXr.woff2 +0 -0
  53. package/.output/public/_nuxt/wherdr-symbols.C1LsPKmg.woff2 +0 -0
  54. package/.output/public/_nuxt/yzABg5xl.js +1 -0
  55. package/.output/public/manifest-en.webmanifest +18 -0
  56. package/.output/public/manifest.webmanifest +18 -0
  57. package/.output/public/sw.js +99 -0
  58. package/.output/server/chunks/_/awake.mjs +170 -0
  59. package/.output/server/chunks/_/branding.mjs +28 -0
  60. package/.output/server/chunks/_/changes.mjs +199 -0
  61. package/.output/server/chunks/_/error-500.mjs +20 -0
  62. package/.output/server/chunks/_/machineOrder.mjs +40 -0
  63. package/.output/server/chunks/_/onboarding.mjs +26 -0
  64. package/.output/server/chunks/_/phone.mjs +343 -0
  65. package/.output/server/chunks/_/plugins.mjs +248 -0
  66. package/.output/server/chunks/_/projectBoard.mjs +275 -0
  67. package/.output/server/chunks/_/projectsActions.mjs +143 -0
  68. package/.output/server/chunks/_/projectsPlugin.mjs +56 -0
  69. package/.output/server/chunks/_/restart.mjs +459 -0
  70. package/.output/server/chunks/_/reveal.mjs +137 -0
  71. package/.output/server/chunks/_/worktrees.mjs +74 -0
  72. package/.output/server/chunks/_/ws.mjs +57 -0
  73. package/.output/server/chunks/nitro/nitro.mjs +20691 -0
  74. package/.output/server/chunks/raw/apple-touch-icon.mjs +7 -0
  75. package/.output/server/chunks/raw/build-nerd-font.mjs +7 -0
  76. package/.output/server/chunks/raw/build-terminal-font.mjs +7 -0
  77. package/.output/server/chunks/raw/check-leaks.mjs +5 -0
  78. package/.output/server/chunks/raw/dev.wherdr.open.mjs +7 -0
  79. package/.output/server/chunks/raw/docker-entrypoint.mjs +7 -0
  80. package/.output/server/chunks/raw/favicon-32.mjs +7 -0
  81. package/.output/server/chunks/raw/favicon.mjs +7 -0
  82. package/.output/server/chunks/raw/herdr-plugin.mjs +7 -0
  83. package/.output/server/chunks/raw/icon-192.mjs +7 -0
  84. package/.output/server/chunks/raw/icon-512-maskable.mjs +7 -0
  85. package/.output/server/chunks/raw/icon-512.mjs +7 -0
  86. package/.output/server/chunks/raw/icon-maskable.mjs +7 -0
  87. package/.output/server/chunks/raw/icon.mjs +7 -0
  88. package/.output/server/chunks/raw/install-claude-statusline.mjs +7 -0
  89. package/.output/server/chunks/raw/install-host-open.mjs +7 -0
  90. package/.output/server/chunks/raw/pack-output.mjs +5 -0
  91. package/.output/server/chunks/raw/reveal.mjs +7 -0
  92. package/.output/server/chunks/raw/wherdr-open.mjs +7 -0
  93. package/.output/server/chunks/routes/api/_..._.mjs +30 -0
  94. package/.output/server/chunks/routes/api/agents.post.mjs +30 -0
  95. package/.output/server/chunks/routes/api/ask-tab.post.mjs +49 -0
  96. package/.output/server/chunks/routes/api/attach.post.mjs +35 -0
  97. package/.output/server/chunks/routes/api/auth/disable.post.mjs +30 -0
  98. package/.output/server/chunks/routes/api/auth/lock-all.post.mjs +30 -0
  99. package/.output/server/chunks/routes/api/auth/lock.post.mjs +30 -0
  100. package/.output/server/chunks/routes/api/auth/login/options.post.mjs +30 -0
  101. package/.output/server/chunks/routes/api/auth/login/verify.post.mjs +30 -0
  102. package/.output/server/chunks/routes/api/auth/max-session.post.mjs +30 -0
  103. package/.output/server/chunks/routes/api/auth/register/options.post.mjs +30 -0
  104. package/.output/server/chunks/routes/api/auth/register/verify.post.mjs +30 -0
  105. package/.output/server/chunks/routes/api/auth/status.get.mjs +33 -0
  106. package/.output/server/chunks/routes/api/changes.get.mjs +38 -0
  107. package/.output/server/chunks/routes/api/chat/image.get.mjs +40 -0
  108. package/.output/server/chunks/routes/api/chat.get.mjs +93 -0
  109. package/.output/server/chunks/routes/api/choose.post.mjs +135 -0
  110. package/.output/server/chunks/routes/api/claude-statusline.post.mjs +35 -0
  111. package/.output/server/chunks/routes/api/close/status.get.mjs +36 -0
  112. package/.output/server/chunks/routes/api/close.post.mjs +37 -0
  113. package/.output/server/chunks/routes/api/codex-update.post.mjs +41 -0
  114. package/.output/server/chunks/routes/api/commands.get.mjs +42 -0
  115. package/.output/server/chunks/routes/api/config.get.mjs +86 -0
  116. package/.output/server/chunks/routes/api/dirs.get.mjs +33 -0
  117. package/.output/server/chunks/routes/api/dismiss.post.mjs +33 -0
  118. package/.output/server/chunks/routes/api/effort.post.mjs +36 -0
  119. package/.output/server/chunks/routes/api/efforts.get.mjs +37 -0
  120. package/.output/server/chunks/routes/api/file.post.mjs +34 -0
  121. package/.output/server/chunks/routes/api/gitroot.get.mjs +37 -0
  122. package/.output/server/chunks/routes/api/index.get.mjs +36 -0
  123. package/.output/server/chunks/routes/api/input.post.mjs +43 -0
  124. package/.output/server/chunks/routes/api/interrupt.post.mjs +48 -0
  125. package/.output/server/chunks/routes/api/isgit.get.mjs +37 -0
  126. package/.output/server/chunks/routes/api/machine/awake.get.mjs +39 -0
  127. package/.output/server/chunks/routes/api/machine/awake.post.mjs +40 -0
  128. package/.output/server/chunks/routes/api/machine/order.get.mjs +31 -0
  129. package/.output/server/chunks/routes/api/machine/order.post.mjs +36 -0
  130. package/.output/server/chunks/routes/api/machine/rename.post.mjs +39 -0
  131. package/.output/server/chunks/routes/api/menu.post.mjs +76 -0
  132. package/.output/server/chunks/routes/api/model.post.mjs +36 -0
  133. package/.output/server/chunks/routes/api/models.get.mjs +35 -0
  134. package/.output/server/chunks/routes/api/nav.post.mjs +58 -0
  135. package/.output/server/chunks/routes/api/onboarding.get.mjs +31 -0
  136. package/.output/server/chunks/routes/api/onboarding.post.mjs +34 -0
  137. package/.output/server/chunks/routes/api/phone.get.mjs +38 -0
  138. package/.output/server/chunks/routes/api/phone.post.mjs +38 -0
  139. package/.output/server/chunks/routes/api/plugins/actions.get.mjs +36 -0
  140. package/.output/server/chunks/routes/api/plugins/invoke.post.mjs +33 -0
  141. package/.output/server/chunks/routes/api/plugins/profiles.get.mjs +35 -0
  142. package/.output/server/chunks/routes/api/plugins/projects.get.mjs +37 -0
  143. package/.output/server/chunks/routes/api/plugins/projects.post.mjs +37 -0
  144. package/.output/server/chunks/routes/api/plugins/thread-limits.get.mjs +30 -0
  145. package/.output/server/chunks/routes/api/plugins/thread-limits.post.mjs +40 -0
  146. package/.output/server/chunks/routes/api/project/report.get.mjs +36 -0
  147. package/.output/server/chunks/routes/api/prompt.post.mjs +87 -0
  148. package/.output/server/chunks/routes/api/push/quiet.post.mjs +49 -0
  149. package/.output/server/chunks/routes/api/push/subscribe.post.mjs +51 -0
  150. package/.output/server/chunks/routes/api/push/test.post.mjs +32 -0
  151. package/.output/server/chunks/routes/api/push/unsubscribe.post.mjs +34 -0
  152. package/.output/server/chunks/routes/api/quotas.get.mjs +30 -0
  153. package/.output/server/chunks/routes/api/rename.post.mjs +36 -0
  154. package/.output/server/chunks/routes/api/requeue.post.mjs +34 -0
  155. package/.output/server/chunks/routes/api/restart.get.mjs +38 -0
  156. package/.output/server/chunks/routes/api/restart.post.mjs +39 -0
  157. package/.output/server/chunks/routes/api/reveal.post.mjs +31 -0
  158. package/.output/server/chunks/routes/api/screen-key.post.mjs +41 -0
  159. package/.output/server/chunks/routes/api/screen.get.mjs +76 -0
  160. package/.output/server/chunks/routes/api/search.get.mjs +76 -0
  161. package/.output/server/chunks/routes/api/seen.post.mjs +33 -0
  162. package/.output/server/chunks/routes/api/sessions.get.mjs +33 -0
  163. package/.output/server/chunks/routes/api/sessions.post.mjs +33 -0
  164. package/.output/server/chunks/routes/api/space.post.mjs +258 -0
  165. package/.output/server/chunks/routes/api/state.get.mjs +30 -0
  166. package/.output/server/chunks/routes/api/unqueue.post.mjs +35 -0
  167. package/.output/server/chunks/routes/api/update.get.mjs +78 -0
  168. package/.output/server/chunks/routes/api/upload.post.mjs +33 -0
  169. package/.output/server/chunks/routes/api/worktrees/remove.post.mjs +34 -0
  170. package/.output/server/chunks/routes/api/worktrees.get.mjs +31 -0
  171. package/.output/server/chunks/routes/favicon.ico.get.mjs +31 -0
  172. package/.output/server/chunks/routes/icons/_name_.get.mjs +31 -0
  173. package/.output/server/chunks/routes/renderer.mjs +358 -0
  174. package/.output/server/chunks/routes/uploads/_...name_.get.mjs +39 -0
  175. package/.output/server/chunks/routes/ws/_..._.mjs +32 -0
  176. package/.output/server/chunks/routes/ws/events.mjs +57 -0
  177. package/.output/server/chunks/routes/ws/mirror.mjs +157 -0
  178. package/.output/server/chunks/routes/ws/term.mjs +151 -0
  179. package/.output/server/chunks/virtual/_raw-helpers.mjs +12 -0
  180. package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  181. package/.output/server/chunks/virtual/precomputed.mjs +4 -0
  182. package/.output/server/index.mjs +26 -0
  183. package/.output/server/node_modules/@babel/parser/lib/index.js +14616 -0
  184. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  185. package/.output/server/node_modules/@hexagon/base64/package.json +73 -0
  186. package/.output/server/node_modules/@hexagon/base64/src/base64.js +190 -0
  187. package/.output/server/node_modules/@levischuck/tiny-cbor/esm/cbor/cbor.js +440 -0
  188. package/.output/server/node_modules/@levischuck/tiny-cbor/esm/cbor/cbor_internal.js +111 -0
  189. package/.output/server/node_modules/@levischuck/tiny-cbor/esm/index.js +1 -0
  190. package/.output/server/node_modules/@levischuck/tiny-cbor/esm/package.json +3 -0
  191. package/.output/server/node_modules/@levischuck/tiny-cbor/package.json +25 -0
  192. package/.output/server/node_modules/@peculiar/asn1-android/build/es2015/attestation.js +34 -0
  193. package/.output/server/node_modules/@peculiar/asn1-android/build/es2015/index.js +3 -0
  194. package/.output/server/node_modules/@peculiar/asn1-android/build/es2015/key_description.js +512 -0
  195. package/.output/server/node_modules/@peculiar/asn1-android/build/es2015/nonstandard.js +103 -0
  196. package/.output/server/node_modules/@peculiar/asn1-android/build/es2015/package.json +3 -0
  197. package/.output/server/node_modules/@peculiar/asn1-android/node_modules/tslib/modules/index.js +70 -0
  198. package/.output/server/node_modules/@peculiar/asn1-android/node_modules/tslib/modules/package.json +3 -0
  199. package/.output/server/node_modules/@peculiar/asn1-android/node_modules/tslib/package.json +47 -0
  200. package/.output/server/node_modules/@peculiar/asn1-android/node_modules/tslib/tslib.js +484 -0
  201. package/.output/server/node_modules/@peculiar/asn1-android/package.json +64 -0
  202. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/attribute.js +22 -0
  203. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/attributes/counter_signature.js +13 -0
  204. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/attributes/index.js +8 -0
  205. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/attributes/message_digest.js +8 -0
  206. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/attributes/signing_time.js +13 -0
  207. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/certificate_choices.js +64 -0
  208. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/content_info.js +22 -0
  209. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/encapsulated_content_info.js +40 -0
  210. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/encrypted_content_info.js +56 -0
  211. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/enveloped_data.js +60 -0
  212. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/index.js +24 -0
  213. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/issuer_and_serial_number.js +23 -0
  214. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/kek_recipient_info.js +53 -0
  215. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/key_agree_recipient_info.js +167 -0
  216. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/key_trans_recipient_info.js +51 -0
  217. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/object_identifiers.js +10 -0
  218. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/originator_info.js +31 -0
  219. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/other_key_attribute.js +22 -0
  220. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/password_recipient_info.js +32 -0
  221. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/recipient_info.js +75 -0
  222. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/recipient_infos.js +20 -0
  223. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/revocation_info_choice.js +54 -0
  224. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/signed_data.js +64 -0
  225. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/signer_identifier.js +28 -0
  226. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/signer_info.js +70 -0
  227. package/.output/server/node_modules/@peculiar/asn1-cms/build/cjs/types.js +51 -0
  228. package/.output/server/node_modules/@peculiar/asn1-cms/node_modules/tslib/modules/index.js +70 -0
  229. package/.output/server/node_modules/@peculiar/asn1-cms/node_modules/tslib/modules/package.json +3 -0
  230. package/.output/server/node_modules/@peculiar/asn1-cms/node_modules/tslib/package.json +47 -0
  231. package/.output/server/node_modules/@peculiar/asn1-cms/node_modules/tslib/tslib.js +484 -0
  232. package/.output/server/node_modules/@peculiar/asn1-cms/package.json +65 -0
  233. package/.output/server/node_modules/@peculiar/asn1-csr/build/cjs/attributes.js +20 -0
  234. package/.output/server/node_modules/@peculiar/asn1-csr/build/cjs/certification_request.js +29 -0
  235. package/.output/server/node_modules/@peculiar/asn1-csr/build/cjs/certification_request_info.js +34 -0
  236. package/.output/server/node_modules/@peculiar/asn1-csr/build/cjs/index.js +6 -0
  237. package/.output/server/node_modules/@peculiar/asn1-csr/node_modules/tslib/modules/index.js +70 -0
  238. package/.output/server/node_modules/@peculiar/asn1-csr/node_modules/tslib/modules/package.json +3 -0
  239. package/.output/server/node_modules/@peculiar/asn1-csr/node_modules/tslib/package.json +47 -0
  240. package/.output/server/node_modules/@peculiar/asn1-csr/node_modules/tslib/tslib.js +484 -0
  241. package/.output/server/node_modules/@peculiar/asn1-csr/package.json +65 -0
  242. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/algorithms.js +14 -0
  243. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/ec_parameters.js +27 -0
  244. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/ec_private_key.js +36 -0
  245. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/ec_signature_value.js +25 -0
  246. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/index.js +9 -0
  247. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/object_identifiers.js +26 -0
  248. package/.output/server/node_modules/@peculiar/asn1-ecc/build/cjs/rfc3279.js +95 -0
  249. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/algorithms.js +10 -0
  250. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/ec_parameters.js +24 -0
  251. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/ec_private_key.js +32 -0
  252. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/ec_signature_value.js +21 -0
  253. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/index.js +6 -0
  254. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/object_identifiers.js +23 -0
  255. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/package.json +3 -0
  256. package/.output/server/node_modules/@peculiar/asn1-ecc/build/es2015/rfc3279.js +90 -0
  257. package/.output/server/node_modules/@peculiar/asn1-ecc/node_modules/tslib/modules/index.js +70 -0
  258. package/.output/server/node_modules/@peculiar/asn1-ecc/node_modules/tslib/modules/package.json +3 -0
  259. package/.output/server/node_modules/@peculiar/asn1-ecc/node_modules/tslib/package.json +47 -0
  260. package/.output/server/node_modules/@peculiar/asn1-ecc/node_modules/tslib/tslib.js +484 -0
  261. package/.output/server/node_modules/@peculiar/asn1-ecc/package.json +66 -0
  262. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/attribute.js +36 -0
  263. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/authenticated_safe.js +20 -0
  264. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/cert_bag.js +26 -0
  265. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/crl_bag.js +25 -0
  266. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/index.js +9 -0
  267. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/key_bag.js +12 -0
  268. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/pkcs8_shrouded_key_bag.js +12 -0
  269. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/secret_bag.js +22 -0
  270. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/bags/types.js +11 -0
  271. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/index.js +10 -0
  272. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/mac_data.js +27 -0
  273. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/object_identifiers.js +14 -0
  274. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/pfx.js +28 -0
  275. package/.output/server/node_modules/@peculiar/asn1-pfx/build/cjs/safe_bag.js +45 -0
  276. package/.output/server/node_modules/@peculiar/asn1-pfx/node_modules/tslib/modules/index.js +70 -0
  277. package/.output/server/node_modules/@peculiar/asn1-pfx/node_modules/tslib/modules/package.json +3 -0
  278. package/.output/server/node_modules/@peculiar/asn1-pfx/node_modules/tslib/package.json +47 -0
  279. package/.output/server/node_modules/@peculiar/asn1-pfx/node_modules/tslib/tslib.js +484 -0
  280. package/.output/server/node_modules/@peculiar/asn1-pfx/package.json +67 -0
  281. package/.output/server/node_modules/@peculiar/asn1-pkcs8/build/cjs/encrypted_private_key_info.js +23 -0
  282. package/.output/server/node_modules/@peculiar/asn1-pkcs8/build/cjs/index.js +5 -0
  283. package/.output/server/node_modules/@peculiar/asn1-pkcs8/build/cjs/private_key_info.js +54 -0
  284. package/.output/server/node_modules/@peculiar/asn1-pkcs8/node_modules/tslib/modules/index.js +70 -0
  285. package/.output/server/node_modules/@peculiar/asn1-pkcs8/node_modules/tslib/modules/package.json +3 -0
  286. package/.output/server/node_modules/@peculiar/asn1-pkcs8/node_modules/tslib/package.json +47 -0
  287. package/.output/server/node_modules/@peculiar/asn1-pkcs8/node_modules/tslib/tslib.js +484 -0
  288. package/.output/server/node_modules/@peculiar/asn1-pkcs8/package.json +63 -0
  289. package/.output/server/node_modules/@peculiar/asn1-pkcs9/build/cjs/index.js +301 -0
  290. package/.output/server/node_modules/@peculiar/asn1-pkcs9/node_modules/tslib/modules/index.js +70 -0
  291. package/.output/server/node_modules/@peculiar/asn1-pkcs9/node_modules/tslib/modules/package.json +3 -0
  292. package/.output/server/node_modules/@peculiar/asn1-pkcs9/node_modules/tslib/package.json +47 -0
  293. package/.output/server/node_modules/@peculiar/asn1-pkcs9/node_modules/tslib/tslib.js +484 -0
  294. package/.output/server/node_modules/@peculiar/asn1-pkcs9/package.json +67 -0
  295. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/algorithms.js +40 -0
  296. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/index.js +9 -0
  297. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/object_identifiers.js +28 -0
  298. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/other_prime_info.js +46 -0
  299. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/parameters/index.js +6 -0
  300. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/parameters/rsaes_oaep.js +45 -0
  301. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/parameters/rsassa_pkcs1_v1_5.js +20 -0
  302. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/parameters/rsassa_pss.js +53 -0
  303. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/rsa_private_key.js +79 -0
  304. package/.output/server/node_modules/@peculiar/asn1-rsa/build/cjs/rsa_public_key.js +25 -0
  305. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/algorithms.js +36 -0
  306. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/index.js +6 -0
  307. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/object_identifiers.js +25 -0
  308. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/other_prime_info.js +42 -0
  309. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/package.json +3 -0
  310. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/parameters/index.js +3 -0
  311. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/parameters/rsaes_oaep.js +41 -0
  312. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/parameters/rsassa_pkcs1_v1_5.js +16 -0
  313. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/parameters/rsassa_pss.js +49 -0
  314. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/rsa_private_key.js +75 -0
  315. package/.output/server/node_modules/@peculiar/asn1-rsa/build/es2015/rsa_public_key.js +21 -0
  316. package/.output/server/node_modules/@peculiar/asn1-rsa/node_modules/tslib/modules/index.js +70 -0
  317. package/.output/server/node_modules/@peculiar/asn1-rsa/node_modules/tslib/modules/package.json +3 -0
  318. package/.output/server/node_modules/@peculiar/asn1-rsa/node_modules/tslib/package.json +47 -0
  319. package/.output/server/node_modules/@peculiar/asn1-rsa/node_modules/tslib/tslib.js +484 -0
  320. package/.output/server/node_modules/@peculiar/asn1-rsa/package.json +64 -0
  321. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/convert.js +25 -0
  322. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/converters.js +148 -0
  323. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/decorators.js +52 -0
  324. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/enums.js +40 -0
  325. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/errors/index.js +4 -0
  326. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/errors/schema_validation.js +7 -0
  327. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/helper.js +44 -0
  328. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/index.js +22 -0
  329. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/objects.js +17 -0
  330. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/parser.js +313 -0
  331. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/schema.js +165 -0
  332. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/serializer.js +150 -0
  333. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/storage.js +5 -0
  334. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/types/bit_string.js +71 -0
  335. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/types/index.js +5 -0
  336. package/.output/server/node_modules/@peculiar/asn1-schema/build/cjs/types/octet_string.js +45 -0
  337. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/convert.js +20 -0
  338. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/converters.js +143 -0
  339. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/decorators.js +43 -0
  340. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/enums.js +37 -0
  341. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js +1 -0
  342. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js +3 -0
  343. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/helper.js +39 -0
  344. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/index.js +9 -0
  345. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/objects.js +13 -0
  346. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/package.json +3 -0
  347. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/parser.js +308 -0
  348. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/schema.js +160 -0
  349. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/serializer.js +145 -0
  350. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/storage.js +2 -0
  351. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js +66 -0
  352. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/types/index.js +2 -0
  353. package/.output/server/node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js +40 -0
  354. package/.output/server/node_modules/@peculiar/asn1-schema/node_modules/tslib/modules/index.js +70 -0
  355. package/.output/server/node_modules/@peculiar/asn1-schema/node_modules/tslib/modules/package.json +3 -0
  356. package/.output/server/node_modules/@peculiar/asn1-schema/node_modules/tslib/package.json +47 -0
  357. package/.output/server/node_modules/@peculiar/asn1-schema/node_modules/tslib/tslib.js +484 -0
  358. package/.output/server/node_modules/@peculiar/asn1-schema/package.json +74 -0
  359. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/algorithm_identifier.js +28 -0
  360. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/attribute.js +22 -0
  361. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/certificate.js +29 -0
  362. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/certificate_list.js +29 -0
  363. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extension.js +41 -0
  364. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/authority_information_access.js +36 -0
  365. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/authority_key_identifier.js +48 -0
  366. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/basic_constraints.js +27 -0
  367. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/certificate_issuer.js +19 -0
  368. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/certificate_policies.js +136 -0
  369. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_delta_indicator.js +14 -0
  370. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_distribution_points.js +132 -0
  371. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_freshest.js +22 -0
  372. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_issuing_distribution_point.js +68 -0
  373. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_number.js +20 -0
  374. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/crl_reason.js +39 -0
  375. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/entrust_version_info.js +46 -0
  376. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/extended_key_usage.js +28 -0
  377. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/index.js +28 -0
  378. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/inhibit_any_policy.js +23 -0
  379. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/invalidity_date.js +22 -0
  380. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/issuer_alternative_name.js +19 -0
  381. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/key_usage.js +56 -0
  382. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/name_constraints.js +74 -0
  383. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/policy_constraints.js +33 -0
  384. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/policy_mappings.js +35 -0
  385. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/private_key_usage_period.js +31 -0
  386. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/subject_alternative_name.js +19 -0
  387. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/subject_directory_attributes.js +22 -0
  388. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/subject_info_access.js +22 -0
  389. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/extensions/subject_key_identifier.js +9 -0
  390. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/general_name.js +132 -0
  391. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/general_names.js +20 -0
  392. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/index.js +19 -0
  393. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/ip_converter.js +177 -0
  394. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/name.js +110 -0
  395. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/object_identifiers.js +16 -0
  396. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/subject_public_key_info.js +20 -0
  397. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/tbs_cert_list.js +83 -0
  398. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/tbs_certificate.js +78 -0
  399. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/time.js +43 -0
  400. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/types.js +9 -0
  401. package/.output/server/node_modules/@peculiar/asn1-x509/build/cjs/validity.js +23 -0
  402. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/algorithm_identifier.js +24 -0
  403. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/attribute.js +18 -0
  404. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/certificate.js +25 -0
  405. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/certificate_list.js +25 -0
  406. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extension.js +37 -0
  407. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_information_access.js +32 -0
  408. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/authority_key_identifier.js +43 -0
  409. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/basic_constraints.js +23 -0
  410. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_issuer.js +16 -0
  411. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/certificate_policies.js +129 -0
  412. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_delta_indicator.js +11 -0
  413. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_distribution_points.js +127 -0
  414. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_freshest.js +19 -0
  415. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_issuing_distribution_point.js +64 -0
  416. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_number.js +17 -0
  417. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/crl_reason.js +36 -0
  418. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/entrust_version_info.js +41 -0
  419. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/extended_key_usage.js +25 -0
  420. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/index.js +25 -0
  421. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/inhibit_any_policy.js +20 -0
  422. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/invalidity_date.js +19 -0
  423. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/issuer_alternative_name.js +16 -0
  424. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/key_usage.js +52 -0
  425. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/name_constraints.js +69 -0
  426. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_constraints.js +29 -0
  427. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/policy_mappings.js +31 -0
  428. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/private_key_usage_period.js +27 -0
  429. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_alternative_name.js +16 -0
  430. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_directory_attributes.js +19 -0
  431. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_info_access.js +19 -0
  432. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/extensions/subject_key_identifier.js +5 -0
  433. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/general_name.js +127 -0
  434. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/general_names.js +17 -0
  435. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/index.js +16 -0
  436. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/ip_converter.js +173 -0
  437. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/name.js +106 -0
  438. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/object_identifiers.js +13 -0
  439. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/package.json +3 -0
  440. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/subject_public_key_info.js +16 -0
  441. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/tbs_cert_list.js +78 -0
  442. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/tbs_certificate.js +74 -0
  443. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/time.js +40 -0
  444. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/types.js +6 -0
  445. package/.output/server/node_modules/@peculiar/asn1-x509/build/es2015/validity.js +19 -0
  446. package/.output/server/node_modules/@peculiar/asn1-x509/node_modules/tslib/modules/index.js +70 -0
  447. package/.output/server/node_modules/@peculiar/asn1-x509/node_modules/tslib/modules/package.json +3 -0
  448. package/.output/server/node_modules/@peculiar/asn1-x509/node_modules/tslib/package.json +47 -0
  449. package/.output/server/node_modules/@peculiar/asn1-x509/node_modules/tslib/tslib.js +484 -0
  450. package/.output/server/node_modules/@peculiar/asn1-x509/package.json +64 -0
  451. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/aa_clear_attrs.js +27 -0
  452. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/aa_controls.js +44 -0
  453. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/attr_cert_issuer.js +31 -0
  454. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/attr_cert_validity_period.js +19 -0
  455. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/attr_spec.js +19 -0
  456. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/attribute_certificate.js +25 -0
  457. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/attribute_certificate_info.js +67 -0
  458. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/class_list.js +16 -0
  459. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/clearance.js +31 -0
  460. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/holder.js +41 -0
  461. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/ietf_attr_syntax.js +46 -0
  462. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/index.js +23 -0
  463. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/issuer_serial.js +30 -0
  464. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/object_digest_info.js +37 -0
  465. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/object_identifiers.js +17 -0
  466. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/proxy_info.js +20 -0
  467. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/role_syntax.js +29 -0
  468. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/security_category.js +27 -0
  469. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/svce_auth_info.js +27 -0
  470. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/target.js +79 -0
  471. package/.output/server/node_modules/@peculiar/asn1-x509-attr/build/cjs/v2_form.js +39 -0
  472. package/.output/server/node_modules/@peculiar/asn1-x509-attr/node_modules/tslib/modules/index.js +70 -0
  473. package/.output/server/node_modules/@peculiar/asn1-x509-attr/node_modules/tslib/modules/package.json +3 -0
  474. package/.output/server/node_modules/@peculiar/asn1-x509-attr/node_modules/tslib/package.json +47 -0
  475. package/.output/server/node_modules/@peculiar/asn1-x509-attr/node_modules/tslib/tslib.js +484 -0
  476. package/.output/server/node_modules/@peculiar/asn1-x509-attr/package.json +64 -0
  477. package/.output/server/node_modules/@peculiar/utils/build/cjs/bytes/buffer-source.js +115 -0
  478. package/.output/server/node_modules/@peculiar/utils/build/cjs/bytes/concat.js +41 -0
  479. package/.output/server/node_modules/@peculiar/utils/build/cjs/bytes/equal.js +17 -0
  480. package/.output/server/node_modules/@peculiar/utils/build/cjs/bytes/index.js +31 -0
  481. package/.output/server/node_modules/@peculiar/utils/build/cjs/bytes/sequence.js +161 -0
  482. package/.output/server/node_modules/@peculiar/utils/build/cjs/converters/convert.js +74 -0
  483. package/.output/server/node_modules/@peculiar/utils/build/cjs/converters/defaults.js +72 -0
  484. package/.output/server/node_modules/@peculiar/utils/build/cjs/converters/index.js +18 -0
  485. package/.output/server/node_modules/@peculiar/utils/build/cjs/converters/registry.js +188 -0
  486. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/base64.js +48 -0
  487. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/base64url.js +26 -0
  488. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/binary.js +26 -0
  489. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/hex.js +229 -0
  490. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/index.js +10 -0
  491. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/utf16.js +24 -0
  492. package/.output/server/node_modules/@peculiar/utils/build/cjs/encoding/utf8.js +13 -0
  493. package/.output/server/node_modules/@peculiar/utils/build/cjs/index.js +10 -0
  494. package/.output/server/node_modules/@peculiar/utils/build/cjs/legacy/buffer-source-converter.js +37 -0
  495. package/.output/server/node_modules/@peculiar/utils/build/cjs/legacy/convert.js +72 -0
  496. package/.output/server/node_modules/@peculiar/utils/build/cjs/legacy/functions.js +23 -0
  497. package/.output/server/node_modules/@peculiar/utils/build/cjs/legacy/index.js +11 -0
  498. package/.output/server/node_modules/@peculiar/utils/build/cjs/package.json +3 -0
  499. package/.output/server/node_modules/@peculiar/utils/build/cjs/pem/index.js +14 -0
  500. package/.output/server/node_modules/@peculiar/utils/build/cjs/pem/pem.js +140 -0
  501. package/.output/server/node_modules/@peculiar/utils/build/esm/bytes/buffer-source.js +101 -0
  502. package/.output/server/node_modules/@peculiar/utils/build/esm/bytes/concat.js +37 -0
  503. package/.output/server/node_modules/@peculiar/utils/build/esm/bytes/equal.js +14 -0
  504. package/.output/server/node_modules/@peculiar/utils/build/esm/bytes/index.js +4 -0
  505. package/.output/server/node_modules/@peculiar/utils/build/esm/bytes/sequence.js +150 -0
  506. package/.output/server/node_modules/@peculiar/utils/build/esm/converters/convert.js +71 -0
  507. package/.output/server/node_modules/@peculiar/utils/build/esm/converters/defaults.js +68 -0
  508. package/.output/server/node_modules/@peculiar/utils/build/esm/converters/index.js +3 -0
  509. package/.output/server/node_modules/@peculiar/utils/build/esm/converters/registry.js +185 -0
  510. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/base64.js +40 -0
  511. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/base64url.js +19 -0
  512. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/binary.js +20 -0
  513. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/hex.js +220 -0
  514. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/index.js +6 -0
  515. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/utf16.js +19 -0
  516. package/.output/server/node_modules/@peculiar/utils/build/esm/encoding/utf8.js +8 -0
  517. package/.output/server/node_modules/@peculiar/utils/build/esm/index.js +6 -0
  518. package/.output/server/node_modules/@peculiar/utils/build/esm/legacy/buffer-source-converter.js +33 -0
  519. package/.output/server/node_modules/@peculiar/utils/build/esm/legacy/convert.js +68 -0
  520. package/.output/server/node_modules/@peculiar/utils/build/esm/legacy/functions.js +18 -0
  521. package/.output/server/node_modules/@peculiar/utils/build/esm/legacy/index.js +3 -0
  522. package/.output/server/node_modules/@peculiar/utils/build/esm/pem/index.js +1 -0
  523. package/.output/server/node_modules/@peculiar/utils/build/esm/pem/pem.js +129 -0
  524. package/.output/server/node_modules/@peculiar/utils/node_modules/tslib/modules/index.js +70 -0
  525. package/.output/server/node_modules/@peculiar/utils/node_modules/tslib/modules/package.json +3 -0
  526. package/.output/server/node_modules/@peculiar/utils/node_modules/tslib/package.json +47 -0
  527. package/.output/server/node_modules/@peculiar/utils/node_modules/tslib/tslib.js +484 -0
  528. package/.output/server/node_modules/@peculiar/utils/package.json +111 -0
  529. package/.output/server/node_modules/@peculiar/x509/build/x509.cjs.js +3445 -0
  530. package/.output/server/node_modules/@peculiar/x509/node_modules/tslib/modules/index.js +70 -0
  531. package/.output/server/node_modules/@peculiar/x509/node_modules/tslib/modules/package.json +3 -0
  532. package/.output/server/node_modules/@peculiar/x509/node_modules/tslib/package.json +47 -0
  533. package/.output/server/node_modules/@peculiar/x509/node_modules/tslib/tslib.js +484 -0
  534. package/.output/server/node_modules/@peculiar/x509/package.json +94 -0
  535. package/.output/server/node_modules/@simplewebauthn/server/esm/authentication/generateAuthenticationOptions.js +41 -0
  536. package/.output/server/node_modules/@simplewebauthn/server/esm/authentication/verifyAuthenticationResponse.js +171 -0
  537. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/convertAAGUIDToString.js +17 -0
  538. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/convertCOSEtoPKCS.js +21 -0
  539. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/convertCertBufferToPEM.js +31 -0
  540. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/convertPEMToBytes.js +11 -0
  541. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/convertX509PublicKeyToCOSE.js +73 -0
  542. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/cose.js +90 -0
  543. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/decodeAttestationObject.js +16 -0
  544. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/decodeAuthenticatorExtensions.js +34 -0
  545. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/decodeClientDataJSON.js +16 -0
  546. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/decodeCredentialPublicKey.js +11 -0
  547. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/fetch.js +14 -0
  548. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/generateChallenge.js +24 -0
  549. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/generateUserID.js +20 -0
  550. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/getCertificateInfo.js +77 -0
  551. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/index.js +17 -0
  552. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/isCertRevoked.js +96 -0
  553. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/index.js +11 -0
  554. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoBase64URL.js +72 -0
  555. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCBOR.js +35 -0
  556. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/digest.js +14 -0
  557. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/getRandomValues.js +11 -0
  558. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/getWebCrypto.js +49 -0
  559. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/importKey.js +8 -0
  560. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/index.js +7 -0
  561. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoAlg.js +20 -0
  562. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/mapCoseAlgToWebCryptoKeyAlgName.js +19 -0
  563. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/unwrapEC2Signature.js +73 -0
  564. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/verify.js +32 -0
  565. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/verifyEC2.js +73 -0
  566. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/verifyOKP.js +51 -0
  567. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoCrypto/verifyRSA.js +91 -0
  568. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/iso/isoUint8Array.js +79 -0
  569. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/logging.js +19 -0
  570. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/mapJWSAlgToCOSEAlg.js +31 -0
  571. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/mapX509SignatureAlgToCOSEAlg.js +35 -0
  572. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/matchExpectedRPID.js +41 -0
  573. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/parseAuthenticatorData.js +106 -0
  574. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/parseBackupFlags.js +25 -0
  575. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/toHash.js +12 -0
  576. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/validateCertificatePath.js +134 -0
  577. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/validateExtFIDOGenCEAAGUID.js +34 -0
  578. package/.output/server/node_modules/@simplewebauthn/server/esm/helpers/verifySignature.js +35 -0
  579. package/.output/server/node_modules/@simplewebauthn/server/esm/index.js +8 -0
  580. package/.output/server/node_modules/@simplewebauthn/server/esm/metadata/mdsTypes.js +17 -0
  581. package/.output/server/node_modules/@simplewebauthn/server/esm/metadata/parseJWT.js +12 -0
  582. package/.output/server/node_modules/@simplewebauthn/server/esm/metadata/verifyAttestationWithMetadata.js +159 -0
  583. package/.output/server/node_modules/@simplewebauthn/server/esm/metadata/verifyJWT.js +42 -0
  584. package/.output/server/node_modules/@simplewebauthn/server/esm/metadata/verifyMDSBlob.js +59 -0
  585. package/.output/server/node_modules/@simplewebauthn/server/esm/package.json +3 -0
  586. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/generateRegistrationOptions.js +181 -0
  587. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/tpm/constants.js +137 -0
  588. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/tpm/parseCertInfo.js +58 -0
  589. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/tpm/parsePubArea.js +94 -0
  590. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/tpm/verifyAttestationTPM.js +331 -0
  591. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/verifyAttestationAndroidKey.js +120 -0
  592. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/verifyAttestationAndroidSafetyNet.js +113 -0
  593. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/verifyAttestationApple.js +58 -0
  594. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/verifyAttestationFIDOU2F.js +48 -0
  595. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifications/verifyAttestationPacked.js +113 -0
  596. package/.output/server/node_modules/@simplewebauthn/server/esm/registration/verifyRegistrationResponse.js +213 -0
  597. package/.output/server/node_modules/@simplewebauthn/server/esm/services/defaultRootCerts/android-key.js +171 -0
  598. package/.output/server/node_modules/@simplewebauthn/server/esm/services/defaultRootCerts/android-safetynet.js +32 -0
  599. package/.output/server/node_modules/@simplewebauthn/server/esm/services/defaultRootCerts/apple.js +25 -0
  600. package/.output/server/node_modules/@simplewebauthn/server/esm/services/defaultRootCerts/mds.js +74 -0
  601. package/.output/server/node_modules/@simplewebauthn/server/esm/services/metadataService.js +268 -0
  602. package/.output/server/node_modules/@simplewebauthn/server/esm/services/settingsService.js +74 -0
  603. package/.output/server/node_modules/@simplewebauthn/server/esm/types/index.js +1 -0
  604. package/.output/server/node_modules/@simplewebauthn/server/package.json +65 -0
  605. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6801 -0
  606. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  607. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +692 -0
  608. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  609. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1420 -0
  610. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  611. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1905 -0
  612. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  613. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +7006 -0
  614. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  615. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1867 -0
  616. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  617. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +904 -0
  618. package/.output/server/node_modules/@vue/server-renderer/package.json +53 -0
  619. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +655 -0
  620. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  621. package/.output/server/node_modules/agent-base/dist/helpers.js +66 -0
  622. package/.output/server/node_modules/agent-base/dist/index.js +178 -0
  623. package/.output/server/node_modules/agent-base/package.json +46 -0
  624. package/.output/server/node_modules/asn1.js/lib/asn1/api.js +57 -0
  625. package/.output/server/node_modules/asn1.js/lib/asn1/base/buffer.js +153 -0
  626. package/.output/server/node_modules/asn1.js/lib/asn1/base/index.js +8 -0
  627. package/.output/server/node_modules/asn1.js/lib/asn1/base/node.js +638 -0
  628. package/.output/server/node_modules/asn1.js/lib/asn1/base/reporter.js +123 -0
  629. package/.output/server/node_modules/asn1.js/lib/asn1/constants/der.js +58 -0
  630. package/.output/server/node_modules/asn1.js/lib/asn1/constants/index.js +21 -0
  631. package/.output/server/node_modules/asn1.js/lib/asn1/decoders/der.js +335 -0
  632. package/.output/server/node_modules/asn1.js/lib/asn1/decoders/index.js +6 -0
  633. package/.output/server/node_modules/asn1.js/lib/asn1/decoders/pem.js +51 -0
  634. package/.output/server/node_modules/asn1.js/lib/asn1/encoders/der.js +295 -0
  635. package/.output/server/node_modules/asn1.js/lib/asn1/encoders/index.js +6 -0
  636. package/.output/server/node_modules/asn1.js/lib/asn1/encoders/pem.js +23 -0
  637. package/.output/server/node_modules/asn1.js/lib/asn1.js +11 -0
  638. package/.output/server/node_modules/asn1.js/package.json +36 -0
  639. package/.output/server/node_modules/asn1js/build/index.js +3266 -0
  640. package/.output/server/node_modules/asn1js/package.json +86 -0
  641. package/.output/server/node_modules/bn.js/lib/bn.js +3463 -0
  642. package/.output/server/node_modules/bn.js/package.json +36 -0
  643. package/.output/server/node_modules/buffer-equal-constant-time/index.js +41 -0
  644. package/.output/server/node_modules/buffer-equal-constant-time/package.json +21 -0
  645. package/.output/server/node_modules/debug/package.json +64 -0
  646. package/.output/server/node_modules/debug/src/browser.js +272 -0
  647. package/.output/server/node_modules/debug/src/common.js +292 -0
  648. package/.output/server/node_modules/debug/src/index.js +10 -0
  649. package/.output/server/node_modules/debug/src/node.js +263 -0
  650. package/.output/server/node_modules/devalue/index.js +17 -0
  651. package/.output/server/node_modules/devalue/package.json +39 -0
  652. package/.output/server/node_modules/devalue/src/base64.js +60 -0
  653. package/.output/server/node_modules/devalue/src/constants.js +12 -0
  654. package/.output/server/node_modules/devalue/src/operations.js +221 -0
  655. package/.output/server/node_modules/devalue/src/parse.js +279 -0
  656. package/.output/server/node_modules/devalue/src/stringify.js +433 -0
  657. package/.output/server/node_modules/devalue/src/uneval.js +698 -0
  658. package/.output/server/node_modules/devalue/src/utils.js +190 -0
  659. package/.output/server/node_modules/ecdsa-sig-formatter/package.json +46 -0
  660. package/.output/server/node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js +187 -0
  661. package/.output/server/node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js +23 -0
  662. package/.output/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  663. package/.output/server/node_modules/entities/dist/commonjs/decode.js +568 -0
  664. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
  665. package/.output/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
  666. package/.output/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
  667. package/.output/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
  668. package/.output/server/node_modules/entities/dist/commonjs/package.json +3 -0
  669. package/.output/server/node_modules/entities/package.json +120 -0
  670. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  671. package/.output/server/node_modules/estree-walker/package.json +37 -0
  672. package/.output/server/node_modules/hookable/dist/index.mjs +257 -0
  673. package/.output/server/node_modules/hookable/package.json +54 -0
  674. package/.output/server/node_modules/http_ece/ece.js +528 -0
  675. package/.output/server/node_modules/http_ece/package.json +29 -0
  676. package/.output/server/node_modules/https-proxy-agent/dist/index.js +180 -0
  677. package/.output/server/node_modules/https-proxy-agent/dist/parse-proxy-response.js +101 -0
  678. package/.output/server/node_modules/https-proxy-agent/package.json +50 -0
  679. package/.output/server/node_modules/inherits/inherits.js +9 -0
  680. package/.output/server/node_modules/inherits/inherits_browser.js +27 -0
  681. package/.output/server/node_modules/inherits/package.json +29 -0
  682. package/.output/server/node_modules/jwa/index.js +266 -0
  683. package/.output/server/node_modules/jwa/package.json +37 -0
  684. package/.output/server/node_modules/jws/index.js +22 -0
  685. package/.output/server/node_modules/jws/lib/data-stream.js +55 -0
  686. package/.output/server/node_modules/jws/lib/sign-stream.js +83 -0
  687. package/.output/server/node_modules/jws/lib/tostring.js +10 -0
  688. package/.output/server/node_modules/jws/lib/verify-stream.js +125 -0
  689. package/.output/server/node_modules/jws/package.json +34 -0
  690. package/.output/server/node_modules/minimalistic-assert/index.js +11 -0
  691. package/.output/server/node_modules/minimalistic-assert/package.json +19 -0
  692. package/.output/server/node_modules/ms/index.js +162 -0
  693. package/.output/server/node_modules/ms/package.json +38 -0
  694. package/.output/server/node_modules/nostics/dist/formatters/ansi.mjs +19 -0
  695. package/.output/server/node_modules/nostics/dist/index.mjs +194 -0
  696. package/.output/server/node_modules/nostics/package.json +126 -0
  697. package/.output/server/node_modules/pvtsutils/build/index.js +399 -0
  698. package/.output/server/node_modules/pvtsutils/package.json +76 -0
  699. package/.output/server/node_modules/pvutils/build/utils.js +361 -0
  700. package/.output/server/node_modules/pvutils/package.json +63 -0
  701. package/.output/server/node_modules/qrcode-terminal/package.json +47 -0
  702. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QR8bitByte.js +22 -0
  703. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRBitBuffer.js +38 -0
  704. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js +7 -0
  705. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRMaskPattern.js +10 -0
  706. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRMath.js +44 -0
  707. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRMode.js +6 -0
  708. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRPolynomial.js +66 -0
  709. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRRSBlock.js +298 -0
  710. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/QRUtil.js +272 -0
  711. package/.output/server/node_modules/qrcode-terminal/vendor/QRCode/index.js +462 -0
  712. package/.output/server/node_modules/reflect-metadata/Reflect.js +1415 -0
  713. package/.output/server/node_modules/reflect-metadata/package.json +68 -0
  714. package/.output/server/node_modules/safe-buffer/index.js +65 -0
  715. package/.output/server/node_modules/safe-buffer/package.json +51 -0
  716. package/.output/server/node_modules/safer-buffer/package.json +34 -0
  717. package/.output/server/node_modules/safer-buffer/safer.js +77 -0
  718. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  719. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  720. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  721. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  722. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  723. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
  724. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  725. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  726. package/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
  727. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  728. package/.output/server/node_modules/source-map-js/package.json +71 -0
  729. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  730. package/.output/server/node_modules/supports-color/index.js +202 -0
  731. package/.output/server/node_modules/supports-color/package.json +64 -0
  732. package/.output/server/node_modules/tslib/modules/index.js +70 -0
  733. package/.output/server/node_modules/tslib/modules/package.json +3 -0
  734. package/.output/server/node_modules/tslib/package.json +47 -0
  735. package/.output/server/node_modules/tslib/tslib.js +484 -0
  736. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/auto-injectable.js +46 -0
  737. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/index.js +20 -0
  738. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/inject-all-with-transform.js +13 -0
  739. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/inject-all.js +12 -0
  740. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/inject-with-transform.js +10 -0
  741. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/inject.js +12 -0
  742. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/injectable.js +21 -0
  743. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/registry.js +14 -0
  744. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/scoped.js +13 -0
  745. package/.output/server/node_modules/tsyringe/dist/cjs/decorators/singleton.js +11 -0
  746. package/.output/server/node_modules/tsyringe/dist/cjs/dependency-container.js +341 -0
  747. package/.output/server/node_modules/tsyringe/dist/cjs/error-helpers.js +19 -0
  748. package/.output/server/node_modules/tsyringe/dist/cjs/factories/index.js +8 -0
  749. package/.output/server/node_modules/tsyringe/dist/cjs/factories/instance-caching-factory.js +12 -0
  750. package/.output/server/node_modules/tsyringe/dist/cjs/factories/instance-per-container-caching-factory.js +14 -0
  751. package/.output/server/node_modules/tsyringe/dist/cjs/factories/predicate-aware-class-factory.js +19 -0
  752. package/.output/server/node_modules/tsyringe/dist/cjs/index.js +15 -0
  753. package/.output/server/node_modules/tsyringe/dist/cjs/interceptors.js +17 -0
  754. package/.output/server/node_modules/tsyringe/dist/cjs/lazy-helpers.js +54 -0
  755. package/.output/server/node_modules/tsyringe/dist/cjs/providers/class-provider.js +7 -0
  756. package/.output/server/node_modules/tsyringe/dist/cjs/providers/factory-provider.js +7 -0
  757. package/.output/server/node_modules/tsyringe/dist/cjs/providers/index.js +12 -0
  758. package/.output/server/node_modules/tsyringe/dist/cjs/providers/injection-token.js +24 -0
  759. package/.output/server/node_modules/tsyringe/dist/cjs/providers/provider.js +14 -0
  760. package/.output/server/node_modules/tsyringe/dist/cjs/providers/token-provider.js +7 -0
  761. package/.output/server/node_modules/tsyringe/dist/cjs/providers/value-provider.js +7 -0
  762. package/.output/server/node_modules/tsyringe/dist/cjs/reflection-helpers.js +27 -0
  763. package/.output/server/node_modules/tsyringe/dist/cjs/registry-base.js +39 -0
  764. package/.output/server/node_modules/tsyringe/dist/cjs/registry.js +6 -0
  765. package/.output/server/node_modules/tsyringe/dist/cjs/resolution-context.js +8 -0
  766. package/.output/server/node_modules/tsyringe/dist/cjs/types/disposable.js +13 -0
  767. package/.output/server/node_modules/tsyringe/dist/cjs/types/index.js +4 -0
  768. package/.output/server/node_modules/tsyringe/dist/cjs/types/lifecycle.js +10 -0
  769. package/.output/server/node_modules/tsyringe/node_modules/tslib/package.json +37 -0
  770. package/.output/server/node_modules/tsyringe/node_modules/tslib/tslib.js +284 -0
  771. package/.output/server/node_modules/tsyringe/package.json +63 -0
  772. package/.output/server/node_modules/ufo/dist/index.mjs +645 -0
  773. package/.output/server/node_modules/ufo/package.json +48 -0
  774. package/.output/server/node_modules/unhead/dist/client.mjs +22 -0
  775. package/.output/server/node_modules/unhead/dist/legacy.mjs +33 -0
  776. package/.output/server/node_modules/unhead/dist/minify.mjs +183 -0
  777. package/.output/server/node_modules/unhead/dist/parser.mjs +518 -0
  778. package/.output/server/node_modules/unhead/dist/plugins.mjs +746 -0
  779. package/.output/server/node_modules/unhead/dist/server.mjs +99 -0
  780. package/.output/server/node_modules/unhead/dist/shared/unhead.-hZVKou0.mjs +400 -0
  781. package/.output/server/node_modules/unhead/dist/shared/unhead.BEmVMkeA.mjs +673 -0
  782. package/.output/server/node_modules/unhead/dist/shared/unhead.BGFxPGPQ.mjs +47 -0
  783. package/.output/server/node_modules/unhead/dist/shared/unhead.BQWSw36o.mjs +192 -0
  784. package/.output/server/node_modules/unhead/dist/shared/unhead.Bf_fPVYA.mjs +6 -0
  785. package/.output/server/node_modules/unhead/dist/shared/unhead.Bjbp1C8D.mjs +224 -0
  786. package/.output/server/node_modules/unhead/dist/shared/unhead.Bm4Y6XQI.mjs +17 -0
  787. package/.output/server/node_modules/unhead/dist/shared/unhead.C5Bksi2B.mjs +49 -0
  788. package/.output/server/node_modules/unhead/dist/shared/unhead.CGPOfp5O.mjs +32 -0
  789. package/.output/server/node_modules/unhead/dist/shared/unhead.CHEy9ana.mjs +7 -0
  790. package/.output/server/node_modules/unhead/dist/shared/unhead.C_7zwq8E.mjs +11 -0
  791. package/.output/server/node_modules/unhead/dist/shared/unhead.D7HkBzZn.mjs +59 -0
  792. package/.output/server/node_modules/unhead/dist/shared/unhead.Dssd7L5I.mjs +196 -0
  793. package/.output/server/node_modules/unhead/dist/shared/unhead.jEy9BmRq.mjs +264 -0
  794. package/.output/server/node_modules/unhead/dist/shared/unhead.oZ7pkTV1.mjs +19 -0
  795. package/.output/server/node_modules/unhead/dist/shared/unhead.tQnRaXfX.mjs +240 -0
  796. package/.output/server/node_modules/unhead/dist/stream/client.mjs +33 -0
  797. package/.output/server/node_modules/unhead/dist/stream/iife.mjs +2 -0
  798. package/.output/server/node_modules/unhead/dist/stream/server.mjs +436 -0
  799. package/.output/server/node_modules/unhead/dist/utils.mjs +7 -0
  800. package/.output/server/node_modules/unhead/package.json +179 -0
  801. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  802. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  803. package/.output/server/node_modules/vue/index.js +7 -0
  804. package/.output/server/node_modules/vue/index.mjs +1 -0
  805. package/.output/server/node_modules/vue/package.json +112 -0
  806. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  807. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +687 -0
  808. package/.output/server/node_modules/vue-bundle-renderer/package.json +66 -0
  809. package/.output/server/node_modules/web-push/package.json +55 -0
  810. package/.output/server/node_modules/web-push/src/encryption-helper.js +62 -0
  811. package/.output/server/node_modules/web-push/src/index.js +21 -0
  812. package/.output/server/node_modules/web-push/src/urlsafe-base64-helper.js +13 -0
  813. package/.output/server/node_modules/web-push/src/vapid-helper.js +255 -0
  814. package/.output/server/node_modules/web-push/src/web-push-constants.js +17 -0
  815. package/.output/server/node_modules/web-push/src/web-push-error.js +16 -0
  816. package/.output/server/node_modules/web-push/src/web-push-lib.js +413 -0
  817. package/.output/server/package.json +67 -0
  818. package/LICENSE +21 -0
  819. package/README.md +963 -2
  820. package/bin/lib/commands.mjs +432 -0
  821. package/bin/lib/core.mjs +150 -0
  822. package/bin/lib/panel.mjs +208 -0
  823. package/bin/lib/runtime.mjs +74 -0
  824. package/bin/lib/service.mjs +133 -0
  825. package/bin/lib/tailnet.d.mts +32 -0
  826. package/bin/lib/tailnet.mjs +185 -0
  827. package/bin/wherdr.mjs +23 -0
  828. package/package.json +75 -4
package/README.md CHANGED
@@ -1,3 +1,964 @@
1
- # Temporary Holding Version
1
+ <p align="center">
2
+ <img src="server/assets/branding/icons/icon-512.png" alt="wherdr logo" width="120">
3
+ </p>
2
4
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
5
+ <h1 align="center">wherdr</h1>
6
+
7
+ <p align="center"><b>A complete workspace for the coding agents running in <a href="https://herdr.dev">Herdr</a>, on your
8
+ computer and on your phone.</b></p>
9
+
10
+ <p align="center"><a href="https://wherdr.dev"><b>wherdr.dev</b></a> · <code>curl -fsSL https://wherdr.dev/install | sh</code> · <code>herdr plugin install afloury/wherdr</code></p>
11
+
12
+ <p align="center"><a href="https://github.com/afloury/wherdr/actions/workflows/ci.yml"><img src="https://github.com/afloury/wherdr/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a></p>
13
+
14
+ ## Quick start
15
+
16
+ With [Herdr](https://herdr.dev) running and Node.js 22 (or Bun), on macOS or Linux:
17
+
18
+ ```sh
19
+ npx wherdr # or: bunx wherdr, pnpm dlx wherdr — then open http://localhost:7683
20
+ ```
21
+
22
+ To keep it: `npm install -g wherdr`, then `wherdr service install` starts it at every login, and
23
+ `wherdr phone` walks you through phone access. See [the `wherdr` command](#the-wherdr-command).
24
+
25
+ At first launch, wherdr opens a **setup guide**: the Herdr agents it found, your phone
26
+ (Tailscale), then the passkey lock and notifications. Skip it any time; finishing or skipping is
27
+ saved on the server (`data/onboarding.json`), so your other devices do not show it again. Reopen
28
+ it from Settings › About › **Setup guide**. On a phone that already opens wherdr through its
29
+ tailnet address, the phone step becomes Add to Home Screen.
30
+
31
+ wherdr is a small self-hosted web app that talks to the Herdr server on your machine. **On a
32
+ computer**, it can replace the Herdr terminal client day to day: your spaces, tabs and split panes
33
+ side by side, live conversations and real terminals, drag-and-drop layout, keyboard shortcuts
34
+ and a project board for herdr-projects. **On a phone**, installed as a PWA, it is the companion
35
+ that follows your agents when you are away: push notifications when an agent finishes or needs
36
+ you, one-tap answers, quick replies and offline reading.
37
+
38
+ It lists your agents live — Claude Code, Codex and the other agents Herdr recognizes — and works
39
+ on the same Herdr session `herdr` attaches to: nothing is copied, nothing runs in the cloud. Use
40
+ it on `localhost`, or from your other devices over Tailscale.
41
+
42
+ > [!WARNING]
43
+ > **wherdr is a remote shell on your machine.** Anyone who can reach it can start agents and
44
+ > run commands as your user. **Never expose it on the public Internet** (no port forwarding, no
45
+ > public reverse proxy, no tunnel). Use it on `localhost`, or from your other devices through a
46
+ > private network such as [Tailscale](https://tailscale.com). Enabling the passkey lock is
47
+ > strongly recommended. See [Security](#security).
48
+
49
+ <p align="center">
50
+ <img src="docs/screenshots/desktop.png" alt="wherdr on a computer: agent sidebar and conversation" width="900">
51
+ </p>
52
+ <p align="center"><sub>On a computer</sub></p>
53
+ <br>
54
+ <p align="center">
55
+ <img src="docs/screenshots/home-phone.png" alt="Agent list on a phone" width="340">
56
+ &nbsp;&nbsp;&nbsp;&nbsp;
57
+ <img src="docs/screenshots/chat-phone.png" alt="Conversation view on a phone" width="340">
58
+ </p>
59
+ <p align="center"><sub>On a phone: the same agents, the same session.</sub></p>
60
+
61
+ *Unofficial project. Not affiliated with or endorsed by Herdr, Anthropic or OpenAI. Claude,
62
+ Claude Code, Codex and other product names are trademarks of their respective owners.*
63
+
64
+ ## Contents
65
+
66
+ - [Quick start](#quick-start)
67
+ - [Features](#features)
68
+ - [How it works](#how-it-works)
69
+ - [Requirements](#requirements)
70
+ - [Installation](#installation): [which setup?](#which-setup) ·
71
+ [always-on server + Tailscale](#recommended-always-on-server--tailscale) ·
72
+ [other private networks](#other-private-networks) ·
73
+ [the `wherdr` command](#the-wherdr-command) ·
74
+ [one computer, no Docker](#simple-one-computer-no-docker) ·
75
+ [as a Herdr plugin](#install-as-a-herdr-plugin) ·
76
+ [Docker on a Mac: Reveal/Open](#wherdr-in-docker-on-a-mac-reveal-in-finder-open-and-modalto)
77
+ - [Updating](#updating)
78
+ - [Install the app on your phone](#install-the-app-on-your-phone)
79
+ - [Configuration](#configuration)
80
+ - [Several machines (SSH)](#several-machines-ssh)
81
+ - [Claude and Codex quotas](#claude-and-codex-quotas)
82
+ - [Notifications](#notifications)
83
+ - [Works great with herdr-projects](#works-great-with-herdr-projects)
84
+ - [Herdr plugins](#herdr-plugins)
85
+ - [Security](#security)
86
+ - [Troubleshooting](#troubleshooting)
87
+ - [Contributing](#contributing) · [License](#license)
88
+
89
+ ## Features
90
+
91
+ ### Everywhere
92
+
93
+ - **Live agent list**, one line per Herdr space, grouped by state (your turn, working, ready),
94
+ with a preview of each agent's last answer. When an agent asks for permission or asks a
95
+ question, the options show on its card: **answer in one tap** without opening it.
96
+ - **Conversation view**: the agent's real transcript (Claude Code, Codex and omp), rendered as
97
+ Markdown, with grouped tool calls, images (full-screen viewer with pinch / wheel zoom and pan), timestamps, search and infinite scroll back to the
98
+ first message. Reading a conversation never touches the terminal, so it never resizes a pane.
99
+ A command the agent proposes (shell code block, or inline `! command`) can be copied without
100
+ its prompt, or run in the agent's shell mode (`!`, Claude Code, Codex and omp) after you
101
+ confirm the full command.
102
+ - **Terminal view**: the real terminal (xterm.js, WebGL or DOM renderer) with take-over. On a
103
+ computer, drag over the text on screen to select it: releasing the button copies it, as do
104
+ `⌘C` / `Ctrl+Shift+C`. The history is browsed with the wheel, not by dragging past the edge.
105
+ Links (OSC 8 hyperlinks and plain `http(s)://` URLs, even wrapped over several rows) open in a
106
+ new tab with `⌘`+click / `Ctrl`+click, or a tap on a phone; only http and https open. A long
107
+ line wrapped by the width is copied in one piece, without the breaks between its rows. An image
108
+ pasted with `⌘V` (Mac), here or in a side-by-side terminal, goes to the agent's machine and its
109
+ path is pasted, which omp and Claude Code attach as an image, as in the conversation.
110
+ - **Composer**: send messages while the agent works (queued, cancellable), attach or paste
111
+ photos and the files the agent can read (Claude Code: PDFs, notebooks, text and code of any
112
+ extension; Codex: notebooks, text and code), run slash commands (`/compact`, `/clear`, `/context`, `/usage`…) and see the output
113
+ of local commands. Stop button while the agent works.
114
+ - **Codex updates and limits**: in a Codex conversation, a new Codex version shows above the
115
+ field with an **Update** button (runs Codex's official update command on that machine, after
116
+ confirmation), then **Restart to update** on the same conversation. When wherdr cannot run it
117
+ (Docker, read-only home), Update exits Codex, runs the command in the agent's own terminal and
118
+ resumes the same conversation (only while Codex is idle). Codex's own weekly-limit warning
119
+ (its footer gauge, or its startup heads-up) is repeated above the field, with its values, while
120
+ Codex shows it.
121
+ - **Model and effort pickers** for Claude Code, Codex and omp (omp: its
122
+ "Switch Model" selector, `/switch` or `/model`, and its thinking level, changed with its own
123
+ ⇧⇥ cycle). Changes apply **to the current session only**; wherdr never changes your default
124
+ model.
125
+ - **New agent**: pick an installed agent (or a plain terminal), a folder, optionally a separate
126
+ Git **worktree** and branch, resume the last conversation, and queue a first message.
127
+ - **Changes view**: Git status and diff of an agent's working folder; worktree management.
128
+ - **Several machines**: agents of the SSH machines registered in Herdr (`herdr machine add`)
129
+ appear in their own section; everything works the same on a remote agent.
130
+ - **Named Herdr sessions**, **quotas** (remaining Claude and Codex usage limits), **Herdr plugin
131
+ actions** in the menus, **passkey lock** (Face ID, Touch ID, Windows Hello, Android…).
132
+ - **Themes**: wherdr Titanium (default), herdr.dev and Herdr's built-in themes, or follow your Herdr theme.
133
+ **English and French** interface.
134
+
135
+ ### On a computer
136
+
137
+ - **Split panes, live**: a tab with several panes is drawn with Herdr's real layout; every pane
138
+ shows its conversation or terminal live, and the one you click becomes interactive.
139
+ - **Rearrange the layout**: drag a pane onto another to move it, drag a divider to resize
140
+ (arrow keys work on a focused divider); changes go to Herdr itself.
141
+ - **Spaces and tabs**: sidebar with every space, tabs at the top, active tab remembered per space.
142
+ The sidebar can be resized, or collapsed to a narrow rail (search, new agent, settings and
143
+ state counters) with the button next to Settings; the choice is kept on the device.
144
+ - **Keyboard shortcuts** (`Mod` is ⌘ on macOS, Ctrl elsewhere; `Mod+/` or `?` lists them all,
145
+ also in Settings › Computer):
146
+ - `Ctrl/⌘+K` global search across agents and conversations, `Alt+↑/↓` previous / next agent
147
+ in the list, `Mod+,` settings.
148
+ - `Mod+Alt+N` new agent in a new space, `Mod+Alt+T` new tab in the current space,
149
+ `Mod+Alt+W` close the current pane (after confirmation). They work from the terminal too.
150
+ - With [herdr-projects](#works-great-with-herdr-projects) on the agent's machine: `Mod+Alt+P`
151
+ shows or collapses the Project panel of the current agent's project (from a thread, it opens
152
+ the coordinator), and `Mod+Alt+Shift+N` opens **New project**.
153
+ - In an agent: `Mod+F` searches the conversation, ``Ctrl+` `` switches between conversation
154
+ and terminal, and `Esc` stops a working agent when the message field is empty.
155
+ - `Alt+Shift+arrows` swaps the current pane with its neighbour, `Ctrl/⌘+Alt+arrows` moves
156
+ focus to the neighbouring pane in a side-by-side tab, `Esc` closes dialogs, `Enter` sends
157
+ and `Shift+Enter` adds a new line. On a "Your turn" card, `1`–`9` pick an option (on AZERTY
158
+ without Shift too, outside the message field); on the `/resume` card, `Ctrl+A` switches
159
+ between every project and the current one (`⌘A` still selects all on macOS).
160
+ - **Project board** for [herdr-projects](#works-great-with-herdr-projects): coordinator and threads grouped
161
+ under their project, and a side panel with the project's task lists (to test, to decide,
162
+ to review, in progress, in queue, blocked, to do, backlog — each optional) and one-click
163
+ replies to the coordinator.
164
+ - **Settings** in a sidebar, with desktop-only options such as the content width.
165
+
166
+ ### On a phone
167
+
168
+ - **Installable app (PWA)** on iPhone and Android, with safe-area and keyboard handling.
169
+ - **Web Push notifications** when an agent finishes or needs you (with its question), and for
170
+ `herdr notification show` (plugins, scripts).
171
+ - **Quick replies**: answer permissions and questions in one tap from the agent list.
172
+ - **Split tabs on a small screen**: a plan of the tab's panes in Herdr's proportions, then each
173
+ pane full screen with a mini-map and swipe to its neighbours.
174
+ - **Terminal key bar** (Esc, Enter, arrows, Shift+Tab, Ctrl+C…) and touch scrolling.
175
+ - **Offline reading** of the last known state and of recently opened conversations.
176
+
177
+ ## How it works
178
+
179
+ ```
180
+ phone / laptop ──private network──> HTTPS (tailscale serve, private proxy)
181
+ │
182
+ ▼
183
+ wherdr (Nitro server, 127.0.0.1:7683)
184
+ ├─ Herdr API socket ~/.config/herdr/herdr.sock
185
+ ├─ Herdr client socket (notifications, passive client)
186
+ ├─ herdr terminal session control <pane> (terminal view)
187
+ ├─ transcripts ~/.claude, ~/.codex, ~/.omp (read only)
188
+ └─ ssh -M <machine> (other machines, optional)
189
+ ```
190
+
191
+ wherdr runs on the same machine as the Herdr server (the "server" below). It uses Herdr's local
192
+ socket API and CLI, reads the agents' transcript files, and serves a client-only Nuxt app. Data
193
+ it keeps (VAPID keys, push subscriptions, passkeys, recent folders) lives in `data/`.
194
+
195
+ Built with Nuxt 4, Nuxt UI 4, Tailwind 4 and TypeScript; the Herdr gateway (API, WebSockets,
196
+ Web Push, lock) runs in Nitro.
197
+
198
+ ## Requirements
199
+
200
+ - **Herdr ≥ 0.9.1** running on the server (`herdr` or `herdr server`), with its Claude Code /
201
+ Codex / omp integrations installed if you use them (`herdr integration install claude|codex|omp`).
202
+ omp's conversation is only found through its integration, which reports the session file.
203
+ - **Linux or macOS** server with either **Docker** (Compose v2) or **Node.js 22**.
204
+ The Docker image is for Linux servers (tested on a Raspberry Pi too). **On macOS, run without
205
+ Docker**: Docker Desktop cannot reach Herdr's Unix socket on the host.
206
+ - **HTTPS** to use passkeys, push notifications and the installable app from another device.
207
+ Browsers only allow them on `https://` or `http://localhost`. The easiest way is
208
+ [`tailscale serve`](https://tailscale.com/kb/1312/serve); a reverse proxy **reachable only
209
+ from your private network** with a valid certificate also works (see
210
+ [Other private networks](#other-private-networks)).
211
+
212
+ ## Installation
213
+
214
+ ### Which setup?
215
+
216
+ | | **Always-on server + Tailscale** (recommended) | **One computer, no Docker** |
217
+ | --- | --- | --- |
218
+ | Runs on | A machine that never sleeps: Raspberry Pi, mini-PC, home server, private VPS (Linux, Docker) | The computer you work on (macOS or Linux, Node.js 22) |
219
+ | Reach it from | Your phone and every computer on your tailnet | That computer only (`http://localhost:7683`) |
220
+ | Installable app, push notifications, passkeys | Yes (private HTTPS from `tailscale serve`) | Desktop browser only; no phone access |
221
+ | Other machines (a Mac, a laptop…) | Added in Herdr over SSH, shown in wherdr | Also possible, but they are only reachable while this computer is awake |
222
+
223
+ Both setups use the same app. You can start with the second one and move to the first later.
224
+
225
+ ### Recommended: always-on server + Tailscale
226
+
227
+ Your agents keep running when your laptop is closed, and you follow them from your phone.
228
+ wherdr stays on your private network: it is **never published on the Internet**.
229
+
230
+ **1. Herdr on the server.** Install [Herdr](https://herdr.dev) (≥ 0.9.1) and start it
231
+ (`herdr` or `herdr server`), with the integrations of the agents you use
232
+ (`herdr integration install claude|codex`).
233
+
234
+ **2. wherdr with Docker** (Linux, Compose v2):
235
+
236
+ ```sh
237
+ git clone https://github.com/afloury/wherdr.git
238
+ cd wherdr
239
+ cp .env.example .env
240
+ ```
241
+
242
+ Edit `.env` (every value has a default; `HOST_HOME` defaults to your `$HOME`):
243
+
244
+ | Variable | Example | Meaning |
245
+ | --- | --- | --- |
246
+ | `HOST_HOME` | `/home/alice` | Your home folder on the server (default: `$HOME`). Mounted at the same path, read-only. |
247
+ | `PUID` / `PGID` | `1000` | Your user and group IDs (`id -u`, `id -g`). |
248
+ | `PORT` | `7683` | Listening port, published on `127.0.0.1` only. |
249
+ | `APP_URL` | `https://server.example.ts.net:7683/` | Private HTTPS address of the app (step 3; also used as the Web Push contact and an allowed host). Use `http://localhost:7683/` for local testing. |
250
+ | `HOST_LABEL` | `server` | Name of this machine in the app. |
251
+ | `TZ` | `Europe/Paris` | Time zone for timestamps and logs. |
252
+ | `WHERDR_UPDATE_CHECK` | `off` | Disable the daily check for a new release (default `on`). |
253
+
254
+ Create the bind-mount folders **before** starting Compose, as your own user. Otherwise Docker
255
+ may create missing host folders as root, leaving the container unable to write to them.
256
+
257
+ ```sh
258
+ mkdir -p data "$HOME/.config/herdr" "$HOME/.local/state/herdr/client" "$HOME/.cache/herdr-web" \
259
+ "$HOME/.herdr-projects"
260
+ docker compose up -d # pulls ghcr.io/afloury/wherdr (arm64 and amd64)
261
+ docker compose logs -f # optional: follow the logs and find the first-passkey token
262
+ ```
263
+
264
+ The container runs as your user and mounts your home folder **read-only**, except
265
+ `~/.config/herdr` (Herdr sockets), `~/.local/state/herdr/client` (machine names),
266
+ `~/.cache/herdr-web` (uploaded photos and files, quotas) and `~/.herdr-projects` (herdr-projects
267
+ projects, see [Works great with herdr-projects](#works-great-with-herdr-projects)). It uses the
268
+ server's own `herdr` binary, so the client and the server always stay on the same version.
269
+
270
+ The repository is only needed for `docker-compose.yml` and `.env`: the image is prebuilt and
271
+ published for each release. To build it from source instead, see [Updating](#updating).
272
+ **Custom icons** (optional): copy
273
+ `docker-compose.override.example.yml` to `docker-compose.override.yml` and put your icons in
274
+ `branding/` (both untracked).
275
+
276
+ **3. Private HTTPS with Tailscale.** Install [Tailscale](https://tailscale.com) on the server,
277
+ your phone and your computers, on the same tailnet, with
278
+ [MagicDNS and HTTPS certificates](https://tailscale.com/kb/1153/enabling-https) enabled. Then,
279
+ on the server:
280
+
281
+ ```sh
282
+ tailscale serve --bg --https=7683 http://127.0.0.1:7683
283
+ # → https://<machine>.<tailnet>.ts.net:7683/ (e.g. https://server.example.ts.net:7683/)
284
+ ```
285
+
286
+ Tailscale Serve listens on HTTPS port 7683 of your tailnet name, with a valid certificate, and
287
+ forwards to wherdr's local HTTP port. Only devices of your tailnet can reach it. Then open
288
+ **Settings › Phone** in wherdr on the server (`http://localhost:7683/#/settings?section=phone`),
289
+ paste that address: wherdr checks it answers, sets it as `APP_URL` (saved in `data/app-url.json`;
290
+ an HTTPS `APP_URL` in `.env` wins) and shows its QR code. Without Docker, the same page publishes
291
+ wherdr itself: one button, asked first.
292
+
293
+ **Why HTTPS matters.** Browsers only allow three things on `https://` (or on `localhost` itself):
294
+
295
+ - **installing the app** on the home screen (PWA) on iPhone and Android;
296
+ - **push notifications** (on iOS, only in the installed app);
297
+ - **passkeys** for the lock screen (Face ID, Touch ID, Windows Hello, Android).
298
+
299
+ **4. On the phone:** open the address, [install the app](#install-the-app-on-your-phone), then
300
+ Settings → **Enable notifications**. **On the computer:** use the same address in a browser; the
301
+ desktop layout can replace the Herdr terminal client for daily work.
302
+
303
+ **5. Passkey lock** (recommended, optional): Settings → Security → **Enable passkey lock**. The
304
+ first passkey asks for a bootstrap token, printed in the server logs (`docker compose logs`);
305
+ it changes on each restart and is only needed for that first passkey. Add a passkey on each of
306
+ your devices after that (see [New device](#new-device) below). Without one, every device of your
307
+ tailnet can control your agents.
308
+
309
+ **6. More machines** (optional): register your other computers in Herdr over SSH
310
+ (`herdr machine add`, see [Several machines (SSH)](#several-machines-ssh)). Their agents show
311
+ in wherdr in their own section, and everything works the same on them. The machine menu also has
312
+ **Keep awake**, which stops a Mac (`caffeinate`) or a Linux machine (`systemd-inhibit`) from
313
+ sleeping for an hour, four hours, the evening or until turned off.
314
+
315
+ > [!CAUTION]
316
+ > Never publish wherdr on the Internet: no port forwarding on your router, no public reverse
317
+ > proxy, no ngrok, no `tailscale funnel`, no Cloudflare Tunnel without Cloudflare Access. Use
318
+ > `tailscale serve`, which stays inside your tailnet. See [Security](#security).
319
+
320
+ ### Other private networks
321
+
322
+ Tailscale is the built-in path (one click in **Settings › Phone**), not a requirement. wherdr
323
+ works with any private network that gives it an **HTTPS address with a valid certificate**:
324
+
325
+ - **HTTPS with a certificate your phone trusts.** The installed app (PWA), push notifications
326
+ and passkeys only work on `https://`. A self-signed certificate or plain `http://` on your
327
+ LAN is not enough, and is never a supported way to reach wherdr.
328
+ - **`APP_URL` set to that address** (`.env` with Docker, or the environment of `wherdr` /
329
+ `npm start`), then restart wherdr. Its hostname is allowed automatically and it enables Web
330
+ Push. Add `HERDR_WEB_ALLOWED_HOSTS` only if you also open wherdr under another name. The
331
+ one-click address check in **Settings › Phone** only knows `*.ts.net` addresses; an HTTPS
332
+ `APP_URL` in the environment always wins.
333
+ - **Never exposed without authentication.** wherdr keeps listening on `127.0.0.1`; only the
334
+ proxy listens on the private network. Turn on the passkey lock as soon as another device can
335
+ reach it.
336
+
337
+ **Headscale, NetBird, ZeroTier, WireGuard: the same recipe.** Join the server and the phone to
338
+ the network, give the server a DNS name that points to its **private** address, and put a reverse
339
+ proxy in front of wherdr that listens on that private address only. Let's Encrypt cannot reach a
340
+ private address, so the certificate comes from the
341
+ [DNS challenge](https://caddyserver.com/docs/automatic-https#dns-challenge). With
342
+ [Caddy](https://caddyserver.com) built with your DNS provider's
343
+ [module](https://github.com/caddy-dns) (here [Cloudflare DNS](https://github.com/caddy-dns/cloudflare)),
344
+ a `Caddyfile` like this ([`bind`](https://caddyserver.com/docs/caddyfile/directives/bind),
345
+ [`tls`](https://caddyserver.com/docs/caddyfile/directives/tls)):
346
+
347
+ ```caddy
348
+ wherdr.example.com {
349
+ bind 100.64.0.10 # the server's address on the private network only
350
+ tls {
351
+ dns cloudflare {env.CF_API_TOKEN}
352
+ }
353
+ reverse_proxy 127.0.0.1:7683
354
+ }
355
+ ```
356
+
357
+ Point `wherdr.example.com` (an `A` record in your DNS zone) to that private address: from
358
+ anywhere else it leads nowhere. Then set `APP_URL=https://wherdr.example.com/` and restart
359
+ wherdr. To join each device:
360
+
361
+ | Network | Join a device (official docs) | Server's private address |
362
+ | --- | --- | --- |
363
+ | [Headscale](https://headscale.net/stable/usage/getting-started/) | Tailscale clients: `tailscale up --login-server <YOUR_HEADSCALE_URL>` | `tailscale ip -4` |
364
+ | [NetBird](https://docs.netbird.io/get-started/cli) | `netbird up` (`--management-url` when self-hosted) | `netbird status` |
365
+ | [ZeroTier](https://docs.zerotier.com/start) | `zerotier-cli join <network ID>`, then authorize the device in the network's members | The members list of your network |
366
+ | [WireGuard](https://www.wireguard.com/quickstart/) | `wg-quick up wg0` with a peer per device | The `Address` of the server's interface |
367
+
368
+ Headscale does not support `tailscale serve` with HTTPS yet
369
+ ([features](https://headscale.net/stable/about/features/),
370
+ [#1921](https://github.com/juanfont/headscale/issues/1921)): `tailscale cert` and Serve need
371
+ certificates that only Tailscale's own control server provisions. Use the reverse proxy above
372
+ instead of step 3.
373
+
374
+ **Cloudflare Tunnel + Cloudflare Access: only with Access.**
375
+
376
+ > [!WARNING]
377
+ > A Cloudflare Tunnel puts wherdr **on the Internet**: anyone can reach its address, and
378
+ > Cloudflare terminates TLS, so it sees all traffic. **Cloudflare Access is mandatory**, created
379
+ > *before* the route: without it, whoever finds the address controls your agents. Keep the
380
+ > passkey lock on as well. Prefer a private network when you can.
381
+
382
+ 1. In Cloudflare One, create the Access application first:
383
+ [Self-hosted and private › Add public hostname](https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/)
384
+ `wherdr.example.com`, with an **Allow** policy for your own e-mail only (Access applications
385
+ deny everyone else by default).
386
+ 2. [Create a tunnel](https://developers.cloudflare.com/tunnel/setup/) and run `cloudflared` on the
387
+ server, then add a **published application** route: hostname `wherdr.example.com`, service
388
+ `http://localhost:7683`.
389
+ 3. Set `APP_URL=https://wherdr.example.com/` and restart wherdr.
390
+
391
+ Installing the app and notifications behind Access are not tested by the project: the phone must
392
+ first sign in to Access in the browser.
393
+
394
+ ### The `wherdr` command
395
+
396
+ The npm package holds the built app: nothing is compiled on your machine. Try it with
397
+ `npx wherdr` (or `bunx wherdr`, `pnpm dlx wherdr`); to keep it, install it once:
398
+
399
+ ```sh
400
+ npm install -g wherdr # or: pnpm add -g wherdr, bun add -g wherdr
401
+ wherdr service install # starts at every login; prints the address
402
+ wherdr phone # phone state, the app's phone setup page, QR code once it answers
403
+ ```
404
+
405
+ | Command | What it does |
406
+ | --- | --- |
407
+ | `wherdr` (or `wherdr run`) | Runs in the foreground; Ctrl+C stops it. |
408
+ | `wherdr start` · `stop` · `restart` | Background server, pid and log in `~/wherdr`. `start` says *started* only once the port answers; otherwise it prints the end of the log. With a login service installed, they drive the service. |
409
+ | `wherdr status` | Address, process, service, data folder and log. |
410
+ | `wherdr logs` (`-f` to follow, `-n 100`) | The log, `~/wherdr/wherdr.log`. |
411
+ | `wherdr open` | Opens wherdr in the browser. |
412
+ | `wherdr phone` | Whether your phone can reach wherdr (Tailscale, `tailscale serve`, the address answering), the link to **Settings › Phone** where you publish it in one click, and the QR code once the address answers. |
413
+ | `wherdr service install` · `uninstall` | Start at login: a LaunchAgent on macOS (`~/Library/LaunchAgents/dev.wherdr.plist`), a `systemd --user` unit on Linux (`loginctl enable-linger` keeps it running while you are logged out). |
414
+ | `wherdr doctor` | Checks Node/Bun, Herdr and its socket, the port, the service, the data folder and `APP_URL`. |
415
+
416
+ Options: `--port` (default `7683`), `--host` (default `127.0.0.1`, keep it on loopback),
417
+ `--data-dir` (passkeys, push keys and settings; default `~/wherdr/data`, the folder the Herdr
418
+ plugin and the install script use), `--session` (a named Herdr session). Every
419
+ [environment variable](#configuration) works too, and so do `KEY=VALUE` lines in
420
+ `~/wherdr/wherdr.env` (for example `APP_URL=…`, read at each start); options win, then the
421
+ environment, then that file. `start` and `service install` remember the port and folders for
422
+ the other commands.
423
+
424
+ The login service records the **absolute path** of the runtime (n, nvm, fnm, Volta or Homebrew
425
+ node), since launchd and systemd do not see your shell's `PATH`. It refuses to point at a
426
+ temporary `npx` / `pnpm dlx` / `bunx` folder: install the package globally first. To update:
427
+ `npm install -g wherdr@latest && wherdr restart` (with `npx`: stop it, then `npx wherdr@latest`).
428
+
429
+ Bun runs wherdr too (WebSockets, push, passkeys and Herdr's socket work); when Node.js 22 is
430
+ also installed, `bunx wherdr` hands the server to Node, the reference runtime. Set
431
+ `WHERDR_RUNTIME=bun` to keep Bun.
432
+
433
+ ### Simple: one computer, no Docker
434
+
435
+ The quickest way to try it, and the way to run wherdr **on macOS**: Docker Desktop cannot reach
436
+ Herdr's Unix socket on the host. With Herdr running, Git and Node.js 22 on the same machine:
437
+
438
+ ```sh
439
+ git clone https://github.com/afloury/wherdr.git
440
+ cd wherdr
441
+ npm ci
442
+ npm run build
443
+ npm start # listens on 127.0.0.1:7683
444
+ ```
445
+
446
+ Open `http://localhost:7683` in a browser on that computer: the desktop layout, passkeys and the
447
+ installable app work there, since browsers treat `localhost` as secure. There is no phone access
448
+ and no push notification in this setup; for that, use the recommended setup (or publish this
449
+ instance with `tailscale serve` as above and start it with
450
+ `APP_URL=https://server.example.ts.net:7683/ npm start`).
451
+
452
+ Run it as the user who runs Herdr. It uses `$HOME` and `$HOME/.local/bin/herdr`, or `herdr` from
453
+ the `PATH` (Homebrew); set `HERDR_BIN` otherwise. `DATA_DIR` holds passkeys, push data and recent
454
+ folders (default `./data`). `npm start` listens on `127.0.0.1` (`HOST`) and port `7683` (`PORT`).
455
+ The first-passkey bootstrap token is printed in its output. Keep the process running with your
456
+ usual service manager (systemd user unit, launchd, tmux…).
457
+
458
+ With `APP_URL` empty or `http://localhost:7683/`, wherdr starts normally but disables Web Push
459
+ and logs a warning.
460
+
461
+ ### Install as a Herdr plugin
462
+
463
+ Herdr can also install wherdr itself, on Linux and macOS, with Herdr ≥ 0.9.1. In three lines:
464
+
465
+ 1. Run `herdr plugin install afloury/wherdr`: it installs wherdr, starts it
466
+ (`✓ wherdr is running → http://localhost:7683`) and, at the first install on a computer with a
467
+ screen, opens the setup guide in your browser (`open` on macOS, `xdg-open` on Linux with a
468
+ display; a headless server just prints `http://localhost:7683/#/setup`). Updates open nothing.
469
+ 2. In Herdr, press **prefix+i** (`ctrl+b` then `i` with the default prefix): the **wherdr** panel,
470
+ with the state, **O** Open wherdr and **P** Set up my phone. The install prints the key it
471
+ chose (see [Panel key](#panel-key)).
472
+ 3. **P** opens Settings › Phone in the browser: **Make wherdr reachable from my phone** publishes
473
+ it on your tailnet, then the QR code shows once the address answers. Scan it with the iPhone,
474
+ then Share → Add to Home Screen.
475
+
476
+ Herdr shows the manifest and the commands it will run, then the plugin installs wherdr in
477
+ `~/wherdr` and starts it, unless something already answers on the port. If wherdr cannot start,
478
+ the install still succeeds and says why; press **S** in the panel once it is fixed. It picks the
479
+ setup by itself:
480
+
481
+ - **Docker** on Linux when Docker Compose v2 works for your user: the published image, from
482
+ `~/wherdr` (`docker-compose.yml`, `.env`), exactly like the [one-line installer](https://wherdr.dev/install).
483
+ - **Node.js 22** everywhere else, and always on macOS (Docker Desktop cannot reach Herdr's
484
+ socket): the plugin downloads the prebuilt npm package of its version (or builds wherdr in its
485
+ own folder when that fails), copies it to `~/wherdr/app` and runs it detached from there, with
486
+ its pid and log (`wherdr.log`) in `~/wherdr`. Herdr builds plugins in a temporary folder and
487
+ then moves them, so the server never runs from the plugin folder. Bun works too when Node.js 22
488
+ is missing. Without either, the install stops and says so.
489
+
490
+ The **wherdr** panel (a Herdr popup) shows ● running / ○ stopped, the local address, the phone
491
+ address (with its QR code once it answers), and two main keys: **O** Open wherdr, **P** Set up my
492
+ phone (Settings › Phone in the browser). The other keys stay as a fallback: **S** start, **X**
493
+ stop, **R** restart, **L** log (Ctrl+C to go back), **U** update (reinstalls the plugin, or pulls
494
+ the image in Docker mode), **A** auto-start at login on/off, **Q** quit.
495
+
496
+ #### Panel key
497
+
498
+ Herdr plugins have no menu of their own: an action runs from a key or from the command line. The
499
+ install therefore appends one marked block to Herdr's `config.toml` (`HERDR_CONFIG_PATH`, or
500
+ `~/.config/herdr/config.toml`):
501
+
502
+ ```toml
503
+ # wherdr: key that opens the wherdr panel (remove this block to unbind it)
504
+ [[keys.command]]
505
+ key = "prefix+i"
506
+ type = "plugin_action"
507
+ command = "afloury.wherdr.panel"
508
+ description = "wherdr"
509
+ # end wherdr
510
+ ```
511
+
512
+ It takes the first key of `prefix+i`, `prefix+u`, `prefix+y`, `prefix+m`, `prefix+alt+w` that
513
+ neither Herdr's default keymap nor your config already binds, and prints
514
+ `Press prefix+i in Herdr to open the wherdr panel.` Your own lines are never changed. Nothing is
515
+ added when a key already runs the panel, when every candidate is taken, or when
516
+ `herdr config check` would reject the result. The install then runs `herdr server reload-config`:
517
+ keys apply without restarting Herdr. Pick another key by editing the block, or bind the panel
518
+ yourself (`command = "afloury.wherdr.panel"`) before installing.
519
+
520
+ Without a key: `herdr plugin action invoke panel --plugin afloury.wherdr`. The plugin's actions:
521
+
522
+ | Action | What it does |
523
+ |---|---|
524
+ | `panel` | The **wherdr** panel (a popup) |
525
+ | `open` | Opens wherdr in the browser |
526
+
527
+ Up to 1.2.0 the panel action was called `wherdr`: change a key bound to `afloury.wherdr.wherdr` to
528
+ `afloury.wherdr.panel` (Herdr has no action aliases; the install warns about such a key and
529
+ leaves it alone). Remove the block with `sh scripts/herdr-plugin.sh key uninstall` in the plugin
530
+ folder (`~/.config/herdr/plugins/github/wherdr-…`), or delete the lines from `# wherdr:` to `# end wherdr`.
531
+
532
+ Auto-start: the plugin's startup hook starts wherdr each time the Herdr server starts, which is
533
+ all wherdr needs (it drives Herdr). Key **A** adds a login service as well (a LaunchAgent on
534
+ macOS, a `systemd --user` unit on Linux, pointing at `~/wherdr/app` with the absolute path of the
535
+ runtime): wherdr then runs from login and is restarted if it crashes. It is not installed on its
536
+ own because it changes your login session. In Docker mode the container's restart policy does
537
+ this job.
538
+
539
+ Herdr runs the plugin's commands with the environment of its server, whose `PATH` often lacks the
540
+ folders of version managers (n, nvm, fnm, Volta, asdf). The install therefore saves the absolute
541
+ path of the runtime in `~/wherdr/plugin.env` (`WHERDR_RUNTIME=/path/to/node`); if that binary
542
+ disappears, **Start** looks in the usual places (`~/.n/bin`, `~/.nvm`, `~/.volta/bin`, fnm,
543
+ `~/.asdf/shims`, Homebrew, `/usr/local/bin`, `~/.bun/bin`) and saves what it finds. Set
544
+ `WHERDR_RUNTIME` there by hand for anything else. **Start** only reports success once the
545
+ process is alive and the port answers; otherwise it prints the last lines of `wherdr.log`.
546
+
547
+ Force a setup with `WHERDR_MODE=native herdr plugin install afloury/wherdr` (or `docker`). The
548
+ choice, the port (`WHERDR_PORT`, default 7683) and, in native mode, `APP_URL` are kept in
549
+ `~/wherdr/plugin.env`; another folder can be set with `WHERDR_DIR` at install time. Nothing is
550
+ installed globally and nothing runs with sudo.
551
+
552
+ When something already answers on the port (a wherdr started with Docker, systemd or by hand),
553
+ the plugin starts nothing and never stops it: **Stop** only stops what the plugin started. The
554
+ output of the install and of the startup hook is in the plugin logs:
555
+ `herdr plugin log list --plugin afloury.wherdr`.
556
+
557
+ **Uninstall.** Herdr has no uninstall hook, so remove wherdr in this order: in the panel, **A**
558
+ (if the login service is on) and **X**; in the plugin folder, `sh scripts/herdr-plugin.sh key
559
+ uninstall` (the panel key) and `sh scripts/herdr-plugin.sh skill uninstall`; then
560
+ `herdr plugin uninstall afloury.wherdr && rm -rf ~/wherdr` (`~/wherdr/data` holds your passkeys
561
+ and push keys).
562
+
563
+ ### wherdr in Docker on a Mac: Reveal in Finder, Open and Mod+Alt+O
564
+
565
+ The container is Linux: it has no `open` command, so "Reveal in Finder" / "Open" on file paths
566
+ and `Mod+Alt+O` (the agent's folder in your editor) do nothing by default — the app reports
567
+ "not a Mac". wherdr can ask your Mac to run them over SSH:
568
+
569
+ ```sh
570
+ sh scripts/install-host-open.sh # on the Mac; --user/--target/--port optional
571
+ ```
572
+
573
+ This creates a dedicated key pair in `data/` (`host-open-key`), installs
574
+ `~/.local/share/wherdr/{reveal.sh,wherdr-open.sh}` on the Mac, loads a small LaunchAgent
575
+ (`dev.wherdr.open`, in `~/Library/LaunchAgents`) that launches GUI apps on behalf of the SSH
576
+ session, and adds one `authorized_keys` line whose forced command only ever runs the reveal
577
+ checks on a path wherdr passes (existing, under your home folder, never an app or a script —
578
+ the same rules as a native install).
579
+
580
+ Then add to `docker-compose.override.yml` and restart the container:
581
+
582
+ ```yaml
583
+ services:
584
+ herdr-web:
585
+ environment:
586
+ - HERDR_WEB_HOST_OPEN_TARGET=host.docker.internal # the Mac as the container sees it
587
+ - HERDR_WEB_HOST_OPEN_USER=<your mac user>
588
+ ```
589
+
590
+ Without these variables nothing changes: a non-Mac server refuses with "not a Mac" as before.
591
+
592
+ The installer picks the editor that opens folders (first of Zed, Trae, Visual Studio Code,
593
+ Cursor, Sublime Text, TextMate). Change it any time:
594
+
595
+ ```sh
596
+ printf %s "Visual Studio Code" > ~/.local/share/wherdr/editor
597
+ ```
598
+
599
+ ## Updating
600
+
601
+ wherdr checks the latest GitHub release at most once a day (an anonymous request to
602
+ `api.github.com`, nothing is sent) and shows a small **“wherdr X.Y.Z is available”** banner on the
603
+ home screen and in Settings › About, with the release notes and the exact command for your setup.
604
+ Hide it until the next version with ×. Set `WHERDR_UPDATE_CHECK=off` to disable the check. The
605
+ installed version is shown in Settings › About.
606
+
607
+ | Setup | Update command (in the wherdr folder) |
608
+ | --- | --- |
609
+ | Docker, published image (default) | `docker compose pull && docker compose up -d` |
610
+ | Docker, built from source | `git pull && docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build` |
611
+ | No Docker | `git pull && npm ci && npm run build`, then restart wherdr |
612
+ | `wherdr` command (npm) | `npm install -g wherdr@latest && wherdr restart` (npx: stop it, then `npx wherdr@latest`) |
613
+ | Herdr plugin, Docker | **U** in the **wherdr** panel (pulls the image, restarts the container) |
614
+ | Herdr plugin, Node.js | **U** in the **wherdr** panel, or `herdr plugin install afloury/wherdr --yes` (wherdr restarts on the new version) |
615
+
616
+ Also run `git pull` now and then with the published image: it brings the latest
617
+ `docker-compose.yml` and `.env.example`.
618
+
619
+ **Build from source.** `docker-compose.build.yml` builds the image locally (`wherdr:local`)
620
+ instead of pulling it: add `-f docker-compose.yml -f docker-compose.build.yml` to every
621
+ `docker compose` command (and `-f docker-compose.override.yml` if you use one). A build needs
622
+ about 2 GB of free memory.
623
+
624
+ **Automatic updates** (optional). [Watchtower](https://containrrr.dev/watchtower/) can pull new
625
+ images and restart the container for you:
626
+
627
+ ```sh
628
+ docker run -d --name watchtower --restart unless-stopped \
629
+ -v /var/run/docker.sock:/var/run/docker.sock \
630
+ containrrr/watchtower --cleanup --schedule "0 0 4 * * *" wherdr
631
+ ```
632
+
633
+ Pin a version instead of `latest` with `WHERDR_IMAGE=ghcr.io/afloury/wherdr:1.2.0` in `.env`.
634
+
635
+ ## Install the app on your phone
636
+
637
+ The app must be served over HTTPS (see [Requirements](#requirements)).
638
+
639
+ - **iPhone / iPad** (iOS 16.4 or later): open the address in **Safari** → Share →
640
+ **Add to Home Screen**. Open wherdr from the home screen, then Settings → **Enable
641
+ notifications**. On iOS, push notifications only work in the installed app.
642
+ - **Android**: open the address in **Chrome** → menu → **Install app** (or Add to Home
643
+ screen), then Settings → **Enable notifications**.
644
+ - **Computer**: just use the address in a browser; Chrome and Edge can also install it.
645
+
646
+ Then Settings → Security → **Enable passkey lock** on each device.
647
+
648
+ ## Configuration
649
+
650
+ All settings are environment variables (`.env` with Docker).
651
+
652
+ | Variable | Default | Meaning |
653
+ | --- | --- | --- |
654
+ | `PORT` | `7683` | Listening port. |
655
+ | `HOST` | `127.0.0.1` (`npm start`) | Listening address without Docker. Keep it on loopback. |
656
+ | `HOST_LABEL` | server hostname (`wherdr` in Docker) | Name of this machine in the app (can be renamed in the app). |
657
+ | `APP_URL` | *(empty)* | App address and allowed host; a valid HTTPS URL enables Web Push. HTTP, empty or invalid values disable Web Push with a warning. |
658
+ | `HERDR_WEB_ALLOWED_HOSTS` | *(empty)* | Additional hostnames or IP addresses allowed to open the app, comma-separated. |
659
+ | `PASSKEY_USER` | `wherdr` | User name stored with the passkeys. |
660
+ | `DATA_DIR` | `./data` | VAPID keys, push subscriptions, passkeys, recent folders. |
661
+ | `HERDR_BIN` | `~/.local/bin/herdr`, else `herdr` in `PATH` | Herdr binary. |
662
+ | `HERDR_WEB_SESSION` | *(default session)* | Named Herdr session to drive. Not `HERDR_SESSION`, which Herdr reads itself. |
663
+ | `HERDR_WEB_HOST_OPEN_TARGET` | *(unset)* | Docker on a Mac: SSH host that runs Reveal/Open for local panes (see [Docker on a Mac](#wherdr-in-docker-on-a-mac-reveal-in-finder-open-and-modalto)). |
664
+ | `HERDR_WEB_HOST_OPEN_USER` | `root` | SSH user for `HERDR_WEB_HOST_OPEN_TARGET` (your Mac user). |
665
+ | `HERDR_WEB_HOST_OPEN_KEY` | `data/host-open-key` | SSH private key for the host-open route. |
666
+ | `AGENT_KINDS` | all known agents | Agents offered in **New** (only installed ones are shown). |
667
+ | `HERDR_WEB_MACHINES` | `on` | `off` to ignore the SSH machines registered in Herdr. |
668
+ | `HERDR_WEB_SELF_HOSTS` | | Other names / IPs of this machine, comma-separated (profiles pointing to it are ignored). |
669
+ | `HERDR_WEB_REMOTE_SESSION` | | Herdr session to use on every remote machine instead of the profile's. |
670
+ | `HERDR_WEB_HERDR_NOTIFICATIONS` | `on` | `off` to stop relaying `herdr notification show` as push. |
671
+ | `UPLOAD_DIR` | `~/.cache/herdr-web/uploads` | Where photos sent to agents are stored (deleted after 7 days). |
672
+ | `ATTACH_DIR` | `~/.cache/herdr-web/files` | Where other files attached to messages are stored, on the agent's machine (mode 600, deleted after 7 days). |
673
+ | `TZ` | `UTC` | Time zone. |
674
+
675
+ In the app, **Settings** holds per-device preferences: language, theme, notifications, terminal
676
+ text size and renderer, typing effect, what the home screen shows, and the passkey lock.
677
+
678
+ ## Several machines (SSH)
679
+
680
+ wherdr also shows the agents of the **SSH machines registered in Herdr** — the ones the Herdr
681
+ terminal client shows in its sidebar. It opens one SSH master connection per machine, forwards
682
+ the remote Herdr socket through it, and reads transcripts and files over the same connection.
683
+
684
+ Requirements on the remote machine: the **same Herdr version** (`herdr --version`), its server
685
+ running, and key-based SSH access from the server. Example, on the server:
686
+
687
+ ```sh
688
+ ssh-keygen -t ed25519 -f ~/.ssh/wherdr_ed25519 -N ''
689
+ cat >> ~/.ssh/config <<'CFG'
690
+ Host laptop
691
+ HostName laptop
692
+ User alice
693
+ IdentityFile ~/.ssh/wherdr_ed25519
694
+ IdentitiesOnly yes
695
+ CFG
696
+ ssh-copy-id -i ~/.ssh/wherdr_ed25519 laptop
697
+ ssh laptop true # accept the host key once
698
+ herdr machine add laptop --label Laptop # see `herdr machine --help`
699
+ ```
700
+
701
+ wherdr picks it up within 30 seconds; `herdr machine rename|disable|remove` work the same way.
702
+ Machines can also be renamed from the app (machine menu → Options).
703
+
704
+ With Docker, the image includes `openssh-client` and reads `~/.ssh` through the read-only home
705
+ mount. At startup the container creates its user with your `PUID`/`PGID` and `HOST_HOME` as its
706
+ home folder, so ssh finds `~/.ssh` there.
707
+
708
+ ## Claude and Codex quotas
709
+
710
+ The home screen shows what is left of the Claude and Codex usage limits (5-hour window and
711
+ week, with reset times), for every online machine.
712
+
713
+ - **Codex**: nothing to do, Codex writes its limits in its session files. Machines on different
714
+ Codex accounts get one block each (told apart by a short hash of the account ID found in the
715
+ session files; `~/.codex/auth.json` is never read).
716
+ - **Claude Code** only gives them to its status line. On each machine, install wherdr's
717
+ invisible status line (it displays nothing, and chains to your existing status line if you
718
+ have one):
719
+
720
+ ```sh
721
+ sh scripts/install-claude-statusline.sh
722
+ ```
723
+
724
+ The app offers the same thing: a banner "Claude quotas not configured" with **Install** (runs
725
+ it over SSH on a remote machine) and **Copy command**. Quotas show after the next exchange with
726
+ a Claude agent. The status line stores the limits in `~/.cache/herdr-web/claude-status.json`
727
+ and a short hash of the account ID (never a token or email) to tell accounts apart.
728
+
729
+ **New machine**: run `sh scripts/install-claude-statusline.sh` on it once (or click **Install** in
730
+ the banner), then send a message to any Claude agent there; its quotas appear on the home screen.
731
+
732
+ ## Notifications
733
+
734
+ With notifications enabled on a device, wherdr sends a Web Push when an agent goes from working
735
+ to **blocked** (with its question and options) or to **done** (with the start of its answer).
736
+ There is no push for the agent currently on screen. Settings → Notifications lets each device
737
+ choose between all agents and main agents only (herdr-projects threads are muted by default).
738
+
739
+ **Do not disturb** (top of Settings → Notifications) stops every push, for this device or for all
740
+ devices, for 1 hour, until 8 am or until turned back on. The server applies it before sending and
741
+ keeps it across restarts (`data/quiet.json` for all devices). While it is on, a crossed-out bell
742
+ next to Settings on the home screen turns it off in one tap.
743
+
744
+ wherdr also relays custom notifications sent with `herdr notification show` (plugins, scripts).
745
+ To receive them it connects to Herdr's client socket as a **passive** client: it never becomes
746
+ the foreground client and never resizes anything. Side effects: with wherdr connected,
747
+ `notification show` reports `shown: true` even with no terminal attached, and an empty session
748
+ gets a default workspace, as with any attached client.
749
+
750
+ ## Works great with herdr-projects
751
+
752
+ [herdr-projects](https://github.com/eliasstravik/herdr-projects) is a Herdr plugin that runs a
753
+ project as one **coordinator** conversation and parallel **threads**, each in its own Git
754
+ worktree. It is optional; with it installed, wherdr adds:
755
+
756
+ - **Project groups** in the agent list: the coordinator first, its threads indented under it,
757
+ grouped by repository (`Repo web-shop · 2 worktrees`), with their thread number and state.
758
+ - **Project panel** next to the coordinator (a side panel on a computer, a tab on a phone). It
759
+ reads the project's `TASKS.md` and shows the lists it has, always in this order, with the open
760
+ threads live (state, progress, report) and resolved threads under Done:
761
+
762
+ | List | Meaning | Buttons |
763
+ | --- | --- | --- |
764
+ | **To test** | You confirm the work | Confirm, Problem, Question |
765
+ | **To decide** | Only you can unblock it | Question, Answer |
766
+ | **To review** | Pull requests for you | Reviewed, Comment |
767
+ | **In progress** | What threads are really doing | (live threads) |
768
+ | **In queue** | Decided: the coordinator launches the first one as soon as a thread slot frees | Move up / down, Launch now, Clarify, Remove from queue |
769
+ | **Blocked** | Waiting for someone or something external | Unblock, Clarify |
770
+ | **To do** | To do soon, in your priority order; never launched on its own | Move up / down, Queue it, Launch now, Clarify, Back to backlog |
771
+ | **Backlog** | Everything else | Launch, Clarify |
772
+ | **Done** | Resolved threads | |
773
+
774
+ Every list is **optional**: you and your coordinator pick the ones a project uses (a small
775
+ project may only need Backlog, In progress and Done); any other `##` list shows in a neutral
776
+ style after Backlog. French titles and common synonyms are recognized (À tester, En file,
777
+ À faire, Plus tard…). Every button sends a ready-made message to the coordinator, which edits
778
+ `TASKS.md` (wherdr never writes it). The In queue header shows the thread slots in use
779
+ (`max_parallel_threads` in `PROJECT.md`) and the next task, plus the machine's global limit
780
+ when one is set (`2 of 2 thread slots in use on <machine> (all projects)`).
781
+ - **Max threads per machine**, across all projects: herdr-projects only limits threads per
782
+ project, so three coordinators could still start a dozen threads on one small machine. Set a
783
+ limit per machine in **Settings → Plugins → herdr-projects** (empty `—` = no global limit;
784
+ saved on the server, in `data/thread-limits.json`). wherdr counts the active threads of every
785
+ project from the live panes (herdr-projects marks each open thread's pane): a thread whose agent
786
+ has finished (idle or done, waiting for review or for you) gives its slot back right away; one
787
+ started less than 3 minutes ago still counts while it waits for its brief. wherdr writes
788
+ `.wherdr-limits.json` in each herdr-projects folder where a coordinator runs, refreshed on
789
+ every change:
790
+
791
+ ```json
792
+ { "updated": "…", "this": "Server", "machines": { "Server": { "max": 2, "open": 2, "free": 0, "threads": ["shop/t-0012", "docs/t-0003"] } } }
793
+ ```
794
+
795
+ The coordinator rules (Settings) tell the coordinator to read it before starting a thread and
796
+ to wait while `free` is `0`, even if its project still has slots; In queue tasks start when the
797
+ machine has a free slot. `herdr-projects overview` is the fallback when the file is missing.
798
+ The same data is available read-only at `GET /api/plugins/thread-limits`.
799
+ - **Badges**, the only decoration on task lines, chosen by the coordinator (wherdr adds none
800
+ on its own): `[b:color(text)]`, or `[b:color(text)](target)` for a clickable badge with a small ↗.
801
+ The target is an `https://` / `http://` link (new tab) or a thread ID such as `t-0140` (opens
802
+ its tab); any other scheme is ignored. Color is `red`, `orange`, `amber`, `green`, `teal`,
803
+ `blue`, `violet`, `pink`, `gray` (theme-aware), a `#rgb` / `#rrggbb` hex, or empty for neutral;
804
+ at most 24 characters are shown. A bare URL in the text shows as a plain link, and the owner
805
+ `(me)` / `(agent)` is read but not shown. The coordinator rules (Settings) tell the coordinator
806
+ to use badges on its own when they help (status, thread, PR, device, priority…), sparingly,
807
+ and to follow your preferences. Example:
808
+
809
+ ```markdown
810
+ - [ ] Stop button on iPhone [b:red(bug)] [b:gray(t-0140)](t-0140) [b:blue(PR #12)](https://github.com/owner/repo/pull/12) (me)
811
+ ```
812
+ - **Settings → Plugins → herdr-projects**: install status per machine, the `TASKS.md` convention,
813
+ a template, the max threads per machine and the coordinator rules to copy.
814
+ - **Projects entries** in the menus when the plugin is on the agent's machine: an agent's menu
815
+ (`…`) and its card's (right click, long press on the phone) offer the Project panel, **New
816
+ project…**, **Continue as a project…** (an agent outside a project), **Pause this project…**
817
+ and **Check herdr-projects setup**; the project's header in the list has its own menu with
818
+ the same entries. Shortcuts: `Mod+Alt+P` (Project panel) and `Mod+Alt+Shift+N` (New project).
819
+ The plugin's other actions stay under **Plugin actions**.
820
+ - **New project** with the same machine and folder picker as **New agent**, and the agent
821
+ profiles of its coordinator and threads (see [Herdr plugins](#herdr-plugins)).
822
+
823
+ <p align="center">
824
+ <img src="docs/screenshots/project-panel.png" alt="A coordinator with the Project panel open, and its project group with threads in the sidebar" width="900">
825
+ </p>
826
+ <p align="center">
827
+ <img src="docs/screenshots/project-phone.png" alt="The Project panel on a phone" width="340">
828
+ </p>
829
+ <p align="center"><sub>A coordinator with its Project panel, on a computer and on a phone (demo data).</sub></p>
830
+
831
+ ### Using wherdr with herdr-projects
832
+
833
+ The Project panel only works well when the coordinator follows its conventions: which lists
834
+ mean what, the badges, `(agent → t-NNNN)`, and what to do with each message the buttons send
835
+ (`✓ Tested: …`, `✗ Problem: … — …`, `↳ Queue: …`…). They are written once, as an agent skill:
836
+ [`skills/wherdr/SKILL.md`](skills/wherdr/SKILL.md).
837
+
838
+ - **Herdr plugin**: the install links the skill for every coordinator, whatever its agent:
839
+ `~/.claude/skills/wherdr` (Claude Code, or `$CLAUDE_CONFIG_DIR/skills`) and
840
+ `~/.agents/skills/wherdr` (Codex, omp), each only when that agent is installed. Both point to a
841
+ copy in `~/wherdr/skills/wherdr`, refreshed on each update. An existing `wherdr` skill that is
842
+ not this link is left alone. Remove the links with `sh scripts/herdr-plugin.sh skill uninstall`
843
+ in the plugin folder.
844
+ - **Other installs**: link or copy `skills/wherdr` into your agent's skills folder yourself, or
845
+ paste **Settings → Plugins → herdr-projects → Copy rules for the coordinator** to it.
846
+
847
+ ## Herdr plugins
848
+
849
+ Actions declared by the plugins installed on a machine (`herdr plugin install|link`) appear in
850
+ the menus: workspace / tab / pane actions in the agent menu, global actions in the machine menu.
851
+ wherdr always passes the agent's pane explicitly. It asks for confirmation before running an
852
+ action, except for actions that only show or check something (list, show, status, doctor…).
853
+ Actions that open a plugin panel open it in the attached Herdr terminal client, not on the phone.
854
+
855
+ **herdr-projects** actions that ask for input (New project, continue this workspace as a
856
+ project, open, pause, resume) are run by wherdr itself as `herdr-projects` commands, because
857
+ Herdr's API cannot pass them arguments. **New project** picks its repository like **New agent**
858
+ picks a folder: the machine (when the project is created from this machine, a repository on an
859
+ SSH machine is passed as `PATH@MACHINE`), a folder browser and recent folders. It suggests the
860
+ root of the current space's Git repository (nothing outside a repository, never your home
861
+ folder itself), offers the root when you pick a subfolder, and names the project after the
862
+ repository. It also asks which agent profile runs the **coordinator** and which one the
863
+ **threads** start with: the profiles of the project's machine (`herdr-projects profile list`:
864
+ yours and the signed-in built-ins such as Claude or omp) that the plugin allows for each role,
865
+ with the plugin's defaults for new projects selected (or the first profile listed, when a default
866
+ is not available there). The choice is written to the project's
867
+ `PROJECT.md` (`coordinator_profile`, `thread_profile`); with a herdr-projects without profiles,
868
+ the choice is not shown.
869
+ With Docker, these commands write to the projects folder, so `docker-compose.yml` mounts
870
+ `~/.herdr-projects` read-write. If you set another `root` in
871
+ `~/.config/herdr-projects/config.toml`, mount that folder instead (same path on both sides);
872
+ otherwise wherdr reports that the home folder is read-only. Check setup only reads; the other
873
+ actions (Configure…) run on the host through Herdr, as in the terminal client. When no herdr-projects
874
+ ticker is running yet, the one these commands start inside the container is stopped right away;
875
+ the next `herdr-projects` command run on the host (a coordinator starting a thread, Herdr
876
+ starting) starts it there.
877
+
878
+ ## Security
879
+
880
+ wherdr drives Herdr, so **it can run anything as your user**. Docker does not change that: the
881
+ container talks to the Herdr server running on the host.
882
+
883
+ - It listens on `127.0.0.1` only. Reach it from other devices **only through a private
884
+ network** (Tailscale or [equivalent](#other-private-networks)). Never add a public route
885
+ (port forwarding, public reverse proxy, ngrok…); the only exception is a Cloudflare Tunnel
886
+ behind Cloudflare Access, with its risks.
887
+ - Requests are accepted only for `localhost`, loopback addresses, the runtime's hostname, the
888
+ hostname in `APP_URL`, and the runtime's network interface addresses (those of the container
889
+ with Docker). Add other private names or IP addresses to `HERDR_WEB_ALLOWED_HOSTS`
890
+ (comma-separated) before using them. An unlisted name returns HTTP 403 (`host` / "Host not
891
+ allowed"); add it to `HERDR_WEB_ALLOWED_HOSTS`, then restart wherdr. This host check also
892
+ applies to WebSockets.
893
+ - **Passkey lock** (Settings → Security, recommended): once a passkey is registered, the API,
894
+ images, photos and WebSockets require an unlocked session (signed HttpOnly cookie). Two limits
895
+ apply:
896
+ - **12 hours without use**: the session slides, so the app only locks again after 12 hours
897
+ without any request (or when you lock it from Settings).
898
+ - **Maximum duration** since the last passkey unlock, set in Settings → Security for every
899
+ device: 1 day, 7 days (default), 30 days, 90 days or 1 year. The unlock time is signed in the
900
+ cookie and the slide never moves it. Past it, the device asks for the passkey again at the
901
+ next opening of the app (launch, reload, or back in the foreground), never in the middle of
902
+ use; the app warns in the last hours. A client that never reopens is cut 12 hours after the
903
+ deadline. A shorter duration applies to the sessions already open.
904
+
905
+ A network error or a server restart never locks the app. **Lock all devices** (Settings →
906
+ Security, for a lost or stolen device) ends every session, this one included, and keeps the
907
+ passkeys: each device unlocks again with its own. Turning the lock off removes the passkeys and
908
+ invalidates every session. Lost passkey: delete `data/auth.json` on the server; the app is open
909
+ again to whoever can reach it.
910
+ - <a id="new-device"></a>**New device**: it can only get in with an existing passkey. Unlock it
911
+ with a passkey synced by your password manager (iCloud Keychain, Google Password Manager,
912
+ 1Password…), or with the passkey of another device through the browser's "use a phone or
913
+ tablet" QR code, then Settings → Security → **Add this device** to give it its own passkey.
914
+ - Without a passkey, **anyone who can reach the address can control your agents**: every device
915
+ on your tailnet, and every user of your tailnet if you share it.
916
+ - Writes require `Content-Type: application/json` (or `image/*` for photos, `application/octet-stream` for attached files) and an `Origin`
917
+ matching the host, WebSockets included. API reads sent from another site (links, images,
918
+ `no-cors` fetches, reported by the browser's `Sec-Fetch-Site`) are refused too.
919
+ - A strict Content Security Policy limits scripts to the app's own origin and hashed inline
920
+ scripts, and connections to that origin and its WebSockets. It also blocks embedded objects
921
+ and framing.
922
+ - wherdr never changes your agents' global settings: model and effort changes are for the
923
+ current session only.
924
+
925
+ See [SECURITY.md](SECURITY.md) to report a vulnerability.
926
+
927
+ ## Troubleshooting
928
+
929
+ - **"The Herdr server is not responding"**: start Herdr on the server (`herdr` or
930
+ `herdr server`). With Docker, check that `HOST_HOME` and `PUID` match your user.
931
+ - **No conversation, only the terminal**: the agent was started before the Herdr integration
932
+ was installed, or it is not Claude Code / Codex / omp. Install the integration
933
+ (`herdr integration install claude|codex|omp`) and start a new agent.
934
+ - **Passkeys or notifications unavailable**: the page must be served over HTTPS (or
935
+ `localhost`). On iPhone, notifications need the app installed on the home screen.
936
+ - **HTTP 403 when opening the app through another name**: add that private hostname or IP
937
+ address to `HERDR_WEB_ALLOWED_HOSTS`, or use the hostname in `APP_URL`, then restart wherdr.
938
+ - **Remote machine offline**: `docker compose logs | grep machine` shows its state. Test SSH as
939
+ wherdr does, from the container:
940
+ `docker compose exec herdr-web ssh -o BatchMode=yes laptop '~/.local/bin/herdr status server'`.
941
+ - `Could not resolve hostname`: container DNS (use the full name in `HostName`);
942
+ - `Permission denied (publickey)` / `Host key verification failed`: key or `known_hosts`
943
+ (run `ssh laptop true` once on the server);
944
+ - `Bad owner or permissions`: `~/.ssh/config` must belong to you and not be group-writable.
945
+ - **Claude says "Not logged in" on a Mac** whose Herdr server was started over SSH: the macOS
946
+ keychain is locked in SSH sessions. Start the Herdr server from a terminal on the Mac.
947
+ - **`Session open refused by peer` / `Connection closed by UNKNOWN port 65535`** in the logs: the
948
+ shared SSH connection to a remote machine reached sshd's session limit (`MaxSessions`, 10 by
949
+ default). wherdr stays under it and retries, so this is rare; if it persists (many terminals
950
+ open at once), raise `MaxSessions` in the remote machine's `sshd_config`.
951
+ - **Quotas missing**: see [Claude and Codex quotas](#claude-and-codex-quotas).
952
+ - **iPhone layout cut at the bottom** after changing the status bar style: reinstall the home
953
+ screen icon (iOS reads this setting at install time).
954
+
955
+ ## Contributing
956
+
957
+ See [CONTRIBUTING.md](CONTRIBUTING.md). Changes are listed in [CHANGELOG.md](CHANGELOG.md).
958
+
959
+ Every commit is public: a leak check (gitleaks plus your own forbidden patterns) covers the files
960
+ and the commits about to be pushed; see [Leak check](CONTRIBUTING.md#leak-check).
961
+
962
+ ## License
963
+
964
+ [MIT](LICENSE). The embedded font subsets keep their own licenses (`app/assets/fonts/`).