@paradigma-inc/flywheel 0.1.111 → 0.1.134

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 (628) hide show
  1. package/README.md +79 -13
  2. package/package.json +14 -6
  3. package/skills/flywheel/SKILL.md +9 -6
  4. package/skills/flywheel/example-workflows/organizing-exploring-and-iterating-on-a-research-topic.md +38 -46
  5. package/skills/flywheel/example-workflows/reproducing-papers-on-a-budget.md +34 -36
  6. package/skills/flywheel/getting-started/flywheel-quickstart.md +2 -5
  7. package/skills/flywheel/getting-started/flywheel-tutorial-overview.md +1 -1
  8. package/skills/flywheel/references/INTERFACES.md +2 -2
  9. package/skills/flywheel/references/experiment-design-protocol.md +32 -25
  10. package/skills/flywheel/references/flywheel-cli-tool-map.md +120 -76
  11. package/skills/flywheel/references/flywheel-mcp-tool-map.md +42 -32
  12. package/skills/flywheel/setting-up-flywheel/claude-code-cli-installation.md +1 -1
  13. package/skills/flywheel/setting-up-flywheel/codex-cli-installation.md +1 -1
  14. package/skills/flywheel/setting-up-flywheel/how-can-i-get-an-authorized-client_id-for-the-oauth-flow.md +12 -4
  15. package/skills/flywheel/setting-up-flywheel/installation-overview.md +2 -6
  16. package/skills/flywheel/setting-up-flywheel/other-hosts-installation.md +53 -26
  17. package/skills/flywheel/setting-up-flywheel/updating-flywheel-mcp.md +34 -11
  18. package/skills/flywheel-auto/SKILL.md +40 -23
  19. package/skills/flywheel-auto/evals/evals.json +1 -1
  20. package/skills/flywheel-auto/references/INTERFACES.md +2 -2
  21. package/skills/flywheel-auto/references/experiment-design-protocol.md +31 -23
  22. package/skills/flywheel-auto/references/flywheel-cli-tool-map.md +172 -127
  23. package/skills/flywheel-auto/references/flywheel-mcp-tool-map.md +22 -24
  24. package/skills/flywheel-lookahead/SKILL.md +47 -28
  25. package/skills/flywheel-lookahead/agents/openai.yaml +1 -1
  26. package/skills/flywheel-lookahead/evals/evals.json +6 -6
  27. package/skills/flywheel-lookahead/references/INTERFACES.md +2 -2
  28. package/skills/flywheel-lookahead/references/flywheel-cli-tool-map.md +172 -127
  29. package/skills/flywheel-lookahead/references/flywheel-mcp-tool-map.md +22 -24
  30. package/skills/flywheel-prove/SKILL.md +2 -2
  31. package/skills/flywheel-prove/references/workflow.md +21 -2
  32. package/skills/flywheel-reproduce/SKILL.md +39 -19
  33. package/skills/flywheel-reproduce/evals/evals.json +1 -1
  34. package/skills/flywheel-reproduce/references/INTERFACES.md +2 -2
  35. package/skills/flywheel-reproduce/references/experiment-design-protocol.md +31 -23
  36. package/skills/flywheel-reproduce/references/flywheel-cli-tool-map.md +172 -127
  37. package/skills/flywheel-reproduce/references/flywheel-mcp-tool-map.md +22 -24
  38. package/skills/flywheel-to-graph/SKILL.md +37 -17
  39. package/skills/flywheel-to-graph/references/INTERFACES.md +2 -2
  40. package/skills/flywheel-to-graph/references/flywheel-cli-tool-map.md +172 -127
  41. package/skills/flywheel-to-graph/references/flywheel-mcp-tool-map.md +22 -24
  42. package/skills/flywheel-tree/references/workflow.md +6 -37
  43. package/src/cli.mjs +1145 -1141
  44. package/src/mcp-writer.mjs +413 -435
  45. package/src/public-command-metadata.mjs +28 -5
  46. package/src/runtime/delegate.mjs +2 -19
  47. package/src/runtime/required-runtime-commands.json +83 -28
  48. package/src/runtime/runtime-config.mjs +39 -60
  49. package/src/runtime/vendor/flywheel-cli-dist/auth/credentials.js +330 -0
  50. package/src/runtime/vendor/flywheel-cli-dist/auth/credentials.js.map +1 -0
  51. package/src/runtime/vendor/flywheel-cli-dist/auth/login.js +90 -139
  52. package/src/runtime/vendor/flywheel-cli-dist/auth/login.js.map +1 -1
  53. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js +1 -1
  54. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js.map +1 -1
  55. package/src/runtime/vendor/flywheel-cli-dist/auth/secure-write.js +116 -0
  56. package/src/runtime/vendor/flywheel-cli-dist/auth/secure-write.js.map +1 -0
  57. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js +36 -14
  58. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js.map +1 -1
  59. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js +15 -6
  60. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js.map +1 -1
  61. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js +256 -0
  62. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-create.js.map +1 -0
  63. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js +11 -0
  64. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-delete.js.map +1 -0
  65. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js +84 -0
  66. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-login.js.map +1 -0
  67. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-revoke-api-key.js +17 -0
  68. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-test-users-revoke-api-key.js.map +1 -0
  69. package/src/runtime/vendor/flywheel-cli-dist/commands/aliases.js +3 -7
  70. package/src/runtime/vendor/flywheel-cli-dist/commands/aliases.js.map +1 -1
  71. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-credentials-clear.js +12 -0
  72. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-credentials-clear.js.map +1 -0
  73. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-credentials-set.js +29 -0
  74. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-credentials-set.js.map +1 -0
  75. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-login.js +12 -0
  76. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-login.js.map +1 -1
  77. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-status.js +46 -10
  78. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-status.js.map +1 -1
  79. package/src/runtime/vendor/flywheel-cli-dist/commands/env.js +17 -40
  80. package/src/runtime/vendor/flywheel-cli-dist/commands/env.js.map +1 -1
  81. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation-resources.js +305 -0
  82. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation-resources.js.map +1 -0
  83. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation-support.js +72 -0
  84. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation-support.js.map +1 -0
  85. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation.js +286 -0
  86. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-operation.js.map +1 -0
  87. package/src/runtime/vendor/flywheel-cli-dist/commands/help-metadata.js +30 -5
  88. package/src/runtime/vendor/flywheel-cli-dist/commands/help-metadata.js.map +1 -1
  89. package/src/runtime/vendor/flywheel-cli-dist/commands/help.js +27 -12
  90. package/src/runtime/vendor/flywheel-cli-dist/commands/help.js.map +1 -1
  91. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-commit-replay.js +284 -0
  92. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-commit-replay.js.map +1 -0
  93. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-graph.js +169 -0
  94. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-graph.js.map +1 -0
  95. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-lineage-list.js +13 -0
  96. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-lineage-list.js.map +1 -0
  97. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-repository-snapshot.js +227 -0
  98. package/src/runtime/vendor/flywheel-cli-dist/commands/hosted-repository-snapshot.js.map +1 -0
  99. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js +239 -263
  100. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js.map +1 -1
  101. package/src/runtime/vendor/flywheel-cli-dist/commands/node-create-schema.js +25 -0
  102. package/src/runtime/vendor/flywheel-cli-dist/commands/node-create-schema.js.map +1 -0
  103. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-list.js +11 -9
  104. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-list.js.map +1 -1
  105. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js +38 -45
  106. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js.map +1 -1
  107. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-show.js +14 -17
  108. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-show.js.map +1 -1
  109. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-unset.js +13 -8
  110. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-unset.js.map +1 -1
  111. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js +237 -66
  112. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js.map +1 -1
  113. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js +9 -9
  114. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js.map +1 -1
  115. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hosted.js +76 -0
  116. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hosted.js.map +1 -0
  117. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js +4 -138
  118. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js.map +1 -1
  119. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js +8 -13
  120. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js.map +1 -1
  121. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/repository.js +362 -0
  122. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/repository.js.map +1 -0
  123. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js +45 -183
  124. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js.map +1 -1
  125. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-edit.js +47 -0
  126. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-edit.js.map +1 -0
  127. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-operation.js +181 -0
  128. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-operation.js.map +1 -0
  129. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-output.js +163 -0
  130. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-output.js.map +1 -0
  131. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-projection.js +79 -0
  132. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-projection.js.map +1 -0
  133. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-selection.js +80 -0
  134. package/src/runtime/vendor/flywheel-cli-dist/commands/repository-selection.js.map +1 -0
  135. package/src/runtime/vendor/flywheel-cli-dist/commands/retired-command-names.js +78 -0
  136. package/src/runtime/vendor/flywheel-cli-dist/commands/retired-command-names.js.map +1 -0
  137. package/src/runtime/vendor/flywheel-cli-dist/commands/types.js.map +1 -1
  138. package/src/runtime/vendor/flywheel-cli-dist/commands/usage-spec.js +3 -2
  139. package/src/runtime/vendor/flywheel-cli-dist/commands/usage-spec.js.map +1 -1
  140. package/src/runtime/vendor/flywheel-cli-dist/config/index.js +5 -0
  141. package/src/runtime/vendor/flywheel-cli-dist/config/index.js.map +1 -0
  142. package/src/runtime/vendor/flywheel-cli-dist/config/io.js +139 -0
  143. package/src/runtime/vendor/flywheel-cli-dist/config/io.js.map +1 -0
  144. package/src/runtime/vendor/flywheel-cli-dist/config/migration.js +299 -0
  145. package/src/runtime/vendor/flywheel-cli-dist/config/migration.js.map +1 -0
  146. package/src/runtime/vendor/flywheel-cli-dist/config/model.js +214 -0
  147. package/src/runtime/vendor/flywheel-cli-dist/config/model.js.map +1 -0
  148. package/src/runtime/vendor/flywheel-cli-dist/config/path.js +30 -0
  149. package/src/runtime/vendor/flywheel-cli-dist/config/path.js.map +1 -0
  150. package/src/runtime/vendor/flywheel-cli-dist/credential-output.js +29 -0
  151. package/src/runtime/vendor/flywheel-cli-dist/credential-output.js.map +1 -0
  152. package/src/runtime/vendor/flywheel-cli-dist/errors.js +1 -16
  153. package/src/runtime/vendor/flywheel-cli-dist/errors.js.map +1 -1
  154. package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js +3 -3
  155. package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.js.map +1 -1
  156. package/src/runtime/vendor/flywheel-cli-dist/grammar/globals.js +19 -9
  157. package/src/runtime/vendor/flywheel-cli-dist/grammar/globals.js.map +1 -1
  158. package/src/runtime/vendor/flywheel-cli-dist/grammar/parse.js +33 -4
  159. package/src/runtime/vendor/flywheel-cli-dist/grammar/parse.js.map +1 -1
  160. package/src/runtime/vendor/flywheel-cli-dist/http/client.js +322 -302
  161. package/src/runtime/vendor/flywheel-cli-dist/http/client.js.map +1 -1
  162. package/src/runtime/vendor/flywheel-cli-dist/http/debug.js +1 -21
  163. package/src/runtime/vendor/flywheel-cli-dist/http/debug.js.map +1 -1
  164. package/src/runtime/vendor/flywheel-cli-dist/http/retry.js +1 -0
  165. package/src/runtime/vendor/flywheel-cli-dist/http/retry.js.map +1 -1
  166. package/src/runtime/vendor/flywheel-cli-dist/local/adapter.js +244 -0
  167. package/src/runtime/vendor/flywheel-cli-dist/local/adapter.js.map +1 -0
  168. package/src/runtime/vendor/flywheel-cli-dist/local/domain/errors.js +7 -0
  169. package/src/runtime/vendor/flywheel-cli-dist/local/domain/errors.js.map +1 -0
  170. package/src/runtime/vendor/flywheel-cli-dist/local/domain/history.js +35 -0
  171. package/src/runtime/vendor/flywheel-cli-dist/local/domain/history.js.map +1 -0
  172. package/src/runtime/vendor/flywheel-cli-dist/local/domain/invariants.js +42 -0
  173. package/src/runtime/vendor/flywheel-cli-dist/local/domain/invariants.js.map +1 -0
  174. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/artifact-properties.js +179 -0
  175. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/artifact-properties.js.map +1 -0
  176. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/commits.js +152 -0
  177. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/commits.js.map +1 -0
  178. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/constants.js +71 -0
  179. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/constants.js.map +1 -0
  180. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/encoding.js +73 -0
  181. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/encoding.js.map +1 -0
  182. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/imported-artifact-properties.js +82 -0
  183. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/imported-artifact-properties.js.map +1 -0
  184. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/operations.js +345 -0
  185. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/operations.js.map +1 -0
  186. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/tags.js +57 -0
  187. package/src/runtime/vendor/flywheel-cli-dist/local/domain/models/tags.js.map +1 -0
  188. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/conflicts.js +149 -0
  189. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/conflicts.js.map +1 -0
  190. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/context.js +115 -0
  191. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/context.js.map +1 -0
  192. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/keys.js +44 -0
  193. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/keys.js.map +1 -0
  194. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/pull.js +159 -0
  195. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/pull.js.map +1 -0
  196. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/replay.js +346 -0
  197. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/replay.js.map +1 -0
  198. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/resolve.js +37 -0
  199. package/src/runtime/vendor/flywheel-cli-dist/local/domain/rebase/resolve.js.map +1 -0
  200. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/inverses.js +203 -0
  201. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/inverses.js.map +1 -0
  202. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/plan.js +207 -0
  203. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/plan.js.map +1 -0
  204. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/tag-inverses.js +109 -0
  205. package/src/runtime/vendor/flywheel-cli-dist/local/domain/revert/tag-inverses.js.map +1 -0
  206. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/commit.js +61 -0
  207. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/commit.js.map +1 -0
  208. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/projection.js +46 -0
  209. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/projection.js.map +1 -0
  210. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/revert.js +203 -0
  211. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/revert.js.map +1 -0
  212. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/staging.js +44 -0
  213. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/staging.js.map +1 -0
  214. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/writes.js +188 -0
  215. package/src/runtime/vendor/flywheel-cli-dist/local/domain/service/writes.js.map +1 -0
  216. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync/cursors.js +54 -0
  217. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync/cursors.js.map +1 -0
  218. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync/local-pull.js +25 -0
  219. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync/local-pull.js.map +1 -0
  220. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync-models.js +2 -0
  221. package/src/runtime/vendor/flywheel-cli-dist/local/domain/sync-models.js.map +1 -0
  222. package/src/runtime/vendor/flywheel-cli-dist/local/fs/native.js +7 -0
  223. package/src/runtime/vendor/flywheel-cli-dist/local/fs/native.js.map +1 -0
  224. package/src/runtime/vendor/flywheel-cli-dist/local/fs/state.js +129 -0
  225. package/src/runtime/vendor/flywheel-cli-dist/local/fs/state.js.map +1 -0
  226. package/src/runtime/vendor/flywheel-cli-dist/local/fs/writer-lock.js +277 -0
  227. package/src/runtime/vendor/flywheel-cli-dist/local/fs/writer-lock.js.map +1 -0
  228. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/bootstrap.js +183 -0
  229. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/bootstrap.js.map +1 -0
  230. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/context.js +2 -0
  231. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/context.js.map +1 -0
  232. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/dispatch.js +121 -0
  233. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/dispatch.js.map +1 -0
  234. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/doctor.js +16 -0
  235. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/doctor.js.map +1 -0
  236. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/identity.js +72 -0
  237. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/identity.js.map +1 -0
  238. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/conflicts.js +59 -0
  239. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/conflicts.js.map +1 -0
  240. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/core.js +125 -0
  241. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/core.js.map +1 -0
  242. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/history.js +129 -0
  243. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/history.js.map +1 -0
  244. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/index.js +31 -0
  245. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/index.js.map +1 -0
  246. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/maintenance.js +49 -0
  247. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/maintenance.js.map +1 -0
  248. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/projections.js +30 -0
  249. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/projections.js.map +1 -0
  250. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/shared.js +12 -0
  251. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/operations/shared.js.map +1 -0
  252. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/platform.js +18 -0
  253. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/platform.js.map +1 -0
  254. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/projection.js +125 -0
  255. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/projection.js.map +1 -0
  256. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/clone.js +37 -0
  257. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/clone.js.map +1 -0
  258. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/pull.js +44 -0
  259. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/pull.js.map +1 -0
  260. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/purge.js +58 -0
  261. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/purge.js.map +1 -0
  262. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/push.js +118 -0
  263. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/push.js.map +1 -0
  264. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/transport.js +277 -0
  265. package/src/runtime/vendor/flywheel-cli-dist/local/runtime/remote/transport.js.map +1 -0
  266. package/src/runtime/vendor/flywheel-cli-dist/local/store/apply.js +132 -0
  267. package/src/runtime/vendor/flywheel-cli-dist/local/store/apply.js.map +1 -0
  268. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/archive.js +372 -0
  269. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/archive.js.map +1 -0
  270. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/backup.js +210 -0
  271. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/backup.js.map +1 -0
  272. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/restore.js +278 -0
  273. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/restore.js.map +1 -0
  274. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/retained-directory.js +192 -0
  275. package/src/runtime/vendor/flywheel-cli-dist/local/store/backup/retained-directory.js.map +1 -0
  276. package/src/runtime/vendor/flywheel-cli-dist/local/store/commits.js +114 -0
  277. package/src/runtime/vendor/flywheel-cli-dist/local/store/commits.js.map +1 -0
  278. package/src/runtime/vendor/flywheel-cli-dist/local/store/contract.js +65 -0
  279. package/src/runtime/vendor/flywheel-cli-dist/local/store/contract.js.map +1 -0
  280. package/src/runtime/vendor/flywheel-cli-dist/local/store/diagnostics-worker.js +145 -0
  281. package/src/runtime/vendor/flywheel-cli-dist/local/store/diagnostics-worker.js.map +1 -0
  282. package/src/runtime/vendor/flywheel-cli-dist/local/store/diagnostics.js +218 -0
  283. package/src/runtime/vendor/flywheel-cli-dist/local/store/diagnostics.js.map +1 -0
  284. package/src/runtime/vendor/flywheel-cli-dist/local/store/gc.js +71 -0
  285. package/src/runtime/vendor/flywheel-cli-dist/local/store/gc.js.map +1 -0
  286. package/src/runtime/vendor/flywheel-cli-dist/local/store/history-validation.js +298 -0
  287. package/src/runtime/vendor/flywheel-cli-dist/local/store/history-validation.js.map +1 -0
  288. package/src/runtime/vendor/flywheel-cli-dist/local/store/latest-values.js +121 -0
  289. package/src/runtime/vendor/flywheel-cli-dist/local/store/latest-values.js.map +1 -0
  290. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrate.js +69 -0
  291. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrate.js.map +1 -0
  292. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/provenance.js +49 -0
  293. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/provenance.js.map +1 -0
  294. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/steps.js +424 -0
  295. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/steps.js.map +1 -0
  296. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/versions.js +10 -0
  297. package/src/runtime/vendor/flywheel-cli-dist/local/store/migration/versions.js.map +1 -0
  298. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations/001_initial.sql +319 -0
  299. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations/002_staged_latest_values.sql +8 -0
  300. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations/003_remove_cli_editing_lease.sql +21 -0
  301. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations/004_hosted_association.sql +7 -0
  302. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations/005_artifact_properties.sql +68 -0
  303. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations.js +12 -0
  304. package/src/runtime/vendor/flywheel-cli-dist/local/store/migrations.js.map +1 -0
  305. package/src/runtime/vendor/flywheel-cli-dist/local/store/objects.js +410 -0
  306. package/src/runtime/vendor/flywheel-cli-dist/local/store/objects.js.map +1 -0
  307. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/apply.js +77 -0
  308. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/apply.js.map +1 -0
  309. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/artifacts.js +240 -0
  310. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/artifacts.js.map +1 -0
  311. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/nodes.js +127 -0
  312. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/nodes.js.map +1 -0
  313. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/relations.js +107 -0
  314. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/relations.js.map +1 -0
  315. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/rules.js +80 -0
  316. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/rules.js.map +1 -0
  317. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/tags.js +219 -0
  318. package/src/runtime/vendor/flywheel-cli-dist/local/store/projection/tags.js.map +1 -0
  319. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/hosted.js +164 -0
  320. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/hosted.js.map +1 -0
  321. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/read.js +20 -0
  322. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/read.js.map +1 -0
  323. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/replace.js +41 -0
  324. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/replace.js.map +1 -0
  325. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/schema.js +22 -0
  326. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/schema.js.map +1 -0
  327. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/validate.js +188 -0
  328. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot/validate.js.map +1 -0
  329. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot.js +5 -0
  330. package/src/runtime/vendor/flywheel-cli-dist/local/store/snapshot.js.map +1 -0
  331. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/connection.js +214 -0
  332. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/connection.js.map +1 -0
  333. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/errors.js +4 -0
  334. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/errors.js.map +1 -0
  335. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/rows.js +44 -0
  336. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/rows.js.map +1 -0
  337. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/schema.js +38 -0
  338. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/schema.js.map +1 -0
  339. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/store.js +284 -0
  340. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/store.js.map +1 -0
  341. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/verify.js +133 -0
  342. package/src/runtime/vendor/flywheel-cli-dist/local/store/sqlite/verify.js.map +1 -0
  343. package/src/runtime/vendor/flywheel-cli-dist/local/store/sync-commits.js +98 -0
  344. package/src/runtime/vendor/flywheel-cli-dist/local/store/sync-commits.js.map +1 -0
  345. package/src/runtime/vendor/flywheel-cli-dist/local/store/sync.js +161 -0
  346. package/src/runtime/vendor/flywheel-cli-dist/local/store/sync.js.map +1 -0
  347. package/src/runtime/vendor/flywheel-cli-dist/local/store/workspace-state.js +97 -0
  348. package/src/runtime/vendor/flywheel-cli-dist/local/store/workspace-state.js.map +1 -0
  349. package/src/runtime/vendor/flywheel-cli-dist/local/store/workspace.js +69 -0
  350. package/src/runtime/vendor/flywheel-cli-dist/local/store/workspace.js.map +1 -0
  351. package/src/runtime/vendor/flywheel-cli-dist/main.js +651 -376
  352. package/src/runtime/vendor/flywheel-cli-dist/main.js.map +1 -1
  353. package/src/runtime/vendor/flywheel-cli-dist/output/format.js +18 -11
  354. package/src/runtime/vendor/flywheel-cli-dist/output/format.js.map +1 -1
  355. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/darwin-arm64/node.napi.node +0 -0
  356. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/darwin-x64/node.napi.node +0 -0
  357. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/linux-arm64/node.napi.glibc.node +0 -0
  358. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/linux-arm64/node.napi.musl.node +0 -0
  359. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/linux-x64/node.napi.glibc.node +0 -0
  360. package/src/runtime/vendor/flywheel-cli-dist/prebuilds/linux-x64/node.napi.musl.node +0 -0
  361. package/src/runtime/vendor/manifest.json +252 -254
  362. package/src/setup/command.mjs +5 -0
  363. package/src/setup/io/patchers/json.mjs +1 -1
  364. package/src/setup/io/patchers/toml.mjs +3 -1
  365. package/src/setup/io/patchers/yaml.mjs +1 -1
  366. package/src/setup/modes/cli.mjs +76 -7
  367. package/src/setup/modes/mcp-command.mjs +802 -793
  368. package/src/setup/modes/mcp.mjs +7 -3
  369. package/src/setup/shared/prior-mode-detect.mjs +18 -21
  370. package/src/setup/test-seams.mjs +25 -0
  371. package/src/setup-auth.mjs +76 -10
  372. package/src/toml-lines.mjs +52 -0
  373. package/src/unified-cli.mjs +31 -16
  374. package/skills/flywheel-llm-proof-paper/scripts/__pycache__/check_paper.cpython-312.pyc +0 -0
  375. package/src/runtime/vendor/flywheel-cli-dist/auth/active-key-id.d.ts +0 -1
  376. package/src/runtime/vendor/flywheel-cli-dist/auth/baseurl.d.ts +0 -35
  377. package/src/runtime/vendor/flywheel-cli-dist/auth/config.d.ts +0 -34
  378. package/src/runtime/vendor/flywheel-cli-dist/auth/config.js +0 -92
  379. package/src/runtime/vendor/flywheel-cli-dist/auth/config.js.map +0 -1
  380. package/src/runtime/vendor/flywheel-cli-dist/auth/fingerprint.d.ts +0 -5
  381. package/src/runtime/vendor/flywheel-cli-dist/auth/keychain.d.ts +0 -4
  382. package/src/runtime/vendor/flywheel-cli-dist/auth/keychain.js +0 -31
  383. package/src/runtime/vendor/flywheel-cli-dist/auth/keychain.js.map +0 -1
  384. package/src/runtime/vendor/flywheel-cli-dist/auth/login.d.ts +0 -24
  385. package/src/runtime/vendor/flywheel-cli-dist/auth/profile.d.ts +0 -15
  386. package/src/runtime/vendor/flywheel-cli-dist/auth/profile.js +0 -150
  387. package/src/runtime/vendor/flywheel-cli-dist/auth/profile.js.map +0 -1
  388. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.d.ts +0 -27
  389. package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.d.ts +0 -27
  390. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.d.ts +0 -32
  391. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.js +0 -213
  392. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.js.map +0 -1
  393. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.d.ts +0 -21
  394. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.d.ts +0 -2
  395. package/src/runtime/vendor/flywheel-cli-dist/commands/_secret-param.d.ts +0 -7
  396. package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.d.ts +0 -39
  397. package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-writer.d.ts +0 -34
  398. package/src/runtime/vendor/flywheel-cli-dist/commands/_wait-polling.d.ts +0 -50
  399. package/src/runtime/vendor/flywheel-cli-dist/commands/account-detach.d.ts +0 -2
  400. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-add.d.ts +0 -2
  401. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-remove.d.ts +0 -2
  402. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-set-primary.d.ts +0 -2
  403. package/src/runtime/vendor/flywheel-cli-dist/commands/account-get.d.ts +0 -2
  404. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-preview.d.ts +0 -2
  405. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-proof.d.ts +0 -2
  406. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge.d.ts +0 -2
  407. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.d.ts +0 -2
  408. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.d.ts +0 -2
  409. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.d.ts +0 -2
  410. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.d.ts +0 -2
  411. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.d.ts +0 -4
  412. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.d.ts +0 -2
  413. package/src/runtime/vendor/flywheel-cli-dist/commands/aliases.d.ts +0 -13
  414. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-create.d.ts +0 -2
  415. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-delete.d.ts +0 -2
  416. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-list.d.ts +0 -18
  417. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-rotate.d.ts +0 -2
  418. package/src/runtime/vendor/flywheel-cli-dist/commands/approval-sessions-expire.d.ts +0 -2
  419. package/src/runtime/vendor/flywheel-cli-dist/commands/approval-sessions-heartbeat.d.ts +0 -2
  420. package/src/runtime/vendor/flywheel-cli-dist/commands/approval-sessions-list.d.ts +0 -2
  421. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete-bulk.d.ts +0 -2
  422. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete-bulk.js +0 -22
  423. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete-bulk.js.map +0 -1
  424. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete.d.ts +0 -2
  425. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete.js +0 -8
  426. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete.js.map +0 -1
  427. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-get.d.ts +0 -2
  428. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-list.d.ts +0 -2
  429. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-note-set.d.ts +0 -2
  430. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-note-set.js +0 -9
  431. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-note-set.js.map +0 -1
  432. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-finalize.d.ts +0 -2
  433. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-finalize.js +0 -7
  434. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-finalize.js.map +0 -1
  435. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-prepare.d.ts +0 -2
  436. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-prepare.js +0 -15
  437. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload-prepare.js.map +0 -1
  438. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload.d.ts +0 -2
  439. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload.js +0 -5
  440. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-upload.js.map +0 -1
  441. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-clear.d.ts +0 -2
  442. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-clear.js +0 -8
  443. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-clear.js.map +0 -1
  444. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-set.d.ts +0 -2
  445. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-set.js +0 -30
  446. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-keychain-set.js.map +0 -1
  447. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-login.d.ts +0 -2
  448. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-mode.d.ts +0 -4
  449. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-status.d.ts +0 -2
  450. package/src/runtime/vendor/flywheel-cli-dist/commands/blobs-get.d.ts +0 -2
  451. package/src/runtime/vendor/flywheel-cli-dist/commands/campaign-budgets-create.d.ts +0 -2
  452. package/src/runtime/vendor/flywheel-cli-dist/commands/campaign-budgets-list.d.ts +0 -1
  453. package/src/runtime/vendor/flywheel-cli-dist/commands/campaign-budgets-revoke.d.ts +0 -1
  454. package/src/runtime/vendor/flywheel-cli-dist/commands/campaign-budgets-update.d.ts +0 -2
  455. package/src/runtime/vendor/flywheel-cli-dist/commands/campaign-snapshot.d.ts +0 -1
  456. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-acquire.d.ts +0 -2
  457. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-budgets.d.ts +0 -2
  458. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-connection.d.ts +0 -2
  459. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-funding.d.ts +0 -2
  460. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-list.d.ts +0 -2
  461. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-request-approval.d.ts +0 -2
  462. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-options.d.ts +0 -2
  463. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-release-all.d.ts +0 -2
  464. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-release.d.ts +0 -2
  465. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-status.d.ts +0 -2
  466. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-balance.d.ts +0 -1
  467. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-billing-portal.d.ts +0 -2
  468. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-purchase.d.ts +0 -2
  469. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-referral-claim.d.ts +0 -2
  470. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-referral.d.ts +0 -1
  471. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-subscribe.d.ts +0 -2
  472. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-subscription.d.ts +0 -1
  473. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-transactions.d.ts +0 -2
  474. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-usage.d.ts +0 -2
  475. package/src/runtime/vendor/flywheel-cli-dist/commands/destructive-confirmation.d.ts +0 -2
  476. package/src/runtime/vendor/flywheel-cli-dist/commands/enums.d.ts +0 -22
  477. package/src/runtime/vendor/flywheel-cli-dist/commands/env.d.ts +0 -8
  478. package/src/runtime/vendor/flywheel-cli-dist/commands/executions-launch.d.ts +0 -2
  479. package/src/runtime/vendor/flywheel-cli-dist/commands/executions-list.d.ts +0 -1
  480. package/src/runtime/vendor/flywheel-cli-dist/commands/executions-terminate.d.ts +0 -2
  481. package/src/runtime/vendor/flywheel-cli-dist/commands/export-history.d.ts +0 -2
  482. package/src/runtime/vendor/flywheel-cli-dist/commands/export-subgraph.d.ts +0 -2
  483. package/src/runtime/vendor/flywheel-cli-dist/commands/export-summary-pdf.d.ts +0 -2
  484. package/src/runtime/vendor/flywheel-cli-dist/commands/export-summary-render-pdf.d.ts +0 -2
  485. package/src/runtime/vendor/flywheel-cli-dist/commands/export-summary-stream.d.ts +0 -2
  486. package/src/runtime/vendor/flywheel-cli-dist/commands/export-summary.d.ts +0 -2
  487. package/src/runtime/vendor/flywheel-cli-dist/commands/feedback-create.d.ts +0 -2
  488. package/src/runtime/vendor/flywheel-cli-dist/commands/files-list.d.ts +0 -2
  489. package/src/runtime/vendor/flywheel-cli-dist/commands/github-disconnect.d.ts +0 -1
  490. package/src/runtime/vendor/flywheel-cli-dist/commands/github-link.d.ts +0 -2
  491. package/src/runtime/vendor/flywheel-cli-dist/commands/github-refresh-repos.d.ts +0 -1
  492. package/src/runtime/vendor/flywheel-cli-dist/commands/github-status.d.ts +0 -1
  493. package/src/runtime/vendor/flywheel-cli-dist/commands/graph-get.d.ts +0 -2
  494. package/src/runtime/vendor/flywheel-cli-dist/commands/handler-factory.d.ts +0 -22
  495. package/src/runtime/vendor/flywheel-cli-dist/commands/help-format.d.ts +0 -31
  496. package/src/runtime/vendor/flywheel-cli-dist/commands/help-metadata.d.ts +0 -36
  497. package/src/runtime/vendor/flywheel-cli-dist/commands/help.d.ts +0 -17
  498. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.d.ts +0 -2
  499. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.d.ts +0 -1
  500. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.d.ts +0 -2
  501. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.d.ts +0 -2
  502. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.d.ts +0 -2
  503. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.d.ts +0 -1
  504. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.d.ts +0 -1
  505. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.d.ts +0 -2
  506. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.d.ts +0 -2
  507. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.d.ts +0 -2
  508. package/src/runtime/vendor/flywheel-cli-dist/commands/import-subgraph.d.ts +0 -2
  509. package/src/runtime/vendor/flywheel-cli-dist/commands/index.d.ts +0 -23
  510. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-huggingface-remove.d.ts +0 -1
  511. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-huggingface-set.d.ts +0 -2
  512. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-status.d.ts +0 -1
  513. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-wandb-remove.d.ts +0 -1
  514. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-wandb-set.d.ts +0 -2
  515. package/src/runtime/vendor/flywheel-cli-dist/commands/machines-list.d.ts +0 -1
  516. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-add-parent.d.ts +0 -2
  517. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-add-parent.js +0 -15
  518. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-add-parent.js.map +0 -1
  519. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-branch.d.ts +0 -2
  520. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-branch.js +0 -10
  521. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-branch.js.map +0 -1
  522. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-children.d.ts +0 -2
  523. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-children.js +0 -8
  524. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-children.js.map +0 -1
  525. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit-new.d.ts +0 -2
  526. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit-new.js +0 -6
  527. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit-new.js.map +0 -1
  528. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit.d.ts +0 -2
  529. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit.js +0 -7
  530. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-commit.js.map +0 -1
  531. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-create.d.ts +0 -2
  532. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-create.js +0 -6
  533. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-create.js.map +0 -1
  534. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete-bulk.d.ts +0 -2
  535. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete-bulk.js +0 -16
  536. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete-bulk.js.map +0 -1
  537. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete.d.ts +0 -2
  538. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete.js +0 -11
  539. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete.js.map +0 -1
  540. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-files.d.ts +0 -1
  541. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-get.d.ts +0 -2
  542. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-list.d.ts +0 -2
  543. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-merge.d.ts +0 -2
  544. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-merge.js +0 -33
  545. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-merge.js.map +0 -1
  546. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-parents.d.ts +0 -2
  547. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-parents.js +0 -8
  548. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-parents.js.map +0 -1
  549. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-remove-parent.d.ts +0 -2
  550. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-remove-parent.js +0 -15
  551. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-remove-parent.js.map +0 -1
  552. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-render-ancestry.d.ts +0 -2
  553. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-render-summary.d.ts +0 -2
  554. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-render-tree.d.ts +0 -2
  555. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-resolve-slug.d.ts +0 -2
  556. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-sharing-get.d.ts +0 -1
  557. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-sharing-set-bulk.d.ts +0 -2
  558. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-sharing-set.d.ts +0 -2
  559. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-sharing-summaries.d.ts +0 -2
  560. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-stage-lease-acquire.d.ts +0 -2
  561. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-stage-lease-heartbeat.d.ts +0 -2
  562. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-stage-lease-release.d.ts +0 -2
  563. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-list.d.ts +0 -2
  564. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.d.ts +0 -2
  565. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-show.d.ts +0 -2
  566. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-unset.d.ts +0 -2
  567. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/account.d.ts +0 -2
  568. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.d.ts +0 -8
  569. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/api-keys.d.ts +0 -2
  570. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/approval.d.ts +0 -2
  571. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/artifacts.d.ts +0 -2
  572. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/artifacts.js +0 -140
  573. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/artifacts.js.map +0 -1
  574. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.d.ts +0 -2
  575. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/budgets.d.ts +0 -2
  576. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/compute.d.ts +0 -2
  577. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/credits.d.ts +0 -2
  578. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/env.d.ts +0 -2
  579. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/executions.d.ts +0 -2
  580. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/export.d.ts +0 -2
  581. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/github.d.ts +0 -2
  582. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/graph.d.ts +0 -2
  583. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.d.ts +0 -2
  584. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/integrations.d.ts +0 -2
  585. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.d.ts +0 -2
  586. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.d.ts +0 -2
  587. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/resources.d.ts +0 -2
  588. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/sharing.d.ts +0 -2
  589. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/tagging.d.ts +0 -2
  590. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/tagging.js +0 -98
  591. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/tagging.js.map +0 -1
  592. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/updates.d.ts +0 -2
  593. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.d.ts +0 -27
  594. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-refresh.d.ts +0 -2
  595. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-resolve.d.ts +0 -2
  596. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-assign.d.ts +0 -2
  597. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-assign.js +0 -25
  598. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-assign.js.map +0 -1
  599. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-create.d.ts +0 -2
  600. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-create.js +0 -25
  601. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-create.js.map +0 -1
  602. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-delete.d.ts +0 -2
  603. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-delete.js +0 -11
  604. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-delete.js.map +0 -1
  605. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-update.d.ts +0 -2
  606. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-update.js +0 -28
  607. package/src/runtime/vendor/flywheel-cli-dist/commands/tags-update.js.map +0 -1
  608. package/src/runtime/vendor/flywheel-cli-dist/commands/types.d.ts +0 -30
  609. package/src/runtime/vendor/flywheel-cli-dist/commands/updates-hide-all-active.d.ts +0 -1
  610. package/src/runtime/vendor/flywheel-cli-dist/commands/updates-hide.d.ts +0 -2
  611. package/src/runtime/vendor/flywheel-cli-dist/commands/updates-list.d.ts +0 -2
  612. package/src/runtime/vendor/flywheel-cli-dist/commands/usage-spec.d.ts +0 -6
  613. package/src/runtime/vendor/flywheel-cli-dist/commands/utils.d.ts +0 -11
  614. package/src/runtime/vendor/flywheel-cli-dist/errors.d.ts +0 -86
  615. package/src/runtime/vendor/flywheel-cli-dist/exit-codes.d.ts +0 -8
  616. package/src/runtime/vendor/flywheel-cli-dist/generatedFeedbackContract.d.ts +0 -41
  617. package/src/runtime/vendor/flywheel-cli-dist/generatedProductTelemetryContract.d.ts +0 -13
  618. package/src/runtime/vendor/flywheel-cli-dist/grammar/globals.d.ts +0 -26
  619. package/src/runtime/vendor/flywheel-cli-dist/grammar/parse.d.ts +0 -17
  620. package/src/runtime/vendor/flywheel-cli-dist/http/client.d.ts +0 -91
  621. package/src/runtime/vendor/flywheel-cli-dist/http/debug.d.ts +0 -5
  622. package/src/runtime/vendor/flywheel-cli-dist/http/poll.d.ts +0 -18
  623. package/src/runtime/vendor/flywheel-cli-dist/http/retry.d.ts +0 -30
  624. package/src/runtime/vendor/flywheel-cli-dist/main.d.ts +0 -33
  625. package/src/runtime/vendor/flywheel-cli-dist/output/format.d.ts +0 -9
  626. package/src/runtime/vendor/flywheel-cli-dist/runtime-entry.d.ts +0 -1
  627. package/src/runtime/vendor/flywheel-cli-dist/version.d.ts +0 -3
  628. package/src/secure-write.mjs +0 -43
@@ -1,8 +1,9 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { CliApprovalPendingError, } from '../errors.js';
3
- import { EXIT_AUTH, EXIT_TRANSPORT, } from '../exit-codes.js';
4
- import { maskForDebug, maskQueryString, redactExternalUrlForOutput, } from './debug.js';
5
- import { isRetryableNetworkError, isRetryableStatus, parseRetryAfterMs, withRetry, } from './retry.js';
1
+ import { randomUUID } from "node:crypto";
2
+ import { parseRepositoryJson } from "../local/domain/models/encoding.js";
3
+ import { CliApprovalPendingError, } from "../errors.js";
4
+ import { EXIT_AUTH, EXIT_TRANSPORT } from "../exit-codes.js";
5
+ import { maskHeadersForDebug, maskQueryString } from "./debug.js";
6
+ import { isRetryableNetworkError, isRetryableStatus, parseRetryAfterMs, withRetry, } from "./retry.js";
6
7
  export class CliHttpError extends Error {
7
8
  exitCode;
8
9
  status;
@@ -10,7 +11,7 @@ export class CliHttpError extends Error {
10
11
  request;
11
12
  constructor(message, exitCode, status, body, request) {
12
13
  super(message);
13
- this.name = 'CliHttpError';
14
+ this.name = "CliHttpError";
14
15
  this.exitCode = exitCode;
15
16
  this.status = status;
16
17
  this.body = body;
@@ -21,18 +22,26 @@ class RetryableHttpError extends CliHttpError {
21
22
  retryAfterMs;
22
23
  constructor(message, status, retryAfterMs, body, request) {
23
24
  super(message, EXIT_TRANSPORT, status, body, request);
24
- this.name = 'RetryableHttpError';
25
+ this.name = "RetryableHttpError";
25
26
  this.retryAfterMs = retryAfterMs;
26
27
  }
27
28
  }
28
- const API_VERSION_PREFIX = '/v1';
29
+ class RetryableResponseBodyError extends Error {
30
+ original;
31
+ constructor(original) {
32
+ super(original instanceof Error ? original.message : String(original));
33
+ this.name = "RetryableResponseBodyError";
34
+ this.original = original;
35
+ }
36
+ }
37
+ const API_VERSION_PREFIX = "/v1";
29
38
  const ROOT_ONLY_PREFIXES = [
30
- '/admin',
31
- '/auth/accounts',
32
- '/auth/github',
33
- '/auth/integrations',
34
- '/health',
35
- '/repos',
39
+ "/admin",
40
+ "/auth/accounts",
41
+ "/auth/github",
42
+ "/auth/integrations",
43
+ "/health",
44
+ "/repos",
36
45
  ];
37
46
  function mapStatusToExitCode(status) {
38
47
  if (status === 401 || status === 403) {
@@ -41,35 +50,35 @@ function mapStatusToExitCode(status) {
41
50
  return EXIT_TRANSPORT;
42
51
  }
43
52
  function shouldBypassGenericRetryForProviderErrorBody(body) {
44
- if (!body || typeof body !== 'object') {
53
+ if (!body || typeof body !== "object") {
45
54
  return false;
46
55
  }
47
56
  const detail = body.detail;
48
- if (!detail || typeof detail !== 'object') {
57
+ if (!detail || typeof detail !== "object") {
49
58
  return false;
50
59
  }
51
60
  const providerError = detail.provider_error;
52
- if (!providerError || typeof providerError !== 'object') {
61
+ if (!providerError || typeof providerError !== "object") {
53
62
  return false;
54
63
  }
55
64
  const typed = providerError;
56
- return typed.retryable === false || typed.refresh_offers_before_retry === true;
65
+ return (typed.retryable === false || typed.refresh_offers_before_retry === true);
57
66
  }
58
67
  function maskUrlForDebug(target) {
59
68
  // Masks sensitive query parameters (tokens, credentials, signed-upload
60
69
  // params) before stringifying. Preserves origin + path + hash verbatim.
61
70
  try {
62
- const url = typeof target === 'string' ? new URL(target) : target;
71
+ const url = typeof target === "string" ? new URL(target) : target;
63
72
  const maskedSearch = maskQueryString(url.search);
64
73
  return `${url.origin}${url.pathname}${maskedSearch}${url.hash}`;
65
74
  }
66
75
  catch {
67
- return typeof target === 'string' ? target : target.toString();
76
+ return typeof target === "string" ? target : target.toString();
68
77
  }
69
78
  }
70
79
  function toQueryString(query) {
71
80
  if (!query) {
72
- return '';
81
+ return "";
73
82
  }
74
83
  const params = new URLSearchParams();
75
84
  for (const [key, value] of Object.entries(query)) {
@@ -82,32 +91,34 @@ function toQueryString(query) {
82
91
  params.set(key, String(value));
83
92
  }
84
93
  const encoded = params.toString();
85
- return encoded ? `?${encoded}` : '';
94
+ return encoded ? `?${encoded}` : "";
86
95
  }
87
96
  function normalizeInternalPath(path) {
88
- return path.startsWith('/') ? path : `/${path}`;
97
+ return path.startsWith("/") ? path : `/${path}`;
89
98
  }
90
99
  function normalizeApiVersionPrefix(prefix) {
91
100
  const raw = prefix ?? API_VERSION_PREFIX;
92
101
  const normalized = raw.trim();
93
- if (normalized === '' || normalized === '/') {
94
- return '';
102
+ if (normalized === "" || normalized === "/") {
103
+ return "";
95
104
  }
96
- return `/${normalized.replace(/^\/+|\/+$/g, '')}`;
105
+ return `/${normalized.replace(/^\/+|\/+$/g, "")}`;
97
106
  }
98
- function stripTrailingApiVersionPrefixFromBaseUrl(baseUrl, apiVersionPrefix) {
99
- const normalizedBase = baseUrl.replace(/\/+$/, '');
100
- if (apiVersionPrefix === '') {
107
+ export function effectiveApiBaseUrl(baseUrl, apiVersionPrefix) {
108
+ apiVersionPrefix = normalizeApiVersionPrefix(apiVersionPrefix);
109
+ const normalizedBase = baseUrl.replace(/\/+$/, "");
110
+ if (apiVersionPrefix === "") {
101
111
  return normalizedBase;
102
112
  }
103
113
  try {
104
114
  const parsed = new URL(normalizedBase);
105
- const cleanPath = parsed.pathname.replace(/\/+$/u, '');
106
- if (cleanPath === apiVersionPrefix || cleanPath.endsWith(apiVersionPrefix)) {
107
- parsed.pathname = cleanPath.slice(0, -apiVersionPrefix.length) || '/';
108
- parsed.search = '';
109
- parsed.hash = '';
110
- return parsed.toString().replace(/\/+$/, '');
115
+ const cleanPath = parsed.pathname.replace(/\/+$/u, "");
116
+ if (cleanPath === apiVersionPrefix ||
117
+ cleanPath.endsWith(apiVersionPrefix)) {
118
+ parsed.pathname = cleanPath.slice(0, -apiVersionPrefix.length) || "/";
119
+ parsed.search = "";
120
+ parsed.hash = "";
121
+ return parsed.toString().replace(/\/+$/, "");
111
122
  }
112
123
  }
113
124
  catch {
@@ -120,7 +131,7 @@ function isRootOnlyPath(path) {
120
131
  }
121
132
  function versionedRequestPath(path, apiVersionPrefix) {
122
133
  const normalized = normalizeInternalPath(path);
123
- if (apiVersionPrefix === '' || isRootOnlyPath(normalized)) {
134
+ if (apiVersionPrefix === "" || isRootOnlyPath(normalized)) {
124
135
  return normalized;
125
136
  }
126
137
  if (normalized === apiVersionPrefix ||
@@ -132,31 +143,34 @@ function versionedRequestPath(path, apiVersionPrefix) {
132
143
  function baseUrlLooksLikeOriginRoot(baseUrl) {
133
144
  try {
134
145
  const parsed = new URL(baseUrl);
135
- const cleanPath = parsed.pathname.replace(/\/+$/, '');
136
- return cleanPath === '' || cleanPath === '/';
146
+ const cleanPath = parsed.pathname.replace(/\/+$/, "");
147
+ return cleanPath === "" || cleanPath === "/";
137
148
  }
138
149
  catch {
139
150
  return false;
140
151
  }
141
152
  }
142
153
  function clampWaitTimeoutSeconds(value) {
143
- const raw = typeof value === 'number' && Number.isFinite(value) ? value : 600;
154
+ const raw = typeof value === "number" && Number.isFinite(value) ? value : 600;
144
155
  return Math.min(3600, Math.max(10, Math.trunc(raw)));
145
156
  }
146
157
  function buildHttpErrorMessage(status, baseUrl) {
147
158
  const base = `request failed with status ${status}`;
148
- if ((status === 401 || status === 404) && baseUrlLooksLikeOriginRoot(baseUrl)) {
149
- return `${base} — base URL appears to be an origin root; try ${baseUrl.replace(/\/+$/, '')}/api`;
159
+ if ((status === 401 || status === 404) &&
160
+ baseUrlLooksLikeOriginRoot(baseUrl)) {
161
+ return `${base} — base URL appears to be an origin root; try ${baseUrl.replace(/\/+$/, "")}/api`;
150
162
  }
151
163
  return base;
152
164
  }
153
- async function readResponseBody(response) {
154
- const contentType = response.headers.get('content-type') ?? '';
155
- if (contentType.includes('application/json')) {
165
+ async function readResponseBody(response, signal) {
166
+ const contentType = response.headers.get("content-type") ?? "";
167
+ if (contentType.includes("application/json")) {
156
168
  try {
157
169
  return await response.json();
158
170
  }
159
- catch {
171
+ catch (error) {
172
+ if (signal?.aborted || isRetryableNetworkError(error))
173
+ throw error;
160
174
  return null;
161
175
  }
162
176
  }
@@ -172,10 +186,16 @@ async function readResponseBody(response) {
172
186
  return text;
173
187
  }
174
188
  }
175
- catch {
189
+ catch (error) {
190
+ if (signal?.aborted || isRetryableNetworkError(error))
191
+ throw error;
176
192
  return null;
177
193
  }
178
194
  }
195
+ async function readRepositoryJsonResponse(response) {
196
+ const text = await response.text();
197
+ return parseRepositoryJson(text);
198
+ }
179
199
  function snapshotResponse(status, body) {
180
200
  return { status, body };
181
201
  }
@@ -186,76 +206,57 @@ function elapsedMsSince(startedAtMs) {
186
206
  return Math.max(0, Date.now() - startedAtMs);
187
207
  }
188
208
  function shouldIncludeRecoveryGuidance(failureKind) {
189
- return (failureKind === 'timeout' ||
190
- failureKind === 'transport' ||
191
- failureKind === 'retryable_status');
209
+ return (failureKind === "timeout" ||
210
+ failureKind === "transport" ||
211
+ failureKind === "retryable_status" ||
212
+ failureKind === "response_body");
192
213
  }
193
214
  function pathWithoutApiVersion(path) {
194
- return path.replace(/^\/v\d+(?=\/)/, '');
215
+ return path.replace(/^\/v\d+(?=\/)/, "");
195
216
  }
196
217
  function isReplayBackedWrite(method, path) {
197
218
  const normalizedPath = pathWithoutApiVersion(path);
198
- return ((method === 'POST' && normalizedPath === '/nodes/commit-new') ||
199
- (method === 'POST' &&
200
- /^\/nodes\/[^/]+\/stage\/lease\/(?:acquire|heartbeat|release)$/.test(normalizedPath)) ||
201
- (method === 'POST' &&
202
- /^\/nodes\/[^/]+\/(?:commit|branch)$/.test(normalizedPath)) ||
203
- (method === 'POST' &&
204
- /^\/nodes\/[^/]+\/parents\/(?:add|remove)$/.test(normalizedPath)) ||
205
- (method === 'DELETE' && /^\/nodes\/[^/]+$/.test(normalizedPath)) ||
206
- (method === 'POST' && normalizedPath === '/nodes/bulk-delete') ||
207
- (method === 'POST' && normalizedPath === '/nodes/merge') ||
208
- (method === 'PUT' &&
219
+ return ((method === "POST" &&
220
+ /^\/nodes\/[^/]+\/stage\/lease\/(?:acquire|heartbeat|release)$/.test(normalizedPath)) ||
221
+ (method === "PUT" &&
209
222
  /^\/nodes\/[^/]+\/access-policy$/.test(normalizedPath)) ||
210
- (method === 'POST' && normalizedPath === '/nodes/access-policy/bulk') ||
211
- (method === 'POST' &&
212
- /^\/nodes\/[^/]+\/artifacts\/uploads\/prepare$/.test(normalizedPath)) ||
213
- (method === 'POST' &&
214
- /^\/nodes\/[^/]+\/artifacts\/uploads\/finalize$/.test(normalizedPath)) ||
215
- (method === 'POST' &&
216
- /^\/nodes\/[^/]+\/artifacts\/bulk-delete$/.test(normalizedPath)) ||
217
- (method === 'DELETE' &&
218
- /^\/nodes\/[^/]+\/artifacts\/[^/]+$/.test(normalizedPath)) ||
219
- (method === 'PATCH' &&
220
- /^\/nodes\/[^/]+\/artifacts\/[^/]+\/note$/.test(normalizedPath)) ||
221
- (method === 'POST' &&
223
+ (method === "POST" && normalizedPath === "/nodes/access-policy/bulk") ||
224
+ (method === "POST" &&
222
225
  /^\/nodes\/[^/]+\/executions$/.test(normalizedPath)) ||
223
- (method === 'POST' &&
226
+ (method === "POST" &&
224
227
  /^\/nodes\/[^/]+\/executions\/[^/]+\/terminate$/.test(normalizedPath)) ||
225
- (method === 'POST' &&
228
+ (method === "POST" &&
226
229
  /^\/nodes\/[^/]+\/compute\/acquire$/.test(normalizedPath)) ||
227
- (method === 'POST' &&
230
+ (method === "POST" &&
228
231
  /^\/users\/me\/machines\/[^/]+\/release$/.test(normalizedPath)) ||
229
- (method === 'POST' &&
230
- normalizedPath === '/users/me/machines/release-all') ||
231
- (method === 'POST' &&
232
- normalizedPath === '/compute-grants/request-approval') ||
233
- (method === 'POST' &&
234
- /^\/nodes\/[^/]+\/tags$/.test(normalizedPath)) ||
235
- (method === 'PATCH' &&
236
- /^\/nodes\/[^/]+\/tags\/[^/]+$/.test(normalizedPath)) ||
237
- (method === 'DELETE' &&
238
- /^\/nodes\/[^/]+\/tags\/[^/]+$/.test(normalizedPath)) ||
239
- (method === 'PUT' && /^\/nodes\/[^/]+\/tags$/.test(normalizedPath)) ||
240
- (method === 'POST' && normalizedPath === '/import'));
232
+ (method === "POST" &&
233
+ normalizedPath === "/users/me/machines/release-all") ||
234
+ (method === "POST" &&
235
+ normalizedPath === "/compute-grants/request-approval") ||
236
+ (method === "POST" && normalizedPath === "/admin/test-users") ||
237
+ (method === "DELETE" &&
238
+ /^\/admin\/test-users\/[^/]+$/.test(normalizedPath)) ||
239
+ (method === "POST" && normalizedPath === "/repositories") ||
240
+ (method === "POST" &&
241
+ /^\/repositories\/[^/]+\/(?:clone-sessions|pull-sessions|objects\/prepare|pushes|membership-removals|ownership-transfers|retirements|commits|purges)$/.test(normalizedPath)) ||
242
+ (method === "PUT" &&
243
+ /^\/repositories\/[^/]+\/(?:members\/[^/]+|objects\/sha256%3A[0-9a-f]{64})$/.test(normalizedPath)) ||
244
+ (method === "POST" && normalizedPath === "/import"));
241
245
  }
242
246
  function retrySafeForRequest(input) {
243
- if (input.method === 'GET') {
247
+ if (input.method === "GET") {
244
248
  return true;
245
249
  }
246
250
  if (!input.idempotencyKey) {
247
251
  return false;
248
252
  }
249
- if (input.wrapperStep === 'finalize') {
250
- return false;
251
- }
252
253
  return isReplayBackedWrite(input.method, input.path);
253
254
  }
254
255
  function buildRetryGuidance(input) {
255
256
  const feedbackHint = input.requestId
256
257
  ? ` If this keeps failing, run feedback:create and include request_id ${input.requestId}.`
257
- : ' If this keeps failing, run feedback:create and include the request details.';
258
- if (input.method === 'GET') {
258
+ : " If this keeps failing, run feedback:create and include the request details.";
259
+ if (input.method === "GET") {
259
260
  return `Retry the same read operation.${feedbackHint}`;
260
261
  }
261
262
  if (input.retrySafe && input.idempotencyKey) {
@@ -281,7 +282,7 @@ function buildFailureRequestContext(input) {
281
282
  if (input.idempotencyKey) {
282
283
  request.idempotencyKey = input.idempotencyKey;
283
284
  }
284
- if (typeof input.retryAfterMs === 'number') {
285
+ if (typeof input.retryAfterMs === "number") {
285
286
  request.retryAfterMs = input.retryAfterMs;
286
287
  }
287
288
  if (input.wrapperStep) {
@@ -299,7 +300,6 @@ function buildFailureRequestContext(input) {
299
300
  method: input.method,
300
301
  path: input.path,
301
302
  idempotencyKey: input.idempotencyKey,
302
- wrapperStep: input.wrapperStep,
303
303
  });
304
304
  request.retrySafe = retrySafe;
305
305
  request.retryGuidance = buildRetryGuidance({
@@ -313,25 +313,25 @@ function buildFailureRequestContext(input) {
313
313
  }
314
314
  function isApprovalRequiredBody(body) {
315
315
  return (body !== null &&
316
- typeof body === 'object' &&
317
- body.code === 'approval_required');
316
+ typeof body === "object" &&
317
+ body.code === "approval_required");
318
318
  }
319
319
  export function createHttpClient(options) {
320
320
  const transport = options.transport ?? fetch;
321
321
  const apiVersionPrefix = normalizeApiVersionPrefix(options.apiVersionPrefix);
322
- const normalizedBase = stripTrailingApiVersionPrefixFromBaseUrl(options.baseUrl, apiVersionPrefix);
322
+ const normalizedBase = effectiveApiBaseUrl(options.baseUrl, options.apiVersionPrefix);
323
323
  const invocationId = options.invocationId ?? randomUUID();
324
324
  const retryMax = options.retryMax ?? 3;
325
325
  const warnedPaths = new Set();
326
326
  function emitDeprecationWarning(path, response, debugLog) {
327
- const deprecation = response.headers.get('deprecation');
328
- if (!deprecation || deprecation.toLowerCase() === 'false')
327
+ const deprecation = response.headers.get("deprecation");
328
+ if (!deprecation || deprecation.toLowerCase() === "false")
329
329
  return;
330
330
  if (warnedPaths.has(path))
331
331
  return;
332
332
  warnedPaths.add(path);
333
- const sunset = response.headers.get('sunset');
334
- const hint = sunset ? ` (sunset: ${sunset})` : '';
333
+ const sunset = response.headers.get("sunset");
334
+ const hint = sunset ? ` (sunset: ${sunset})` : "";
335
335
  const line = `deprecation warning: this endpoint is deprecated${hint}`;
336
336
  if (debugLog)
337
337
  debugLog(line);
@@ -342,44 +342,44 @@ export function createHttpClient(options) {
342
342
  const debug = options.debug ?? false;
343
343
  const debugLog = options.debugLog ?? ((line) => process.stderr.write(`${line}\n`));
344
344
  const timeoutMs = options.timeoutMs ?? 300_000;
345
- async function doRequest(method, requestPath, requestOptions, idempotencyKey, requestId, startedAtMs, attempt, maxAttempts, requestIdempotencyKey) {
345
+ async function doRequest(method, requestPath, requestOptions, idempotencyKey, requestId, startedAtMs, attempt, maxAttempts, requestIdempotencyKey, responseMode, consumeResponse) {
346
346
  const url = new URL(`${normalizedBase}${requestPath}${toQueryString(requestOptions?.query)}`);
347
347
  const headers = {
348
- Accept: 'application/json',
348
+ Accept: "application/json",
349
349
  };
350
350
  if (options.apiKey && !requestOptions?.skipAuth) {
351
351
  headers.Authorization = `Bearer ${options.apiKey}`;
352
352
  }
353
- if (method !== 'GET' && !requestOptions?.skipIdempotency) {
354
- headers['Idempotency-Key'] = idempotencyKey;
353
+ if (method !== "GET") {
354
+ headers["Idempotency-Key"] = idempotencyKey;
355
355
  }
356
356
  if (requestOptions?.body !== undefined && !requestOptions.rawBody) {
357
- headers['Content-Type'] = 'application/json';
357
+ headers["Content-Type"] = "application/json";
358
358
  }
359
359
  if (options.cliVersion) {
360
- headers['X-Flywheel-Cli-Version'] = options.cliVersion;
361
- headers['User-Agent'] = `flywheel-cli/${options.cliVersion}`;
360
+ headers["X-Flywheel-Cli-Version"] = options.cliVersion;
361
+ headers["User-Agent"] = `flywheel-cli/${options.cliVersion}`;
362
362
  }
363
363
  if (options.commandName) {
364
- headers['X-Flywheel-Cli-Command'] = options.commandName;
364
+ headers["X-Flywheel-Cli-Command"] = options.commandName;
365
365
  }
366
366
  if (options.flagNames && options.flagNames.length > 0) {
367
- headers['X-Flywheel-Cli-Flags'] = options.flagNames.join(',');
367
+ headers["X-Flywheel-Cli-Flags"] = options.flagNames.join(",");
368
368
  }
369
- headers['X-Flywheel-Cli-Invocation-Id'] = invocationId;
370
- headers['X-Flywheel-Request-Id'] = requestId;
371
- headers['X-Request-ID'] = requestId;
369
+ headers["X-Flywheel-Cli-Invocation-Id"] = invocationId;
370
+ headers["X-Flywheel-Request-Id"] = requestId;
371
+ headers["X-Request-ID"] = requestId;
372
372
  const wrapperStep = requestOptions?.wrapperStep ?? options.wrapperStep;
373
373
  if (wrapperStep) {
374
- headers['X-Flywheel-Cli-Wrapper-Step'] = wrapperStep;
374
+ headers["X-Flywheel-Cli-Wrapper-Step"] = wrapperStep;
375
375
  }
376
376
  if (options.waitRequested === true) {
377
- headers['X-Flywheel-Cli-Wait-Requested'] = 'true';
378
- headers['X-Flywheel-Cli-Wait-Timeout-Seconds'] = String(clampWaitTimeoutSeconds(options.waitTimeoutS));
377
+ headers["X-Flywheel-Cli-Wait-Requested"] = "true";
378
+ headers["X-Flywheel-Cli-Wait-Timeout-Seconds"] = String(clampWaitTimeoutSeconds(options.waitTimeoutS));
379
379
  }
380
380
  const exitIntent = requestOptions?.exitIntent ?? options.exitIntent;
381
- if (typeof exitIntent === 'number') {
382
- headers['X-Flywheel-Cli-Exit-Intent'] = String(exitIntent);
381
+ if (typeof exitIntent === "number") {
382
+ headers["X-Flywheel-Cli-Exit-Intent"] = String(exitIntent);
383
383
  }
384
384
  if (requestOptions?.extraHeaders) {
385
385
  Object.assign(headers, requestOptions.extraHeaders);
@@ -391,18 +391,33 @@ export function createHttpClient(options) {
391
391
  : undefined;
392
392
  if (debug) {
393
393
  debugLog(`DEBUG: ${method} ${maskUrlForDebug(url)} ${JSON.stringify({
394
- headers: maskForDebug(headers),
395
- body: maskForDebug(requestOptions?.body ?? null),
394
+ headers: maskHeadersForDebug(headers),
395
+ body: {
396
+ present: requestOptions?.body !== undefined ||
397
+ requestOptions?.rawBody !== undefined,
398
+ },
396
399
  })}`);
397
400
  }
398
401
  const controller = new AbortController();
399
402
  const timer = setTimeout(() => controller.abort(new Error(`CLI HTTP timeout after ${timeoutMs}ms`)), timeoutMs);
400
403
  const progressInterval = process.stdout.isTTY
401
- ? setInterval(() => process.stderr.write('.'), 10_000)
402
- : null;
404
+ ? setInterval(() => process.stderr.write("."), 10_000)
405
+ : undefined;
403
406
  let response;
404
407
  try {
405
- response = await transport(url, { method, headers, body, signal: controller.signal });
408
+ response = await transport(url, {
409
+ method,
410
+ headers,
411
+ body: body,
412
+ signal: controller.signal,
413
+ ...(responseMode === "repository_json" || responseMode === "repository_raw"
414
+ ? { redirect: "error" }
415
+ : {}),
416
+ });
417
+ if (debug) {
418
+ debugLog(`DEBUG: ${method} ${maskUrlForDebug(url)} -> ${response.status}`);
419
+ }
420
+ return await consumeResponse(response, controller.signal);
406
421
  }
407
422
  catch (error) {
408
423
  if (controller.signal.aborted) {
@@ -416,13 +431,37 @@ export function createHttpClient(options) {
416
431
  attempt,
417
432
  maxAttempts,
418
433
  wrapperStep,
419
- failureKind: 'timeout',
434
+ failureKind: "timeout",
420
435
  }));
421
436
  }
422
437
  if (isRetryableNetworkError(error)) {
438
+ if (response === undefined) {
439
+ throw error;
440
+ }
441
+ if (retrySafeForRequest({
442
+ method,
443
+ path: requestPath,
444
+ idempotencyKey: requestIdempotencyKey,
445
+ })) {
446
+ throw new RetryableResponseBodyError(error);
447
+ }
448
+ throw new CliHttpError("transport error", EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
449
+ method,
450
+ path: requestPath,
451
+ requestId,
452
+ idempotencyKey: requestIdempotencyKey,
453
+ timeoutMs,
454
+ startedAtMs,
455
+ attempt,
456
+ maxAttempts,
457
+ wrapperStep,
458
+ failureKind: "response_body",
459
+ }));
460
+ }
461
+ if (response !== undefined) {
423
462
  throw error;
424
463
  }
425
- throw new CliHttpError('transport error', EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
464
+ throw new CliHttpError("transport error", EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
426
465
  method,
427
466
  path: requestPath,
428
467
  requestId,
@@ -432,75 +471,106 @@ export function createHttpClient(options) {
432
471
  attempt,
433
472
  maxAttempts,
434
473
  wrapperStep,
435
- failureKind: 'transport',
474
+ failureKind: "transport",
436
475
  }));
437
476
  }
438
477
  finally {
439
478
  clearTimeout(timer);
440
- if (progressInterval)
441
- clearInterval(progressInterval);
442
- }
443
- if (debug) {
444
- debugLog(`DEBUG: ${method} ${maskUrlForDebug(url)} -> ${response.status}`);
479
+ clearInterval(progressInterval);
445
480
  }
446
- return response;
447
481
  }
448
- async function requestWithRetry(method, path, requestOptions) {
482
+ async function requestWithRetry(method, path, requestOptions, responseMode, consumeRepositoryResponse) {
449
483
  const requestPath = versionedRequestPath(path, apiVersionPrefix);
450
- const idempotencyKey = options.idempotencyKey ?? randomUUID();
451
- const requestIdempotencyKey = method !== 'GET' && requestOptions?.skipIdempotency !== true
452
- ? idempotencyKey
453
- : undefined;
484
+ const idempotencyKey = requestOptions?.idempotencyKey ?? options.idempotencyKey ?? randomUUID();
485
+ const requestIdempotencyKey = method !== "GET" ? idempotencyKey : undefined;
454
486
  const requestId = randomUUID();
455
- const maxAttempts = normalizeMaxAttempts(retryEnabled ? retryMax : 1);
487
+ const maxAttempts = normalizeMaxAttempts(retryEnabled && requestOptions?.retryEnabled !== false ? retryMax : 1);
456
488
  const wrapperStep = requestOptions?.wrapperStep ?? options.wrapperStep;
457
489
  let attempt = 0;
458
490
  let lastAttemptStartedAtMs = Date.now();
459
491
  const fn = async () => {
460
492
  attempt += 1;
461
493
  lastAttemptStartedAtMs = Date.now();
462
- let response;
463
- try {
464
- response = await doRequest(method, requestPath, requestOptions, idempotencyKey, requestId, lastAttemptStartedAtMs, attempt, maxAttempts, requestIdempotencyKey);
465
- }
466
- catch (error) {
467
- // Network/transport layer errors propagate (retry layer decides).
468
- if (isRetryableNetworkError(error)) {
469
- throw error;
470
- }
471
- throw error;
472
- }
473
- if (!response.ok) {
474
- const body = await readResponseBody(response);
475
- if (response.status === 422 && isApprovalRequiredBody(body)) {
476
- const approvalBody = body;
477
- throw new CliApprovalPendingError(typeof approvalBody.message === 'string'
478
- ? approvalBody.message
479
- : 'approval required', {
480
- approvalUrl: typeof approvalBody.approval_url === 'string'
481
- ? approvalBody.approval_url
482
- : undefined,
483
- approvalRequestId: typeof approvalBody.approval_request_id === 'string'
484
- ? approvalBody.approval_request_id
485
- : undefined,
486
- grantId: typeof approvalBody.grant_id === 'string'
487
- ? approvalBody.grant_id
488
- : undefined,
489
- requiredSignoffs: Array.isArray(approvalBody.required_signoffs)
490
- ? approvalBody.required_signoffs.filter((v) => typeof v === 'string')
491
- : undefined,
492
- serverResponse: snapshotResponse(response.status, body),
493
- request: {
494
+ return await doRequest(method, requestPath, requestOptions, idempotencyKey, requestId, lastAttemptStartedAtMs, attempt, maxAttempts, requestIdempotencyKey, responseMode, async (response, signal) => {
495
+ if (!response.ok) {
496
+ const body = await readResponseBody(response, signal);
497
+ if (response.status === 422 && isApprovalRequiredBody(body)) {
498
+ const approvalBody = body;
499
+ throw new CliApprovalPendingError(typeof approvalBody.message === "string"
500
+ ? approvalBody.message
501
+ : "approval required", {
502
+ approvalUrl: typeof approvalBody.approval_url === "string"
503
+ ? approvalBody.approval_url
504
+ : undefined,
505
+ approvalRequestId: typeof approvalBody.approval_request_id === "string"
506
+ ? approvalBody.approval_request_id
507
+ : undefined,
508
+ grantId: typeof approvalBody.grant_id === "string"
509
+ ? approvalBody.grant_id
510
+ : undefined,
511
+ requiredSignoffs: Array.isArray(approvalBody.required_signoffs)
512
+ ? approvalBody.required_signoffs.filter((v) => typeof v === "string")
513
+ : undefined,
514
+ serverResponse: snapshotResponse(response.status, body),
515
+ request: {
516
+ method,
517
+ path: requestPath,
518
+ requestId,
519
+ },
520
+ });
521
+ }
522
+ if (isRetryableStatus(response.status)) {
523
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"));
524
+ const suppressRetryGuidance = shouldBypassGenericRetryForProviderErrorBody(body);
525
+ throw new RetryableHttpError(buildHttpErrorMessage(response.status, options.baseUrl), response.status, retryAfterMs, body, buildFailureRequestContext({
494
526
  method,
495
527
  path: requestPath,
496
528
  requestId,
497
- },
498
- });
499
- }
500
- if (isRetryableStatus(response.status)) {
501
- const retryAfterMs = parseRetryAfterMs(response.headers.get('retry-after'));
502
- const suppressRetryGuidance = shouldBypassGenericRetryForProviderErrorBody(body);
503
- throw new RetryableHttpError(buildHttpErrorMessage(response.status, options.baseUrl), response.status, retryAfterMs, body, buildFailureRequestContext({
529
+ idempotencyKey: requestIdempotencyKey,
530
+ timeoutMs,
531
+ startedAtMs: lastAttemptStartedAtMs,
532
+ attempt,
533
+ maxAttempts,
534
+ retryAfterMs,
535
+ wrapperStep,
536
+ failureKind: "retryable_status",
537
+ suppressRetryGuidance,
538
+ }));
539
+ }
540
+ if (response.status === 426) {
541
+ throw new CliHttpError("upgrade required: install the latest @paradigma-inc/flywheel package", EXIT_TRANSPORT, 426, body, buildFailureRequestContext({
542
+ method,
543
+ path: requestPath,
544
+ requestId,
545
+ idempotencyKey: requestIdempotencyKey,
546
+ timeoutMs,
547
+ startedAtMs: lastAttemptStartedAtMs,
548
+ attempt,
549
+ maxAttempts,
550
+ wrapperStep,
551
+ failureKind: "http_status",
552
+ }));
553
+ }
554
+ if (response.status === 410) {
555
+ const hint = body &&
556
+ typeof body === "object" &&
557
+ typeof body.replacement === "string"
558
+ ? body.replacement
559
+ : null;
560
+ throw new CliHttpError(`resource gone${hint ? ` — use ${hint}` : ""}`, EXIT_TRANSPORT, 410, body, buildFailureRequestContext({
561
+ method,
562
+ path: requestPath,
563
+ requestId,
564
+ idempotencyKey: requestIdempotencyKey,
565
+ timeoutMs,
566
+ startedAtMs: lastAttemptStartedAtMs,
567
+ attempt,
568
+ maxAttempts,
569
+ wrapperStep,
570
+ failureKind: "http_status",
571
+ }));
572
+ }
573
+ throw new CliHttpError(buildHttpErrorMessage(response.status, options.baseUrl), mapStatusToExitCode(response.status), response.status, body, buildFailureRequestContext({
504
574
  method,
505
575
  path: requestPath,
506
576
  requestId,
@@ -509,31 +579,47 @@ export function createHttpClient(options) {
509
579
  startedAtMs: lastAttemptStartedAtMs,
510
580
  attempt,
511
581
  maxAttempts,
512
- retryAfterMs,
513
582
  wrapperStep,
514
- failureKind: 'retryable_status',
515
- suppressRetryGuidance,
583
+ failureKind: "http_status",
516
584
  }));
517
585
  }
518
- if (response.status === 426) {
519
- throw new CliHttpError('upgrade required: install the latest @paradigma-inc/flywheel package', EXIT_TRANSPORT, 426, body, buildFailureRequestContext({
520
- method,
521
- path: requestPath,
522
- requestId,
523
- idempotencyKey: requestIdempotencyKey,
524
- timeoutMs,
525
- startedAtMs: lastAttemptStartedAtMs,
526
- attempt,
527
- maxAttempts,
528
- wrapperStep,
529
- failureKind: 'http_status',
530
- }));
586
+ emitDeprecationWarning(requestPath, response, debugLog);
587
+ if (consumeRepositoryResponse) {
588
+ return await consumeRepositoryResponse(response);
589
+ }
590
+ if (responseMode === "raw") {
591
+ return response;
592
+ }
593
+ let body = null;
594
+ let responseError;
595
+ if (responseMode === "repository_json") {
596
+ try {
597
+ body = await readRepositoryJsonResponse(response);
598
+ }
599
+ catch (error) {
600
+ if (signal.aborted || isRetryableNetworkError(error))
601
+ throw error;
602
+ body = undefined;
603
+ responseError = "response body could not be read or parsed as JSON";
604
+ }
531
605
  }
532
- if (response.status === 410) {
533
- const hint = body && typeof body === 'object' && typeof body.replacement === 'string'
534
- ? body.replacement
535
- : null;
536
- throw new CliHttpError(`resource gone${hint ? ` — use ${hint}` : ''}`, EXIT_TRANSPORT, 410, body, buildFailureRequestContext({
606
+ else {
607
+ const contentType = response.headers.get("content-type") ?? "";
608
+ if (contentType.includes("application/json")) {
609
+ try {
610
+ body = await response.json();
611
+ }
612
+ catch (error) {
613
+ if (signal.aborted || isRetryableNetworkError(error))
614
+ throw error;
615
+ body = undefined;
616
+ responseError = "response body could not be read or parsed as JSON";
617
+ }
618
+ }
619
+ }
620
+ responseError ??= requestOptions?.validateJson?.(body);
621
+ if (responseError !== undefined) {
622
+ throw new CliHttpError(responseError, EXIT_TRANSPORT, response.status, body, buildFailureRequestContext({
537
623
  method,
538
624
  path: requestPath,
539
625
  requestId,
@@ -543,24 +629,11 @@ export function createHttpClient(options) {
543
629
  attempt,
544
630
  maxAttempts,
545
631
  wrapperStep,
546
- failureKind: 'http_status',
632
+ failureKind: "response_body",
547
633
  }));
548
634
  }
549
- throw new CliHttpError(buildHttpErrorMessage(response.status, options.baseUrl), mapStatusToExitCode(response.status), response.status, body, buildFailureRequestContext({
550
- method,
551
- path: requestPath,
552
- requestId,
553
- idempotencyKey: requestIdempotencyKey,
554
- timeoutMs,
555
- startedAtMs: lastAttemptStartedAtMs,
556
- attempt,
557
- maxAttempts,
558
- wrapperStep,
559
- failureKind: 'http_status',
560
- }));
561
- }
562
- emitDeprecationWarning(requestPath, response, debugLog);
563
- return response;
635
+ return body;
636
+ });
564
637
  };
565
638
  try {
566
639
  return await withRetry(fn, {
@@ -574,11 +647,14 @@ export function createHttpClient(options) {
574
647
  if (shouldBypassGenericRetryForProviderErrorBody(error.body)) {
575
648
  return { retry: false };
576
649
  }
577
- if (typeof error.retryAfterMs === 'number') {
650
+ if (typeof error.retryAfterMs === "number") {
578
651
  return { retry: true, delayMs: error.retryAfterMs };
579
652
  }
580
653
  return { retry: true };
581
654
  }
655
+ if (error instanceof RetryableResponseBodyError) {
656
+ return { retry: true };
657
+ }
582
658
  if (isRetryableNetworkError(error)) {
583
659
  return { retry: true };
584
660
  }
@@ -592,10 +668,30 @@ export function createHttpClient(options) {
592
668
  // out of withRetry after retries exhaust. Without this, runCli
593
669
  // would hit the generic Error path and lose the structured stderr
594
670
  // envelope, request metadata, and localhost-setup hint.
671
+ if (error instanceof RetryableResponseBodyError) {
672
+ const detail = error.original instanceof Error
673
+ ? error.original.message
674
+ : String(error.original);
675
+ throw new CliHttpError(`transport error: ${detail}`, EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
676
+ method,
677
+ path: requestPath,
678
+ requestId,
679
+ idempotencyKey: requestIdempotencyKey,
680
+ timeoutMs,
681
+ startedAtMs: lastAttemptStartedAtMs,
682
+ attempt: Math.max(1, attempt),
683
+ maxAttempts,
684
+ wrapperStep,
685
+ failureKind: "response_body",
686
+ }));
687
+ }
595
688
  if (error instanceof CliHttpError ||
596
689
  error instanceof CliApprovalPendingError) {
597
690
  throw error;
598
691
  }
692
+ if (responseMode === "repository_raw" && !isRetryableNetworkError(error)) {
693
+ throw error;
694
+ }
599
695
  const detail = error instanceof Error ? error.message : String(error);
600
696
  throw new CliHttpError(`transport error: ${detail}`, EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
601
697
  method,
@@ -607,98 +703,22 @@ export function createHttpClient(options) {
607
703
  attempt: Math.max(1, attempt),
608
704
  maxAttempts,
609
705
  wrapperStep,
610
- failureKind: 'transport',
706
+ failureKind: "transport",
611
707
  }));
612
708
  }
613
709
  }
614
710
  return {
615
711
  async requestJson(method, path, requestOptions) {
616
- const response = await requestWithRetry(method, path, requestOptions);
617
- if (requestOptions?.rawResponse) {
618
- return response;
619
- }
620
- const contentType = response.headers.get('content-type') ?? '';
621
- if (!contentType.includes('application/json')) {
622
- // 204/empty responses
623
- return null;
624
- }
625
- return (await response.json());
712
+ return requestWithRetry(method, path, requestOptions, "json");
626
713
  },
627
- async requestRaw(method, path, requestOptions) {
628
- return requestWithRetry(method, path, requestOptions);
714
+ async requestRepositoryJson(method, path, requestOptions) {
715
+ return requestWithRetry(method, path, requestOptions, "repository_json");
629
716
  },
630
- async requestRawExternal(method, absoluteUrl, rawOptions) {
631
- if (typeof absoluteUrl !== 'string' ||
632
- !(absoluteUrl.startsWith('http://') || absoluteUrl.startsWith('https://'))) {
633
- throw new TypeError('requestRawExternal requires an absolute URL');
634
- }
635
- const headers = {};
636
- if (rawOptions?.extraHeaders) {
637
- Object.assign(headers, rawOptions.extraHeaders);
638
- }
639
- if (debug) {
640
- debugLog(`DEBUG: ${method} ${redactExternalUrlForOutput(absoluteUrl)} (external) ${JSON.stringify({
641
- headers: maskForDebug(headers),
642
- })}`);
643
- }
644
- // Apply the same timeout + abort semantics as internal requests so
645
- // external uploads to stalled signed URLs can't hang the CLI past
646
- // the configured --timeout / profile default_timeout_s.
647
- const controller = new AbortController();
648
- const timer = setTimeout(() => controller.abort(new Error(`CLI HTTP timeout after ${timeoutMs}ms`)), timeoutMs);
649
- const progressInterval = process.stdout.isTTY
650
- ? setInterval(() => process.stderr.write('.'), 10_000)
651
- : null;
652
- const redactedPath = redactExternalUrlForOutput(absoluteUrl);
653
- const startedAtMs = Date.now();
654
- const wrapperStep = rawOptions?.wrapperStep ?? options.wrapperStep;
655
- let response;
656
- try {
657
- response = await transport(new URL(absoluteUrl), {
658
- method,
659
- headers,
660
- body: rawOptions?.rawBody,
661
- signal: controller.signal,
662
- });
663
- }
664
- catch (error) {
665
- // Mirror internal-request semantics so callers always receive a
666
- // structured CliHttpError envelope (with EXIT_TRANSPORT + the
667
- // redacted external URL as `request.path`) instead of a raw network
668
- // error bubbling out through the generic Error path in runCli.
669
- void error;
670
- if (controller.signal.aborted) {
671
- throw new CliHttpError(`request timed out after ${timeoutMs}ms`, EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
672
- method,
673
- path: redactedPath,
674
- timeoutMs,
675
- startedAtMs,
676
- attempt: 1,
677
- maxAttempts: 1,
678
- wrapperStep,
679
- failureKind: 'timeout',
680
- }));
681
- }
682
- throw new CliHttpError(`transport error while contacting ${redactedPath}`, EXIT_TRANSPORT, undefined, undefined, buildFailureRequestContext({
683
- method,
684
- path: redactedPath,
685
- timeoutMs,
686
- startedAtMs,
687
- attempt: 1,
688
- maxAttempts: 1,
689
- wrapperStep,
690
- failureKind: 'transport',
691
- }));
692
- }
693
- finally {
694
- clearTimeout(timer);
695
- if (progressInterval)
696
- clearInterval(progressInterval);
697
- }
698
- if (debug) {
699
- debugLog(`DEBUG: ${method} ${redactExternalUrlForOutput(absoluteUrl)} (external) -> ${response.status}`);
700
- }
701
- return response;
717
+ async requestRepositoryRaw(method, path, consumeResponse, requestOptions) {
718
+ return requestWithRetry(method, path, requestOptions, "repository_raw", consumeResponse);
719
+ },
720
+ async requestRaw(method, path, requestOptions) {
721
+ return requestWithRetry(method, path, requestOptions, "raw");
702
722
  },
703
723
  };
704
724
  }