@fuzdev/fuz_app 0.1.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 (457) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/actions/action_bridge.d.ts +65 -0
  4. package/dist/actions/action_bridge.d.ts.map +1 -0
  5. package/dist/actions/action_bridge.js +76 -0
  6. package/dist/actions/action_codegen.d.ts +97 -0
  7. package/dist/actions/action_codegen.d.ts.map +1 -0
  8. package/dist/actions/action_codegen.js +280 -0
  9. package/dist/actions/action_registry.d.ts +35 -0
  10. package/dist/actions/action_registry.d.ts.map +1 -0
  11. package/dist/actions/action_registry.js +83 -0
  12. package/dist/actions/action_spec.d.ts +169 -0
  13. package/dist/actions/action_spec.d.ts.map +1 -0
  14. package/dist/actions/action_spec.js +76 -0
  15. package/dist/auth/account_queries.d.ts +96 -0
  16. package/dist/auth/account_queries.d.ts.map +1 -0
  17. package/dist/auth/account_queries.js +172 -0
  18. package/dist/auth/account_routes.d.ts +86 -0
  19. package/dist/auth/account_routes.d.ts.map +1 -0
  20. package/dist/auth/account_routes.js +406 -0
  21. package/dist/auth/account_schema.d.ts +192 -0
  22. package/dist/auth/account_schema.d.ts.map +1 -0
  23. package/dist/auth/account_schema.js +105 -0
  24. package/dist/auth/admin_routes.d.ts +29 -0
  25. package/dist/auth/admin_routes.d.ts.map +1 -0
  26. package/dist/auth/admin_routes.js +193 -0
  27. package/dist/auth/api_token.d.ts +33 -0
  28. package/dist/auth/api_token.d.ts.map +1 -0
  29. package/dist/auth/api_token.js +36 -0
  30. package/dist/auth/api_token_queries.d.ts +80 -0
  31. package/dist/auth/api_token_queries.d.ts.map +1 -0
  32. package/dist/auth/api_token_queries.js +116 -0
  33. package/dist/auth/app_settings_queries.d.ts +33 -0
  34. package/dist/auth/app_settings_queries.d.ts.map +1 -0
  35. package/dist/auth/app_settings_queries.js +51 -0
  36. package/dist/auth/app_settings_routes.d.ts +27 -0
  37. package/dist/auth/app_settings_routes.d.ts.map +1 -0
  38. package/dist/auth/app_settings_routes.js +66 -0
  39. package/dist/auth/app_settings_schema.d.ts +35 -0
  40. package/dist/auth/app_settings_schema.d.ts.map +1 -0
  41. package/dist/auth/app_settings_schema.js +22 -0
  42. package/dist/auth/audit_log_queries.d.ts +90 -0
  43. package/dist/auth/audit_log_queries.d.ts.map +1 -0
  44. package/dist/auth/audit_log_queries.js +205 -0
  45. package/dist/auth/audit_log_routes.d.ts +33 -0
  46. package/dist/auth/audit_log_routes.d.ts.map +1 -0
  47. package/dist/auth/audit_log_routes.js +106 -0
  48. package/dist/auth/audit_log_schema.d.ts +259 -0
  49. package/dist/auth/audit_log_schema.d.ts.map +1 -0
  50. package/dist/auth/audit_log_schema.js +123 -0
  51. package/dist/auth/bearer_auth.d.ts +32 -0
  52. package/dist/auth/bearer_auth.d.ts.map +1 -0
  53. package/dist/auth/bearer_auth.js +90 -0
  54. package/dist/auth/bootstrap_account.d.ts +82 -0
  55. package/dist/auth/bootstrap_account.d.ts.map +1 -0
  56. package/dist/auth/bootstrap_account.js +97 -0
  57. package/dist/auth/bootstrap_routes.d.ts +74 -0
  58. package/dist/auth/bootstrap_routes.d.ts.map +1 -0
  59. package/dist/auth/bootstrap_routes.js +154 -0
  60. package/dist/auth/daemon_token.d.ts +49 -0
  61. package/dist/auth/daemon_token.d.ts.map +1 -0
  62. package/dist/auth/daemon_token.js +49 -0
  63. package/dist/auth/daemon_token_middleware.d.ts +93 -0
  64. package/dist/auth/daemon_token_middleware.d.ts.map +1 -0
  65. package/dist/auth/daemon_token_middleware.js +167 -0
  66. package/dist/auth/ddl.d.ts +27 -0
  67. package/dist/auth/ddl.d.ts.map +1 -0
  68. package/dist/auth/ddl.js +111 -0
  69. package/dist/auth/deps.d.ts +52 -0
  70. package/dist/auth/deps.d.ts.map +1 -0
  71. package/dist/auth/deps.js +10 -0
  72. package/dist/auth/invite_queries.d.ts +68 -0
  73. package/dist/auth/invite_queries.d.ts.map +1 -0
  74. package/dist/auth/invite_queries.js +105 -0
  75. package/dist/auth/invite_routes.d.ts +18 -0
  76. package/dist/auth/invite_routes.d.ts.map +1 -0
  77. package/dist/auth/invite_routes.js +129 -0
  78. package/dist/auth/invite_schema.d.ts +51 -0
  79. package/dist/auth/invite_schema.d.ts.map +1 -0
  80. package/dist/auth/invite_schema.js +25 -0
  81. package/dist/auth/keyring.d.ts +87 -0
  82. package/dist/auth/keyring.d.ts.map +1 -0
  83. package/dist/auth/keyring.js +142 -0
  84. package/dist/auth/middleware.d.ts +40 -0
  85. package/dist/auth/middleware.d.ts.map +1 -0
  86. package/dist/auth/middleware.js +64 -0
  87. package/dist/auth/migrations.d.ts +42 -0
  88. package/dist/auth/migrations.d.ts.map +1 -0
  89. package/dist/auth/migrations.js +79 -0
  90. package/dist/auth/password.d.ts +39 -0
  91. package/dist/auth/password.d.ts.map +1 -0
  92. package/dist/auth/password.js +25 -0
  93. package/dist/auth/password_argon2.d.ts +43 -0
  94. package/dist/auth/password_argon2.d.ts.map +1 -0
  95. package/dist/auth/password_argon2.js +76 -0
  96. package/dist/auth/permit_queries.d.ts +72 -0
  97. package/dist/auth/permit_queries.d.ts.map +1 -0
  98. package/dist/auth/permit_queries.js +116 -0
  99. package/dist/auth/request_context.d.ts +114 -0
  100. package/dist/auth/request_context.d.ts.map +1 -0
  101. package/dist/auth/request_context.js +176 -0
  102. package/dist/auth/require_keeper.d.ts +20 -0
  103. package/dist/auth/require_keeper.d.ts.map +1 -0
  104. package/dist/auth/require_keeper.js +35 -0
  105. package/dist/auth/role_schema.d.ts +69 -0
  106. package/dist/auth/role_schema.d.ts.map +1 -0
  107. package/dist/auth/role_schema.js +70 -0
  108. package/dist/auth/route_guards.d.ts +21 -0
  109. package/dist/auth/route_guards.d.ts.map +1 -0
  110. package/dist/auth/route_guards.js +32 -0
  111. package/dist/auth/session_cookie.d.ts +158 -0
  112. package/dist/auth/session_cookie.d.ts.map +1 -0
  113. package/dist/auth/session_cookie.js +135 -0
  114. package/dist/auth/session_lifecycle.d.ts +35 -0
  115. package/dist/auth/session_lifecycle.d.ts.map +1 -0
  116. package/dist/auth/session_lifecycle.js +27 -0
  117. package/dist/auth/session_middleware.d.ts +33 -0
  118. package/dist/auth/session_middleware.d.ts.map +1 -0
  119. package/dist/auth/session_middleware.js +62 -0
  120. package/dist/auth/session_queries.d.ts +135 -0
  121. package/dist/auth/session_queries.d.ts.map +1 -0
  122. package/dist/auth/session_queries.js +186 -0
  123. package/dist/auth/signup_routes.d.ts +32 -0
  124. package/dist/auth/signup_routes.d.ts.map +1 -0
  125. package/dist/auth/signup_routes.js +150 -0
  126. package/dist/cli/args.d.ts +48 -0
  127. package/dist/cli/args.d.ts.map +1 -0
  128. package/dist/cli/args.js +76 -0
  129. package/dist/cli/config.d.ts +48 -0
  130. package/dist/cli/config.d.ts.map +1 -0
  131. package/dist/cli/config.js +77 -0
  132. package/dist/cli/daemon.d.ts +82 -0
  133. package/dist/cli/daemon.d.ts.map +1 -0
  134. package/dist/cli/daemon.js +149 -0
  135. package/dist/cli/help.d.ts +85 -0
  136. package/dist/cli/help.d.ts.map +1 -0
  137. package/dist/cli/help.js +138 -0
  138. package/dist/cli/logger.d.ts +46 -0
  139. package/dist/cli/logger.d.ts.map +1 -0
  140. package/dist/cli/logger.js +48 -0
  141. package/dist/cli/util.d.ts +36 -0
  142. package/dist/cli/util.d.ts.map +1 -0
  143. package/dist/cli/util.js +50 -0
  144. package/dist/crypto.d.ts +13 -0
  145. package/dist/crypto.d.ts.map +1 -0
  146. package/dist/crypto.js +19 -0
  147. package/dist/db/assert_row.d.ts +18 -0
  148. package/dist/db/assert_row.d.ts.map +1 -0
  149. package/dist/db/assert_row.js +24 -0
  150. package/dist/db/create_db.d.ts +38 -0
  151. package/dist/db/create_db.d.ts.map +1 -0
  152. package/dist/db/create_db.js +57 -0
  153. package/dist/db/db.d.ts +97 -0
  154. package/dist/db/db.d.ts.map +1 -0
  155. package/dist/db/db.js +76 -0
  156. package/dist/db/db_pg.d.ts +21 -0
  157. package/dist/db/db_pg.d.ts.map +1 -0
  158. package/dist/db/db_pg.js +45 -0
  159. package/dist/db/db_pglite.d.ts +21 -0
  160. package/dist/db/db_pglite.d.ts.map +1 -0
  161. package/dist/db/db_pglite.js +28 -0
  162. package/dist/db/migrate.d.ts +67 -0
  163. package/dist/db/migrate.d.ts.map +1 -0
  164. package/dist/db/migrate.js +118 -0
  165. package/dist/db/pg_error.d.ts +16 -0
  166. package/dist/db/pg_error.d.ts.map +1 -0
  167. package/dist/db/pg_error.js +15 -0
  168. package/dist/db/query_deps.d.ts +14 -0
  169. package/dist/db/query_deps.d.ts.map +1 -0
  170. package/dist/db/query_deps.js +9 -0
  171. package/dist/db/sql_identifier.d.ts +27 -0
  172. package/dist/db/sql_identifier.d.ts.map +1 -0
  173. package/dist/db/sql_identifier.js +31 -0
  174. package/dist/db/status.d.ts +62 -0
  175. package/dist/db/status.d.ts.map +1 -0
  176. package/dist/db/status.js +116 -0
  177. package/dist/dev/setup.d.ts +159 -0
  178. package/dist/dev/setup.d.ts.map +1 -0
  179. package/dist/dev/setup.js +265 -0
  180. package/dist/env/dotenv.d.ts +25 -0
  181. package/dist/env/dotenv.d.ts.map +1 -0
  182. package/dist/env/dotenv.js +52 -0
  183. package/dist/env/load.d.ts +52 -0
  184. package/dist/env/load.d.ts.map +1 -0
  185. package/dist/env/load.js +79 -0
  186. package/dist/env/mask.d.ts +19 -0
  187. package/dist/env/mask.d.ts.map +1 -0
  188. package/dist/env/mask.js +26 -0
  189. package/dist/env/resolve.d.ts +126 -0
  190. package/dist/env/resolve.d.ts.map +1 -0
  191. package/dist/env/resolve.js +200 -0
  192. package/dist/hono_context.d.ts +48 -0
  193. package/dist/hono_context.d.ts.map +1 -0
  194. package/dist/hono_context.js +22 -0
  195. package/dist/http/common_routes.d.ts +52 -0
  196. package/dist/http/common_routes.d.ts.map +1 -0
  197. package/dist/http/common_routes.js +65 -0
  198. package/dist/http/db_routes.d.ts +57 -0
  199. package/dist/http/db_routes.d.ts.map +1 -0
  200. package/dist/http/db_routes.js +176 -0
  201. package/dist/http/error_schemas.d.ts +169 -0
  202. package/dist/http/error_schemas.d.ts.map +1 -0
  203. package/dist/http/error_schemas.js +178 -0
  204. package/dist/http/middleware_spec.d.ts +19 -0
  205. package/dist/http/middleware_spec.d.ts.map +1 -0
  206. package/dist/http/middleware_spec.js +9 -0
  207. package/dist/http/origin.d.ts +57 -0
  208. package/dist/http/origin.d.ts.map +1 -0
  209. package/dist/http/origin.js +207 -0
  210. package/dist/http/proxy.d.ts +112 -0
  211. package/dist/http/proxy.d.ts.map +1 -0
  212. package/dist/http/proxy.js +240 -0
  213. package/dist/http/route_spec.d.ts +197 -0
  214. package/dist/http/route_spec.d.ts.map +1 -0
  215. package/dist/http/route_spec.js +243 -0
  216. package/dist/http/schema_helpers.d.ts +64 -0
  217. package/dist/http/schema_helpers.d.ts.map +1 -0
  218. package/dist/http/schema_helpers.js +90 -0
  219. package/dist/http/surface.d.ts +132 -0
  220. package/dist/http/surface.d.ts.map +1 -0
  221. package/dist/http/surface.js +156 -0
  222. package/dist/http/surface_query.d.ts +77 -0
  223. package/dist/http/surface_query.d.ts.map +1 -0
  224. package/dist/http/surface_query.js +86 -0
  225. package/dist/rate_limiter.d.ts +94 -0
  226. package/dist/rate_limiter.d.ts.map +1 -0
  227. package/dist/rate_limiter.js +156 -0
  228. package/dist/realtime/sse.d.ts +80 -0
  229. package/dist/realtime/sse.d.ts.map +1 -0
  230. package/dist/realtime/sse.js +109 -0
  231. package/dist/realtime/sse_auth_guard.d.ts +93 -0
  232. package/dist/realtime/sse_auth_guard.d.ts.map +1 -0
  233. package/dist/realtime/sse_auth_guard.js +111 -0
  234. package/dist/realtime/subscriber_registry.d.ts +85 -0
  235. package/dist/realtime/subscriber_registry.d.ts.map +1 -0
  236. package/dist/realtime/subscriber_registry.js +108 -0
  237. package/dist/runtime/deno.d.ts +21 -0
  238. package/dist/runtime/deno.d.ts.map +1 -0
  239. package/dist/runtime/deno.js +83 -0
  240. package/dist/runtime/deps.d.ts +113 -0
  241. package/dist/runtime/deps.d.ts.map +1 -0
  242. package/dist/runtime/deps.js +10 -0
  243. package/dist/runtime/fs.d.ts +15 -0
  244. package/dist/runtime/fs.d.ts.map +1 -0
  245. package/dist/runtime/fs.js +17 -0
  246. package/dist/runtime/mock.d.ts +81 -0
  247. package/dist/runtime/mock.d.ts.map +1 -0
  248. package/dist/runtime/mock.js +195 -0
  249. package/dist/runtime/node.d.ts +17 -0
  250. package/dist/runtime/node.d.ts.map +1 -0
  251. package/dist/runtime/node.js +117 -0
  252. package/dist/schema_meta.d.ts +16 -0
  253. package/dist/schema_meta.d.ts.map +1 -0
  254. package/dist/schema_meta.js +9 -0
  255. package/dist/sensitivity.d.ts +15 -0
  256. package/dist/sensitivity.d.ts.map +1 -0
  257. package/dist/sensitivity.js +9 -0
  258. package/dist/server/app_backend.d.ts +74 -0
  259. package/dist/server/app_backend.d.ts.map +1 -0
  260. package/dist/server/app_backend.js +39 -0
  261. package/dist/server/app_server.d.ts +201 -0
  262. package/dist/server/app_server.d.ts.map +1 -0
  263. package/dist/server/app_server.js +266 -0
  264. package/dist/server/env.d.ts +68 -0
  265. package/dist/server/env.d.ts.map +1 -0
  266. package/dist/server/env.js +95 -0
  267. package/dist/server/startup.d.ts +22 -0
  268. package/dist/server/startup.d.ts.map +1 -0
  269. package/dist/server/startup.js +48 -0
  270. package/dist/server/static.d.ts +39 -0
  271. package/dist/server/static.d.ts.map +1 -0
  272. package/dist/server/static.js +38 -0
  273. package/dist/server/validate_nginx.d.ts +34 -0
  274. package/dist/server/validate_nginx.d.ts.map +1 -0
  275. package/dist/server/validate_nginx.js +118 -0
  276. package/dist/testing/CLAUDE.md +3 -0
  277. package/dist/testing/admin_integration.d.ts +45 -0
  278. package/dist/testing/admin_integration.d.ts.map +1 -0
  279. package/dist/testing/admin_integration.js +840 -0
  280. package/dist/testing/adversarial_404.d.ts +15 -0
  281. package/dist/testing/adversarial_404.d.ts.map +1 -0
  282. package/dist/testing/adversarial_404.js +118 -0
  283. package/dist/testing/adversarial_headers.d.ts +36 -0
  284. package/dist/testing/adversarial_headers.d.ts.map +1 -0
  285. package/dist/testing/adversarial_headers.js +128 -0
  286. package/dist/testing/adversarial_input.d.ts +56 -0
  287. package/dist/testing/adversarial_input.d.ts.map +1 -0
  288. package/dist/testing/adversarial_input.js +494 -0
  289. package/dist/testing/app_server.d.ts +169 -0
  290. package/dist/testing/app_server.d.ts.map +1 -0
  291. package/dist/testing/app_server.js +240 -0
  292. package/dist/testing/assert_dev_env.d.ts +10 -0
  293. package/dist/testing/assert_dev_env.d.ts.map +1 -0
  294. package/dist/testing/assert_dev_env.js +13 -0
  295. package/dist/testing/assertions.d.ts +61 -0
  296. package/dist/testing/assertions.d.ts.map +1 -0
  297. package/dist/testing/assertions.js +96 -0
  298. package/dist/testing/attack_surface.d.ts +63 -0
  299. package/dist/testing/attack_surface.d.ts.map +1 -0
  300. package/dist/testing/attack_surface.js +224 -0
  301. package/dist/testing/audit_completeness.d.ts +29 -0
  302. package/dist/testing/audit_completeness.d.ts.map +1 -0
  303. package/dist/testing/audit_completeness.js +410 -0
  304. package/dist/testing/auth_apps.d.ts +55 -0
  305. package/dist/testing/auth_apps.d.ts.map +1 -0
  306. package/dist/testing/auth_apps.js +122 -0
  307. package/dist/testing/data_exposure.d.ts +62 -0
  308. package/dist/testing/data_exposure.d.ts.map +1 -0
  309. package/dist/testing/data_exposure.js +297 -0
  310. package/dist/testing/db.d.ts +111 -0
  311. package/dist/testing/db.d.ts.map +1 -0
  312. package/dist/testing/db.js +258 -0
  313. package/dist/testing/entities.d.ts +21 -0
  314. package/dist/testing/entities.d.ts.map +1 -0
  315. package/dist/testing/entities.js +42 -0
  316. package/dist/testing/error_coverage.d.ts +78 -0
  317. package/dist/testing/error_coverage.d.ts.map +1 -0
  318. package/dist/testing/error_coverage.js +135 -0
  319. package/dist/testing/integration.d.ts +37 -0
  320. package/dist/testing/integration.d.ts.map +1 -0
  321. package/dist/testing/integration.js +1139 -0
  322. package/dist/testing/integration_helpers.d.ts +107 -0
  323. package/dist/testing/integration_helpers.d.ts.map +1 -0
  324. package/dist/testing/integration_helpers.js +246 -0
  325. package/dist/testing/middleware.d.ts +125 -0
  326. package/dist/testing/middleware.d.ts.map +1 -0
  327. package/dist/testing/middleware.js +210 -0
  328. package/dist/testing/rate_limiting.d.ts +43 -0
  329. package/dist/testing/rate_limiting.d.ts.map +1 -0
  330. package/dist/testing/rate_limiting.js +216 -0
  331. package/dist/testing/round_trip.d.ts +37 -0
  332. package/dist/testing/round_trip.d.ts.map +1 -0
  333. package/dist/testing/round_trip.js +128 -0
  334. package/dist/testing/schema_generators.d.ts +33 -0
  335. package/dist/testing/schema_generators.d.ts.map +1 -0
  336. package/dist/testing/schema_generators.js +137 -0
  337. package/dist/testing/standard.d.ts +49 -0
  338. package/dist/testing/standard.d.ts.map +1 -0
  339. package/dist/testing/standard.js +16 -0
  340. package/dist/testing/stubs.d.ts +96 -0
  341. package/dist/testing/stubs.d.ts.map +1 -0
  342. package/dist/testing/stubs.js +192 -0
  343. package/dist/testing/surface_invariants.d.ts +189 -0
  344. package/dist/testing/surface_invariants.d.ts.map +1 -0
  345. package/dist/testing/surface_invariants.js +450 -0
  346. package/dist/ui/AccountSessions.svelte +75 -0
  347. package/dist/ui/AccountSessions.svelte.d.ts +19 -0
  348. package/dist/ui/AccountSessions.svelte.d.ts.map +1 -0
  349. package/dist/ui/AdminAccounts.svelte +107 -0
  350. package/dist/ui/AdminAccounts.svelte.d.ts +19 -0
  351. package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -0
  352. package/dist/ui/AdminAuditLog.svelte +144 -0
  353. package/dist/ui/AdminAuditLog.svelte.d.ts +4 -0
  354. package/dist/ui/AdminAuditLog.svelte.d.ts.map +1 -0
  355. package/dist/ui/AdminInvites.svelte +142 -0
  356. package/dist/ui/AdminInvites.svelte.d.ts +4 -0
  357. package/dist/ui/AdminInvites.svelte.d.ts.map +1 -0
  358. package/dist/ui/AdminOverview.svelte +337 -0
  359. package/dist/ui/AdminOverview.svelte.d.ts +4 -0
  360. package/dist/ui/AdminOverview.svelte.d.ts.map +1 -0
  361. package/dist/ui/AdminPermitHistory.svelte +61 -0
  362. package/dist/ui/AdminPermitHistory.svelte.d.ts +19 -0
  363. package/dist/ui/AdminPermitHistory.svelte.d.ts.map +1 -0
  364. package/dist/ui/AdminSessions.svelte +85 -0
  365. package/dist/ui/AdminSessions.svelte.d.ts +19 -0
  366. package/dist/ui/AdminSessions.svelte.d.ts.map +1 -0
  367. package/dist/ui/AdminSettings.svelte +32 -0
  368. package/dist/ui/AdminSettings.svelte.d.ts +19 -0
  369. package/dist/ui/AdminSettings.svelte.d.ts.map +1 -0
  370. package/dist/ui/AdminSurface.svelte +42 -0
  371. package/dist/ui/AdminSurface.svelte.d.ts +4 -0
  372. package/dist/ui/AdminSurface.svelte.d.ts.map +1 -0
  373. package/dist/ui/AppShell.svelte +93 -0
  374. package/dist/ui/AppShell.svelte.d.ts +20 -0
  375. package/dist/ui/AppShell.svelte.d.ts.map +1 -0
  376. package/dist/ui/BootstrapForm.svelte +105 -0
  377. package/dist/ui/BootstrapForm.svelte.d.ts +4 -0
  378. package/dist/ui/BootstrapForm.svelte.d.ts.map +1 -0
  379. package/dist/ui/ColumnLayout.svelte +46 -0
  380. package/dist/ui/ColumnLayout.svelte.d.ts +11 -0
  381. package/dist/ui/ColumnLayout.svelte.d.ts.map +1 -0
  382. package/dist/ui/ConfirmButton.svelte +125 -0
  383. package/dist/ui/ConfirmButton.svelte.d.ts +54 -0
  384. package/dist/ui/ConfirmButton.svelte.d.ts.map +1 -0
  385. package/dist/ui/Datatable.svelte +185 -0
  386. package/dist/ui/Datatable.svelte.d.ts +35 -0
  387. package/dist/ui/Datatable.svelte.d.ts.map +1 -0
  388. package/dist/ui/LoginForm.svelte +82 -0
  389. package/dist/ui/LoginForm.svelte.d.ts +8 -0
  390. package/dist/ui/LoginForm.svelte.d.ts.map +1 -0
  391. package/dist/ui/LogoutButton.svelte +36 -0
  392. package/dist/ui/LogoutButton.svelte.d.ts +10 -0
  393. package/dist/ui/LogoutButton.svelte.d.ts.map +1 -0
  394. package/dist/ui/MenuLink.svelte +35 -0
  395. package/dist/ui/MenuLink.svelte.d.ts +12 -0
  396. package/dist/ui/MenuLink.svelte.d.ts.map +1 -0
  397. package/dist/ui/OpenSignupToggle.svelte +36 -0
  398. package/dist/ui/OpenSignupToggle.svelte.d.ts +19 -0
  399. package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -0
  400. package/dist/ui/PopoverButton.svelte +136 -0
  401. package/dist/ui/PopoverButton.svelte.d.ts +63 -0
  402. package/dist/ui/PopoverButton.svelte.d.ts.map +1 -0
  403. package/dist/ui/SignupForm.svelte +117 -0
  404. package/dist/ui/SignupForm.svelte.d.ts +7 -0
  405. package/dist/ui/SignupForm.svelte.d.ts.map +1 -0
  406. package/dist/ui/SurfaceExplorer.svelte +287 -0
  407. package/dist/ui/SurfaceExplorer.svelte.d.ts +8 -0
  408. package/dist/ui/SurfaceExplorer.svelte.d.ts.map +1 -0
  409. package/dist/ui/account_sessions_state.svelte.d.ts +15 -0
  410. package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -0
  411. package/dist/ui/account_sessions_state.svelte.js +45 -0
  412. package/dist/ui/admin_accounts_state.svelte.d.ts +19 -0
  413. package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -0
  414. package/dist/ui/admin_accounts_state.svelte.js +65 -0
  415. package/dist/ui/admin_invites_state.svelte.d.ts +19 -0
  416. package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -0
  417. package/dist/ui/admin_invites_state.svelte.js +71 -0
  418. package/dist/ui/admin_sessions_state.svelte.d.ts +18 -0
  419. package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -0
  420. package/dist/ui/admin_sessions_state.svelte.js +62 -0
  421. package/dist/ui/app_settings_state.svelte.d.ts +14 -0
  422. package/dist/ui/app_settings_state.svelte.d.ts.map +1 -0
  423. package/dist/ui/app_settings_state.svelte.js +44 -0
  424. package/dist/ui/audit_log_state.svelte.d.ts +40 -0
  425. package/dist/ui/audit_log_state.svelte.d.ts.map +1 -0
  426. package/dist/ui/audit_log_state.svelte.js +153 -0
  427. package/dist/ui/auth_state.svelte.d.ts +85 -0
  428. package/dist/ui/auth_state.svelte.d.ts.map +1 -0
  429. package/dist/ui/auth_state.svelte.js +238 -0
  430. package/dist/ui/datatable.d.ts +25 -0
  431. package/dist/ui/datatable.d.ts.map +1 -0
  432. package/dist/ui/datatable.js +9 -0
  433. package/dist/ui/enter_advance.d.ts +13 -0
  434. package/dist/ui/enter_advance.d.ts.map +1 -0
  435. package/dist/ui/enter_advance.js +30 -0
  436. package/dist/ui/loadable.svelte.d.ts +55 -0
  437. package/dist/ui/loadable.svelte.d.ts.map +1 -0
  438. package/dist/ui/loadable.svelte.js +75 -0
  439. package/dist/ui/popover.svelte.d.ts +137 -0
  440. package/dist/ui/popover.svelte.d.ts.map +1 -0
  441. package/dist/ui/popover.svelte.js +288 -0
  442. package/dist/ui/position_helpers.d.ts +27 -0
  443. package/dist/ui/position_helpers.d.ts.map +1 -0
  444. package/dist/ui/position_helpers.js +81 -0
  445. package/dist/ui/sidebar_state.svelte.d.ts +30 -0
  446. package/dist/ui/sidebar_state.svelte.d.ts.map +1 -0
  447. package/dist/ui/sidebar_state.svelte.js +39 -0
  448. package/dist/ui/table_state.svelte.d.ts +63 -0
  449. package/dist/ui/table_state.svelte.d.ts.map +1 -0
  450. package/dist/ui/table_state.svelte.js +117 -0
  451. package/dist/ui/ui_fetch.d.ts +29 -0
  452. package/dist/ui/ui_fetch.d.ts.map +1 -0
  453. package/dist/ui/ui_fetch.js +37 -0
  454. package/dist/ui/ui_format.d.ts +63 -0
  455. package/dist/ui/ui_format.d.ts.map +1 -0
  456. package/dist/ui/ui_format.js +196 -0
  457. package/package.json +121 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Daemon lifecycle management.
3
+ *
4
+ * Provides daemon info schema, PID file management, and process lifecycle
5
+ * operations. Separates lifecycle from presentation — `stop_daemon` returns
6
+ * a result object instead of logging directly.
7
+ *
8
+ * @module
9
+ */
10
+ import { z } from 'zod';
11
+ import { type CommandDeps, type EnvDeps, type FsReadDeps, type FsRemoveDeps, type FsWriteDeps, type LogDeps } from '../runtime/deps.js';
12
+ /**
13
+ * Daemon info schema for `~/.{name}/run/daemon.json`.
14
+ */
15
+ export declare const DaemonInfo: z.ZodObject<{
16
+ /** Schema version. */
17
+ version: z.ZodNumber;
18
+ /** Server process ID. */
19
+ pid: z.ZodNumber;
20
+ /** Port the server is listening on. */
21
+ port: z.ZodNumber;
22
+ /** ISO timestamp when server started. */
23
+ started: z.ZodString;
24
+ /** Package version of the application. */
25
+ app_version: z.ZodString;
26
+ }, z.core.$strict>;
27
+ export type DaemonInfo = z.infer<typeof DaemonInfo>;
28
+ /**
29
+ * Get the daemon info file path (`~/.{name}/run/daemon.json`).
30
+ *
31
+ * @param runtime - runtime with `env_get` capability
32
+ * @param name - application name
33
+ * @returns path to `daemon.json`, or null if `$HOME` is not set
34
+ */
35
+ export declare const get_daemon_info_path: (runtime: Pick<EnvDeps, "env_get">, name: string) => string | null;
36
+ /**
37
+ * Write daemon info to the PID file, creating directories as needed.
38
+ *
39
+ * @param runtime - runtime with file write and env capabilities
40
+ * @param name - application name
41
+ * @param info - daemon info to write
42
+ */
43
+ export declare const write_daemon_info: (runtime: Pick<EnvDeps, "env_get"> & FsWriteDeps, name: string, info: DaemonInfo) => Promise<void>;
44
+ /**
45
+ * Read and validate daemon info from the PID file.
46
+ *
47
+ * @param runtime - runtime with file read and env capabilities
48
+ * @param name - application name
49
+ * @returns parsed daemon info, or null if missing or invalid
50
+ */
51
+ export declare const read_daemon_info: (runtime: Pick<EnvDeps, "env_get"> & FsReadDeps & LogDeps, name: string) => Promise<DaemonInfo | null>;
52
+ /**
53
+ * Check if a process is running by PID.
54
+ *
55
+ * @param runtime - runtime with command execution capability
56
+ * @param pid - process ID to check
57
+ * @returns `true` if the process is running
58
+ */
59
+ export declare const is_daemon_running: (runtime: CommandDeps, pid: number) => Promise<boolean>;
60
+ /**
61
+ * Result of a `stop_daemon` operation.
62
+ */
63
+ export interface StopDaemonResult {
64
+ /** Whether a daemon was stopped. */
65
+ stopped: boolean;
66
+ /** PID of the stopped daemon, if any. */
67
+ pid?: number;
68
+ /** Human-readable message describing the outcome. */
69
+ message: string;
70
+ }
71
+ /**
72
+ * Stop a running daemon by sending SIGTERM and cleaning up the PID file.
73
+ *
74
+ * Returns a result object instead of logging directly, separating
75
+ * lifecycle from presentation.
76
+ *
77
+ * @param runtime - runtime with command, file, and env capabilities
78
+ * @param name - application name
79
+ * @returns result describing the outcome
80
+ */
81
+ export declare const stop_daemon: (runtime: Pick<EnvDeps, "env_get"> & FsReadDeps & FsRemoveDeps & CommandDeps & LogDeps, name: string) => Promise<StopDaemonResult>;
82
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EACN,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,MAAM,oBAAoB,CAAC;AAI5B;;GAEG;AACH,eAAO,MAAM,UAAU;IACtB,sBAAsB;;IAEtB,yBAAyB;;IAEzB,uCAAuC;;IAEvC,yCAAyC;;IAEzC,0CAA0C;;kBAEzC,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAChC,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EACjC,MAAM,MAAM,KACV,MAAM,GAAG,IAGX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC7B,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,WAAW,EAC/C,MAAM,MAAM,EACZ,MAAM,UAAU,KACd,OAAO,CAAC,IAAI,CAWd,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC5B,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,UAAU,GAAG,OAAO,EACxD,MAAM,MAAM,KACV,OAAO,CAAC,UAAU,GAAG,IAAI,CAwB3B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,WAAW,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,OAAO,CAG1F,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GACvB,SAAS,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,EACrF,MAAM,MAAM,KACV,OAAO,CAAC,gBAAgB,CA2C1B,CAAC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Daemon lifecycle management.
3
+ *
4
+ * Provides daemon info schema, PID file management, and process lifecycle
5
+ * operations. Separates lifecycle from presentation — `stop_daemon` returns
6
+ * a result object instead of logging directly.
7
+ *
8
+ * @module
9
+ */
10
+ import { z } from 'zod';
11
+ import {} from '../runtime/deps.js';
12
+ import { write_file_atomic } from '../runtime/fs.js';
13
+ import { get_app_dir } from './config.js';
14
+ /**
15
+ * Daemon info schema for `~/.{name}/run/daemon.json`.
16
+ */
17
+ export const DaemonInfo = z.strictObject({
18
+ /** Schema version. */
19
+ version: z.number(),
20
+ /** Server process ID. */
21
+ pid: z.number(),
22
+ /** Port the server is listening on. */
23
+ port: z.number(),
24
+ /** ISO timestamp when server started. */
25
+ started: z.string(),
26
+ /** Package version of the application. */
27
+ app_version: z.string(),
28
+ });
29
+ /**
30
+ * Get the daemon info file path (`~/.{name}/run/daemon.json`).
31
+ *
32
+ * @param runtime - runtime with `env_get` capability
33
+ * @param name - application name
34
+ * @returns path to `daemon.json`, or null if `$HOME` is not set
35
+ */
36
+ export const get_daemon_info_path = (runtime, name) => {
37
+ const app_dir = get_app_dir(runtime, name);
38
+ return app_dir ? `${app_dir}/run/daemon.json` : null;
39
+ };
40
+ /**
41
+ * Write daemon info to the PID file, creating directories as needed.
42
+ *
43
+ * @param runtime - runtime with file write and env capabilities
44
+ * @param name - application name
45
+ * @param info - daemon info to write
46
+ */
47
+ export const write_daemon_info = async (runtime, name, info) => {
48
+ const app_dir = get_app_dir(runtime, name);
49
+ if (!app_dir) {
50
+ throw new Error('$HOME not set');
51
+ }
52
+ const run_dir = `${app_dir}/run`;
53
+ await runtime.mkdir(run_dir, { recursive: true });
54
+ const content = JSON.stringify(info, null, '\t');
55
+ await write_file_atomic(runtime, `${run_dir}/daemon.json`, content + '\n');
56
+ };
57
+ /**
58
+ * Read and validate daemon info from the PID file.
59
+ *
60
+ * @param runtime - runtime with file read and env capabilities
61
+ * @param name - application name
62
+ * @returns parsed daemon info, or null if missing or invalid
63
+ */
64
+ export const read_daemon_info = async (runtime, name) => {
65
+ const daemon_path = get_daemon_info_path(runtime, name);
66
+ if (!daemon_path) {
67
+ return null;
68
+ }
69
+ const stat = await runtime.stat(daemon_path);
70
+ if (!stat) {
71
+ return null;
72
+ }
73
+ try {
74
+ const content = await runtime.read_file(daemon_path);
75
+ const parsed = JSON.parse(content);
76
+ const result = DaemonInfo.safeParse(parsed);
77
+ if (!result.success) {
78
+ runtime.warn(`Invalid daemon.json: ${result.error.message}`);
79
+ return null;
80
+ }
81
+ return result.data;
82
+ }
83
+ catch {
84
+ runtime.warn('Failed to parse daemon.json');
85
+ return null;
86
+ }
87
+ };
88
+ /**
89
+ * Check if a process is running by PID.
90
+ *
91
+ * @param runtime - runtime with command execution capability
92
+ * @param pid - process ID to check
93
+ * @returns `true` if the process is running
94
+ */
95
+ export const is_daemon_running = async (runtime, pid) => {
96
+ const result = await runtime.run_command('kill', ['-0', String(pid)]);
97
+ return result.success;
98
+ };
99
+ /**
100
+ * Stop a running daemon by sending SIGTERM and cleaning up the PID file.
101
+ *
102
+ * Returns a result object instead of logging directly, separating
103
+ * lifecycle from presentation.
104
+ *
105
+ * @param runtime - runtime with command, file, and env capabilities
106
+ * @param name - application name
107
+ * @returns result describing the outcome
108
+ */
109
+ export const stop_daemon = async (runtime, name) => {
110
+ const daemon_path = get_daemon_info_path(runtime, name);
111
+ if (!daemon_path) {
112
+ return { stopped: false, message: '$HOME not set' };
113
+ }
114
+ // check if daemon.json exists
115
+ const stat = await runtime.stat(daemon_path);
116
+ if (!stat) {
117
+ return { stopped: false, message: 'No daemon running (no daemon.json found)' };
118
+ }
119
+ // read and validate daemon info
120
+ const info = await read_daemon_info(runtime, name);
121
+ if (!info) {
122
+ // corrupt file, clean up
123
+ try {
124
+ await runtime.remove(daemon_path);
125
+ }
126
+ catch {
127
+ // already removed
128
+ }
129
+ return { stopped: false, message: 'Corrupt daemon.json, removed' };
130
+ }
131
+ // send SIGTERM
132
+ const result = await runtime.run_command('kill', [String(info.pid)]);
133
+ const stopped = result.success;
134
+ // clean up daemon.json
135
+ try {
136
+ await runtime.remove(daemon_path);
137
+ }
138
+ catch {
139
+ // already removed by daemon's own shutdown handler
140
+ }
141
+ if (stopped) {
142
+ return { stopped: true, pid: info.pid, message: `Stopped daemon (pid ${info.pid})` };
143
+ }
144
+ return {
145
+ stopped: false,
146
+ pid: info.pid,
147
+ message: `Process ${info.pid} not running, cleaned up stale daemon.json`,
148
+ };
149
+ };
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Schema-driven CLI help generator.
3
+ *
4
+ * Generalized from the identical pattern in tx and zzz. Consumers configure
5
+ * once with `create_help` and get back `generate_main_help`,
6
+ * `generate_command_help`, and `get_help_text`.
7
+ *
8
+ * @module
9
+ */
10
+ import type { z } from 'zod';
11
+ import { type ZodSchemaProperty } from '@fuzdev/fuz_util/zod.js';
12
+ /**
13
+ * Command metadata for help generation.
14
+ */
15
+ export interface CommandMeta<TCategory extends string = string> {
16
+ schema?: z.ZodType;
17
+ summary: string;
18
+ usage: string;
19
+ category: TCategory;
20
+ }
21
+ /**
22
+ * Category configuration for help display.
23
+ */
24
+ export interface HelpCategory<TCategory extends string = string> {
25
+ key: TCategory;
26
+ title: string;
27
+ }
28
+ /**
29
+ * Configuration for `create_help`.
30
+ */
31
+ export interface HelpOptions<TCategory extends string = string> {
32
+ /** Application name (e.g., `"tx"`, `"zzz"`). */
33
+ name: string;
34
+ /** Application version string. */
35
+ version: string;
36
+ /** Short description for the main help header. */
37
+ description: string;
38
+ /** Command registry keyed by command path (e.g., `"apply"`, `"daemon start"`). */
39
+ commands: Record<string, CommandMeta<TCategory>>;
40
+ /** Category display order for main help. */
41
+ categories: Array<HelpCategory<TCategory>>;
42
+ /** Example commands for main help. */
43
+ examples: Array<string>;
44
+ /** Zod schema for global arguments (shown in all help output). */
45
+ global_args_schema: z.ZodType;
46
+ /** Whether to use ANSI colors in output. Defaults to `true`. */
47
+ use_colors?: boolean;
48
+ }
49
+ /**
50
+ * Help generator returned by `create_help`.
51
+ */
52
+ export interface HelpGenerator {
53
+ /** Generate main help text with all commands grouped by category. */
54
+ generate_main_help: () => string;
55
+ /** Generate help text for a specific command. */
56
+ generate_command_help: (command: string, meta: CommandMeta) => string;
57
+ /** Get help text for a command or main help. */
58
+ get_help_text: (command?: string, subcommand?: string) => string;
59
+ }
60
+ /**
61
+ * Get maximum length from array.
62
+ *
63
+ * @param items - array of items
64
+ * @param to_string - function to convert item to string for length measurement
65
+ * @returns maximum string length
66
+ */
67
+ export declare const to_max_length: <T>(items: Array<T>, to_string: (item: T) => string) => number;
68
+ /**
69
+ * Format argument name with short aliases for display.
70
+ *
71
+ * Only single-char aliases are shown (e.g., `-h, --help`).
72
+ * Flags use snake_case (e.g., `--env_file`, `--detect_only`).
73
+ *
74
+ * @param prop - schema property
75
+ * @returns formatted name string
76
+ */
77
+ export declare const format_arg_name: (prop: ZodSchemaProperty) => string;
78
+ /**
79
+ * Create a help generator configured for an application.
80
+ *
81
+ * @param options - help configuration
82
+ * @returns help generator with `generate_main_help`, `generate_command_help`, and `get_help_text`
83
+ */
84
+ export declare const create_help: <TCategory extends string>(options: HelpOptions<TCategory>) => HelpGenerator;
85
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/help.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAC3B,OAAO,EAGN,KAAK,iBAAiB,EACtB,MAAM,yBAAyB,CAAC;AAIjC;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC7D,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC9D,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM;IAC7D,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,4CAA4C;IAC5C,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3C,sCAAsC;IACtC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,kEAAkE;IAClE,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC;IAC9B,gEAAgE;IAChE,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,qEAAqE;IACrE,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,iDAAiD;IACjD,qBAAqB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,KAAK,MAAM,CAAC;IACtE,gDAAgD;IAChD,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACjE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,KAAG,MACb,CAAC;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,iBAAiB,KAAG,MAWzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,SAAS,MAAM,EACnD,SAAS,WAAW,CAAC,SAAS,CAAC,KAC7B,aAoHF,CAAC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Schema-driven CLI help generator.
3
+ *
4
+ * Generalized from the identical pattern in tx and zzz. Consumers configure
5
+ * once with `create_help` and get back `generate_main_help`,
6
+ * `generate_command_help`, and `get_help_text`.
7
+ *
8
+ * @module
9
+ */
10
+ import { zod_to_schema_properties, zod_format_value, } from '@fuzdev/fuz_util/zod.js';
11
+ import { colors } from './util.js';
12
+ /**
13
+ * Get maximum length from array.
14
+ *
15
+ * @param items - array of items
16
+ * @param to_string - function to convert item to string for length measurement
17
+ * @returns maximum string length
18
+ */
19
+ export const to_max_length = (items, to_string) => items.reduce((max, item) => Math.max(to_string(item).length, max), 0);
20
+ /**
21
+ * Format argument name with short aliases for display.
22
+ *
23
+ * Only single-char aliases are shown (e.g., `-h, --help`).
24
+ * Flags use snake_case (e.g., `--env_file`, `--detect_only`).
25
+ *
26
+ * @param prop - schema property
27
+ * @returns formatted name string
28
+ */
29
+ export const format_arg_name = (prop) => {
30
+ if (prop.name === '_') {
31
+ return '[...args]';
32
+ }
33
+ let name = `--${prop.name}`;
34
+ const short_aliases = prop.aliases.filter((a) => a.length === 1);
35
+ if (short_aliases.length > 0) {
36
+ const alias_str = short_aliases.map((a) => `-${a}`).join(', ');
37
+ name = `${alias_str}, ${name}`;
38
+ }
39
+ return name;
40
+ };
41
+ /**
42
+ * Create a help generator configured for an application.
43
+ *
44
+ * @param options - help configuration
45
+ * @returns help generator with `generate_main_help`, `generate_command_help`, and `get_help_text`
46
+ */
47
+ export const create_help = (options) => {
48
+ const use_colors = options.use_colors !== false;
49
+ const c = use_colors
50
+ ? colors
51
+ : { green: '', yellow: '', blue: '', red: '', cyan: '', dim: '', bold: '', reset: '' };
52
+ const generate_global_options = () => {
53
+ const properties = zod_to_schema_properties(options.global_args_schema);
54
+ const max_width = to_max_length(properties, (p) => ` ${format_arg_name(p)}`);
55
+ return properties.map((prop) => {
56
+ const name = format_arg_name(prop);
57
+ const desc = prop.description || '';
58
+ return ` ${name}`.padEnd(max_width + 2) + desc;
59
+ });
60
+ };
61
+ const generate_command_help = (command, meta) => {
62
+ const lines = [];
63
+ lines.push(`${c.cyan}${options.name} ${command}${c.reset}: ${meta.summary}`);
64
+ lines.push('');
65
+ lines.push(`${c.yellow}Usage${c.reset}: ${meta.usage}`);
66
+ lines.push('');
67
+ if (meta.schema) {
68
+ const properties = zod_to_schema_properties(meta.schema);
69
+ const flag_props = properties.filter((p) => p.name !== '_');
70
+ const positional_prop = properties.find((p) => p.name === '_');
71
+ if (positional_prop?.description) {
72
+ lines.push(`Positional: ${positional_prop.description}`);
73
+ lines.push('');
74
+ }
75
+ if (flag_props.length > 0) {
76
+ lines.push(`${c.yellow}Options${c.reset}:`);
77
+ const longest_name = to_max_length(flag_props, format_arg_name);
78
+ const longest_type = to_max_length(flag_props, (p) => p.type);
79
+ for (const prop of flag_props) {
80
+ const name = format_arg_name(prop).padEnd(longest_name);
81
+ const type = prop.type.padEnd(longest_type);
82
+ const def = zod_format_value(prop.default);
83
+ const desc = prop.description || '';
84
+ const default_str = def ? ` (default: ${def})` : '';
85
+ lines.push(` ${name} ${type} ${desc}${default_str}`);
86
+ }
87
+ }
88
+ }
89
+ // global options
90
+ lines.push('');
91
+ lines.push(`${c.yellow}Global Options${c.reset}:`);
92
+ for (const opt_line of generate_global_options()) {
93
+ lines.push(opt_line);
94
+ }
95
+ return lines.join('\n');
96
+ };
97
+ const generate_main_help = () => {
98
+ const lines = [];
99
+ lines.push(`${c.cyan}${options.name}${c.reset} v${options.version} - ${options.description}`);
100
+ lines.push('');
101
+ // categories with commands
102
+ for (const { key, title } of options.categories) {
103
+ const cat_commands = Object.entries(options.commands).filter(([_, meta]) => meta.category === key);
104
+ if (cat_commands.length === 0)
105
+ continue;
106
+ lines.push(`${c.yellow}${title}${c.reset}:`);
107
+ cat_commands.sort(([a], [b]) => a.localeCompare(b));
108
+ const max_usage_width = to_max_length(cat_commands, ([_, meta]) => ` ${meta.usage}`);
109
+ for (const [_, meta] of cat_commands) {
110
+ const padded = ` ${meta.usage}`.padEnd(Math.max(max_usage_width + 2, 40));
111
+ lines.push(`${padded}${meta.summary}`);
112
+ }
113
+ lines.push('');
114
+ }
115
+ // global options
116
+ lines.push(`${c.yellow}OPTIONS${c.reset}:`);
117
+ for (const opt_line of generate_global_options()) {
118
+ lines.push(opt_line);
119
+ }
120
+ lines.push('');
121
+ // examples
122
+ if (options.examples.length > 0) {
123
+ lines.push(`${c.yellow}EXAMPLES${c.reset}:`);
124
+ for (const example of options.examples) {
125
+ lines.push(` ${example}`);
126
+ }
127
+ }
128
+ return lines.join('\n');
129
+ };
130
+ const get_help_text = (command, subcommand) => {
131
+ const cmd_key = subcommand ? `${command} ${subcommand}` : command;
132
+ if (cmd_key && options.commands[cmd_key]) {
133
+ return generate_command_help(cmd_key, options.commands[cmd_key]);
134
+ }
135
+ return generate_main_help();
136
+ };
137
+ return { generate_main_help, generate_command_help, get_help_text };
138
+ };
@@ -0,0 +1,46 @@
1
+ /**
2
+ * CLI logger wrapping `Logger` with semantic output methods.
3
+ *
4
+ * Why wrapper, not subclass: Logger has variadic `...args` methods, CLI adds
5
+ * single-string semantic methods. Mixing calling conventions on one class is confusing.
6
+ * Composition keeps both APIs clean.
7
+ *
8
+ * Why Logger prefixes for error/warn: Unifies error/warn visual style across CLI
9
+ * and backend. CLI-specific methods (success/skip/step/header) add their own semantic
10
+ * prefixes via `logger.info()`.
11
+ *
12
+ * @module
13
+ */
14
+ import { Logger } from '@fuzdev/fuz_util/log.js';
15
+ export interface CliLogger {
16
+ /** Logs an error via Logger (gets Logger's error prefix). */
17
+ error: (...args: Array<unknown>) => void;
18
+ /** Logs a warning via Logger (gets Logger's warn prefix). */
19
+ warn: (...args: Array<unknown>) => void;
20
+ /** Logs info via Logger (gets Logger's label prefix). */
21
+ info: (...args: Array<unknown>) => void;
22
+ /** Logs debug via Logger (gets Logger's debug prefix). */
23
+ debug: (...args: Array<unknown>) => void;
24
+ /** Logs raw output via Logger (no prefix, no level filtering). */
25
+ raw: (...args: Array<unknown>) => void;
26
+ /** Logs a success message with `[done]` prefix at info level. */
27
+ success: (msg: string) => void;
28
+ /** Logs a skip message with `[skip]` prefix at info level. */
29
+ skip: (msg: string) => void;
30
+ /** Logs a step message with `==>` prefix at info level. */
31
+ step: (msg: string) => void;
32
+ /** Logs a header with `=== title ===` decoration at info level. */
33
+ header: (title: string) => void;
34
+ /** Logs a dimmed message at info level. */
35
+ dim: (msg: string) => void;
36
+ /** The underlying Logger instance. */
37
+ logger: Logger;
38
+ }
39
+ /**
40
+ * Creates a CLI logger wrapping a Logger with semantic output methods.
41
+ *
42
+ * @param logger - the Logger instance to wrap
43
+ * @returns a `CliLogger` with CLI semantic methods mapped to Logger levels
44
+ */
45
+ export declare const create_cli_logger: (logger: Logger) => CliLogger;
46
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAC;AAK/C,MAAM,WAAW,SAAS;IACzB,6DAA6D;IAC7D,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzC,6DAA6D;IAC7D,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACxC,yDAAyD;IACzD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACzC,kEAAkE;IAClE,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEvC,iEAAiE;IACjE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,8DAA8D;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,2DAA2D;IAC3D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,mEAAmE;IACnE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,2CAA2C;IAG3C,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAE3B,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,SA6BjD,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * CLI logger wrapping `Logger` with semantic output methods.
3
+ *
4
+ * Why wrapper, not subclass: Logger has variadic `...args` methods, CLI adds
5
+ * single-string semantic methods. Mixing calling conventions on one class is confusing.
6
+ * Composition keeps both APIs clean.
7
+ *
8
+ * Why Logger prefixes for error/warn: Unifies error/warn visual style across CLI
9
+ * and backend. CLI-specific methods (success/skip/step/header) add their own semantic
10
+ * prefixes via `logger.info()`.
11
+ *
12
+ * @module
13
+ */
14
+ import { Logger } from '@fuzdev/fuz_util/log.js';
15
+ /**
16
+ * Creates a CLI logger wrapping a Logger with semantic output methods.
17
+ *
18
+ * @param logger - the Logger instance to wrap
19
+ * @returns a `CliLogger` with CLI semantic methods mapped to Logger levels
20
+ */
21
+ export const create_cli_logger = (logger) => ({
22
+ error: (...args) => logger.error(...args),
23
+ warn: (...args) => logger.warn(...args),
24
+ info: (...args) => logger.info(...args),
25
+ debug: (...args) => logger.debug(...args),
26
+ raw: (...args) => logger.raw(...args),
27
+ success: (msg) => {
28
+ const c = logger.colors;
29
+ logger.info(c ? `\x1b[32m[done]\x1b[0m ${msg}` : `[done] ${msg}`);
30
+ },
31
+ skip: (msg) => {
32
+ const c = logger.colors;
33
+ logger.info(c ? `\x1b[33m[skip]\x1b[0m ${msg}` : `[skip] ${msg}`);
34
+ },
35
+ step: (msg) => {
36
+ const c = logger.colors;
37
+ logger.info(c ? `\n\x1b[36m==>\x1b[0m ${msg}` : `\n==> ${msg}`);
38
+ },
39
+ header: (title) => {
40
+ const c = logger.colors;
41
+ logger.info(c ? `\n\x1b[33m=== ${title} ===\x1b[0m\n` : `\n=== ${title} ===\n`);
42
+ },
43
+ dim: (msg) => {
44
+ const c = logger.colors;
45
+ logger.info(c ? `\x1b[2m${msg}\x1b[0m` : msg);
46
+ },
47
+ logger,
48
+ });
@@ -0,0 +1,36 @@
1
+ /**
2
+ * CLI utilities for colors, confirmation, and command delegation.
3
+ *
4
+ * For structured CLI logging, see `create_cli_logger` in `logger.ts`.
5
+ *
6
+ * @module
7
+ */
8
+ import type { CommandDeps, CommandResult, TerminalDeps } from '../runtime/deps.js';
9
+ export declare const colors: {
10
+ readonly green: "" | "\u001B[32m";
11
+ readonly yellow: "" | "\u001B[33m";
12
+ readonly blue: "" | "\u001B[34m";
13
+ readonly red: "" | "\u001B[31m";
14
+ readonly cyan: "" | "\u001B[36m";
15
+ readonly dim: "" | "\u001B[2m";
16
+ readonly bold: "" | "\u001B[1m";
17
+ readonly reset: "" | "\u001B[0m";
18
+ };
19
+ /**
20
+ * Run a local command and return the result.
21
+ *
22
+ * @param runtime - runtime with `run_command` capability
23
+ * @param command - command to run
24
+ * @param args - command arguments
25
+ * @returns command result
26
+ */
27
+ export declare const run_local: (runtime: CommandDeps, command: string, args: Array<string>) => Promise<CommandResult>;
28
+ /**
29
+ * Prompt for yes/no confirmation.
30
+ *
31
+ * @param runtime - runtime with `stdout_write` and `stdin_read` capabilities
32
+ * @param message - message to display
33
+ * @returns `true` if user confirms, `false` otherwise
34
+ */
35
+ export declare const confirm: (runtime: TerminalDeps, message: string) => Promise<boolean>;
36
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/cli/util.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAQjF,eAAO,MAAM,MAAM;;;;;;;;;CAST,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GACrB,SAAS,WAAW,EACpB,SAAS,MAAM,EACf,MAAM,KAAK,CAAC,MAAM,CAAC,KACjB,OAAO,CAAC,aAAa,CAEvB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,GAAU,SAAS,YAAY,EAAE,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CAYrF,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * CLI utilities for colors, confirmation, and command delegation.
3
+ *
4
+ * For structured CLI logging, see `create_cli_logger` in `logger.ts`.
5
+ *
6
+ * @module
7
+ */
8
+ // TODO: `colors` duplicates the NO_COLOR detection Logger does internally.
9
+ // Long-term, converge with Logger's color system or expose a shared color helper.
10
+ const no_color = typeof process !== 'undefined' &&
11
+ (process.env.NO_COLOR !== undefined || process.env.CLAUDECODE !== undefined);
12
+ export const colors = {
13
+ green: no_color ? '' : '\x1b[32m',
14
+ yellow: no_color ? '' : '\x1b[33m',
15
+ blue: no_color ? '' : '\x1b[34m',
16
+ red: no_color ? '' : '\x1b[31m',
17
+ cyan: no_color ? '' : '\x1b[36m',
18
+ dim: no_color ? '' : '\x1b[2m',
19
+ bold: no_color ? '' : '\x1b[1m',
20
+ reset: no_color ? '' : '\x1b[0m',
21
+ };
22
+ /**
23
+ * Run a local command and return the result.
24
+ *
25
+ * @param runtime - runtime with `run_command` capability
26
+ * @param command - command to run
27
+ * @param args - command arguments
28
+ * @returns command result
29
+ */
30
+ export const run_local = async (runtime, command, args) => {
31
+ return runtime.run_command(command, args);
32
+ };
33
+ /**
34
+ * Prompt for yes/no confirmation.
35
+ *
36
+ * @param runtime - runtime with `stdout_write` and `stdin_read` capabilities
37
+ * @param message - message to display
38
+ * @returns `true` if user confirms, `false` otherwise
39
+ */
40
+ export const confirm = async (runtime, message) => {
41
+ const encoder = new TextEncoder();
42
+ const decoder = new TextDecoder();
43
+ await runtime.stdout_write(encoder.encode(`${message} [y/N] `));
44
+ const buf = new Uint8Array(1024);
45
+ const n = await runtime.stdin_read(buf);
46
+ if (n === null)
47
+ return false;
48
+ const input = decoder.decode(buf.subarray(0, n)).trim().toLowerCase();
49
+ return input === 'y' || input === 'yes';
50
+ };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Shared cryptographic utilities.
3
+ *
4
+ * @module
5
+ */
6
+ /**
7
+ * Generate a cryptographically random base64url string.
8
+ *
9
+ * @param byte_length - number of random bytes (default 32 = 256 bits)
10
+ * @returns base64url-encoded string without padding
11
+ */
12
+ export declare const generate_random_base64url: (byte_length?: number) => string;
13
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/crypto.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,oBAAgB,KAAG,MAO5D,CAAC"}