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