outfitter 0.2.7 → 0.3.3

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 (312) hide show
  1. package/README.md +34 -7
  2. package/dist/actions/add.d.ts +18 -0
  3. package/dist/actions/add.js +14 -0
  4. package/dist/actions/check-automation.d.ts +20 -0
  5. package/dist/actions/check-automation.js +27 -0
  6. package/dist/actions/check.d.ts +34 -0
  7. package/dist/actions/check.js +19 -0
  8. package/dist/actions/demo.d.ts +12 -0
  9. package/dist/actions/demo.js +11 -0
  10. package/dist/actions/docs-output-mode.d.ts +4 -0
  11. package/dist/actions/docs-output-mode.js +8 -0
  12. package/dist/actions/docs.d.ts +25 -0
  13. package/dist/actions/docs.js +31 -0
  14. package/dist/actions/doctor.d.ts +10 -0
  15. package/dist/actions/doctor.js +15 -0
  16. package/dist/actions/init.d.ts +28 -0
  17. package/dist/actions/init.js +31 -0
  18. package/dist/actions/scaffold.d.ts +19 -0
  19. package/dist/actions/scaffold.js +21 -0
  20. package/dist/actions/shared.d.ts +61 -0
  21. package/dist/actions/shared.js +30 -0
  22. package/dist/actions/upgrade.d.ts +17 -0
  23. package/dist/actions/upgrade.js +21 -0
  24. package/dist/actions.d.ts +1 -1
  25. package/dist/actions.js +53 -22
  26. package/dist/cli.js +66 -4
  27. package/dist/commands/add.js +3 -3
  28. package/dist/commands/check-action-ceremony.d.ts +55 -0
  29. package/dist/commands/check-action-ceremony.js +15 -0
  30. package/dist/commands/check-docs-sentinel.d.ts +27 -0
  31. package/dist/commands/check-docs-sentinel.js +18 -0
  32. package/dist/commands/check-orchestrator.d.ts +2 -0
  33. package/dist/commands/check-orchestrator.js +17 -0
  34. package/dist/commands/check-preset-versions.d.ts +20 -0
  35. package/dist/commands/check-preset-versions.js +15 -0
  36. package/dist/commands/check-publish-guardrails.d.ts +38 -0
  37. package/dist/commands/check-publish-guardrails.js +19 -0
  38. package/dist/commands/check-surface-map-format.d.ts +29 -0
  39. package/dist/commands/check-surface-map-format.js +19 -0
  40. package/dist/commands/check-surface-map.d.ts +20 -0
  41. package/dist/commands/check-surface-map.js +15 -0
  42. package/dist/commands/check-tsdoc.d.ts +2 -21
  43. package/dist/commands/check-tsdoc.js +3 -2
  44. package/dist/commands/check.d.ts +2 -0
  45. package/dist/commands/check.js +3 -3
  46. package/dist/commands/demo.js +1 -1
  47. package/dist/commands/docs-api.d.ts +4 -0
  48. package/dist/commands/docs-api.js +13 -0
  49. package/dist/commands/docs-export.d.ts +4 -0
  50. package/dist/commands/docs-export.js +12 -0
  51. package/dist/commands/docs-list.d.ts +3 -0
  52. package/dist/commands/docs-list.js +13 -0
  53. package/dist/commands/docs-module-loader.d.ts +2 -2
  54. package/dist/commands/docs-module-loader.js +2 -2
  55. package/dist/commands/docs-search.d.ts +3 -0
  56. package/dist/commands/docs-search.js +13 -0
  57. package/dist/commands/docs-show.d.ts +3 -0
  58. package/dist/commands/docs-show.js +13 -0
  59. package/dist/commands/docs-types.d.ts +21 -0
  60. package/dist/commands/doctor.js +4 -12
  61. package/dist/commands/init-execution.d.ts +8 -0
  62. package/dist/commands/init-execution.js +11 -0
  63. package/dist/commands/init-option-resolution.d.ts +5 -0
  64. package/dist/commands/init-option-resolution.js +14 -0
  65. package/dist/commands/init-output.d.ts +9 -0
  66. package/dist/commands/init-output.js +11 -0
  67. package/dist/commands/init.d.ts +7 -5
  68. package/dist/commands/init.js +10 -18
  69. package/dist/commands/jq-utils.d.ts +17 -0
  70. package/dist/commands/jq-utils.js +8 -0
  71. package/dist/commands/repo.d.ts +3 -3
  72. package/dist/commands/repo.js +8 -4
  73. package/dist/commands/scaffold-output.d.ts +4 -0
  74. package/dist/commands/scaffold-output.js +11 -0
  75. package/dist/commands/scaffold-planning.d.ts +65 -0
  76. package/dist/commands/scaffold-planning.js +20 -0
  77. package/dist/commands/scaffold.d.ts +3 -3
  78. package/dist/commands/scaffold.js +10 -16
  79. package/dist/commands/shared-deps.d.ts +5 -4
  80. package/dist/commands/shared-deps.js +3 -3
  81. package/dist/commands/upgrade-apply.d.ts +14 -0
  82. package/dist/commands/upgrade-apply.js +8 -0
  83. package/dist/commands/upgrade-codemods.d.ts +5 -0
  84. package/dist/commands/upgrade-codemods.js +4 -5
  85. package/dist/commands/upgrade-latest-version.d.ts +8 -0
  86. package/dist/commands/upgrade-latest-version.js +8 -0
  87. package/dist/commands/upgrade-migration-docs.d.ts +3 -0
  88. package/dist/commands/upgrade-migration-docs.js +15 -0
  89. package/dist/commands/upgrade-migration-frontmatter.d.ts +2 -0
  90. package/dist/commands/upgrade-migration-frontmatter.js +10 -0
  91. package/dist/commands/upgrade-migration-guides.d.ts +5 -0
  92. package/dist/commands/upgrade-migration-guides.js +10 -0
  93. package/dist/commands/upgrade-output.d.ts +5 -0
  94. package/dist/commands/upgrade-output.js +11 -0
  95. package/dist/commands/upgrade-planner.js +1 -1
  96. package/dist/commands/upgrade-report.d.ts +5 -0
  97. package/dist/commands/upgrade-report.js +8 -0
  98. package/dist/commands/upgrade-workspace.js +2 -2
  99. package/dist/commands/upgrade.d.ts +4 -220
  100. package/dist/commands/upgrade.js +21 -9
  101. package/dist/create/index.d.ts +3 -3
  102. package/dist/create/index.js +2 -30
  103. package/dist/create/planner.d.ts +2 -2
  104. package/dist/create/planner.js +80 -17
  105. package/dist/create/presets.d.ts +2 -2
  106. package/dist/create/presets.js +2 -2
  107. package/dist/create/types.d.ts +1 -1
  108. package/dist/engine/blocks.d.ts +2 -2
  109. package/dist/engine/blocks.js +5 -5
  110. package/dist/engine/collector.d.ts +1 -1
  111. package/dist/engine/collector.js +1 -1
  112. package/dist/engine/config.d.ts +2 -2
  113. package/dist/engine/config.js +4 -4
  114. package/dist/engine/dependency-versions.d.ts +13 -8
  115. package/dist/engine/dependency-versions.js +4 -4
  116. package/dist/engine/executor.d.ts +2 -2
  117. package/dist/engine/executor.js +149 -12
  118. package/dist/engine/index.d.ts +9 -7
  119. package/dist/engine/index.js +17 -31
  120. package/dist/engine/names.js +1 -1
  121. package/dist/engine/post-scaffold.d.ts +2 -2
  122. package/dist/engine/post-scaffold.js +1 -1
  123. package/dist/engine/preset.d.ts +3 -0
  124. package/dist/engine/preset.js +17 -0
  125. package/dist/engine/render-plan.d.ts +1 -1
  126. package/dist/engine/render-plan.js +1 -1
  127. package/dist/engine/template.d.ts +3 -2
  128. package/dist/engine/template.js +24 -7
  129. package/dist/engine/types.d.ts +1 -1
  130. package/dist/engine/types.js +1 -1
  131. package/dist/engine/workspace.d.ts +2 -2
  132. package/dist/engine/workspace.js +1 -1
  133. package/dist/index.d.ts +17 -398
  134. package/dist/index.js +7 -164
  135. package/dist/manifest.js +2 -2
  136. package/dist/output-mode.js +1 -1
  137. package/dist/shared/{outfitter-6fgk6adm.d.ts → outfitter-1tfa9hke.d.ts} +16 -1
  138. package/dist/shared/{outfitter-6bkqjk86.d.ts → outfitter-2nx0k4b3.d.ts} +1 -0
  139. package/dist/shared/outfitter-2ysjerp6.d.ts +44 -0
  140. package/dist/shared/outfitter-2z61gp5w.js +29 -0
  141. package/dist/shared/outfitter-34vg353f.d.ts +82 -0
  142. package/dist/shared/{outfitter-5yjr404v.d.ts → outfitter-3dq4r10s.d.ts} +5 -3
  143. package/dist/shared/outfitter-3rcrvva8.js +103 -0
  144. package/dist/shared/{outfitter-79vfxt6y.js → outfitter-3tx3adgj.js} +12 -3
  145. package/dist/shared/{outfitter-63gse8fv.js → outfitter-507ra35w.js} +33 -64
  146. package/dist/shared/outfitter-56jq0rh2.d.ts +42 -0
  147. package/dist/shared/{outfitter-r419zfgs.d.ts → outfitter-58rn1sj1.d.ts} +1 -1
  148. package/dist/shared/outfitter-5d9wbzhh.d.ts +19 -0
  149. package/dist/shared/outfitter-5j7zee11.d.ts +180 -0
  150. package/dist/shared/{outfitter-s7jetkge.d.ts → outfitter-5r6q2749.d.ts} +1 -1
  151. package/dist/shared/outfitter-5vx1bp7h.js +41 -0
  152. package/dist/shared/outfitter-6ddf91vh.js +190 -0
  153. package/dist/shared/{outfitter-mt7d1ek2.js → outfitter-6mpkh3zn.js} +39 -305
  154. package/dist/shared/{outfitter-ybbazsxq.d.ts → outfitter-6rtcemk7.d.ts} +8 -4
  155. package/dist/shared/{outfitter-9x1brcmq.js → outfitter-6t7xeyg1.js} +13 -38
  156. package/dist/shared/outfitter-738z4c37.js +262 -0
  157. package/dist/shared/{outfitter-yvksv5qb.js → outfitter-76k25svs.js} +4 -4
  158. package/dist/shared/outfitter-7n7vsz95.js +101 -0
  159. package/dist/shared/outfitter-7q9fnbwa.js +60 -0
  160. package/dist/shared/outfitter-84chvazx.js +480 -0
  161. package/dist/shared/outfitter-8ggmja91.js +301 -0
  162. package/dist/shared/{outfitter-qakwgrrh.d.ts → outfitter-8kmak0wc.d.ts} +1 -1
  163. package/dist/shared/outfitter-940h0x7b.js +71 -0
  164. package/dist/shared/{outfitter-fn20r49x.d.ts → outfitter-954y4mzx.d.ts} +1 -1
  165. package/dist/shared/outfitter-b9cpnr7e.js +110 -0
  166. package/dist/shared/outfitter-c7sbs7es.js +92 -0
  167. package/dist/shared/outfitter-cyhzstz0.js +93 -0
  168. package/dist/shared/{outfitter-n9g1zk4x.d.ts → outfitter-cyvr4r8d.d.ts} +3 -2
  169. package/dist/shared/outfitter-d0kqashd.d.ts +98 -0
  170. package/dist/shared/outfitter-dx4hn4ta.js +325 -0
  171. package/dist/shared/{outfitter-bn9c8p2e.js → outfitter-e84cr97g.js} +37 -9
  172. package/dist/shared/outfitter-ec83h4v2.js +17 -0
  173. package/dist/shared/{outfitter-vh4xgb93.js → outfitter-ekb6t1zz.js} +4 -4
  174. package/dist/shared/outfitter-ex8gn945.js +51 -0
  175. package/dist/shared/outfitter-f3a70135.js +75 -0
  176. package/dist/shared/outfitter-fbvfd5zq.d.ts +13 -0
  177. package/dist/shared/outfitter-fj2v5ffz.js +165 -0
  178. package/dist/shared/outfitter-fx1m251y.js +122 -0
  179. package/dist/shared/outfitter-fxry5n58.js +254 -0
  180. package/dist/shared/outfitter-g3hvjshg.js +1 -0
  181. package/dist/shared/{outfitter-f9znfhkn.d.ts → outfitter-gdc7b7de.d.ts} +1 -1
  182. package/dist/shared/outfitter-gyayfx5r.js +156 -0
  183. package/dist/shared/outfitter-h0wmtxw8.d.ts +23 -0
  184. package/dist/shared/{outfitter-z5sx06qe.d.ts → outfitter-hcexcvxe.d.ts} +1 -1
  185. package/dist/shared/outfitter-hf5bj2gq.js +117 -0
  186. package/dist/shared/{outfitter-e9rrfekb.d.ts → outfitter-htx4asgr.d.ts} +4 -3
  187. package/dist/shared/outfitter-jkct38dh.js +53 -0
  188. package/dist/shared/outfitter-jwxggvz4.js +42 -0
  189. package/dist/shared/outfitter-k6zyvg2n.js +306 -0
  190. package/dist/shared/outfitter-mstr60zz.js +215 -0
  191. package/dist/shared/outfitter-n0ed012k.js +101 -0
  192. package/dist/shared/outfitter-n13pqaft.js +19 -0
  193. package/dist/shared/outfitter-nxvjxrmw.d.ts +48 -0
  194. package/dist/shared/outfitter-p2wn07b7.js +160 -0
  195. package/dist/shared/{outfitter-5y646xzk.js → outfitter-px5sv5gn.js} +29 -9
  196. package/dist/shared/outfitter-q1g58t85.js +8 -0
  197. package/dist/shared/{outfitter-pj9vp00r.js → outfitter-qsd5638j.js} +26 -249
  198. package/dist/shared/outfitter-qsrx7m4w.js +72 -0
  199. package/dist/shared/outfitter-r2awqszh.d.ts +52 -0
  200. package/dist/shared/outfitter-rdpw2sbp.d.ts +77 -0
  201. package/dist/shared/outfitter-rp89dafm.js +109 -0
  202. package/dist/shared/outfitter-s1c0whzj.js +121 -0
  203. package/dist/shared/{outfitter-w1j80j1r.js → outfitter-ssrtakh3.js} +21 -5
  204. package/dist/shared/outfitter-ssynegbs.js +167 -0
  205. package/dist/shared/{outfitter-zwyvewr1.js → outfitter-svts4wk2.js} +1 -1
  206. package/dist/shared/outfitter-tavatb5p.js +166 -0
  207. package/dist/shared/outfitter-tqznjgbm.js +44 -0
  208. package/dist/shared/{outfitter-yraebrmw.d.ts → outfitter-wcrp7d7m.d.ts} +1 -1
  209. package/dist/shared/outfitter-wkt0a0ra.js +67 -0
  210. package/dist/shared/{outfitter-ha89qf8q.js → outfitter-wrcqq29p.js} +4 -4
  211. package/dist/shared/outfitter-wyg1tpp5.d.ts +43 -0
  212. package/dist/shared/outfitter-x0vpb7tj.js +126 -0
  213. package/dist/shared/{outfitter-m44n0qzw.js → outfitter-x39awx8g.js} +11 -26
  214. package/dist/shared/outfitter-x4cc5xsq.js +168 -0
  215. package/dist/shared/outfitter-x8w5sjnd.d.ts +39 -0
  216. package/dist/shared/{outfitter-amc4jbs1.d.ts → outfitter-xr6g13nz.d.ts} +2 -2
  217. package/dist/shared/outfitter-xs94pkfe.js +106 -0
  218. package/dist/shared/outfitter-y37yfehn.d.ts +37 -0
  219. package/dist/shared/{outfitter-fhnjpjwc.d.ts → outfitter-y6ee0k45.d.ts} +1 -1
  220. package/dist/shared/{outfitter-j833sxws.js → outfitter-ydw7x6bh.js} +1 -1
  221. package/dist/shared/outfitter-yhb23pjc.js +89 -0
  222. package/dist/shared/{outfitter-mtbpabf3.js → outfitter-ypcvwg1s.js} +1 -1
  223. package/dist/shared/outfitter-znbqe5zy.d.ts +45 -0
  224. package/dist/shared/{outfitter-dpj9erew.d.ts → outfitter-zng6w0t9.d.ts} +1 -1
  225. package/dist/targets/index.d.ts +2 -2
  226. package/dist/targets/index.js +2 -3
  227. package/dist/targets/registry.d.ts +2 -2
  228. package/dist/targets/registry.js +207 -14
  229. package/dist/targets/types.d.ts +1 -1
  230. package/package.json +203 -40
  231. package/dist/shared/chunk-x6644tk8.js +0 -6491
  232. package/dist/shared/outfitter-20f6a2n4.js +0 -35
  233. package/dist/shared/outfitter-5akzvppx.js +0 -125
  234. package/dist/shared/outfitter-7ch26yq8.js +0 -885
  235. package/dist/shared/outfitter-ehp18x1n.js +0 -1
  236. package/dist/shared/outfitter-h3q6ae6d.d.ts +0 -48
  237. package/dist/shared/outfitter-hvsaxgcp.js +0 -1
  238. package/dist/shared/outfitter-p71qb0f0.js +0 -82
  239. package/dist/shared/outfitter-pcj9gg2g.js +0 -909
  240. package/dist/shared/outfitter-xe5mzgdc.js +0 -208
  241. package/dist/shared/outfitter-z0we32cp.d.ts +0 -63
  242. package/template-versions.json +0 -22
  243. package/templates/.gitkeep +0 -0
  244. package/templates/basic/.gitignore.template +0 -30
  245. package/templates/basic/.lefthook.yml.template +0 -26
  246. package/templates/basic/package.json.template +0 -46
  247. package/templates/basic/src/index.ts.template +0 -26
  248. package/templates/basic/tsconfig.json.template +0 -34
  249. package/templates/cli/.gitignore.template +0 -4
  250. package/templates/cli/.lefthook.yml.template +0 -26
  251. package/templates/cli/README.md.template +0 -35
  252. package/templates/cli/biome.json.template +0 -4
  253. package/templates/cli/package.json.template +0 -53
  254. package/templates/cli/src/cli.ts.template +0 -8
  255. package/templates/cli/src/index.ts.template +0 -7
  256. package/templates/cli/src/program.ts.template +0 -31
  257. package/templates/cli/tsconfig.json.template +0 -34
  258. package/templates/daemon/.gitignore.template +0 -4
  259. package/templates/daemon/.lefthook.yml.template +0 -26
  260. package/templates/daemon/README.md.template +0 -67
  261. package/templates/daemon/biome.json.template +0 -4
  262. package/templates/daemon/package.json.template +0 -56
  263. package/templates/daemon/src/cli.ts.template +0 -96
  264. package/templates/daemon/src/daemon-main.ts.template +0 -79
  265. package/templates/daemon/src/daemon.ts.template +0 -11
  266. package/templates/daemon/src/index.ts.template +0 -7
  267. package/templates/daemon/tsconfig.json.template +0 -23
  268. package/templates/full-stack/.gitignore.template +0 -30
  269. package/templates/full-stack/README.md.template +0 -30
  270. package/templates/full-stack/apps/cli/package.json.template +0 -39
  271. package/templates/full-stack/apps/cli/src/cli.ts.template +0 -24
  272. package/templates/full-stack/apps/cli/src/index.test.ts.template +0 -18
  273. package/templates/full-stack/apps/cli/src/index.ts.template +0 -5
  274. package/templates/full-stack/apps/cli/tsconfig.json.template +0 -37
  275. package/templates/full-stack/apps/mcp/package.json.template +0 -40
  276. package/templates/full-stack/apps/mcp/src/index.test.ts.template +0 -18
  277. package/templates/full-stack/apps/mcp/src/index.ts.template +0 -6
  278. package/templates/full-stack/apps/mcp/src/mcp.ts.template +0 -22
  279. package/templates/full-stack/apps/mcp/src/server.ts.template +0 -10
  280. package/templates/full-stack/apps/mcp/tsconfig.json.template +0 -37
  281. package/templates/full-stack/package.json.template +0 -16
  282. package/templates/full-stack/packages/core/package.json.template +0 -36
  283. package/templates/full-stack/packages/core/src/handlers.ts.template +0 -31
  284. package/templates/full-stack/packages/core/src/index.test.ts.template +0 -30
  285. package/templates/full-stack/packages/core/src/index.ts.template +0 -8
  286. package/templates/full-stack/packages/core/src/types.ts.template +0 -13
  287. package/templates/full-stack/packages/core/tsconfig.json.template +0 -34
  288. package/templates/library/.gitignore.template +0 -30
  289. package/templates/library/README.md.template +0 -29
  290. package/templates/library/bunup.config.ts.template +0 -20
  291. package/templates/library/package.json.template +0 -55
  292. package/templates/library/src/handlers.ts.template +0 -31
  293. package/templates/library/src/index.test.ts.template +0 -35
  294. package/templates/library/src/index.ts.template +0 -8
  295. package/templates/library/src/types.ts.template +0 -13
  296. package/templates/library/tsconfig.json.template +0 -34
  297. package/templates/mcp/.gitignore.template +0 -4
  298. package/templates/mcp/.lefthook.yml.template +0 -26
  299. package/templates/mcp/README.md.template +0 -54
  300. package/templates/mcp/biome.json.template +0 -4
  301. package/templates/mcp/package.json.template +0 -53
  302. package/templates/mcp/src/index.ts.template +0 -7
  303. package/templates/mcp/src/mcp.ts.template +0 -33
  304. package/templates/mcp/src/server.ts.template +0 -8
  305. package/templates/mcp/tsconfig.json.template +0 -23
  306. package/templates/minimal/.gitignore.template +0 -30
  307. package/templates/minimal/.lefthook.yml.template +0 -26
  308. package/templates/minimal/package.json.template +0 -53
  309. package/templates/minimal/src/index.ts.template +0 -26
  310. package/templates/minimal/tsconfig.json.template +0 -34
  311. /package/dist/{shared/outfitter-344t1r38.js → commands/docs-types.js} +0 -0
  312. /package/dist/shared/{outfitter-mdt37hqm.js → outfitter-eepj7rf7.js} +0 -0
@@ -0,0 +1,156 @@
1
+ // @bun
2
+ import {
3
+ resolveStructuredOutputMode
4
+ } from "./outfitter-7r12fj7f.js";
5
+
6
+ // apps/outfitter/src/commands/check-surface-map-format.ts
7
+ import { spawnSync } from "child_process";
8
+ import { existsSync, readFileSync } from "fs";
9
+ import { join, resolve } from "path";
10
+ import { Result } from "@outfitter/contracts";
11
+ class CheckSurfaceMapFormatError extends Error {
12
+ _tag = "CheckSurfaceMapFormatError";
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = "CheckSurfaceMapFormatError";
16
+ }
17
+ }
18
+ function canonicalizeJson(content, filePath) {
19
+ const parsed = JSON.parse(content);
20
+ const normalized = `${JSON.stringify(parsed, null, 2)}
21
+ `;
22
+ const formatResult = spawnSync("bun", ["x", "oxfmt", "--stdin-filepath", filePath], {
23
+ encoding: "utf-8",
24
+ input: normalized
25
+ });
26
+ if (formatResult.status !== 0 || typeof formatResult.stdout !== "string" || formatResult.stdout.length === 0) {
27
+ return normalized;
28
+ }
29
+ return formatResult.stdout.endsWith(`
30
+ `) ? formatResult.stdout : `${formatResult.stdout}
31
+ `;
32
+ }
33
+ function checkSurfaceMapFormat(content, filePath) {
34
+ const expected = canonicalizeJson(content, filePath);
35
+ return {
36
+ filePath,
37
+ actual: content,
38
+ expected,
39
+ ok: content === expected
40
+ };
41
+ }
42
+ async function runCheckSurfaceMapFormat(options) {
43
+ try {
44
+ const filePath = join(resolve(options.cwd), ".outfitter", "surface.json");
45
+ if (!existsSync(filePath)) {
46
+ return Result.ok({
47
+ filePath,
48
+ format: null,
49
+ ok: false,
50
+ reason: "missing-file"
51
+ });
52
+ }
53
+ const content = readFileSync(filePath, "utf-8");
54
+ const formatResult = checkSurfaceMapFormat(content, filePath);
55
+ if (formatResult.ok) {
56
+ return Result.ok({
57
+ filePath,
58
+ format: formatResult,
59
+ ok: true,
60
+ reason: "ok"
61
+ });
62
+ }
63
+ return Result.ok({
64
+ filePath,
65
+ format: formatResult,
66
+ ok: false,
67
+ reason: "format-drift"
68
+ });
69
+ } catch (error) {
70
+ const message = error instanceof Error ? error.message : "Failed to check surface map formatting";
71
+ return Result.err(new CheckSurfaceMapFormatError(message));
72
+ }
73
+ }
74
+ async function printCheckSurfaceMapFormatResult(result, options) {
75
+ const structuredMode = resolveStructuredOutputMode(options?.mode);
76
+ if (structuredMode) {
77
+ const serialized = structuredMode === "json" ? JSON.stringify(result, null, 2) : JSON.stringify(result);
78
+ process.stdout.write(`${serialized}
79
+ `);
80
+ return;
81
+ }
82
+ if (result.reason === "missing-file") {
83
+ process.stderr.write(`[surface-map-format] Missing ${result.filePath}
84
+ Run 'bun run apps/outfitter/src/cli.ts schema generate' from repo root.
85
+ `);
86
+ return;
87
+ }
88
+ if (result.reason === "ok") {
89
+ process.stdout.write(`[surface-map-format] ${result.filePath} matches canonical formatting
90
+ `);
91
+ return;
92
+ }
93
+ process.stderr.write([
94
+ `[surface-map-format] ${result.filePath} is not canonically formatted.`,
95
+ "Run 'bun run apps/outfitter/src/cli.ts schema generate' from repo root to rewrite .outfitter/surface.json."
96
+ ].join(`
97
+ `));
98
+ process.stderr.write(`
99
+ `);
100
+ }
101
+ function parseCliArgs(argv) {
102
+ let cwd = process.cwd();
103
+ let outputMode = "human";
104
+ for (let index = 0;index < argv.length; index++) {
105
+ const arg = argv[index];
106
+ if (arg === "--cwd") {
107
+ const value = argv[index + 1];
108
+ if (!value) {
109
+ throw new CheckSurfaceMapFormatError("Missing value for --cwd");
110
+ }
111
+ cwd = value;
112
+ index += 1;
113
+ continue;
114
+ }
115
+ if (arg === "--json") {
116
+ outputMode = "json";
117
+ continue;
118
+ }
119
+ if (arg === "--jsonl") {
120
+ outputMode = "jsonl";
121
+ continue;
122
+ }
123
+ }
124
+ return {
125
+ cwd: resolve(cwd),
126
+ outputMode
127
+ };
128
+ }
129
+ async function runCheckSurfaceMapFormatFromArgv(argv) {
130
+ let parsed;
131
+ try {
132
+ parsed = parseCliArgs(argv);
133
+ } catch (error) {
134
+ const message = error instanceof Error ? error.message : "Invalid command arguments";
135
+ process.stderr.write(`${message}
136
+ `);
137
+ return 1;
138
+ }
139
+ const result = await runCheckSurfaceMapFormat({ cwd: parsed.cwd });
140
+ if (result.isErr()) {
141
+ process.stderr.write(`${result.error.message}
142
+ `);
143
+ return 1;
144
+ }
145
+ await printCheckSurfaceMapFormatResult(result.value, {
146
+ mode: parsed.outputMode
147
+ });
148
+ return result.value.ok ? 0 : 1;
149
+ }
150
+ if (import.meta.main) {
151
+ runCheckSurfaceMapFormatFromArgv(process.argv.slice(2)).then((exitCode) => {
152
+ process.exit(exitCode);
153
+ });
154
+ }
155
+
156
+ export { CheckSurfaceMapFormatError, canonicalizeJson, checkSurfaceMapFormat, runCheckSurfaceMapFormat, printCheckSurfaceMapFormatResult, runCheckSurfaceMapFormatFromArgv };
@@ -0,0 +1,23 @@
1
+ import { CliOutputMode } from "./outfitter-a79xrm12.js";
2
+ import { Result } from "@outfitter/contracts";
3
+ import { CoverageLevel, TsDocCheckResult } from "@outfitter/tooling";
4
+ /** Validated input for the check-tsdoc action handler. */
5
+ interface CheckTsDocInput {
6
+ readonly cwd: string;
7
+ readonly emitOutput?: boolean;
8
+ readonly jq: string | undefined;
9
+ readonly level: CoverageLevel | undefined;
10
+ readonly minCoverage: number;
11
+ readonly outputMode: CliOutputMode;
12
+ readonly packages: readonly string[];
13
+ readonly strict: boolean;
14
+ readonly summary: boolean;
15
+ }
16
+ /**
17
+ * Run TSDoc coverage analysis and format output.
18
+ *
19
+ * @param input - Validated action input
20
+ * @returns Result containing the coverage analysis
21
+ */
22
+ declare function runCheckTsdoc(input: CheckTsDocInput): Promise<Result<TsDocCheckResult, Error>>;
23
+ export { CheckTsDocInput, runCheckTsdoc };
@@ -1,4 +1,4 @@
1
- import { OperationCollector } from "./outfitter-amc4jbs1.js";
1
+ import { OperationCollector } from "./outfitter-xr6g13nz.js";
2
2
  import { Result } from "@outfitter/contracts";
3
3
  type ScaffoldOrigin = "init" | "scaffold";
4
4
  interface PostScaffoldOptions {
@@ -0,0 +1,117 @@
1
+ // @bun
2
+ import {
3
+ applyJq
4
+ } from "./outfitter-5vx1bp7h.js";
5
+ import {
6
+ loadDocsModule
7
+ } from "./outfitter-svts4wk2.js";
8
+ import {
9
+ resolveStructuredOutputMode
10
+ } from "./outfitter-7r12fj7f.js";
11
+
12
+ // apps/outfitter/src/commands/docs-search.ts
13
+ import { readFile } from "fs/promises";
14
+ import { resolve } from "path";
15
+ import { output } from "@outfitter/cli";
16
+ import { InternalError, Result } from "@outfitter/contracts";
17
+ import { createTheme } from "@outfitter/tui/render";
18
+ async function runDocsSearch(input) {
19
+ try {
20
+ const cwd = resolve(input.cwd);
21
+ const docsModule = await loadDocsModule();
22
+ const mapResult = await docsModule.generateDocsMap({ workspaceRoot: cwd });
23
+ if (mapResult.isErr()) {
24
+ return Result.err(new InternalError({
25
+ message: mapResult.error.message,
26
+ context: { action: "docs.search" }
27
+ }));
28
+ }
29
+ const rawMap = mapResult.value;
30
+ let entries = rawMap.entries;
31
+ if (input.kind) {
32
+ entries = entries.filter((entry) => entry.kind === input.kind);
33
+ }
34
+ if (input.package) {
35
+ entries = entries.filter((entry) => entry.package === input.package);
36
+ }
37
+ const queryLower = input.query.toLowerCase();
38
+ const matches = [];
39
+ for (const entry of entries) {
40
+ const sourcePath = resolve(cwd, entry.sourcePath);
41
+ try {
42
+ const content = await readFile(sourcePath, "utf8");
43
+ const lines = content.split(`
44
+ `);
45
+ const matchLines = [];
46
+ for (const line of lines) {
47
+ if (line.toLowerCase().includes(queryLower)) {
48
+ matchLines.push(line);
49
+ }
50
+ }
51
+ if (matchLines.length > 0) {
52
+ matches.push({
53
+ id: entry.id,
54
+ kind: entry.kind,
55
+ title: entry.title,
56
+ sourcePath: entry.sourcePath,
57
+ outputPath: entry.outputPath,
58
+ ...entry.package !== undefined ? { package: entry.package } : {},
59
+ matchLines
60
+ });
61
+ }
62
+ } catch {}
63
+ }
64
+ return Result.ok({
65
+ matches,
66
+ query: input.query,
67
+ total: matches.length
68
+ });
69
+ } catch (error) {
70
+ return Result.err(new InternalError({
71
+ message: error instanceof Error ? error.message : "Failed to search docs",
72
+ context: { action: "docs.search" }
73
+ }));
74
+ }
75
+ }
76
+ async function printDocsSearchResults(result, options) {
77
+ const structuredMode = resolveStructuredOutputMode(options?.mode);
78
+ if (structuredMode) {
79
+ if (options?.jq) {
80
+ const filtered = await applyJq(result, options.jq, {
81
+ compact: structuredMode === "jsonl"
82
+ });
83
+ process.stdout.write(filtered);
84
+ } else {
85
+ await output(result, { mode: structuredMode });
86
+ }
87
+ return;
88
+ }
89
+ const theme = createTheme();
90
+ const lines = [];
91
+ if (result.total === 0) {
92
+ lines.push(theme.muted(`No documentation entries matched "${result.query}".`));
93
+ await output(lines, { mode: "human" });
94
+ return;
95
+ }
96
+ lines.push("");
97
+ lines.push(`Search Results for "${result.query}" (${result.total})`);
98
+ lines.push("=".repeat(60));
99
+ lines.push("");
100
+ for (const match of result.matches) {
101
+ const pkg = match.package ? theme.muted(` [${match.package}]`) : "";
102
+ const kind = theme.muted(`(${match.kind})`);
103
+ lines.push(` ${match.id} ${kind}${pkg}`);
104
+ lines.push(` ${match.title}`);
105
+ lines.push(` ${theme.muted(`${match.matchLines.length} matching line(s)`)}`);
106
+ for (const line of match.matchLines.slice(0, 3)) {
107
+ lines.push(` ${theme.muted(line.trim())}`);
108
+ }
109
+ if (match.matchLines.length > 3) {
110
+ lines.push(` ${theme.muted(`... and ${match.matchLines.length - 3} more`)}`);
111
+ }
112
+ lines.push("");
113
+ }
114
+ await output(lines, { mode: "human" });
115
+ }
116
+
117
+ export { runDocsSearch, printDocsSearchResults };
@@ -8,8 +8,8 @@ type CreatePresetId = "basic" | "cli" | "daemon" | "mcp";
8
8
  interface CreatePresetDefinition {
9
9
  readonly defaultBlocks: readonly string[];
10
10
  readonly id: CreatePresetId;
11
+ readonly presetDir: CreatePresetId;
11
12
  readonly summary: string;
12
- readonly template: CreatePresetId;
13
13
  }
14
14
  interface CreateProjectInput {
15
15
  readonly description?: string;
@@ -23,9 +23,10 @@ interface CreateProjectInput {
23
23
  readonly year?: string;
24
24
  }
25
25
  type CreatePlanChange = {
26
- readonly type: "copy-template";
27
- readonly template: string;
26
+ readonly type: "copy-preset";
27
+ readonly preset: string;
28
28
  readonly targetDir: string;
29
+ readonly includeTooling: boolean;
29
30
  readonly overlayBaseTemplate: boolean;
30
31
  } | {
31
32
  readonly type: "inject-shared-config";
@@ -0,0 +1,53 @@
1
+ // @bun
2
+ import {
3
+ scaffoldAction
4
+ } from "./outfitter-xs94pkfe.js";
5
+ import {
6
+ upgradeAction
7
+ } from "./outfitter-rp89dafm.js";
8
+ import {
9
+ createAction,
10
+ initAction,
11
+ initCliAction,
12
+ initDaemonAction,
13
+ initFullStackAction,
14
+ initLibraryAction,
15
+ initMcpAction
16
+ } from "./outfitter-738z4c37.js";
17
+ import {
18
+ docsApiAction,
19
+ docsExportAction,
20
+ docsListAction,
21
+ docsSearchAction,
22
+ docsShowAction
23
+ } from "./outfitter-dx4hn4ta.js";
24
+ import {
25
+ doctorAction
26
+ } from "./outfitter-ex8gn945.js";
27
+ import {
28
+ demoAction
29
+ } from "./outfitter-wkt0a0ra.js";
30
+ import {
31
+ checkAction,
32
+ checkTsdocAction
33
+ } from "./outfitter-k6zyvg2n.js";
34
+ import {
35
+ addAction,
36
+ listBlocksAction
37
+ } from "./outfitter-3rcrvva8.js";
38
+ import {
39
+ checkActionCeremonyAction,
40
+ checkDocsSentinelAction,
41
+ checkPresetVersionsAction,
42
+ checkPublishGuardrailsAction,
43
+ checkSurfaceMapAction,
44
+ checkSurfaceMapFormatAction
45
+ } from "./outfitter-mstr60zz.js";
46
+
47
+ // apps/outfitter/src/actions.ts
48
+ import {
49
+ createActionRegistry
50
+ } from "@outfitter/contracts";
51
+ var outfitterActions = createActionRegistry().add(createAction).add(scaffoldAction).add(initAction).add(initCliAction).add(initMcpAction).add(initDaemonAction).add(initLibraryAction).add(initFullStackAction).add(demoAction).add(doctorAction).add(addAction).add(listBlocksAction).add(checkAction).add(checkTsdocAction).add(checkPublishGuardrailsAction).add(checkPresetVersionsAction).add(checkSurfaceMapAction).add(checkSurfaceMapFormatAction).add(checkDocsSentinelAction).add(checkActionCeremonyAction).add(upgradeAction).add(docsListAction).add(docsShowAction).add(docsSearchAction).add(docsApiAction).add(docsExportAction);
52
+
53
+ export { outfitterActions };
@@ -0,0 +1,42 @@
1
+ // @bun
2
+ import {
3
+ readMigrationDocsWithMetadata
4
+ } from "./outfitter-fx1m251y.js";
5
+
6
+ // apps/outfitter/src/commands/upgrade-migration-guides.ts
7
+ function collectMigrationChanges(docs) {
8
+ const changes = [];
9
+ for (const doc of docs) {
10
+ if (doc.frontmatter.changes) {
11
+ changes.push(...doc.frontmatter.changes);
12
+ }
13
+ }
14
+ return changes.length > 0 ? changes : undefined;
15
+ }
16
+ function buildMigrationGuides(packages, migrationsDir) {
17
+ const guides = [];
18
+ for (const pkg of packages) {
19
+ if (!pkg.updateAvailable || pkg.latest === null) {
20
+ continue;
21
+ }
22
+ let steps = [];
23
+ let changes;
24
+ if (migrationsDir !== null) {
25
+ const shortName = pkg.name.replace("@outfitter/", "");
26
+ const docs = readMigrationDocsWithMetadata(migrationsDir, shortName, pkg.current, pkg.latest);
27
+ steps = docs.map((doc) => doc.body);
28
+ changes = collectMigrationChanges(docs);
29
+ }
30
+ guides.push({
31
+ packageName: pkg.name,
32
+ fromVersion: pkg.current,
33
+ toVersion: pkg.latest,
34
+ breaking: pkg.breaking,
35
+ steps,
36
+ ...changes !== undefined ? { changes } : {}
37
+ });
38
+ }
39
+ return guides;
40
+ }
41
+
42
+ export { buildMigrationGuides };