@cardelli/ambit 0.4.4 → 0.4.5

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 (376) hide show
  1. package/README.md +4 -4
  2. package/esm/cli/commands/auth.js +5 -37
  3. package/esm/cli/commands/create/index.js +3 -3
  4. package/esm/cli/commands/deploy/index.js +2 -1
  5. package/esm/cli/commands/deploy/machine.d.ts.map +1 -1
  6. package/esm/cli/commands/destroy/app.js +1 -1
  7. package/esm/cli/commands/destroy/index.js +1 -1
  8. package/esm/cli/commands/destroy/network.d.ts.map +1 -1
  9. package/esm/cli/commands/destroy/network.js +13 -7
  10. package/esm/cli/commands/doctor.js +1 -1
  11. package/esm/cli/commands/list/apps.js +2 -2
  12. package/esm/cli/commands/list/index.js +1 -1
  13. package/esm/cli/commands/list/networks.js +2 -2
  14. package/esm/cli/commands/logs.js +1 -1
  15. package/esm/cli/commands/secrets.js +2 -2
  16. package/esm/cli/commands/share.js +2 -2
  17. package/esm/cli/commands/status/app.js +1 -1
  18. package/esm/cli/commands/status/index.js +1 -1
  19. package/esm/cli/commands/status/network.js +1 -1
  20. package/esm/cli/commands/status/networks.js +2 -2
  21. package/esm/cli/mod.js +1 -1
  22. package/esm/deno.js +1 -1
  23. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/_layout.d.ts +5 -1
  24. package/esm/deps/jsr.io/@cliffy/table/1.1.0/_layout.d.ts.map +1 -0
  25. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/_layout.js +101 -16
  26. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/_utils.d.ts +6 -9
  27. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/_utils.d.ts.map +1 -1
  28. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/_utils.js +9 -2
  29. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/border.d.ts.map +1 -1
  30. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/cell.d.ts.map +1 -1
  31. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/column.d.ts +35 -0
  32. package/esm/deps/jsr.io/@cliffy/table/1.1.0/column.d.ts.map +1 -0
  33. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/column.js +39 -0
  34. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/consume_words.d.ts.map +1 -1
  35. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/mod.d.ts.map +1 -1
  36. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/row.d.ts.map +1 -1
  37. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/table.d.ts +47 -0
  38. package/esm/deps/jsr.io/@cliffy/table/1.1.0/table.d.ts.map +1 -0
  39. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/table.js +55 -0
  40. package/esm/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.d.ts.map +1 -0
  41. package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/unicode_width.js +15 -9
  42. package/esm/deps/jsr.io/@std/cli/1.0.29/_data.d.ts.map +1 -0
  43. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/_run_length.d.ts.map +1 -1
  44. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/mod.d.ts.map +1 -1
  45. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/parse_args.d.ts.map +1 -1
  46. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/prompt_secret.d.ts.map +1 -1
  47. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/prompt_secret.js +1 -1
  48. package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/unicode_width.d.ts.map +1 -1
  49. package/esm/deps/jsr.io/@std/collections/{1.1.6 → 1.1.7}/deep_merge.d.ts.map +1 -1
  50. package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +1 -0
  51. package/esm/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.js +2 -2
  52. package/esm/deps/jsr.io/@std/internal/1.0.13/_os.d.ts.map +1 -0
  53. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.js +1 -1
  54. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts.map +1 -1
  55. package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.js +1 -1
  56. package/esm/deps/jsr.io/@std/path/1.1.4/basename.js +1 -1
  57. package/esm/deps/jsr.io/@std/path/1.1.4/constants.js +1 -1
  58. package/esm/deps/jsr.io/@std/path/1.1.4/dirname.js +1 -1
  59. package/esm/deps/jsr.io/@std/path/1.1.4/extname.js +1 -1
  60. package/esm/deps/jsr.io/@std/path/1.1.4/format.js +1 -1
  61. package/esm/deps/jsr.io/@std/path/1.1.4/from_file_url.js +1 -1
  62. package/esm/deps/jsr.io/@std/path/1.1.4/glob_to_regexp.js +1 -1
  63. package/esm/deps/jsr.io/@std/path/1.1.4/is_absolute.js +1 -1
  64. package/esm/deps/jsr.io/@std/path/1.1.4/join.js +1 -1
  65. package/esm/deps/jsr.io/@std/path/1.1.4/join_globs.js +1 -1
  66. package/esm/deps/jsr.io/@std/path/1.1.4/normalize.js +1 -1
  67. package/esm/deps/jsr.io/@std/path/1.1.4/normalize_glob.js +1 -1
  68. package/esm/deps/jsr.io/@std/path/1.1.4/parse.js +1 -1
  69. package/esm/deps/jsr.io/@std/path/1.1.4/relative.js +1 -1
  70. package/esm/deps/jsr.io/@std/path/1.1.4/resolve.js +1 -1
  71. package/esm/deps/jsr.io/@std/path/1.1.4/to_file_url.js +1 -1
  72. package/esm/deps/jsr.io/@std/path/1.1.4/to_namespaced_path.js +1 -1
  73. package/esm/deps/jsr.io/@std/toml/1.0.11/_parser.js +1 -1
  74. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/index.d.ts.map +1 -1
  75. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/checks.d.ts.map +1 -1
  76. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/coerce.d.ts.map +1 -1
  77. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/compat.d.ts.map +1 -1
  78. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/errors.d.ts.map +1 -1
  79. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/errors.js +2 -2
  80. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/external.d.ts +1 -0
  81. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/classic/external.d.ts.map +1 -0
  82. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/from-json-schema.d.ts.map +1 -1
  83. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/from-json-schema.js +31 -16
  84. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/iso.d.ts.map +1 -1
  85. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/parse.d.ts.map +1 -1
  86. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/schemas.d.ts +42 -14
  87. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/classic/schemas.d.ts.map +1 -0
  88. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/schemas.js +356 -118
  89. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/api.d.ts +26 -5
  90. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/core/api.d.ts.map +1 -0
  91. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/api.js +7 -2
  92. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/checks.d.ts +1 -1
  93. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/checks.d.ts.map +1 -1
  94. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/core.d.ts.map +1 -1
  95. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/core.js +4 -2
  96. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/doc.d.ts.map +1 -1
  97. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/errors.d.ts +1 -0
  98. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/core/errors.d.ts.map +1 -0
  99. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/errors.js +26 -23
  100. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/index.d.ts.map +1 -1
  101. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-generator.d.ts.map +1 -1
  102. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-processors.d.ts.map +1 -1
  103. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-processors.js +16 -20
  104. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema.d.ts.map +1 -1
  105. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/parse.d.ts.map +1 -1
  106. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/parse.js +7 -7
  107. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/regexes.d.ts +6 -0
  108. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/core/regexes.d.ts.map +1 -0
  109. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/regexes.js +7 -1
  110. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/registries.d.ts.map +1 -1
  111. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/schemas.d.ts +39 -1
  112. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/core/schemas.d.ts.map +1 -0
  113. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/schemas.js +210 -64
  114. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/standard-schema.d.ts.map +1 -1
  115. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/to-json-schema.d.ts.map +1 -1
  116. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/to-json-schema.js +12 -1
  117. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/util.d.ts +1 -0
  118. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/util.d.ts.map +1 -1
  119. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/util.js +55 -32
  120. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/versions.d.ts +1 -1
  121. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/versions.d.ts.map +1 -1
  122. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/versions.js +2 -2
  123. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ar.d.ts.map +1 -1
  124. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/az.d.ts.map +1 -1
  125. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/be.d.ts.map +1 -1
  126. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/bg.d.ts.map +1 -1
  127. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ca.d.ts.map +1 -1
  128. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/cs.d.ts.map +1 -1
  129. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/da.d.ts.map +1 -1
  130. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/de.d.ts.map +1 -1
  131. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/el.d.ts +5 -0
  132. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/el.d.ts.map +1 -0
  133. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/el.js +109 -0
  134. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/en.d.ts.map +1 -0
  135. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/en.js +4 -0
  136. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/eo.d.ts.map +1 -1
  137. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/es.d.ts.map +1 -1
  138. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fa.d.ts.map +1 -1
  139. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fi.d.ts.map +1 -1
  140. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fr-CA.d.ts.map +1 -1
  141. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/fr.d.ts.map +1 -0
  142. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fr.js +24 -7
  143. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/he.d.ts.map +1 -1
  144. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/hr.d.ts +5 -0
  145. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/hr.d.ts.map +1 -0
  146. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/hr.js +122 -0
  147. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hu.d.ts.map +1 -1
  148. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hy.d.ts.map +1 -1
  149. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/id.d.ts.map +1 -1
  150. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/index.d.ts +3 -0
  151. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/index.d.ts.map +1 -1
  152. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/index.js +3 -0
  153. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/is.d.ts.map +1 -1
  154. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/it.d.ts.map +1 -1
  155. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/it.js +1 -1
  156. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ja.d.ts.map +1 -1
  157. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ka.d.ts.map +1 -1
  158. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ka.js +8 -8
  159. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/kh.d.ts.map +1 -1
  160. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/km.d.ts.map +1 -1
  161. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ko.d.ts.map +1 -1
  162. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/lt.d.ts.map +1 -1
  163. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/mk.d.ts.map +1 -1
  164. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ms.d.ts.map +1 -1
  165. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/nl.d.ts.map +1 -1
  166. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/no.d.ts.map +1 -1
  167. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ota.d.ts.map +1 -1
  168. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pl.d.ts.map +1 -1
  169. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ps.d.ts.map +1 -1
  170. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pt.d.ts.map +1 -1
  171. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/ro.d.ts +5 -0
  172. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/ro.d.ts.map +1 -0
  173. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/ro.js +119 -0
  174. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ru.d.ts.map +1 -1
  175. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sl.d.ts.map +1 -1
  176. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sv.d.ts.map +1 -1
  177. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ta.d.ts.map +1 -1
  178. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/th.d.ts.map +1 -1
  179. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/tr.d.ts.map +1 -1
  180. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ua.d.ts.map +1 -1
  181. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/uk.d.ts.map +1 -1
  182. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ur.d.ts.map +1 -1
  183. package/esm/deps/jsr.io/@zod/zod/4.4.3/src/v4/locales/uz.d.ts.map +1 -0
  184. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/uz.js +1 -0
  185. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/vi.d.ts.map +1 -1
  186. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/yo.d.ts.map +1 -1
  187. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-CN.d.ts.map +1 -1
  188. package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-TW.d.ts.map +1 -1
  189. package/esm/providers/fly.d.ts +1 -0
  190. package/esm/providers/fly.d.ts.map +1 -1
  191. package/esm/providers/fly.js +55 -27
  192. package/esm/schemas/fly.d.ts +1 -1
  193. package/esm/schemas/fly.js +1 -1
  194. package/esm/schemas/tailscale.d.ts +1 -1
  195. package/esm/schemas/tailscale.js +1 -1
  196. package/esm/util/credentials.d.ts +0 -3
  197. package/esm/util/credentials.d.ts.map +1 -1
  198. package/esm/util/credentials.js +5 -28
  199. package/esm/util/fly-token.d.ts +7 -0
  200. package/esm/util/fly-token.d.ts.map +1 -0
  201. package/esm/util/fly-token.js +50 -0
  202. package/esm/util/fly-transforms.d.ts +1 -1
  203. package/esm/util/session.d.ts.map +1 -1
  204. package/esm/util/session.js +3 -2
  205. package/esm/util/tailscale-local.d.ts +8 -0
  206. package/esm/util/tailscale-local.d.ts.map +1 -1
  207. package/esm/util/tailscale-local.js +37 -0
  208. package/package.json +1 -1
  209. package/esm/deps/jsr.io/@cliffy/table/1.0.0/_layout.d.ts.map +0 -1
  210. package/esm/deps/jsr.io/@cliffy/table/1.0.0/column.d.ts.map +0 -1
  211. package/esm/deps/jsr.io/@cliffy/table/1.0.0/table.d.ts.map +0 -1
  212. package/esm/deps/jsr.io/@cliffy/table/1.0.0/unicode_width.d.ts.map +0 -1
  213. package/esm/deps/jsr.io/@std/cli/1.0.28/_data.d.ts.map +0 -1
  214. package/esm/deps/jsr.io/@std/fmt/1.0.9/colors.d.ts.map +0 -1
  215. package/esm/deps/jsr.io/@std/internal/1.0.12/_os.d.ts.map +0 -1
  216. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/classic/external.d.ts.map +0 -1
  217. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/classic/schemas.d.ts.map +0 -1
  218. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/core/api.d.ts.map +0 -1
  219. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/core/errors.d.ts.map +0 -1
  220. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/core/regexes.d.ts.map +0 -1
  221. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/core/schemas.d.ts.map +0 -1
  222. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/locales/en.d.ts.map +0 -1
  223. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/locales/fr.d.ts.map +0 -1
  224. package/esm/deps/jsr.io/@zod/zod/4.3.6/src/v4/locales/uz.d.ts.map +0 -1
  225. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/border.d.ts +0 -0
  226. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/border.js +0 -0
  227. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/cell.d.ts +0 -0
  228. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/cell.js +0 -0
  229. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/consume_words.d.ts +0 -0
  230. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/consume_words.js +0 -0
  231. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/mod.d.ts +0 -0
  232. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/mod.js +0 -0
  233. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/row.d.ts +0 -0
  234. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/row.js +0 -0
  235. /package/esm/deps/jsr.io/@cliffy/table/{1.0.0 → 1.1.0}/unicode_width.d.ts +0 -0
  236. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/_data.d.ts +0 -0
  237. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/_data.js +0 -0
  238. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/_run_length.d.ts +0 -0
  239. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/_run_length.js +0 -0
  240. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/mod.d.ts +0 -0
  241. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/mod.js +0 -0
  242. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/parse_args.d.ts +0 -0
  243. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/parse_args.js +0 -0
  244. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/prompt_secret.d.ts +0 -0
  245. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/unicode_width.d.ts +0 -0
  246. /package/esm/deps/jsr.io/@std/cli/{1.0.28 → 1.0.29}/unicode_width.js +0 -0
  247. /package/esm/deps/jsr.io/@std/collections/{1.1.6 → 1.1.7}/deep_merge.d.ts +0 -0
  248. /package/esm/deps/jsr.io/@std/collections/{1.1.6 → 1.1.7}/deep_merge.js +0 -0
  249. /package/esm/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.d.ts +0 -0
  250. /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/_os.d.ts +0 -0
  251. /package/esm/deps/jsr.io/@std/internal/{1.0.12 → 1.0.13}/os.d.ts +0 -0
  252. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/index.d.ts +0 -0
  253. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/index.js +0 -0
  254. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/checks.d.ts +0 -0
  255. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/checks.js +0 -0
  256. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/coerce.d.ts +0 -0
  257. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/coerce.js +0 -0
  258. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/compat.d.ts +0 -0
  259. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/compat.js +0 -0
  260. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/errors.d.ts +0 -0
  261. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/external.js +0 -0
  262. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/from-json-schema.d.ts +0 -0
  263. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/iso.d.ts +0 -0
  264. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/iso.js +0 -0
  265. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/parse.d.ts +0 -0
  266. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/classic/parse.js +0 -0
  267. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/checks.js +0 -0
  268. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/core.d.ts +0 -0
  269. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/doc.d.ts +0 -0
  270. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/doc.js +0 -0
  271. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/index.d.ts +0 -0
  272. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/index.js +0 -0
  273. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-generator.d.ts +0 -0
  274. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-generator.js +0 -0
  275. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema-processors.d.ts +0 -0
  276. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema.d.ts +0 -0
  277. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/json-schema.js +0 -0
  278. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/parse.d.ts +0 -0
  279. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/registries.d.ts +0 -0
  280. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/registries.js +0 -0
  281. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/standard-schema.d.ts +0 -0
  282. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/standard-schema.js +0 -0
  283. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/core/to-json-schema.d.ts +0 -0
  284. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ar.d.ts +0 -0
  285. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ar.js +0 -0
  286. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/az.d.ts +0 -0
  287. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/az.js +0 -0
  288. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/be.d.ts +0 -0
  289. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/be.js +0 -0
  290. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/bg.d.ts +0 -0
  291. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/bg.js +0 -0
  292. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ca.d.ts +0 -0
  293. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ca.js +0 -0
  294. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/cs.d.ts +0 -0
  295. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/cs.js +0 -0
  296. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/da.d.ts +0 -0
  297. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/da.js +0 -0
  298. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/de.d.ts +0 -0
  299. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/de.js +0 -0
  300. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/en.d.ts +0 -0
  301. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/eo.d.ts +0 -0
  302. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/eo.js +0 -0
  303. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/es.d.ts +0 -0
  304. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/es.js +0 -0
  305. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fa.d.ts +0 -0
  306. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fa.js +0 -0
  307. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fi.d.ts +0 -0
  308. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fi.js +0 -0
  309. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fr-CA.d.ts +0 -0
  310. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fr-CA.js +0 -0
  311. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/fr.d.ts +0 -0
  312. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/he.d.ts +0 -0
  313. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/he.js +0 -0
  314. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hu.d.ts +0 -0
  315. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hu.js +0 -0
  316. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hy.d.ts +0 -0
  317. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/hy.js +0 -0
  318. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/id.d.ts +0 -0
  319. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/id.js +0 -0
  320. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/is.d.ts +0 -0
  321. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/is.js +0 -0
  322. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/it.d.ts +0 -0
  323. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ja.d.ts +0 -0
  324. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ja.js +0 -0
  325. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ka.d.ts +0 -0
  326. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/kh.d.ts +0 -0
  327. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/kh.js +0 -0
  328. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/km.d.ts +0 -0
  329. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/km.js +0 -0
  330. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ko.d.ts +0 -0
  331. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ko.js +0 -0
  332. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/lt.d.ts +0 -0
  333. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/lt.js +0 -0
  334. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/mk.d.ts +0 -0
  335. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/mk.js +0 -0
  336. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ms.d.ts +0 -0
  337. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ms.js +0 -0
  338. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/nl.d.ts +0 -0
  339. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/nl.js +0 -0
  340. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/no.d.ts +0 -0
  341. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/no.js +0 -0
  342. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ota.d.ts +0 -0
  343. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ota.js +0 -0
  344. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pl.d.ts +0 -0
  345. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pl.js +0 -0
  346. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ps.d.ts +0 -0
  347. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ps.js +0 -0
  348. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pt.d.ts +0 -0
  349. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/pt.js +0 -0
  350. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ru.d.ts +0 -0
  351. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ru.js +0 -0
  352. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sl.d.ts +0 -0
  353. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sl.js +0 -0
  354. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sv.d.ts +0 -0
  355. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/sv.js +0 -0
  356. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ta.d.ts +0 -0
  357. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ta.js +0 -0
  358. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/th.d.ts +0 -0
  359. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/th.js +0 -0
  360. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/tr.d.ts +0 -0
  361. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/tr.js +0 -0
  362. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ua.d.ts +0 -0
  363. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ua.js +0 -0
  364. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/uk.d.ts +0 -0
  365. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/uk.js +0 -0
  366. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ur.d.ts +0 -0
  367. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/ur.js +0 -0
  368. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/uz.d.ts +0 -0
  369. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/vi.d.ts +0 -0
  370. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/vi.js +0 -0
  371. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/yo.d.ts +0 -0
  372. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/yo.js +0 -0
  373. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-CN.d.ts +0 -0
  374. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-CN.js +0 -0
  375. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-TW.d.ts +0 -0
  376. /package/esm/deps/jsr.io/@zod/zod/{4.3.6 → 4.4.3}/src/v4/locales/zh-TW.js +0 -0
package/README.md CHANGED
@@ -294,12 +294,12 @@ npx @cardelli/ambit logs my-app.lab --no-tail | less -R # scroll buffered logs
294
294
 
295
295
  ### `ambit destroy network <name>`
296
296
 
297
- Tears down a network: destroys the router, cleans up DNS, removes the Tailscale device, and automatically removes the router's tag from your Tailscale ACL policy (tagOwners and autoApprovers). If there are workload apps still on the network, ambit warns you before proceeding.
297
+ Tears down a network: destroys the router, cleans up DNS, removes the Tailscale device, and automatically removes the router's tag from your Tailscale ACL policy (`tagOwners`, `autoApprovers`, and tag-referencing access rules). If there are workload apps still on the network, ambit warns you before proceeding.
298
298
 
299
299
  | Flag | Description |
300
300
  | ----------------- | ------------------------------ |
301
301
  | `--org <org>` | Fly.io organization slug |
302
- | `--manual` | Skip automatic Tailscale ACL cleanup (tagOwners + autoApprovers) |
302
+ | `--manual` | Skip automatic Tailscale ACL cleanup |
303
303
  | `-y`, `--yes` | Skip confirmation prompts |
304
304
  | `--json` | Machine-readable JSON output |
305
305
 
@@ -340,7 +340,7 @@ Checks app health: verifies the app is deployed and running, then checks the rou
340
340
 
341
341
  ## Access Control
342
342
 
343
- By default, `ambit create` automatically adds the router's tag to your Tailscale ACL policy (`tagOwners` and `autoApprovers`). `ambit destroy network` automatically removes them. Pass `--manual` to either command to skip this and manage the policy yourself — useful if your API token lacks ACL write permission (`policy_file` scope).
343
+ By default, `ambit create` automatically adds the router's tag to your Tailscale ACL policy (`tagOwners` and `autoApprovers`). `ambit destroy network` automatically removes those entries and any access rules that reference the router tag. Pass `--manual` to either command to skip this and manage the policy yourself — useful if your API token lacks ACL write permission (`policy_file` scope).
344
344
 
345
345
  If you want to lock down which users can reach which networks, two rules do the job — one for DNS queries and one for data traffic:
346
346
 
@@ -357,7 +357,7 @@ If you want to lock down which users can reach which networks, two rules do the
357
357
  }
358
358
  ```
359
359
 
360
- These `acls` entries are never touched automatically ambit only manages `tagOwners` and `autoApprovers`.
360
+ On destroy, Ambit removes access-rule references to the router tag, such as `tag:ambit-infra:53`, before removing the tag owner. Subnet-only access rules do not reference the tag and may still need manual cleanup.
361
361
 
362
362
  ## Multiple Networks
363
363
 
@@ -2,7 +2,7 @@
2
2
  // Auth Command - Manage Fly.io and Tailscale Authentication
3
3
  // =============================================================================
4
4
  import * as dntShim from "../../_dnt.shims.js";
5
- import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
+ import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.29/mod.js";
6
6
  import { bold, confirm, readSecret } from "../../lib/cli.js";
7
7
  import { checkArgs } from "../../lib/args.js";
8
8
  import { createOutput } from "../../lib/output.js";
@@ -12,7 +12,6 @@ import { createTailscaleProvider } from "../../providers/tailscale.js";
12
12
  import { getCredentialStore } from "../../util/credentials.js";
13
13
  import { TAILSCALE_API_KEY_PREFIX } from "../../util/constants.js";
14
14
  import { FlyAuthSchema } from "../../schemas/fly.js";
15
- import { fileExists } from "../../lib/cli.js";
16
15
  // =============================================================================
17
16
  // Helpers
18
17
  // =============================================================================
@@ -26,15 +25,6 @@ const tryFlyWhoami = async (token) => {
26
25
  const parsed = FlyAuthSchema.safeParse(auth.value);
27
26
  return parsed.success ? parsed.data.email : null;
28
27
  };
29
- const readFlyConfigToken = async () => {
30
- const home = dntShim.Deno.env.get("HOME") || dntShim.Deno.env.get("USERPROFILE") || "";
31
- const configPath = `${home}/.fly/config.yml`;
32
- if (!(await fileExists(configPath)))
33
- return null;
34
- const content = await dntShim.Deno.readTextFile(configPath);
35
- const match = content.match(/access_token:\s*(.+)/);
36
- return match?.[1]?.trim() ?? null;
37
- };
38
28
  // =============================================================================
39
29
  // Auth Login
40
30
  // =============================================================================
@@ -59,8 +49,7 @@ ${bold("OPTIONS")}
59
49
 
60
50
  ${bold("DESCRIPTION")}
61
51
  Authenticates with both Fly.io and Tailscale. Only prompts for
62
- credentials that are missing or invalid — existing valid tokens
63
- are preserved.
52
+ credentials that are missing or invalid.
64
53
 
65
54
  ${bold("EXAMPLES")}
66
55
  ambit auth login
@@ -80,21 +69,11 @@ ${bold("EXAMPLES")}
80
69
  if (!email) {
81
70
  return out.die("Invalid Fly.io API Token");
82
71
  }
83
- await credentials.setFlyToken(args["fly-api-key"]);
84
72
  out.ok(`Authenticated as ${email}`);
85
73
  flyEmail = email;
86
74
  }
87
75
  else {
88
- // Adopt from ~/.fly/config.yml if it has a different token than the store
89
- const storedToken = await credentials.getFlyToken();
90
- const configToken = await readFlyConfigToken();
91
- const bestToken = configToken && configToken !== storedToken
92
- ? configToken
93
- : storedToken;
94
- if (bestToken && bestToken !== storedToken) {
95
- await credentials.setFlyToken(bestToken);
96
- }
97
- const bestEmail = bestToken ? await tryFlyWhoami(bestToken) : null;
76
+ const bestEmail = await tryFlyWhoami();
98
77
  if (bestEmail) {
99
78
  out.ok(`Already Authenticated as ${bestEmail}`);
100
79
  flyEmail = bestEmail;
@@ -109,15 +88,10 @@ ${bold("EXAMPLES")}
109
88
  if (!loginResult.ok) {
110
89
  return out.die("Fly.io Authentication Failed");
111
90
  }
112
- const token = await readFlyConfigToken();
113
- if (!token) {
114
- return out.die("Could Not Read Fly.io Token After Login");
115
- }
116
- const email = await tryFlyWhoami(token);
91
+ const email = await tryFlyWhoami();
117
92
  if (!email) {
118
93
  return out.die("Fly.io Authentication Verification Failed");
119
94
  }
120
- await credentials.setFlyToken(token);
121
95
  out.ok(`Authenticated as ${email}`);
122
96
  flyEmail = email;
123
97
  }
@@ -218,13 +192,7 @@ ${bold("EXAMPLES")}
218
192
  // Step 1: Fly.io
219
193
  // =========================================================================
220
194
  let flyEmail = null;
221
- const storedToken = await credentials.getFlyToken();
222
- if (storedToken) {
223
- flyEmail = await tryFlyWhoami(storedToken);
224
- }
225
- if (!flyEmail) {
226
- flyEmail = await tryFlyWhoami();
227
- }
195
+ flyEmail = await tryFlyWhoami();
228
196
  // =========================================================================
229
197
  // Step 2: Tailscale
230
198
  // =========================================================================
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Create Command - Create Tailscale Subnet Router on Fly.io Custom Network
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -21,12 +21,12 @@ import { createTransition, hydrateCreate, reportSkipped, } from "./machine.js";
21
21
  // =============================================================================
22
22
  const stageFlyConfig = async (out, opts) => {
23
23
  out.header("Step 1: Fly.io Configuration").blank();
24
- const flyToken = await getCredentialStore().getFlyToken();
25
- const fly = createFlyProvider(flyToken ?? undefined);
24
+ const fly = createFlyProvider();
26
25
  await fly.auth.ensureInstalled();
27
26
  const email = await fly.auth.login({ interactive: !opts.json });
28
27
  out.ok(`Authenticated as ${email}`);
29
28
  const org = await resolveOrg(fly, opts, out);
29
+ await fly.auth.useOrgToken(org);
30
30
  const region = opts.region || "iad";
31
31
  out.ok(`Using Region: ${region}`);
32
32
  out.blank();
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Deploy Command - Safely Deploy a Workload App on a Custom Private Network
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -24,6 +24,7 @@ const stageFlyConfig = async (out, opts) => {
24
24
  const email = await fly.auth.login({ interactive: !opts.json });
25
25
  out.ok(`Authenticated as ${email}`);
26
26
  const org = await resolveOrg(fly, opts, out);
27
+ await fly.auth.useOrgToken(org);
27
28
  out.blank();
28
29
  return { fly, org };
29
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/machine.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,OAAO,GACP,UAAU,CAAC;AAMf,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,WAAW,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,iBAAiB,CAAC;IACjC,KAAK,CAAC,EAAE;QACN,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAaD,eAAO,MAAM,mBAAmB,GAC9B,KAAK,MAAM,CAAC,YAAY,CAAC,EACzB,YAAY,WAAW,SAMxB,CAAC;AAMF,eAAO,MAAM,aAAa,GACxB,KAAK,SAAS,KACb,OAAO,CAAC,WAAW,CAMrB,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,WAAW,EAClB,KAAK,SAAS,KACb,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAiH7B,CAAC"}
1
+ {"version":3,"file":"machine.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/machine.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAM/C,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,WAAW,GACX,QAAQ,GACR,OAAO,GACP,UAAU,CAAC;AAMf,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE;QACL,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,WAAW,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,iBAAiB,CAAC;IACjC,KAAK,CAAC,EAAE;QACN,mBAAmB,EAAE,MAAM,CAAC;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,mBAAmB,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAaD,eAAO,MAAM,mBAAmB,GAC9B,KAAK,MAAM,CAAC,YAAY,CAAC,EACzB,YAAY,WAAW,SAMxB,CAAC;AAMF,eAAO,MAAM,aAAa,GACxB,KAAK,SAAS,KACb,OAAO,CAAC,WAAW,CAMrB,CAAC;AAMF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,WAAW,EAClB,KAAK,SAAS,KACb,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAmH7B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Destroy App — Destroy a Workload App on a Network
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold, confirm } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -2,7 +2,7 @@
2
2
  // Destroy Command - Destroy Networks or Apps
3
3
  // =============================================================================
4
4
  import * as dntShim from "../../../_dnt.shims.js";
5
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
6
6
  import { bold } from "../../../lib/cli.js";
7
7
  import { checkArgs } from "../../../lib/args.js";
8
8
  import { registerCommand } from "../../mod.js";
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/destroy/network.ts"],"names":[],"mappings":"AAuVA,eAAO,MAAM,cAAc,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CA0DjE,CAAC"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/destroy/network.ts"],"names":[],"mappings":"AA8VA,eAAO,MAAM,cAAc,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CA2DjE,CAAC"}
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Destroy Network — Tear Down Router and Clean Up Tailnet
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold, confirm } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -9,7 +9,7 @@ import { Result } from "../../../lib/result.js";
9
9
  import { runMachine } from "../../../lib/machine.js";
10
10
  import { findRouterApp, listWorkloadAppsOnNetwork } from "../../../util/discovery.js";
11
11
  import { getRouterTag } from "../../../util/naming.js";
12
- import { isAutoApproverConfigured, isTagOwnerConfigured, unpatchAutoApprover, unpatchTagOwner, } from "../../../util/tailscale-local.js";
12
+ import { isAutoApproverConfigured, isTagOwnerConfigured, unpatchAclTagReferences, unpatchAutoApprover, unpatchTagOwner, } from "../../../util/tailscale-local.js";
13
13
  import { initSession } from "../../../util/session.js";
14
14
  // =============================================================================
15
15
  // Phase Labels
@@ -120,6 +120,11 @@ const destroyNetworkTransition = async (phase, ctx) => {
120
120
  return Result.ok("complete");
121
121
  }
122
122
  let changed = false;
123
+ const withoutAclRefs = unpatchAclTagReferences(policy, tag);
124
+ if (withoutAclRefs !== policy) {
125
+ policy = withoutAclRefs;
126
+ changed = true;
127
+ }
123
128
  if (isTagOwnerConfigured(policy, tag)) {
124
129
  policy = unpatchTagOwner(policy, tag);
125
130
  changed = true;
@@ -195,8 +200,8 @@ const stageSummary = (out, ctx) => {
195
200
  const tag = ctx.tag || getRouterTag(ctx.network);
196
201
  if (!ctx.manual) {
197
202
  out.blank()
198
- .dim("If You Added ACL Rules Referencing This Router, Remember to Remove:")
199
- .dim(` acls: rules referencing ${tag}`)
203
+ .dim("If You Added Subnet-Only ACL Rules for This Router, Remember to Remove:")
204
+ .dim(` acls: rules for this network's subnet`)
200
205
  .blank();
201
206
  }
202
207
  else if (ctx.tag) {
@@ -235,14 +240,15 @@ ${bold("USAGE")}
235
240
 
236
241
  ${bold("OPTIONS")}
237
242
  --org <org> Fly.io organization slug
238
- --manual Skip automatic Tailscale ACL cleanup (tagOwners + autoApprovers)
243
+ --manual Skip automatic Tailscale ACL cleanup
239
244
  -y, --yes Skip confirmation prompts
240
245
  --json Output as JSON
241
246
 
242
247
  ${bold("DESCRIPTION")}
243
248
  By default, ambit removes the router's tag from your Tailscale ACL
244
- policy (tagOwners and autoApprovers). Use --manual if your API token
245
- lacks ACL write permission or you prefer to manage the policy yourself.
249
+ policy (tagOwners, autoApprovers, and tag-referencing access rules).
250
+ Use --manual if your API token lacks ACL write permission or you prefer
251
+ to manage the policy yourself.
246
252
 
247
253
  ${bold("EXAMPLES")}
248
254
  ambit destroy network browsers
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Doctor Command - Verify Environment and Infrastructure Health
3
3
  // =============================================================================
4
- import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../lib/cli.js";
6
6
  import { checkArgs } from "../../lib/args.js";
7
7
  import { createOutput } from "../../lib/output.js";
@@ -1,8 +1,8 @@
1
1
  // =============================================================================
2
2
  // List Apps — List All Workload Apps on a Network
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
- import { Table } from "../../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
+ import { Table } from "../../../deps/jsr.io/@cliffy/table/1.1.0/mod.js";
6
6
  import { bold } from "../../../lib/cli.js";
7
7
  import { checkArgs } from "../../../lib/args.js";
8
8
  import { createOutput } from "../../../lib/output.js";
@@ -2,7 +2,7 @@
2
2
  // List Command - List Networks or Apps
3
3
  // =============================================================================
4
4
  import * as dntShim from "../../../_dnt.shims.js";
5
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
6
6
  import { bold } from "../../../lib/cli.js";
7
7
  import { checkArgs } from "../../../lib/args.js";
8
8
  import { registerCommand } from "../../mod.js";
@@ -1,8 +1,8 @@
1
1
  // =============================================================================
2
2
  // List Networks — List All Discovered Routers Across Networks
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
- import { Table } from "../../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
+ import { Table } from "../../../deps/jsr.io/@cliffy/table/1.1.0/mod.js";
6
6
  import { bold } from "../../../lib/cli.js";
7
7
  import { checkArgs } from "../../../lib/args.js";
8
8
  import { createOutput } from "../../../lib/output.js";
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Logs Command - Stream Logs for Workload Apps
3
3
  // =============================================================================
4
- import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../lib/cli.js";
6
6
  import { checkArgs } from "../../lib/args.js";
7
7
  import { createOutput } from "../../lib/output.js";
@@ -2,8 +2,8 @@
2
2
  // Secrets Command - Manage Secrets for Workload Apps
3
3
  // =============================================================================
4
4
  import * as dntShim from "../../_dnt.shims.js";
5
- import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
6
- import { Table } from "../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
5
+ import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.29/mod.js";
6
+ import { Table } from "../../deps/jsr.io/@cliffy/table/1.1.0/mod.js";
7
7
  import { bold } from "../../lib/cli.js";
8
8
  import { checkArgs } from "../../lib/args.js";
9
9
  import { createOutput } from "../../lib/output.js";
@@ -1,12 +1,12 @@
1
1
  // =============================================================================
2
2
  // Share Command - Grant Members Access to a Network via Tailscale ACL
3
3
  // =============================================================================
4
- import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../lib/cli.js";
6
6
  import { checkArgs } from "../../lib/args.js";
7
7
  import { createOutput } from "../../lib/output.js";
8
8
  import { registerCommand } from "../mod.js";
9
- import { z } from "../../deps/jsr.io/@zod/zod/4.3.6/src/index.js";
9
+ import { z } from "../../deps/jsr.io/@zod/zod/4.4.3/src/index.js";
10
10
  import { findRouterApp, getRouterMachineInfo } from "../../util/discovery.js";
11
11
  import { getRouterTag } from "../../util/naming.js";
12
12
  import { assertAdditivePatch, isAclRuleConfigured, patchAclRule, } from "../../util/tailscale-local.js";
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Status App — Show App Status
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Status Command - Show Network, App, and Router Status
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { registerCommand } from "../../mod.js";
@@ -1,7 +1,7 @@
1
1
  // =============================================================================
2
2
  // Status Network — Show Detailed Status for a Single Network
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
5
  import { bold } from "../../../lib/cli.js";
6
6
  import { checkArgs } from "../../../lib/args.js";
7
7
  import { createOutput } from "../../../lib/output.js";
@@ -1,8 +1,8 @@
1
1
  // =============================================================================
2
2
  // Status Networks — Summary Table of All Networks
3
3
  // =============================================================================
4
- import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
- import { Table } from "../../../deps/jsr.io/@cliffy/table/1.0.0/mod.js";
4
+ import { parseArgs } from "../../../deps/jsr.io/@std/cli/1.0.29/mod.js";
5
+ import { Table } from "../../../deps/jsr.io/@cliffy/table/1.1.0/mod.js";
6
6
  import { bold } from "../../../lib/cli.js";
7
7
  import { checkArgs } from "../../../lib/args.js";
8
8
  import { createOutput } from "../../../lib/output.js";
package/esm/cli/mod.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // CLI Framework - Command Parser and Router
3
3
  // =============================================================================
4
4
  import * as dntShim from "../_dnt.shims.js";
5
- import { parseArgs } from "../deps/jsr.io/@std/cli/1.0.28/mod.js";
5
+ import { parseArgs } from "../deps/jsr.io/@std/cli/1.0.29/mod.js";
6
6
  import { bold, dim } from "../lib/cli.js";
7
7
  import denoConfig from "../deno.js";
8
8
  // =============================================================================
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "@cardelli/ambit",
3
- "version": "0.4.4",
3
+ "version": "0.4.5",
4
4
  "description": "Deploy apps to the cloud that only you and your AI agents can reach",
5
5
  "license": "MIT",
6
6
  "tasks": {
@@ -30,12 +30,16 @@ export declare class TableLayout {
30
30
  * settings.
31
31
  */
32
32
  protected createLayout(): RenderSettings;
33
+ private computeColumnDimensions;
34
+ private applyFlexShrink;
35
+ private applyFlexGrow;
36
+ private resolveColumnWeight;
33
37
  /**
34
38
  * Fills rows and cols by specified row/col span with a reference of the
35
39
  * original cell.
36
40
  */
37
41
  protected spanRows(rows: Array<RowType>): Array<Row<Cell>>;
38
- protected getDeleteCount(rows: Array<Array<unknown>>, rowIndex: number, colIndex: number): 1 | 0;
42
+ protected getDeleteCount(rows: Array<Array<unknown>>, rowIndex: number, colIndex: number): 0 | 1;
39
43
  /**
40
44
  * Create a new row from existing row or cell array.
41
45
  * @param row Original row.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_layout.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@cliffy/table/1.1.0/_layout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAkB,MAAM,WAAW,CAAC;AAEhE,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAiB,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMtE,8BAA8B;AAC9B,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;CACxB;AASD,6BAA6B;AAC7B,qBAAa,WAAW;;IAOpB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IAPjB;;;;OAIG;gBAEO,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,aAAa;IAGhC,6BAA6B;IACtB,QAAQ,IAAI,MAAM;IAKzB;;;;OAIG;IACH,SAAS,CAAC,YAAY,IAAI,cAAc;IA0DxC,OAAO,CAAC,uBAAuB;IAsC/B,OAAO,CAAC,eAAe;IA6CvB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,mBAAmB;IAwC3B;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IA4D1D,SAAS,CAAC,cAAc,CACtB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,CAAC,GAAG,CAAC;IAOR;;;OAGG;IACH,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;IAM5C;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,CAClB,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS,EACjC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI;IAcP,OAAO,CAAC,WAAW;IAInB;;;OAGG;IACH,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM;IAWlD;;;;;;OAMG;IACH,SAAS,CAAC,SAAS,CACjB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,cAAc,EACpB,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM;IAwET;;;;;;OAMG;IACH,SAAS,CAAC,UAAU,CAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,EACd,IAAI,EAAE,cAAc,EACpB,QAAQ,CAAC,EAAE,OAAO,GACjB,MAAM;IAqDT;;;;;OAKG;IACH,SAAS,CAAC,eAAe,CACvB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,GAChB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAgDpC;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,CACvB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,EAC9B,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,EAC9B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,IAAI,EAAE,cAAc,GACnB,MAAM;IA2BT;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,CACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,EAC9B,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,SAAS,EAC9B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,EACtB,IAAI,EAAE,cAAc,GACnB,MAAM;CAoJV"}
@@ -2,6 +2,7 @@ import { Cell } from "./cell.js";
2
2
  import { consumeChars, consumeWords } from "./consume_words.js";
3
3
  import { Row } from "./row.js";
4
4
  import { getUnclosedAnsiRuns, longest, strLength } from "./_utils.js";
5
+ const sum = (numList) => numList.reduce((a, b) => a + b, 0);
5
6
  /** Table layout renderer. */
6
7
  export class TableLayout {
7
8
  table;
@@ -47,34 +48,115 @@ export class TableLayout {
47
48
  }
48
49
  }
49
50
  }
51
+ const { padding, width, minColWidth, maxColWidth, } = this.computeColumnDimensions(columns, rows);
52
+ if (isFinite(this.options.maxWidth)) {
53
+ const totalPadding = hasBorder
54
+ ? sum(padding) * 2 + (columns + 1)
55
+ : sum(padding.slice(0, -1));
56
+ const maxAllowable = this.options.maxWidth - totalPadding;
57
+ if (sum(width) > maxAllowable) {
58
+ this.applyFlexShrink(width, minColWidth, maxAllowable);
59
+ }
60
+ if (sum(width) < maxAllowable) {
61
+ this.applyFlexGrow(width, maxColWidth, maxAllowable);
62
+ }
63
+ }
64
+ return {
65
+ padding,
66
+ width,
67
+ rows,
68
+ columns,
69
+ hasBorder,
70
+ hasBodyBorder,
71
+ hasHeaderBorder,
72
+ };
73
+ }
74
+ computeColumnDimensions(columns, rows) {
50
75
  const padding = [];
51
76
  const width = [];
77
+ const minColWidth = [];
78
+ const maxColWidth = [];
52
79
  for (let colIndex = 0; colIndex < columns; colIndex++) {
53
80
  const column = this.options.columns.at(colIndex);
54
- const minColWidth = column?.getMinWidth() ??
81
+ minColWidth[colIndex] = column?.getMinWidth() ??
55
82
  (Array.isArray(this.options.minColWidth)
56
83
  ? this.options.minColWidth[colIndex]
57
- : this.options.minColWidth);
58
- const maxColWidth = column?.getMaxWidth() ??
84
+ : this.options.minColWidth) ??
85
+ 0;
86
+ maxColWidth[colIndex] = column?.getMaxWidth() ??
59
87
  (Array.isArray(this.options.maxColWidth)
60
88
  ? this.options.maxColWidth[colIndex]
61
- : this.options.maxColWidth);
62
- const colWidth = longest(colIndex, rows, maxColWidth);
63
- width[colIndex] = Math.min(maxColWidth, Math.max(minColWidth, colWidth));
89
+ : this.options.maxColWidth) ??
90
+ Infinity;
91
+ const colWidth = longest(colIndex, rows, maxColWidth[colIndex]);
92
+ width[colIndex] = Math.min(maxColWidth[colIndex], Math.max(minColWidth[colIndex], colWidth));
64
93
  padding[colIndex] = column?.getPadding() ??
65
94
  (Array.isArray(this.options.padding)
66
95
  ? this.options.padding[colIndex]
67
- : this.options.padding);
96
+ : this.options.padding) ??
97
+ 0;
98
+ }
99
+ return { padding, width, minColWidth, maxColWidth };
100
+ }
101
+ applyFlexShrink(width, minColWidth, maxAllowable) {
102
+ const shrink = width.map((_w, i) => this.resolveColumnWeight("flexShrink", i));
103
+ let changed = true;
104
+ while (changed) {
105
+ changed = false;
106
+ if (sum(width) <= maxAllowable) {
107
+ break;
108
+ }
109
+ const overflow = sum(width) - maxAllowable;
110
+ // CSS flex-shrink: each column's reduction share is proportional to
111
+ // shrink × width, so wider or higher-weighted columns absorb more.
112
+ const scaledTotal = sum(width.map((w, i) => shrink[i] > 0 && w > minColWidth[i] ? shrink[i] * w : 0));
113
+ if (scaledTotal === 0) {
114
+ break;
115
+ }
116
+ for (let i = 0; i < width.length; i++) {
117
+ if (shrink[i] > 0 && width[i] > minColWidth[i]) {
118
+ const target = Math.max(Math.max(1, minColWidth[i]), Math.floor(width[i] * (1 - overflow * shrink[i] / scaledTotal)));
119
+ if (target !== width[i]) {
120
+ width[i] = target;
121
+ changed = true;
122
+ }
123
+ }
124
+ }
68
125
  }
69
- return {
70
- padding,
71
- width,
72
- rows,
73
- columns,
74
- hasBorder,
75
- hasBodyBorder,
76
- hasHeaderBorder,
77
- };
126
+ }
127
+ applyFlexGrow(width, maxColWidth, maxAllowable) {
128
+ const grow = width.map((_w, i) => this.resolveColumnWeight("flexGrow", i));
129
+ let changed = true;
130
+ while (changed) {
131
+ changed = false;
132
+ if (sum(width) >= maxAllowable) {
133
+ break;
134
+ }
135
+ const slack = maxAllowable - sum(width);
136
+ // CSS flex-grow: available slack is distributed proportionally by weight.
137
+ const totalWeight = sum(grow.map((g, i) => width[i] < maxColWidth[i] ? g : 0));
138
+ if (totalWeight === 0) {
139
+ break;
140
+ }
141
+ for (let i = 0; i < width.length; i++) {
142
+ if (grow[i] > 0 && width[i] < maxColWidth[i]) {
143
+ const extra = Math.floor(slack * grow[i] / totalWeight);
144
+ const newWidth = Math.min(maxColWidth[i], width[i] + extra);
145
+ if (newWidth !== width[i]) {
146
+ width[i] = newWidth;
147
+ changed = true;
148
+ }
149
+ }
150
+ }
151
+ }
152
+ }
153
+ resolveColumnWeight(prop, i) {
154
+ const getter = prop === "flexShrink" ? "getFlexShrink" : "getFlexGrow";
155
+ const weight = this.options.columns.at(i)?.[getter]() ??
156
+ (Array.isArray(this.options[prop])
157
+ ? this.options[prop][i]
158
+ : this.options[prop]);
159
+ return Number.isFinite(weight) && weight > 0 ? weight : 0;
78
160
  }
79
161
  #getRows() {
80
162
  const header = this.table.getHeader();
@@ -297,6 +379,9 @@ export class TableLayout {
297
379
  * @param maxLength Max length of content to render.
298
380
  */
299
381
  renderCellValue(cell, maxLength) {
382
+ if (maxLength <= 0) {
383
+ return { current: "", next: "" };
384
+ }
300
385
  const length = Math.min(maxLength, strLength(cell.toString()));
301
386
  let words = consumeWords(length, cell.toString());
302
387
  // break word if word is longer than max length
@@ -12,18 +12,15 @@ export declare function longest(index: number, rows: Array<Array<CellType>>, max
12
12
  export declare const strLength: (str: string) => number;
13
13
  /** Regex `source` to match any relevant ANSI code. */
14
14
  export declare const ansiRegexSource: string;
15
+ interface UnclosedAnsiRunsResult {
16
+ currentSuffix: string;
17
+ nextPrefix: string;
18
+ }
15
19
  /**
16
20
  * Get unclosed ANSI runs in a string.
17
21
  *
18
22
  * @param text - A string segment possibly containing unclosed ANSI runs.
19
23
  */
20
- export declare function getUnclosedAnsiRuns(text: string): {
21
- /** The suffix to be appended to the text to close all unclosed runs. */
22
- currentSuffix: string;
23
- /**
24
- * The prefix to be appended to the next segment to continue unclosed
25
- * runs if the input text forms the first segment of a multi-line string.
26
- */
27
- nextPrefix: string;
28
- };
24
+ export declare function getUnclosedAnsiRuns(text: string): UnclosedAnsiRunsResult;
25
+ export {};
29
26
  //# sourceMappingURL=_utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@cliffy/table/1.0.0/_utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAMhD;;GAEG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAmBR;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,KAAG,MAEvC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,eAAe,QAGjB,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM;IAwB5C,wEAAwE;;IAExE;;;OAGG;;EAGN"}
1
+ {"version":3,"file":"_utils.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@cliffy/table/1.1.0/_utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAQ,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAOhD;;GAEG;AACH,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAC5B,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAmBR;AAED,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,KAAG,MAEvC,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,eAAe,QAGjB,CAAC;AAEZ,UAAU,sBAAsB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,CAuCxE"}