@paradigma-inc/flywheel 0.1.53 → 0.1.72

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 (263) hide show
  1. package/README.md +149 -17
  2. package/package.json +4 -2
  3. package/skills/flywheel/SKILL.md +4 -3
  4. package/skills/flywheel/getting-started/flywheel-quickstart.md +4 -4
  5. package/skills/flywheel/references/flywheel-cli-tool-map.md +47 -35
  6. package/skills/flywheel/references/flywheel-mcp-tool-map.md +16 -5
  7. package/skills/flywheel/setting-up-flywheel/claude-code-cli-installation.md +3 -3
  8. package/skills/flywheel/setting-up-flywheel/codex-cli-installation.md +3 -3
  9. package/skills/flywheel/setting-up-flywheel/installation-overview.md +9 -8
  10. package/skills/flywheel/setting-up-flywheel/other-hosts-installation.md +1 -1
  11. package/skills/flywheel/setting-up-flywheel/updating-flywheel-mcp.md +4 -4
  12. package/skills/flywheel-auto/SKILL.md +4 -3
  13. package/skills/flywheel-auto/references/flywheel-cli-tool-map.md +37 -35
  14. package/skills/flywheel-auto/references/flywheel-mcp-tool-map.md +4 -4
  15. package/skills/flywheel-lookahead/SKILL.md +1 -1
  16. package/skills/flywheel-lookahead/references/flywheel-cli-tool-map.md +37 -35
  17. package/skills/flywheel-lookahead/references/flywheel-mcp-tool-map.md +4 -4
  18. package/skills/flywheel-prove/SKILL.md +1 -1
  19. package/skills/flywheel-reproduce/SKILL.md +4 -3
  20. package/skills/flywheel-reproduce/references/flywheel-cli-tool-map.md +37 -35
  21. package/skills/flywheel-reproduce/references/flywheel-mcp-tool-map.md +4 -4
  22. package/skills/flywheel-to-graph/SKILL.md +1 -1
  23. package/skills/flywheel-to-graph/references/flywheel-cli-tool-map.md +37 -35
  24. package/skills/flywheel-to-graph/references/flywheel-mcp-tool-map.md +4 -4
  25. package/skills/flywheel-tree/SKILL.md +1 -1
  26. package/src/agents.mjs +114 -48
  27. package/src/cli.mjs +373 -56
  28. package/src/mcp-writer.mjs +190 -17
  29. package/src/runtime/required-runtime-commands.json +19 -4
  30. package/src/runtime/vendor/flywheel-cli-dist/auth/login.d.ts +1 -0
  31. package/src/runtime/vendor/flywheel-cli-dist/auth/login.js +3 -6
  32. package/src/runtime/vendor/flywheel-cli-dist/auth/login.js.map +1 -1
  33. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.d.ts +1 -0
  34. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js +1 -1
  35. package/src/runtime/vendor/flywheel-cli-dist/auth/profiles.js.map +1 -1
  36. package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.d.ts +27 -0
  37. package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.js +54 -0
  38. package/src/runtime/vendor/flywheel-cli-dist/commands/_admin-auth.js.map +1 -0
  39. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.d.ts +1 -1
  40. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.js +6 -5
  41. package/src/runtime/vendor/flywheel-cli-dist/commands/_artifacts-upload-helpers.js.map +1 -1
  42. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.d.ts +21 -0
  43. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js +51 -0
  44. package/src/runtime/vendor/flywheel-cli-dist/commands/_browser-handoff.js.map +1 -0
  45. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.d.ts +1 -1
  46. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js +6 -3
  47. package/src/runtime/vendor/flywheel-cli-dist/commands/_open-url.js.map +1 -1
  48. package/src/runtime/vendor/flywheel-cli-dist/commands/_secret-param.d.ts +7 -0
  49. package/src/runtime/vendor/flywheel-cli-dist/commands/_secret-param.js +18 -0
  50. package/src/runtime/vendor/flywheel-cli-dist/commands/_secret-param.js.map +1 -0
  51. package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.d.ts +39 -0
  52. package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.js +72 -0
  53. package/src/runtime/vendor/flywheel-cli-dist/commands/_stream-file-out.js.map +1 -0
  54. package/src/runtime/vendor/flywheel-cli-dist/commands/account-detach.js +2 -0
  55. package/src/runtime/vendor/flywheel-cli-dist/commands/account-detach.js.map +1 -1
  56. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-add.js +2 -0
  57. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-add.js.map +1 -1
  58. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-remove.js +2 -0
  59. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-remove.js.map +1 -1
  60. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-set-primary.js +2 -0
  61. package/src/runtime/vendor/flywheel-cli-dist/commands/account-emails-set-primary.js.map +1 -1
  62. package/src/runtime/vendor/flywheel-cli-dist/commands/account-get.d.ts +2 -1
  63. package/src/runtime/vendor/flywheel-cli-dist/commands/account-get.js +6 -1
  64. package/src/runtime/vendor/flywheel-cli-dist/commands/account-get.js.map +1 -1
  65. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-preview.js +2 -0
  66. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-preview.js.map +1 -1
  67. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-proof.js +2 -0
  68. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge-proof.js.map +1 -1
  69. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge.js +2 -0
  70. package/src/runtime/vendor/flywheel-cli-dist/commands/account-merge.js.map +1 -1
  71. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.d.ts +2 -0
  72. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.js +11 -0
  73. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-get.js.map +1 -0
  74. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.d.ts +2 -0
  75. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.js +60 -0
  76. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-compute-policy-set.js.map +1 -0
  77. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.d.ts +2 -0
  78. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.js +115 -0
  79. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export-stream.js.map +1 -0
  80. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.d.ts +2 -0
  81. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.js +12 -0
  82. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-export.js.map +1 -0
  83. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.d.ts +4 -0
  84. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.js +39 -0
  85. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-graphs-list.js.map +1 -0
  86. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.d.ts +2 -0
  87. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.js +15 -0
  88. package/src/runtime/vendor/flywheel-cli-dist/commands/admin-nodes-audit-list.js.map +1 -0
  89. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-list.d.ts +18 -1
  90. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-list.js +38 -5
  91. package/src/runtime/vendor/flywheel-cli-dist/commands/api-keys-list.js.map +1 -1
  92. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete.js +1 -1
  93. package/src/runtime/vendor/flywheel-cli-dist/commands/artifacts-delete.js.map +1 -1
  94. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-mode.d.ts +4 -0
  95. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-mode.js +42 -0
  96. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-mode.js.map +1 -0
  97. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-status.js +15 -1
  98. package/src/runtime/vendor/flywheel-cli-dist/commands/auth-status.js.map +1 -1
  99. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-list.js +8 -2
  100. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-list.js.map +1 -1
  101. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-request-approval.js +6 -1
  102. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-grants-request-approval.js.map +1 -1
  103. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-release-all.js +18 -7
  104. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-release-all.js.map +1 -1
  105. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-billing-portal.js +8 -4
  106. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-billing-portal.js.map +1 -1
  107. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-purchase.js +8 -4
  108. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-purchase.js.map +1 -1
  109. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-subscribe.js +8 -4
  110. package/src/runtime/vendor/flywheel-cli-dist/commands/credits-subscribe.js.map +1 -1
  111. package/src/runtime/vendor/flywheel-cli-dist/commands/destructive-confirmation.d.ts +2 -0
  112. package/src/runtime/vendor/flywheel-cli-dist/commands/destructive-confirmation.js +7 -0
  113. package/src/runtime/vendor/flywheel-cli-dist/commands/destructive-confirmation.js.map +1 -0
  114. package/src/runtime/vendor/flywheel-cli-dist/commands/enums.d.ts +8 -0
  115. package/src/runtime/vendor/flywheel-cli-dist/commands/enums.js +4 -0
  116. package/src/runtime/vendor/flywheel-cli-dist/commands/enums.js.map +1 -1
  117. package/src/runtime/vendor/flywheel-cli-dist/commands/env.d.ts +0 -4
  118. package/src/runtime/vendor/flywheel-cli-dist/commands/env.js +7 -12
  119. package/src/runtime/vendor/flywheel-cli-dist/commands/env.js.map +1 -1
  120. package/src/runtime/vendor/flywheel-cli-dist/commands/export-history.js +42 -30
  121. package/src/runtime/vendor/flywheel-cli-dist/commands/export-history.js.map +1 -1
  122. package/src/runtime/vendor/flywheel-cli-dist/commands/export-subgraph.js +12 -4
  123. package/src/runtime/vendor/flywheel-cli-dist/commands/export-subgraph.js.map +1 -1
  124. package/src/runtime/vendor/flywheel-cli-dist/commands/github-link.js +9 -14
  125. package/src/runtime/vendor/flywheel-cli-dist/commands/github-link.js.map +1 -1
  126. package/src/runtime/vendor/flywheel-cli-dist/commands/help-format.d.ts +31 -0
  127. package/src/runtime/vendor/flywheel-cli-dist/commands/help-format.js +69 -0
  128. package/src/runtime/vendor/flywheel-cli-dist/commands/help-format.js.map +1 -0
  129. package/src/runtime/vendor/flywheel-cli-dist/commands/help.d.ts +6 -1
  130. package/src/runtime/vendor/flywheel-cli-dist/commands/help.js +226 -124
  131. package/src/runtime/vendor/flywheel-cli-dist/commands/help.js.map +1 -1
  132. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.d.ts +2 -0
  133. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.js +25 -0
  134. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-create.js.map +1 -0
  135. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.d.ts +1 -0
  136. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.js +6 -0
  137. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-delete.js.map +1 -0
  138. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.d.ts +2 -0
  139. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.js +10 -0
  140. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-list.js.map +1 -0
  141. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.d.ts +2 -0
  142. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.js +15 -0
  143. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-runs-list.js.map +1 -0
  144. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.d.ts +2 -0
  145. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.js +8 -0
  146. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-create.js.map +1 -0
  147. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.d.ts +1 -0
  148. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.js +6 -0
  149. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-delete.js.map +1 -0
  150. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.d.ts +1 -0
  151. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.js +6 -0
  152. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-list.js.map +1 -0
  153. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.d.ts +2 -0
  154. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.js +8 -0
  155. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-secrets-update.js.map +1 -0
  156. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.d.ts +2 -0
  157. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.js +8 -0
  158. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-set-enabled.js.map +1 -0
  159. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.d.ts +2 -0
  160. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.js +29 -0
  161. package/src/runtime/vendor/flywheel-cli-dist/commands/hooks-update.js.map +1 -0
  162. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js +36 -6
  163. package/src/runtime/vendor/flywheel-cli-dist/commands/index.js.map +1 -1
  164. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-huggingface-set.js +7 -3
  165. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-huggingface-set.js.map +1 -1
  166. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-wandb-set.js +6 -2
  167. package/src/runtime/vendor/flywheel-cli-dist/commands/integrations-wandb-set.js.map +1 -1
  168. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-add-parent.js +6 -1
  169. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-add-parent.js.map +1 -1
  170. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete-bulk.js +2 -0
  171. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete-bulk.js.map +1 -1
  172. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete.js +2 -0
  173. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-delete.js.map +1 -1
  174. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-remove-parent.js +8 -1
  175. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-remove-parent.js.map +1 -1
  176. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-resolve-slug.js +55 -2
  177. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-resolve-slug.js.map +1 -1
  178. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-list.js +13 -1
  179. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-list.js.map +1 -1
  180. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js +4 -2
  181. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-set.js.map +1 -1
  182. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-show.js +16 -1
  183. package/src/runtime/vendor/flywheel-cli-dist/commands/profile-show.js.map +1 -1
  184. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/account.js +8 -7
  185. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/account.js.map +1 -1
  186. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.d.ts +8 -0
  187. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js +131 -0
  188. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/admin.js.map +1 -0
  189. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/api-keys.js +8 -2
  190. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/api-keys.js.map +1 -1
  191. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/approval.js +29 -1
  192. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/approval.js.map +1 -1
  193. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/artifacts.js +13 -1
  194. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/artifacts.js.map +1 -1
  195. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js +2 -2
  196. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/auth.js.map +1 -1
  197. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/budgets.js +11 -2
  198. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/budgets.js.map +1 -1
  199. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/compute.js +2 -2
  200. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/compute.js.map +1 -1
  201. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/credits.js +8 -6
  202. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/credits.js.map +1 -1
  203. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/env.js +7 -5
  204. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/env.js.map +1 -1
  205. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/github.js +6 -14
  206. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/github.js.map +1 -1
  207. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.d.ts +2 -0
  208. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.js +312 -0
  209. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/hooks.js.map +1 -0
  210. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/integrations.js +22 -8
  211. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/integrations.js.map +1 -1
  212. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js +122 -25
  213. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/lifecycle.js.map +1 -1
  214. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js +2 -2
  215. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/profile.js.map +1 -1
  216. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/resources.js +1 -31
  217. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/resources.js.map +1 -1
  218. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/sharing.js +12 -4
  219. package/src/runtime/vendor/flywheel-cli-dist/commands/registry/sharing.js.map +1 -1
  220. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.d.ts +2 -1
  221. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js +46 -9
  222. package/src/runtime/vendor/flywheel-cli-dist/commands/registry.js.map +1 -1
  223. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-refresh.d.ts +2 -0
  224. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-refresh.js +20 -0
  225. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-refresh.js.map +1 -0
  226. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-resolve.d.ts +2 -0
  227. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-resolve.js +23 -0
  228. package/src/runtime/vendor/flywheel-cli-dist/commands/remote-artifacts-resolve.js.map +1 -0
  229. package/src/runtime/vendor/flywheel-cli-dist/errors.d.ts +15 -0
  230. package/src/runtime/vendor/flywheel-cli-dist/errors.js +16 -1
  231. package/src/runtime/vendor/flywheel-cli-dist/errors.js.map +1 -1
  232. package/src/runtime/vendor/flywheel-cli-dist/http/client.d.ts +1 -0
  233. package/src/runtime/vendor/flywheel-cli-dist/http/client.js +75 -19
  234. package/src/runtime/vendor/flywheel-cli-dist/http/client.js.map +1 -1
  235. package/src/runtime/vendor/flywheel-cli-dist/http/debug.d.ts +3 -0
  236. package/src/runtime/vendor/flywheel-cli-dist/http/debug.js +21 -2
  237. package/src/runtime/vendor/flywheel-cli-dist/http/debug.js.map +1 -1
  238. package/src/runtime/vendor/flywheel-cli-dist/main.js +119 -10
  239. package/src/runtime/vendor/flywheel-cli-dist/main.js.map +1 -1
  240. package/src/runtime/vendor/flywheel-cli-dist/output/format.js +44 -6
  241. package/src/runtime/vendor/flywheel-cli-dist/output/format.js.map +1 -1
  242. package/src/runtime/vendor/manifest.json +82 -10
  243. package/src/setup/base-url.mjs +43 -0
  244. package/src/setup/command.mjs +2 -0
  245. package/src/setup/io/patchers/json.mjs +2 -0
  246. package/src/setup/io/patchers/toml.mjs +7 -1
  247. package/src/setup/io/patchers/yaml.mjs +2 -0
  248. package/src/setup/modes/cli.mjs +72 -24
  249. package/src/setup/modes/mcp-command.mjs +146 -38
  250. package/src/setup/modes/mcp.mjs +26 -1
  251. package/src/setup/resolved-selection-record.mjs +25 -0
  252. package/src/setup/shared/prior-mode-detect.mjs +133 -14
  253. package/src/setup-auth.mjs +3 -2
  254. package/src/skill-installer.mjs +179 -1
  255. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.d.ts +0 -1
  256. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.js +0 -6
  257. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-get.js.map +0 -1
  258. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-set.d.ts +0 -2
  259. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-set.js +0 -19
  260. package/src/runtime/vendor/flywheel-cli-dist/commands/compute-policy-set.js.map +0 -1
  261. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.d.ts +0 -2
  262. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.js +0 -7
  263. package/src/runtime/vendor/flywheel-cli-dist/commands/nodes-audit-list.js.map +0 -1
package/README.md CHANGED
@@ -14,21 +14,40 @@ One-shot installer (macOS and Linux):
14
14
  curl -fsSL https://flywheel.paradigma.inc/install | sh
15
15
  ```
16
16
 
17
- The script runs `npm install -g @paradigma-inc/flywheel@latest` followed by
18
- `flywheel setup --mode cli`. You can read the full source at the same URL
19
- without piping to `sh`.
17
+ The script installs `@paradigma-inc/flywheel@latest` into the managed user
18
+ prefix `${FLYWHEEL_INSTALL_PREFIX:-$HOME/.local}`, adds a marked PATH block
19
+ when needed, and then runs guided `flywheel setup` through the installed binary.
20
+ In an interactive terminal, setup asks whether you want MCP host setup or
21
+ CLI-only setup. You can read the full source at the same URL without piping to
22
+ `sh`.
20
23
 
21
24
  Prefer the two-step npm recipe? It still works:
22
25
 
23
26
  ```bash
24
- # --mode cli installs the flywheel command, used by both you and your AI host
25
- npm install -g @paradigma-inc/flywheel@latest && flywheel setup --mode cli
27
+ # --mode cli: direct flywheel command setup without MCP host wiring
28
+ FLYWHEEL_INSTALL_PREFIX="${FLYWHEEL_INSTALL_PREFIX:-$HOME/.local}"
29
+ npm install -g --prefix "$FLYWHEEL_INSTALL_PREFIX" @paradigma-inc/flywheel@latest
30
+ export PATH="$FLYWHEEL_INSTALL_PREFIX/bin:$PATH"
31
+ "$FLYWHEEL_INSTALL_PREFIX/bin/flywheel" setup --mode cli
26
32
  ```
27
33
 
28
- On Windows (PowerShell), use `;` instead of `&&`:
34
+ Persist that PATH line in your shell profile if you use the manual recipe; the
35
+ curl installer does this idempotently with a marked Flywheel-owned block.
36
+
37
+ On Windows (PowerShell), use a user-owned prefix:
29
38
 
30
39
  ```powershell
31
- npm install -g @paradigma-inc/flywheel@latest; flywheel setup --mode cli
40
+ $prefix = "$env:USERPROFILE\.local"
41
+ npm install -g --prefix $prefix @paradigma-inc/flywheel@latest
42
+ $userPath = [Environment]::GetEnvironmentVariable("Path", "User")
43
+ if (($userPath -split ";") -notcontains $prefix) {
44
+ $nextUserPath = if ($userPath) { "$prefix;$userPath" } else { $prefix }
45
+ [Environment]::SetEnvironmentVariable("Path", $nextUserPath, "User")
46
+ }
47
+ if (($env:Path -split ";") -notcontains $prefix) {
48
+ $env:Path = "$prefix;$env:Path"
49
+ }
50
+ & "$prefix\flywheel.cmd" setup --mode cli
32
51
  ```
33
52
 
34
53
  Configure your AI host (Claude Code, Codex, etc.) to call Flywheel over MCP:
@@ -38,6 +57,33 @@ Configure your AI host (Claude Code, Codex, etc.) to call Flywheel over MCP:
38
57
  npx --yes @paradigma-inc/flywheel@latest setup --mode mcp --install-skill
39
58
  ```
40
59
 
60
+ ## Uninstall
61
+
62
+ One-shot uninstaller (macOS and Linux):
63
+
64
+ ```bash
65
+ curl -fsSL https://flywheel.paradigma.inc/uninstall | sh
66
+ ```
67
+
68
+ The script removes Flywheel MCP entries, bundled skills, the managed-prefix
69
+ `@paradigma-inc/flywheel` package, the `flywheel` binary, installer-owned PATH
70
+ block, default CLI config/profiles under `~/.config/flywheel-cli`, and the local
71
+ runtime cache under `~/.flywheel`. It does not delete remote Flywheel account
72
+ data, nodes, artifacts, billing data, GitHub connections, or other remote
73
+ resources.
74
+
75
+ Manual fallback:
76
+
77
+ ```bash
78
+ FLYWHEEL_INSTALL_PREFIX="${FLYWHEEL_INSTALL_PREFIX:-$HOME/.local}"
79
+ "$FLYWHEEL_INSTALL_PREFIX/bin/flywheel" uninstall --yes --scope all
80
+ npm uninstall -g --prefix "$FLYWHEEL_INSTALL_PREFIX" @paradigma-inc/flywheel
81
+ rm -rf "$HOME/.config/flywheel-cli" "$HOME/.flywheel"
82
+ ```
83
+
84
+ With `--yes --scope all` and no host selectors, `flywheel uninstall` targets
85
+ every supported host.
86
+
41
87
  ## Setup Modes
42
88
 
43
89
  ```bash
@@ -156,15 +202,18 @@ npx --yes @paradigma-inc/flywheel setup --mode mcp --install-skill \
156
202
 
157
203
  ## Host Matrix
158
204
 
159
- | Host | MCP wiring (`--mode mcp`) | CLI-mode bundled skill install (`--mode cli`) |
160
- | ------------ | ------------------------- | --------------------------------------------- |
161
- | Claude Code | yes | yes |
162
- | OpenCode | yes | yes |
163
- | Codex | yes | yes |
164
- | Cursor | yes | yes |
165
- | Pi (pi-mono) | yes | yes |
166
- | OpenClaw | yes | yes |
167
- | Hermes Agent | yes | no (MCP-only host) |
205
+ | Host | MCP wiring (`--mode mcp`) | CLI-mode bundled skill install (`--mode cli`) |
206
+ | ----------------------------- | ------------------------- | --------------------------------------------- |
207
+ | Claude Code | yes | yes |
208
+ | Cursor | yes | yes |
209
+ | Universal (`.agents/skills`) | no (skill-only) | yes |
210
+ | Antigravity (`.agent/skills`) | no (skill-only) | yes |
211
+ | OpenCode | yes | yes |
212
+ | Codex | yes | yes |
213
+ | Gemini CLI | yes | yes |
214
+ | Pi (pi-mono) | yes | yes |
215
+ | OpenClaw | yes | yes |
216
+ | Hermes Agent | yes | no (MCP-only host) |
168
217
 
169
218
  CLI mode handling for Hermes Agent:
170
219
 
@@ -172,6 +221,88 @@ CLI mode handling for Hermes Agent:
172
221
  - mixed supported + unsupported selection: command continues for supported
173
222
  hosts and reports skipped unsupported hosts
174
223
 
224
+ ### New flags (ctx7 alignment)
225
+
226
+ These flags align the `flywheel setup` surface with the `npx ctx7 setup`
227
+ convention while keeping every Flywheel-specific flag intact. They are
228
+ additive: existing invocations continue to behave as before.
229
+
230
+ #### `--oauth`
231
+
232
+ Writes an MCP config that omits the `Authorization` header and delegates
233
+ authentication to the IDE's MCP 2.0 OAuth discovery flow. No API key is
234
+ minted, stored, or transmitted by `flywheel setup` itself.
235
+
236
+ ```bash
237
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --claude --oauth --project
238
+ ```
239
+
240
+ The resulting `.mcp.json`:
241
+
242
+ ```json
243
+ {
244
+ "mcpServers": {
245
+ "flywheel": {
246
+ "type": "http",
247
+ "url": "https://flywheel.paradigma.inc/mcp-server"
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ The IDE must support MCP 2.0 OAuth discovery (Claude Code, Cursor, and
254
+ Gemini CLI currently do). On the first MCP tool call the IDE hits
255
+ `/mcp-server`, follows the `WWW-Authenticate` hint to
256
+ `/.well-known/oauth-protected-resource`, registers itself via
257
+ `/oauth/register`, completes the browser flow, and from then on manages
258
+ its own refresh tokens. No API key ever touches the user's filesystem.
259
+
260
+ `--api-key` and `--oauth` are mutually exclusive; passing both produces a
261
+ usage error (`exit 2`).
262
+
263
+ If a previous `flywheel setup` run wrote an MCP entry with an
264
+ `Authorization` header against the same URL, re-running with `--oauth`
265
+ will classify that entry as matching and leave the header in place. To
266
+ rewrite the config to drop the header, first run
267
+ `flywheel uninstall --<host> --project` and then re-run setup with
268
+ `--oauth`.
269
+
270
+ #### `--gemini`
271
+
272
+ Registers Flywheel as an MCP server for Gemini CLI at
273
+ `.gemini/settings.json` (project) or `~/.gemini/settings.json` (global).
274
+ Gemini CLI uses the `mcpServers.flywheel.httpUrl` key (not `url`); when
275
+ `--api-key <key>` is supplied, the setup writes a `Bearer <key>`
276
+ `Authorization` header. With `--oauth` the header is omitted.
277
+
278
+ ```bash
279
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --gemini --project --api-key <token>
280
+ ```
281
+
282
+ #### `--universal`
283
+
284
+ Skill-only target that writes Flywheel's bundled skills into
285
+ `./.agents/skills/<skill-name>/` (project) or `~/.agents/skills/<skill-name>/`
286
+ (global). Writes no MCP server config and no agent-specific rules. Useful
287
+ for toolchains that read the conventional `.agents/skills/` layout without
288
+ needing a Flywheel MCP binding. Requires `--mode cli` explicitly and is
289
+ never auto-detected; opt-in only.
290
+
291
+ ```bash
292
+ npx --yes @paradigma-inc/flywheel setup --mode cli --universal --project
293
+ ```
294
+
295
+ #### `--antigravity`
296
+
297
+ Same skill-only shape as `--universal` but targets
298
+ `./.agent/skills/<skill-name>/` (project) or `~/.agent/skills/<skill-name>/`
299
+ (global) — note the singular `.agent` directory. Writes no MCP server
300
+ config. Requires `--mode cli` explicitly and is never auto-detected.
301
+
302
+ ```bash
303
+ npx --yes @paradigma-inc/flywheel setup --mode cli --antigravity --project
304
+ ```
305
+
175
306
  ## Public Update Flow
176
307
 
177
308
  After a new release:
@@ -200,7 +331,8 @@ flags.
200
331
 
201
332
  - `setup`: setup flow with explicit mode routing.
202
333
  - `uninstall`: removes Flywheel MCP entries from host configs and removes
203
- bundled skills from supported hosts.
334
+ bundled skills from supported hosts. Use the one-shot uninstaller above for a
335
+ full local cleanup, including the global npm package and default local state.
204
336
 
205
337
  ```bash
206
338
  npx --yes @paradigma-inc/flywheel uninstall
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paradigma-inc/flywheel",
3
- "version": "0.1.53",
3
+ "version": "0.1.72",
4
4
  "description": "One-command setup for Flywheel MCP hosts",
5
5
  "type": "module",
6
6
  "files": [
@@ -25,7 +25,9 @@
25
25
  "open": "^10.2.0",
26
26
  "ora": "^9.0.0",
27
27
  "picocolors": "^1.1.1",
28
- "skills": "1.4.7"
28
+ "skills": "1.4.7",
29
+ "string-width": "^8.2.0",
30
+ "wrap-ansi": "^10.0.0"
29
31
  },
30
32
  "repository": {
31
33
  "type": "git",
@@ -25,7 +25,7 @@ If the request is ambiguous, default to experiment-design guidance before platfo
25
25
  This skill supports both Flywheel install modes:
26
26
 
27
27
  - **`--mode mcp` install**: route via [references/flywheel-mcp-tool-map.md](references/flywheel-mcp-tool-map.md); tool calls take the form `flywheel_<tool>` (e.g., `flywheel_commit_node`).
28
- - **`--mode cli` install**: `setup --mode cli` configures runtime credentials, then route via [references/flywheel-cli-tool-map.md](references/flywheel-cli-tool-map.md); tool calls take the form `flywheel <command>` (e.g., `flywheel nodes:commit`). Prerequisite for bare-binary routing: `npm install -g @paradigma-inc/flywheel`.
28
+ - **`--mode cli` install**: `setup --mode cli` configures runtime credentials, then route via [references/flywheel-cli-tool-map.md](references/flywheel-cli-tool-map.md); tool calls take the form `flywheel <command>` (e.g., `flywheel nodes:commit`). Prerequisite for bare-binary routing: run the curl installer with `--mode cli` or use the managed-prefix npm install recipe from the README.
29
29
 
30
30
  When switching an already-configured host between modes, rerun setup with `--force` (or uninstall first) so prior-mode artifacts are reconciled explicitly.
31
31
 
@@ -67,5 +67,6 @@ Choose one primary file first, then add at most one supporting file only if need
67
67
  known leases (leases acquired in the current run or explicitly selected by
68
68
  the user).
69
69
  - When unknown active leases are present, report and skip by default.
70
- - Use account-wide release (`flywheel_compute_release_all`) only when the user
71
- explicitly asks for account-wide cleanup.
70
+ - Use `flywheel_compute_release_all` for token-scoped bulk cleanup with the
71
+ active `lease_control_token`; add `force=true` only when the user explicitly
72
+ asks for account-wide cleanup.
@@ -3,19 +3,19 @@
3
3
  Install Flywheel in your MCP host with:
4
4
 
5
5
  ```bash
6
- npx @paradigma-inc/flywheel setup
6
+ npx --yes @paradigma-inc/flywheel setup --mode mcp
7
7
  ```
8
8
 
9
9
  If you installed Flywheel MCP before April 2026, migrate to the newer, more stable API key authentication setup with:
10
10
 
11
11
  ```bash
12
- npx @paradigma-inc/flywheel uninstall
13
- npx @paradigma-inc/flywheel setup
12
+ npx --yes @paradigma-inc/flywheel uninstall
13
+ npx --yes @paradigma-inc/flywheel setup --mode mcp
14
14
  ```
15
15
 
16
16
  If your previous install used a server name different from `flywheel`, pass `--name <old-name>` to uninstall that specific entry.
17
17
 
18
- If your MCP host is not supported by `npx @paradigma-inc/flywheel setup`, use manual host configuration:
18
+ If your MCP host is not supported by `npx --yes @paradigma-inc/flywheel setup --mode mcp`, use manual host configuration:
19
19
 
20
20
  - URL: `https://flywheel.paradigma.inc/mcp-server`
21
21
  - Header: `Authorization: Bearer <YOUR_MCP_API_KEY>`
@@ -29,7 +29,7 @@ The families below mirror `flywheel-mcp-tool-map.md` and list the canonical CLI
29
29
  - `flywheel updates:hide` (mutating; scopes: `write`; HTTP: `POST /updates/{announcement_id}/hide`; MCP equivalent: `flywheel_updates_hide`): Hide a specific announcement.
30
30
  - `flywheel updates:hide-all-active` (mutating; scopes: `write`; HTTP: `POST /updates/hide-all-active`; MCP equivalent: `flywheel_updates_hide_all_active`): Hide all currently active announcements.
31
31
  - `flywheel updates:unhide` (mutating; scopes: `write`; HTTP: `DELETE /updates/{announcement_id}/hide`; MCP equivalent: `flywheel_updates_unhide`): Restore a previously hidden announcement.
32
- - `flywheel nodes:list` (read; scopes: `read`; HTTP: `GET /nodes`; MCP equivalent: `flywheel_list_nodes`): List nodes with optional filters (owners/writers/visibility) and projection control (`core`, `topology`, `full`).
32
+ - `flywheel nodes:list` (read; scopes: `read`; HTTP: `GET /nodes`; MCP equivalent: `flywheel_list_nodes`): List nodes with optional pagination, status, and archive filters.
33
33
  - `flywheel nodes:resolve-slug` (read; scopes: `read`; HTTP: `GET /nodes/resolve-by-slug`; MCP equivalent: `flywheel_resolve_node_slug`): Resolve a slug to a node ID with explicit conflict handling (`unique`, `context_resolved`, `ambiguous`, `not_found`).
34
34
  - `flywheel nodes:sharing:get` (read; scopes: `read`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_get_node_sharing`): Get sharing (access policy) for a node.
35
35
  - `flywheel nodes:sharing:set` (mutating; scopes: `write`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_set_sharing_for_node`): Replace sharing (access policy) for a node.
@@ -38,7 +38,7 @@ The families below mirror `flywheel-mcp-tool-map.md` and list the canonical CLI
38
38
  - `flywheel tags:create` (mutating; scopes: `write`; HTTP: `POST /nodes/{root_node_id}/tags`; MCP equivalent: `flywheel_create_node_tag`): Create a reusable tag on a graph root.
39
39
  - `flywheel tags:update` (mutating; scopes: `write`; HTTP: `PATCH /nodes/{root_node_id}/tags/{tag_id}`; MCP equivalent: `flywheel_update_node_tag`): Update a tag definition.
40
40
  - `flywheel tags:delete` (mutating; scopes: `write`; HTTP: `DELETE /nodes/{root_node_id}/tags/{tag_id}`; MCP equivalent: `flywheel_delete_node_tag`): Delete a tag definition from the graph.
41
- - `flywheel tags:assign` (mutating; scopes: `write`; HTTP: `PUT /nodes/{node_id}/tags`; MCP equivalent: `flywheel_set_node_tag_assignments`): Assign or clear tags on a node (atomic replace; `--tag_ids` accepts a JSON array).
41
+ - `flywheel tags:assign` (mutating; scopes: `write`; HTTP: `PUT /nodes/{node_id}/tags`; MCP equivalent: `flywheel_set_node_tag_assignments`): Assign or clear tags on a node (atomic replace; `--tag_ids` accepts comma-separated IDs; `--expected_revision` is required).
42
42
  - `flywheel nodes:render:tree` (read; scopes: `read`; HTTP: `GET /nodes/{node_id}/tree`; MCP equivalent: `flywheel_get_node_tree`): Render a bounded tree projection for a node.
43
43
  - `flywheel nodes:render:ancestry` (read; scopes: `read`; HTTP: `GET /nodes/{node_id}/ancestry`; MCP equivalent: `flywheel_get_node_ancestry`): Render ancestry (roots-ward lineage) for a node.
44
44
  - `flywheel campaign:snapshot` (read; scopes: `read`; HTTP: `GET /nodes/{node_id}/campaign/snapshot`; MCP equivalent: `flywheel_get_campaign_snapshot`): Resolve campaign root snapshot for a node.
@@ -50,18 +50,20 @@ The families below mirror `flywheel-mcp-tool-map.md` and list the canonical CLI
50
50
  - `flywheel nodes:stage:lease:acquire` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/stage/lease/acquire`; MCP equivalent: `flywheel_acquire_stage_lease`): Acquire an edit lease for an existing node.
51
51
  - `flywheel nodes:stage:lease:heartbeat` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/stage/lease/heartbeat`; MCP equivalent: `flywheel_heartbeat_stage_lease`): Heartbeat an active node stage lease.
52
52
  - `flywheel nodes:stage:lease:release` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/stage/lease/release`; MCP equivalent: `flywheel_release_stage_lease`): Release a node stage lease.
53
- - `flywheel nodes:commit` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/commit`; MCP equivalent: `flywheel_commit_node`): Commit staged changes to an existing node under an active stage lease (`--stage_session_id`, `--base_committed_revision`, `--staged_payload` required).
54
- - `flywheel nodes:branch` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/branch`; MCP equivalent: `flywheel_branch_node`): Create a child branch from a node (`--expected_revision` required).
53
+ - `flywheel nodes:commit` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/commit`; MCP equivalent: `flywheel_commit_node`): Commit staged changes to an existing node under an active stage lease with a full `--payload_json` body.
54
+ - `flywheel nodes:branch` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/branch`; MCP equivalent: `flywheel_branch_node`): Create a child branch from a node. Preflight with `flywheel nodes:get --format=json` and pass `--expected_revision` for optimistic locking.
55
55
  - `flywheel nodes:merge` (mutating; scopes: `write`; HTTP: `POST /nodes/merge`; MCP equivalent: `flywheel_merge_nodes`): Merge multiple nodes into one resolved node.
56
56
  - `flywheel nodes:add-parent` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/parents/add`; MCP equivalent: `flywheel_add_parent`): Add a parent-child edge.
57
57
  - `flywheel nodes:remove-parent` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/parents/remove`; MCP equivalent: `flywheel_remove_parent`): Remove a parent-child edge.
58
- - `flywheel nodes:delete` (mutating; scopes: `write`; HTTP: `DELETE /nodes/{node_id}`; MCP equivalent: `flywheel_delete_node`): Delete a node by identifier. Modes: `cascade` (delete subtree), `detach_shared` (preserve descendants with surviving parents).
59
- - `flywheel nodes:delete-bulk` (mutating; scopes: `write`; HTTP: `POST /nodes/bulk-delete`; MCP equivalent: `flywheel_bulk_delete_nodes`): Delete multiple node subtrees.
58
+ - `flywheel nodes:delete` (mutating; scopes: `write`; HTTP: `DELETE /nodes/{node_id}`; MCP equivalent: `flywheel_delete_node`): Delete a node by identifier. Requires `--yes`. Modes: `cascade` (delete subtree), `detach_shared` (preserve descendants with surviving parents).
59
+ - `flywheel nodes:delete-bulk` (mutating; scopes: `write`; HTTP: `POST /nodes/bulk-delete`; MCP equivalent: `flywheel_bulk_delete_nodes`): Delete multiple node subtrees. Requires `--yes`.
60
60
 
61
61
  ### Artifacts
62
62
 
63
63
  - `flywheel artifacts:upload:prepare` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/artifacts/uploads/prepare`; MCP equivalent: `flywheel_prepare_artifact_uploads`): Create upload batch with signed per-item upload tickets. Upload raw file bytes to the returned URLs (no JSON metadata wrappers).
64
64
  - `flywheel artifacts:upload:finalize` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/artifacts/uploads/finalize`; MCP equivalent: `flywheel_finalize_artifact_uploads`): Finalize prepared artifact uploads and attach all staged artifacts in one revision bump.
65
+ - `flywheel remote-artifacts:resolve` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/remote-artifacts/resolve`; MCP equivalent: `flywheel_resolve_remote_artifact`): Resolve and materialize a public HTTPS JSON remote artifact for a node, using the cached artifact when it is still fresh.
66
+ - `flywheel remote-artifacts:refresh` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/remote-artifacts/refresh`; MCP equivalent: `flywheel_refresh_remote_artifact`): Force refresh and materialize a public HTTPS JSON remote artifact for a node.
65
67
  - `flywheel artifacts:list` (read; scopes: `read`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_list_artifacts`): List artifacts for a node.
66
68
  - `flywheel artifacts:get` (read; scopes: `read`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_get_artifact`): Fetch one artifact metadata record.
67
69
  - `flywheel artifacts:delete` (mutating; scopes: `write`; HTTP: `DELETE /nodes/{node_id}/artifacts/{artifact_id}`; MCP equivalent: `flywheel_delete_artifact`): Delete an artifact from a node (optimistic locking).
@@ -75,7 +77,7 @@ The families below mirror `flywheel-mcp-tool-map.md` and list the canonical CLI
75
77
 
76
78
  ### Compute and budgets
77
79
 
78
- - `flywheel compute:options` (read; scopes: `compute`; HTTP: `GET /compute/catalog`; MCP equivalent: `flywheel_compute_list_options`): List allowed compute catalog options for a node. Pass the same `--compute_grant_id` you will use for acquire when using grant-backed compute.
80
+ - `flywheel compute:options` (read; scopes: `compute`; HTTP: `GET /compute/catalog`; MCP equivalent: `flywheel_compute_list_options`): List allowed compute catalog options for a node. Use `--node_id`; optionally add `--provider`, `--limit`, or `--detail compact|full`.
79
81
  - `flywheel compute:funding` (read; scopes: `compute`; HTTP: `GET /compute/funding`; MCP equivalent: `flywheel_compute_funding`): Read grant-scoped funding context (`grant_cents`, `remaining_cents`, backing budget fields) before compute acquire.
80
82
  - `flywheel compute:status` (read; scopes: `compute`; HTTP: `GET /compute/status`; MCP equivalent: `flywheel_compute_status`): Return compute lease status. Lease rows include ownership flags so hosts can distinguish user-owned leases from sponsor-visible campaign leases.
81
83
  - `flywheel compute:connection` (read; scopes: `compute`; HTTP: `GET /compute/connection`; MCP equivalent: `flywheel_compute_connection`): Get SSH connection material for a usable lease (token-scoped to `lease_control_token`; only owned leases are connectable).
@@ -83,21 +85,21 @@ The families below mirror `flywheel-mcp-tool-map.md` and list the canonical CLI
83
85
  - `flywheel approval-sessions:list` (read; scopes: `compute`; HTTP: `GET /approval-sessions`; MCP equivalent: `flywheel_list_approval_sessions`): List approval sessions visible to the current user.
84
86
  - `flywheel approval-sessions:expire` (mutating; scopes: `compute`; HTTP: `POST /approval-sessions/expire`; MCP equivalent: `flywheel_expire_approval_session`): Expire the current compute-grant approval session context without releasing active leases.
85
87
  - `flywheel compute-grants:request-approval` (mutating; scopes: `compute`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_request_compute_grant_approval`): Request compute-grant approval; branch on response status (`already_approved`, `approval_required`, `insufficient_credits`).
86
- - `flywheel compute-grants:list` (read; scopes: `compute`; HTTP: `GET /compute/grants`; MCP equivalent: `flywheel_list_compute_grants`): List active/exhausted compute grants available to the user. Restrict by `--approval_session_id` to inspect session-bound grants.
88
+ - `flywheel compute-grants:list` (read; scopes: `compute`; HTTP: `GET /compute/grants`; MCP equivalent: `flywheel_list_compute_grants`): List active/expired compute grants available to the user. Filter with `--status` and restrict by `--approval_session_id` to inspect session-bound grants.
87
89
  - `flywheel campaign-budgets:list` (read; scopes: `compute`; HTTP: `GET /nodes/{root_node_id}/campaign-budgets`; MCP equivalent: `flywheel_list_campaign_budgets`): List campaign compute budgets for a root. Organizer-only management view.
88
90
  - `flywheel campaign-budgets:create` (mutating; scopes: `compute`; HTTP: `POST /nodes/{root_node_id}/campaign-budgets`; MCP equivalent: `flywheel_create_campaign_budget`): Create a campaign compute budget grant.
89
- - `flywheel campaign-budgets:update` (mutating; scopes: `compute`; HTTP: `PATCH /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; MCP equivalent: `flywheel_update_campaign_budget`): Update a campaign budget (partial; any `--key=value` becomes a field).
91
+ - `flywheel campaign-budgets:update` (mutating; scopes: `compute`; HTTP: `PATCH /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; MCP equivalent: `flywheel_update_campaign_budget`): Update explicit campaign budget fields such as `--hard_cap_cents`, `--per_user_hard_cap_cents`, `--name`, and `--description`.
90
92
  - `flywheel campaign-budgets:revoke` (mutating; scopes: `compute`; HTTP: `DELETE /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; MCP equivalent: `flywheel_revoke_campaign_budget`): Revoke a campaign budget grant.
91
93
  - `flywheel compute:acquire` (mutating; scopes: `compute`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_compute_acquire`): Acquire managed compute for a node. Set `--requested_sku` to the exact `offer_id` returned by `flywheel compute:options` (`options[].offer_id`), including provider prefixes (e.g., `nebius::...`); do not pass display names or partial IDs. Returns lease state only; poll `flywheel compute:status` for readiness.
92
94
  - `flywheel compute:release` (mutating; scopes: `compute`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_compute_release`): Release one active compute lease (async; use `--wait` to block).
93
- - `flywheel compute:release-all` (mutating; scopes: `compute`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_compute_release_all`): Release all active leases in current `lease_control_token` scope; pass `--force` for explicit account-wide cleanup.
95
+ - `flywheel compute:release-all` (mutating; scopes: `compute`; HTTP: `tool-mediated`; MCP equivalent: `flywheel_compute_release_all`): Release active leases in the current `lease_control_token` scope; `--force --yes` still requires `--lease_control_token` and explicitly broadens cleanup to all current-user active leases.
94
96
 
95
97
  ### Contract, audit, and export
96
98
 
97
99
  - (no CLI equivalent; MCP equivalent: `flywheel_get_contract`): MCP contract introspection is MCP-only. In `--mode cli` install, treat each command's `flywheel help <command>` output as the canonical per-command contract reference.
98
100
  - (no CLI equivalent; MCP equivalent: `flywheel_get_contract_section`): Same as above.
99
- - `flywheel export:subgraph` (read; scopes: `read`; HTTP: `POST /export`; MCP equivalent: `flywheel_export_subgraph`): Export a subgraph snapshot.
100
- - `flywheel import:subgraph` (mutating; scopes: `write`; HTTP: `POST /import`; MCP equivalent: `flywheel_import_subgraph`): Import graph JSON into new node records. Pass `--normalize_cycles=true` to drop cycle/self-loop edges; default rejects cyclic payloads.
101
+ - `flywheel export:subgraph` (read; scopes: `read`; HTTP: `POST /export`; MCP equivalent: `flywheel_export_subgraph`): Export a subgraph snapshot. Pass `--include_descendants true` to expand roots to visible descendants, bounded by `--max_nodes`.
102
+ - `flywheel import:subgraph` (mutating; scopes: `write`; HTTP: `POST /import`; MCP equivalent: `flywheel_import_subgraph`): Import graph JSON into new node records. Responses include `root_node_ids`, `imported_node_ids`, and `id_mapping`. Pass `--normalize_cycles=true` to drop cycle/self-loop edges; default rejects cyclic payloads.
101
103
  - `flywheel nodes:render:summary` (read; scopes: `read`; HTTP: `GET /nodes/{node_id}/summary`; MCP equivalent: `flywheel_summarize_node_tree`): Render a compact summary of a node subtree.
102
104
  - `flywheel export:summary` (read; scopes: `read`; HTTP: `POST /export-summary`; MCP equivalent: `flywheel_export_summary`): Generate a markdown summary export.
103
105
  - `flywheel export:summary:stream` (read; scopes: `read`; HTTP: `POST /export-summary-stream`; MCP equivalent: `flywheel_export_summary_stream`): Stream summary generation as NDJSON events.
@@ -132,8 +134,8 @@ These commands have no MCP counterpart. They cover auth/profile management, acco
132
134
 
133
135
  ### Compute policy and budgets (CLI-only)
134
136
 
135
- - `flywheel compute:policy:get` (read; scopes: `compute`): Read compute budget policy for a node.
136
- - `flywheel compute:policy:set` (mutating; scopes: `compute`): Update compute budget policy for a node (partial).
137
+ - `flywheel admin:compute:policy:get` (admin-only read; scopes: `compute`): Read compute budget policy for a node.
138
+ - `flywheel admin:compute:policy:set` (admin-only mutating; scopes: `compute`): Update explicit compute policy fields such as `--hard_cap_cents`, `--managed_compute_enabled`, `--provider_filters`, `--allowed_offer_ids`, `--preferred_offer_ids`, and `--auto_shutdown_idle_seconds`.
137
139
  - `flywheel compute:budgets` (read; scopes: `compute`): List budget grants visible for a node context.
138
140
  - `flywheel machines:list` (read; scopes: `compute`): List your managed compute leases.
139
141
 
@@ -155,13 +157,15 @@ These commands have no MCP counterpart. They cover auth/profile management, acco
155
157
  - `flywheel account:emails:remove` (mutating; scopes: `write`): Remove an email alias from your account.
156
158
  - `flywheel account:emails:set-primary` (mutating; scopes: `write`): Set your primary email address.
157
159
 
160
+ Account merge, detach, and email mutation commands are browser-session-bound. API-key-only invocations fail locally with `session_auth_required` and a Web settings deep link (`/app?settings=user`).
161
+
158
162
  ### Credits and billing
159
163
 
160
164
  - `flywheel credits:transactions` (read; scopes: `read`): View paginated credit transactions.
161
165
  - `flywheel credits:usage` (read; scopes: `read`): Feature-based usage breakdown over a window.
162
- - `flywheel credits:purchase` (mutating; scopes: `write`): Create a Stripe checkout session for a one-time purchase.
163
- - `flywheel credits:subscribe` (mutating; scopes: `write`): Create a Stripe checkout session for a subscription.
164
- - `flywheel credits:billing-portal` (mutating; scopes: `write`): Open the Stripe billing portal for the current user.
166
+ - `flywheel credits:purchase` (mutating; scopes: `write`): Create a Stripe checkout session for a one-time purchase and return `browser_flow_required` with the browser URL.
167
+ - `flywheel credits:subscribe` (mutating; scopes: `write`): Create a Stripe checkout session for a subscription and return `browser_flow_required` with the browser URL.
168
+ - `flywheel credits:billing-portal` (mutating; scopes: `write`): Open the Stripe billing portal for the current user and return `browser_flow_required` with the browser URL.
165
169
  - `flywheel credits:subscription` (read; scopes: `read`): View your subscription status.
166
170
  - `flywheel credits:referral` (read; scopes: `read`): View your referral code and status.
167
171
  - `flywheel credits:referral:claim` (mutating; scopes: `write`): Claim referral rewards using a code.
@@ -169,49 +173,49 @@ These commands have no MCP counterpart. They cover auth/profile management, acco
169
173
  ### Integrations
170
174
 
171
175
  - `flywheel github:status` (read; scopes: `read`): Check GitHub connection status.
172
- - `flywheel github:link` (mutating; scopes: `write`): Link a GitHub installation ID to your account.
176
+ - `flywheel github:link` (mutating; scopes: `write`): Start the GitHub App install/link browser flow. Does not accept callback installation parameters.
173
177
  - `flywheel github:refresh-repos` (mutating; scopes: `write`): Refresh the list of accessible repositories.
174
178
  - `flywheel github:disconnect` (mutating; scopes: `write`): Disconnect GitHub from your account.
175
179
  - `flywheel integrations:status` (read; scopes: `read`): Check integration connection status (W&B, Hugging Face).
176
- - `flywheel integrations:wandb:set` (mutating; scopes: `write`): Store a Weights & Biases API key.
180
+ - `flywheel integrations:wandb:set` (mutating; scopes: `write`): Store a Weights & Biases API key. Prefer `--api_key_env WANDB_API_KEY`.
177
181
  - `flywheel integrations:wandb:remove` (mutating; scopes: `write`): Remove your W&B credential.
178
- - `flywheel integrations:huggingface:set` (mutating; scopes: `write`): Store a Hugging Face access token.
182
+ - `flywheel integrations:huggingface:set` (mutating; scopes: `write`): Store a Hugging Face access token. Prefer `--token_env HF_TOKEN`; the CLI sends it to the API as `access_token`.
179
183
  - `flywheel integrations:huggingface:remove` (mutating; scopes: `write`): Remove your Hugging Face credential.
180
184
 
181
185
  ### API keys
182
186
 
183
- - `flywheel api-keys:list` (read; scopes: `read`): List your API keys.
187
+ - `flywheel api-keys:list` (read; scopes: `read`): List your API keys with bounded pagination (`--limit`, `--offset`); default output is a compact table and `--format=json` preserves the response envelope.
184
188
  - `flywheel api-keys:create` (mutating; scopes: `write`): Create a new API key and return the raw material once.
185
189
  - `flywheel api-keys:delete` (mutating; scopes: `write`): Delete an API key (refuses to delete the active one unless `--allow-self`).
186
190
  - `flywheel api-keys:rotate` (mutating; scopes: `write`): Rotate an API key (refuses to rotate the active one unless `--allow-self`).
187
- <!-- FLY-416: removed — device flow replaces legacy /setup-exchange. -->
188
- <!-- - `flywheel api-keys:setup-exchange:create` (mutating; scopes: `write`): Start browser-assisted setup exchange. -->
189
- <!-- - `flywheel api-keys:setup-exchange:redeem` (mutating; scopes: `write`): Redeem a setup exchange token into a raw API key. -->
191
+ <!-- FLY-416: removed — device flow replaces legacy /setup-exchange. -->
192
+ <!-- - `flywheel api-keys:setup-exchange:create` (mutating; scopes: `write`): Start browser-assisted setup exchange. -->
193
+ <!-- - `flywheel api-keys:setup-exchange:redeem` (mutating; scopes: `write`): Redeem a setup exchange token into a raw API key. -->
190
194
 
191
195
  ## Practical Command Sequences
192
196
 
193
197
  ### List Owned Nodes
194
198
 
195
- 1. `flywheel nodes:list --owners=me --projection=core`.
199
+ 1. `flywheel nodes:list --page 1 --page_size 20`.
196
200
 
197
201
  ### Safe Node Update
198
202
 
199
203
  1. `flywheel nodes:get --node_id=<id>`: Read latest node state and capture `revision`.
200
- 2. `flywheel nodes:stage:lease:acquire --node_id=<id> --expected_revision=<rev>`: Acquire a session-scoped stage lease.
201
- 3. `flywheel nodes:commit --node_id=<id> --stage_session_id=<sid> --base_committed_revision=<rev> --staged_payload=@payload.json`: Commit once terminal and contract-complete.
204
+ 2. `flywheel nodes:stage:lease:acquire --node_id=<id> --stage_session_id=<sid> --base_committed_revision=<rev>`: Acquire a session-scoped stage lease.
205
+ 3. `flywheel nodes:commit --node_id=<id> --payload_json=@payload.json`: Commit once terminal and contract-complete; the payload file includes `stage_session_id`, `base_committed_revision`, and `staged_payload`.
202
206
 
203
207
  ### Empirical Workflow
204
208
 
205
209
  1. `flywheel nodes:commit-new --payload_json=@new-node.json`: Commit a local staged new node to canonical storage as the first persistence boundary.
206
- 2. `flywheel compute-grants:request-approval --acquire_node_id=<id> --budget_source=user`: Request budget approval. Branch on response `status` (`already_approved` | `approval_required` | `insufficient_credits`).
207
- 3. If `approval_required`: present `approval_url` to the user, then `flywheel compute-grants:list --status=active --approval_session_id=<sid>` to fetch the active grant.
208
- 4. `flywheel compute:options --node_id=<id> --compute_grant_id=<gid>`: List allowed offers; pick the exact `offer_id`.
210
+ 2. `flywheel compute:options --node_id=<id> --detail compact`: List allowed offers; pick the exact `offer_id`.
211
+ 3. `flywheel compute-grants:request-approval --purpose "train" --requested_sku=<offer_id> --budget_source=user --acquire_node_id=<id>`: Request budget approval. Branch on response `status` (`already_approved` | `approval_required` | `insufficient_credits`).
212
+ 4. If `approval_required`: present `approval_url` to the user, then `flywheel compute-grants:list --status=active --approval_session_id=<sid>` to fetch the active grant.
209
213
  5. `flywheel compute:acquire --node_id=<id> --compute_grant_id=<gid> --requested_sku=<offer_id> --approval_session_id=<sid>`: Acquire lease.
210
214
  6. `flywheel compute:status --lease_control_token=<tok>`: Poll until the lease is ready.
211
215
  7. `flywheel executions:launch --node_id=<id>`: Launch execution.
212
216
  8. `flywheel executions:list --node_id=<id>`: Poll until execution reaches terminal status.
213
- 9. `flywheel artifacts:upload --node_id=<id> --file=results.json`: One-shot upload (or use the prepare/finalize split for streaming).
214
- 10. `flywheel nodes:commit --node_id=<id> ...`: Commit terminal empirical node.
217
+ 9. `flywheel artifacts:upload --node_id=<id> --expected_revision=<rev> --items=@items.json`: One-shot upload using an upload item array, for example `[{"local_path":"results.json","artifact_type":"json"}]` (or use the prepare/finalize split for streaming).
218
+ 10. `flywheel nodes:commit --node_id=<id> --payload_json=@payload.json`: Commit terminal empirical node.
215
219
 
216
220
  ## Runtime Guidance
217
221
 
@@ -220,8 +224,8 @@ These commands have no MCP counterpart. They cover auth/profile management, acco
220
224
  - `flywheel nodes:stage:lease:acquire`, `flywheel nodes:stage:lease:heartbeat`, `flywheel nodes:stage:lease:release` coordinate session-scoped local staged edits for an existing node before commit.
221
225
  - `flywheel campaign:snapshot` reads the current derived campaign state for a node's root campaign instead of inferring standings from freeform text.
222
226
  - `flywheel nodes:sharing:get` verifies sharing state after sharing writes before reporting private/shared/public state.
223
- - `flywheel tags:assign` accepts `--tag_ids` as a JSON array of strings; omitting `--tag_ids` clears all assignments.
224
- - `flywheel nodes:list` accepts canonical filters as repeated flags or comma-separated lists for `--owners`, `--writers`, `--visibility`.
227
+ - `flywheel tags:assign` accepts `--tag_ids t1,t2`; use `--tag_ids ""` to clear all assignments and always include `--expected_revision`.
228
+ - `flywheel nodes:list` accepts pagination plus status/archive filters such as `--page`, `--page_size`, `--status`, and `--include_archived`.
225
229
  - `flywheel compute:status` checks first when work may need managed compute (GPU), using the active `--lease_control_token` from prior acquire (or pass it explicitly).
226
230
  - `flywheel compute-grants:list` lists active compute grants and selects one `--compute_grant_id` for acquisition.
227
231
  - `flywheel compute-grants:request-approval` requests/confirms budget before acquire and chooses a budget source (`user` or `root`); branch on status (`already_approved`, `approval_required`, `insufficient_credits`).
@@ -235,7 +239,15 @@ These commands have no MCP counterpart. They cover auth/profile management, acco
235
239
  - `flywheel artifacts:upload:finalize` finalizes a staged artifact batch and appends all uploaded artifacts in one revision bump.
236
240
  - `flywheel artifacts:delete` removes an accidental/obsolete node artifact.
237
241
  - `flywheel artifacts:list`, `flywheel artifacts:get` inspect node artifact metadata (`title` is the display label) and consume `storage_url` for raw artifact bytes only.
238
- - `flywheel nodes:commit-new`, `flywheel nodes:commit` publish the caller's full staged payload for an existing node once terminal and contract-complete; commit on an existing node requires an active stage lease and explicit `--base_committed_revision`.
242
+ - `flywheel nodes:commit-new`, `flywheel nodes:commit` publish the caller's full staged payload once terminal and contract-complete; commit on an existing node requires an active stage lease and a `--payload_json` body with explicit `base_committed_revision`.
243
+
244
+ ## Admin only (FLY-359)
245
+
246
+ These commands require `FLYWHEEL_ADMIN_KEY` in the environment (forwarded as the `X-Admin-Key` header) or an admin browser session. Default help and JSON help hide admin commands unless `FLYWHEEL_ADMIN_KEY` or `FLYWHEEL_CLI_INTERNAL=1` is present, but explicit `flywheel help admin:<command>` still works. API-key-only callers fail locally with `admin_auth_required`. The endpoints are omitted from the public OpenAPI schema and from the API-key allowlist.
247
+
248
+ - `flywheel admin:graphs:list` — list every root-node graph across all users. Filters: `--tag-id`, `--kind`, `--owner-user-id`, `--created-after`, `--created-before`, `--cursor`, `--page-size` (1..200).
249
+ - `flywheel admin:graphs:export --root-node-id=<id>` — export one graph as canonical JSON, bypassing per-caller visibility.
250
+ - `flywheel admin:graphs:export:stream` — stream canonical graph JSON for many graphs as NDJSON (one page per call, `--out=<file>` to write to disk). Filters match `admin:graphs:list`.
239
251
 
240
252
  ## See Also
241
253
 
@@ -57,7 +57,7 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
57
57
  - `flywheel_heartbeat_stage_lease` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/stage/lease/heartbeat`; full-surface only): Refresh the active stage lease for the current editing session.
58
58
  - `flywheel_release_stage_lease` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/stage/lease/release`; full-surface only): Release the active stage lease for the current editing session.
59
59
  - `flywheel_commit_node` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/commit`; core surface): Commit an existing node by publishing the caller's staged payload under an active stage lease.
60
- - `flywheel_branch_node` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/branch`; full-surface only): Create a child branch node with optimistic locking (`expected_revision` required).
60
+ - `flywheel_branch_node` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/branch`; full-surface only): Create a child branch node with optimistic locking (`expected_revision` required); on 409, reread the node and retry with the current revision.
61
61
  - `flywheel_merge_nodes` (mutating; scopes: `write`; HTTP: `POST /nodes/merge`; full-surface only): Merge nodes with caller-resolved node payload.
62
62
  - `flywheel_add_parent` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/parents/add`; full-surface only): Attach an additional parent edge to an existing node (keeps node identity, validates against cycles).
63
63
  - `flywheel_remove_parent` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/parents/remove`; full-surface only): Detach one parent edge from a node without deleting the node.
@@ -68,6 +68,8 @@ Flywheel is a graph-based system for tracking research work, decisions, and evid
68
68
 
69
69
  - `flywheel_prepare_artifact_uploads` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/artifacts/uploads/prepare`; core surface): Prepare one or more raw-file artifact uploads (returns batch token + signed upload URLs). Upload must send raw file bytes to the returned URLs (do not upload JSON metadata wrappers).
70
70
  - `flywheel_finalize_artifact_uploads` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/artifacts/uploads/finalize`; core surface): Finalize a prepared artifact upload batch and append all staged artifacts to the node in one revision bump.
71
+ - `flywheel_resolve_remote_artifact` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/remote-artifacts/resolve`; core surface): Resolve and materialize a public HTTPS JSON remote artifact for a node, using the cached artifact when it is still fresh.
72
+ - `flywheel_refresh_remote_artifact` (mutating; scopes: `write`; HTTP: `POST /nodes/{node_id}/remote-artifacts/refresh`; core surface): Force refresh and materialize a public HTTPS JSON remote artifact for a node.
71
73
  - `flywheel_list_artifacts` (read; scopes: `read`; HTTP: `tool-mediated`; core surface): List node artifacts.
72
74
  - `flywheel_get_artifact` (read; scopes: `read`; HTTP: `tool-mediated`; core surface): Get one artifact by id.
73
75
  - `flywheel_delete_artifact` (mutating; scopes: `write`; HTTP: `DELETE /nodes/{node_id}/artifacts/{artifact_id}`; core surface): Delete one artifact by id with optimistic locking.
@@ -94,8 +96,9 @@ Hook workflow-if contract (first version):
94
96
  - Canonical none-artifact expression: `not: { any_artifact: ... }`.
95
97
  - Run cardinality is fixed at one run per `(hook_id, event_id)` (no artifact fanout).
96
98
  - Submission-only matching is typically `any_artifact.field=metadata.role` with `eq: submission`.
97
- - Workflow step types include `flywheel/http_request@v1`, `flywheel/http_poll@v1`, `flywheel/json_extract@v1`, `flywheel/load_artifact@v1`, and `flywheel/upsert_artifact@v1`.
99
+ - Workflow step types include `flywheel/http_request@v1`, `flywheel/http_poll@v1`, `flywheel/json_extract@v1`, `flywheel/load_artifact@v1`, `flywheel/upsert_artifact@v1`, and `flywheel/add_node_tags@v1`.
98
100
  - `flywheel/upsert_artifact@v1` selectors are authored under `with.match`; `match.metadata` is subset matching and ambiguous selectors fail terminally.
101
+ - `flywheel/add_node_tags@v1` adds ordinary root graph tags to a target node and preserves existing tag assignments; one-only tags are rejected in v1.
99
102
 
100
103
  ### Executions
101
104
 
@@ -114,20 +117,20 @@ Hook workflow-if contract (first version):
114
117
  - `flywheel_list_approval_sessions` (read; scopes: `compute`; HTTP: `GET /approval-sessions`; core surface): List approval sessions visible to the current user.
115
118
  - `flywheel_expire_approval_session` (mutating; scopes: `compute`; HTTP: `POST /approval-sessions/expire`; core surface): Expire the current compute-grant approval session context without releasing active leases.
116
119
  - `flywheel_request_compute_grant_approval` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Request budget approval context before managed compute acquisition; branch on response status.
117
- - `flywheel_list_compute_grants` (read; scopes: `compute`; HTTP: `GET /compute/grants`; core surface): List active/exhausted compute grants available to the current user.
120
+ - `flywheel_list_compute_grants` (read; scopes: `compute`; HTTP: `GET /compute/grants`; core surface): List active/expired compute grants available to the current user.
118
121
  - `flywheel_list_campaign_budgets` (read; scopes: `compute`; HTTP: `GET /nodes/{root_node_id}/campaign-budgets`; full-surface only): List campaign compute budgets for a campaign root. Organizer-only management view.
119
122
  - `flywheel_create_campaign_budget` (mutating; scopes: `compute`; HTTP: `POST /nodes/{root_node_id}/campaign-budgets`; full-surface only): Create an organizer-funded campaign compute budget shared with participants.
120
123
  - `flywheel_update_campaign_budget` (mutating; scopes: `compute`; HTTP: `PATCH /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; full-surface only): Update hard caps or metadata for an organizer-funded campaign compute budget.
121
124
  - `flywheel_revoke_campaign_budget` (mutating; scopes: `compute`; HTTP: `DELETE /nodes/{root_node_id}/campaign-budgets/{compute_budget_id}`; full-surface only): Revoke an organizer-funded campaign compute budget.
122
125
  - `flywheel_compute_acquire` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Acquire managed compute for a node with explicit SKU + region and required compute_grant_id (returns accepted/completed lease state only; poll flywheel_compute_status for readiness, not SSH key material). This tool forwards approval_session_id. Set `requested_sku` to the exact `offer_id` returned by `flywheel_compute_list_options` (`options[].offer_id`), including provider prefixes (for example `nebius::...`); do not pass display names or partial IDs.
123
126
  - `flywheel_compute_release` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Asynchronously release one managed compute lease by lease_id within the current lease_control_token scope.
124
- - `flywheel_compute_release_all` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Asynchronously release active managed compute leases in the current lease_control_token scope; set force=true for explicit account-wide cleanup for the current user.
127
+ - `flywheel_compute_release_all` (mutating; scopes: `compute`; HTTP: `tool-mediated`; core surface): Asynchronously release active managed compute leases in the current lease_control_token scope; set `force=true` with `lease_control_token` for explicit account-wide cleanup for the current user.
125
128
 
126
129
  ### Contract, audit, and export
127
130
 
128
131
  - `flywheel_get_contract` (read; scopes: `read`; HTTP: `GET /mcp/contract`; core surface): Return Flywheel MCP contract overview (scopes, write safety, operation catalog, and section index).
129
132
  - `flywheel_get_contract_section` (read; scopes: `read`; HTTP: `GET /mcp/contract/sections/{section_id}`; core surface): Return one contract section by section_id (for example `graph` or `campaign/template_v1`).
130
- - `flywheel_export_subgraph` (read; scopes: `read`; HTTP: `POST /export`; full-surface only): Export selected graph/subgraph nodes as JSON.
133
+ - `flywheel_export_subgraph` (read; scopes: `read`; HTTP: `POST /export`; full-surface only): Export selected graph/subgraph nodes as JSON. Set `include_descendants=true` to expand each requested root to visible descendants, bounded by `max_nodes`.
131
134
  - `flywheel_import_subgraph` (mutating; scopes: `write`; HTTP: `POST /import`; full-surface only): Import graph/subgraph JSON payload into new node IDs. Set normalize_cycles=true to drop cycle/self-loop edges; default rejects cyclic payloads.
132
135
  - `flywheel_summarize_node_tree` (read; scopes: `read`; HTTP: `GET /nodes/{node_id}/summary`; full-surface only): Summarize a node tree using node fields only.
133
136
  - `flywheel_export_summary` (read; scopes: `read`; HTTP: `POST /export-summary`; full-surface only): Generate markdown summary for selected nodes.
@@ -194,3 +197,11 @@ Hook workflow-if contract (first version):
194
197
  - `flywheel_delete_artifact`: remove an accidental/obsolete node artifact.
195
198
  - `flywheel_list_artifacts`, `flywheel_get_artifact`: inspect node artifact metadata (`title` is the display label) and consume `storage_url` for raw artifact bytes only.
196
199
  - `flywheel_commit_new_node`, `flywheel_commit_node`: publish the caller's full staged payload for an existing node once terminal and contract-complete; requires an active stage lease and explicit `base_committed_revision`.
200
+
201
+ ### Admin only (FLY-359)
202
+
203
+ These tools require an `@paradigma.inc`-authenticated MCP session **or** a valid `X-Admin-Key` header sent on the MCP HTTP request. The MCP streamable HTTP mount reads `X-Admin-Key` from the inbound request and forwards it through to the in-process `/admin/graphs*` call; on admin paths the proxy also suppresses the session bearer to sidestep the API-key route allowlist check. `require_paradigma_admin` then grants access based on the admin key. The routes are omitted from the public OpenAPI schema and from the API-key allowlist.
204
+
205
+ - `flywheel_admin_list_graphs`: list every root-node graph across all users. Filters: `tag_id`, `kind`, `owner_user_id`, `created_after`, `created_before`, `cursor`, `page_size` (1..200). Returns `{graphs, has_more, next_cursor}`.
206
+ - `flywheel_admin_export_graph`: export one graph by `root_node_id` as canonical JSON (`{version, exported_at, node_count, nodes}`). Bypasses per-caller node-visibility checks by design.
207
+ - `flywheel_admin_export_graphs_stream`: batch-export one page of canonical graph JSON payloads matching the filter; iterate pages via `next_cursor`. The NDJSON HTTP endpoint (`GET /admin/graphs/export.jsonl`) is the CLI-first streaming surface; the MCP tool materializes a page to fit the RPC model.
@@ -3,14 +3,14 @@
3
3
  Use the setup wizard:
4
4
 
5
5
  ```bash
6
- npx @paradigma-inc/flywheel setup
6
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --claude
7
7
  ```
8
8
 
9
9
  If you installed Flywheel MCP before April 2026, migrate to the newer, more stable API key authentication setup with:
10
10
 
11
11
  ```bash
12
- npx @paradigma-inc/flywheel uninstall
13
- npx @paradigma-inc/flywheel setup
12
+ npx --yes @paradigma-inc/flywheel uninstall --claude
13
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --claude
14
14
  ```
15
15
 
16
16
  If your previous install used a server name different from `flywheel`, pass `--name <old-name>` to uninstall that specific entry.
@@ -3,14 +3,14 @@
3
3
  Use the setup wizard:
4
4
 
5
5
  ```bash
6
- npx @paradigma-inc/flywheel setup
6
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --codex
7
7
  ```
8
8
 
9
9
  If you installed Flywheel MCP before April 2026, migrate to the newer, more stable API key authentication setup with:
10
10
 
11
11
  ```bash
12
- npx @paradigma-inc/flywheel uninstall
13
- npx @paradigma-inc/flywheel setup
12
+ npx --yes @paradigma-inc/flywheel uninstall --codex
13
+ npx --yes @paradigma-inc/flywheel setup --mode mcp --codex
14
14
  ```
15
15
 
16
16
  If your previous install used a server name different from `flywheel`, pass `--name <old-name>` to uninstall that specific entry.