outfitter 0.2.1 → 0.2.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 (146) hide show
  1. package/README.md +215 -116
  2. package/dist/actions.d.ts +2 -0
  3. package/dist/actions.js +34 -0
  4. package/dist/cli.js +29 -5
  5. package/dist/commands/add.d.ts +54 -0
  6. package/dist/commands/add.js +16 -0
  7. package/dist/commands/check.d.ts +91 -0
  8. package/dist/commands/check.js +14 -0
  9. package/dist/commands/demo.d.ts +21 -0
  10. package/dist/commands/demo.js +8 -0
  11. package/dist/commands/docs-module-loader.d.ts +2 -0
  12. package/dist/commands/docs-module-loader.js +8 -0
  13. package/dist/commands/doctor.d.ts +2 -0
  14. package/dist/commands/doctor.js +13 -0
  15. package/dist/commands/init.d.ts +7 -0
  16. package/dist/commands/init.js +31 -0
  17. package/dist/commands/migrate-kit.d.ts +2 -0
  18. package/dist/commands/migrate-kit.js +15 -0
  19. package/dist/commands/repo.d.ts +3 -0
  20. package/dist/commands/repo.js +9 -0
  21. package/dist/commands/scaffold.d.ts +4 -0
  22. package/dist/commands/scaffold.js +31 -0
  23. package/dist/commands/shared-deps.d.ts +36 -0
  24. package/dist/commands/shared-deps.js +10 -0
  25. package/dist/commands/update-planner.d.ts +58 -0
  26. package/dist/commands/update-planner.js +8 -0
  27. package/dist/commands/update-workspace.d.ts +76 -0
  28. package/dist/commands/update-workspace.js +16 -0
  29. package/dist/commands/update.d.ts +113 -0
  30. package/dist/commands/update.js +21 -0
  31. package/dist/create/index.d.ts +5 -0
  32. package/dist/create/index.js +29 -0
  33. package/dist/create/planner.d.ts +3 -0
  34. package/dist/create/planner.js +21 -0
  35. package/dist/create/presets.d.ts +3 -0
  36. package/dist/create/presets.js +12 -0
  37. package/dist/create/types.d.ts +2 -0
  38. package/dist/create/types.js +1 -0
  39. package/dist/engine/blocks.d.ts +3 -0
  40. package/dist/engine/blocks.js +12 -0
  41. package/dist/engine/collector.d.ts +2 -0
  42. package/dist/engine/collector.js +8 -0
  43. package/dist/engine/config.d.ts +3 -0
  44. package/dist/engine/config.js +12 -0
  45. package/dist/engine/executor.d.ts +3 -0
  46. package/dist/engine/executor.js +16 -0
  47. package/dist/engine/index.d.ts +8 -0
  48. package/dist/engine/index.js +59 -0
  49. package/dist/engine/names.d.ts +2 -0
  50. package/dist/engine/names.js +16 -0
  51. package/dist/engine/post-scaffold.d.ts +3 -0
  52. package/dist/engine/post-scaffold.js +8 -0
  53. package/dist/engine/render-plan.d.ts +7 -0
  54. package/dist/engine/render-plan.js +9 -0
  55. package/dist/engine/template.d.ts +3 -0
  56. package/dist/engine/template.js +17 -0
  57. package/dist/engine/types.d.ts +2 -0
  58. package/dist/engine/types.js +8 -0
  59. package/dist/engine/workspace.d.ts +3 -0
  60. package/dist/engine/workspace.js +13 -0
  61. package/dist/index.d.ts +265 -50
  62. package/dist/index.js +157 -3
  63. package/dist/manifest.d.ts +71 -0
  64. package/dist/manifest.js +16 -0
  65. package/dist/output-mode.d.ts +2 -0
  66. package/dist/output-mode.js +10 -0
  67. package/dist/shared/chunk-b0y0cwkr.js +5533 -0
  68. package/dist/shared/outfitter-193jvzg4.d.ts +5 -0
  69. package/dist/shared/outfitter-1dd0k853.js +194 -0
  70. package/dist/shared/outfitter-1h7k8xxt.js +29 -0
  71. package/dist/shared/outfitter-1qwpjt6w.js +125 -0
  72. package/dist/shared/outfitter-2ngep1h2.d.ts +5 -0
  73. package/dist/shared/outfitter-2np85etz.js +95 -0
  74. package/dist/shared/outfitter-33w361tc.d.ts +18 -0
  75. package/dist/shared/outfitter-344t1r38.js +1 -0
  76. package/dist/shared/outfitter-3weh61w7.d.ts +25 -0
  77. package/dist/shared/outfitter-4s9meh3j.js +221 -0
  78. package/dist/shared/outfitter-6a4bq054.js +322 -0
  79. package/dist/shared/outfitter-6bkqjk86.d.ts +3 -0
  80. package/dist/shared/outfitter-6gc3g5wk.js +98 -0
  81. package/dist/shared/outfitter-7cv5fg1m.js +61 -0
  82. package/dist/shared/outfitter-7ha7p61k.d.ts +6 -0
  83. package/dist/shared/outfitter-7r12fj7f.js +30 -0
  84. package/dist/shared/outfitter-8y2dfx6n.js +11 -0
  85. package/dist/shared/outfitter-9c8edfsn.js +715 -0
  86. package/dist/shared/outfitter-9x1brcmq.js +184 -0
  87. package/dist/shared/outfitter-a79xrm12.d.ts +17 -0
  88. package/dist/shared/outfitter-amc4jbs1.d.ts +50 -0
  89. package/dist/shared/outfitter-ara3djt0.js +73 -0
  90. package/dist/shared/outfitter-avhm5z6w.js +82 -0
  91. package/dist/shared/outfitter-b5nd42y4.d.ts +45 -0
  92. package/dist/shared/outfitter-dd0btgec.d.ts +40 -0
  93. package/dist/shared/outfitter-e2zz5wv7.d.ts +51 -0
  94. package/dist/shared/outfitter-ehp18x1n.js +1 -0
  95. package/dist/shared/outfitter-fnsmx3xg.js +750 -0
  96. package/dist/shared/outfitter-gdvm5c0b.d.ts +4 -0
  97. package/dist/shared/outfitter-gp4v5gkf.js +322 -0
  98. package/dist/shared/outfitter-h1mnzzd1.d.ts +14 -0
  99. package/dist/shared/outfitter-hpymx4m9.js +184 -0
  100. package/dist/shared/outfitter-hvsaxgcp.js +1 -0
  101. package/dist/shared/outfitter-j8yc7294.d.ts +22 -0
  102. package/dist/shared/outfitter-jyxwznk1.js +404 -0
  103. package/dist/shared/outfitter-k112c427.js +21 -0
  104. package/dist/shared/outfitter-k56rmt24.d.ts +30 -0
  105. package/dist/shared/outfitter-ksa1pp4t.d.ts +4 -0
  106. package/dist/shared/outfitter-mdt37hqm.js +4 -0
  107. package/dist/shared/outfitter-mtbpabf3.js +91 -0
  108. package/dist/shared/outfitter-nm4m0v6x.d.ts +131 -0
  109. package/dist/shared/outfitter-nmeecf1b.js +531 -0
  110. package/dist/shared/outfitter-npyfbdmc.d.ts +6 -0
  111. package/dist/shared/outfitter-pxt58tsq.js +582 -0
  112. package/dist/shared/outfitter-q9agarmb.js +42 -0
  113. package/dist/shared/outfitter-qfgj5xpq.js +70 -0
  114. package/dist/shared/outfitter-qfh36ddg.d.ts +66 -0
  115. package/dist/shared/outfitter-s6k8y2p4.js +269 -0
  116. package/dist/shared/outfitter-sftf1s26.js +199 -0
  117. package/dist/shared/outfitter-sg7ncy4a.d.ts +51 -0
  118. package/dist/shared/outfitter-sgtq57qr.d.ts +5 -0
  119. package/dist/shared/outfitter-txre6cdn.d.ts +60 -0
  120. package/dist/shared/outfitter-vh4xgb93.js +35 -0
  121. package/dist/shared/outfitter-ya44h1km.js +191 -0
  122. package/dist/shared/outfitter-zwyvewr1.js +36 -0
  123. package/dist/targets/index.d.ts +4 -0
  124. package/dist/targets/index.js +29 -0
  125. package/dist/targets/registry.d.ts +3 -0
  126. package/dist/targets/registry.js +28 -0
  127. package/dist/targets/types.d.ts +2 -0
  128. package/dist/targets/types.js +1 -0
  129. package/package.json +182 -29
  130. package/templates/basic/.lefthook.yml.template +4 -5
  131. package/templates/basic/package.json.template +10 -5
  132. package/templates/cli/.lefthook.yml.template +4 -5
  133. package/templates/cli/biome.json.template +2 -15
  134. package/templates/cli/package.json.template +11 -7
  135. package/templates/daemon/.lefthook.yml.template +4 -5
  136. package/templates/daemon/biome.json.template +2 -15
  137. package/templates/daemon/package.json.template +11 -7
  138. package/templates/mcp/.lefthook.yml.template +4 -5
  139. package/templates/mcp/biome.json.template +2 -15
  140. package/templates/mcp/package.json.template +11 -7
  141. package/templates/minimal/.gitignore.template +30 -0
  142. package/templates/minimal/.lefthook.yml.template +26 -0
  143. package/templates/minimal/package.json.template +46 -0
  144. package/templates/minimal/src/index.ts.template +26 -0
  145. package/templates/minimal/tsconfig.json.template +34 -0
  146. package/dist/shared/chunk-f3sch043.js +0 -1858
@@ -0,0 +1,191 @@
1
+ // @bun
2
+ // apps/outfitter/src/commands/demo.ts
3
+ import { fileURLToPath } from "url";
4
+ import { output } from "@outfitter/cli/output";
5
+ import {
6
+ getPrimitiveIds,
7
+ isPrimitiveId,
8
+ renderAllDemos,
9
+ renderDemo
10
+ } from "@outfitter/tui/demo";
11
+ var EMBEDDED_DEMO_FLAG = "--__outfitter-embedded-demo";
12
+ function isCommandNotFound(error) {
13
+ if (!(error instanceof Error)) {
14
+ return false;
15
+ }
16
+ return /ENOENT|not found|spawn/i.test(error.message);
17
+ }
18
+ async function tryRun(cmd) {
19
+ try {
20
+ const proc = Bun.spawn({
21
+ cmd,
22
+ stdin: "inherit",
23
+ stdout: "inherit",
24
+ stderr: "inherit"
25
+ });
26
+ return await proc.exited;
27
+ } catch (error) {
28
+ if (isCommandNotFound(error)) {
29
+ return;
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ async function localDemoCmds(args) {
35
+ const localDistPath = fileURLToPath(new URL("../../../cli-demo/dist/cli.js", import.meta.url));
36
+ const localSrcPath = fileURLToPath(new URL("../../../cli-demo/src/cli.ts", import.meta.url));
37
+ const cmds = [];
38
+ if (await Bun.file(localDistPath).exists()) {
39
+ cmds.push([process.execPath, localDistPath, ...args]);
40
+ }
41
+ if (await Bun.file(localSrcPath).exists()) {
42
+ cmds.push([process.execPath, localSrcPath, ...args]);
43
+ }
44
+ return cmds;
45
+ }
46
+ function embeddedDemoCmd(args) {
47
+ return [
48
+ process.execPath,
49
+ fileURLToPath(import.meta.url),
50
+ EMBEDDED_DEMO_FLAG,
51
+ ...args
52
+ ];
53
+ }
54
+ function toCliArgs(options) {
55
+ const args = [];
56
+ if (options.section) {
57
+ args.push(options.section);
58
+ }
59
+ if (options.list) {
60
+ args.push("--list");
61
+ }
62
+ if (options.animate) {
63
+ args.push("--animate");
64
+ }
65
+ if (options.outputMode === "json") {
66
+ args.push("--json");
67
+ } else if (options.outputMode === "jsonl") {
68
+ args.push("--jsonl");
69
+ }
70
+ return args;
71
+ }
72
+ function toOutputMode(mode) {
73
+ return mode;
74
+ }
75
+ function renderListSections() {
76
+ const sections = getPrimitiveIds();
77
+ return [
78
+ "Available demo sections:",
79
+ ...sections.map((s) => `- ${s}`),
80
+ "- all"
81
+ ].join(`
82
+ `);
83
+ }
84
+ function renderUnknownSection(section) {
85
+ const sections = getPrimitiveIds();
86
+ return [
87
+ `Unknown section: ${section}`,
88
+ "",
89
+ `Available sections: ${sections.join(", ")}, all`,
90
+ "",
91
+ "For app-specific sections (for example `errors`), run `outfitter-demo`."
92
+ ].join(`
93
+ `);
94
+ }
95
+ function parseEmbeddedOptions(argv) {
96
+ let section;
97
+ let list = false;
98
+ let animate = false;
99
+ let outputMode = "human";
100
+ for (const arg of argv) {
101
+ if (arg === "--list" || arg === "-l") {
102
+ list = true;
103
+ continue;
104
+ }
105
+ if (arg === "--animate" || arg === "-a") {
106
+ animate = true;
107
+ continue;
108
+ }
109
+ if (arg === "--json") {
110
+ outputMode = "json";
111
+ continue;
112
+ }
113
+ if (arg === "--jsonl") {
114
+ outputMode = "jsonl";
115
+ continue;
116
+ }
117
+ if (arg.startsWith("-")) {
118
+ throw new Error(`Unknown option: ${arg}`);
119
+ }
120
+ if (section !== undefined) {
121
+ throw new Error(`Unexpected argument: ${arg}`);
122
+ }
123
+ section = arg;
124
+ }
125
+ return { section, list, animate, outputMode };
126
+ }
127
+ async function runEmbeddedDemo(options) {
128
+ const mode = toOutputMode(options.outputMode);
129
+ if (options.list) {
130
+ await output(renderListSections(), { mode });
131
+ return 0;
132
+ }
133
+ if (options.animate) {
134
+ await output(renderDemo("spinner"), { mode });
135
+ return 0;
136
+ }
137
+ if (options.section === undefined || options.section === "all") {
138
+ await output(renderAllDemos(), { mode });
139
+ return 0;
140
+ }
141
+ if (!isPrimitiveId(options.section)) {
142
+ await output(renderUnknownSection(options.section), { mode });
143
+ return 1;
144
+ }
145
+ await output(renderDemo(options.section), { mode });
146
+ return 0;
147
+ }
148
+ async function runEmbeddedFromArgv() {
149
+ if (process.argv[2] !== EMBEDDED_DEMO_FLAG) {
150
+ return;
151
+ }
152
+ const options = parseEmbeddedOptions(process.argv.slice(3));
153
+ const exitCode = await runEmbeddedDemo(options);
154
+ process.exit(exitCode);
155
+ }
156
+ if (import.meta.main) {
157
+ runEmbeddedFromArgv().catch((error) => {
158
+ const message = error instanceof Error ? error.message : String(error);
159
+ process.stderr.write(`${message}
160
+ `);
161
+ process.exit(1);
162
+ });
163
+ }
164
+ async function runDemo(options) {
165
+ const args = toCliArgs(options);
166
+ const commandCandidates = [
167
+ ["outfitter-demo", ...args],
168
+ ["cli-demo", ...args],
169
+ ...await localDemoCmds(args),
170
+ embeddedDemoCmd(args)
171
+ ];
172
+ for (const cmd of commandCandidates) {
173
+ const exitCode = await tryRun(cmd);
174
+ if (exitCode !== undefined) {
175
+ return { exitCode };
176
+ }
177
+ }
178
+ throw new Error([
179
+ "Demo functionality moved to the dedicated demo app.",
180
+ "",
181
+ "Run one of:",
182
+ " outfitter-demo --help",
183
+ " cli-demo --help",
184
+ "",
185
+ "In this monorepo, you can also run:",
186
+ " bun run apps/cli-demo/src/cli.ts --help"
187
+ ].join(`
188
+ `));
189
+ }
190
+
191
+ export { runDemo };
@@ -0,0 +1,36 @@
1
+ // @bun
2
+ // apps/outfitter/src/commands/docs-module-loader.ts
3
+ import { existsSync } from "fs";
4
+ import { createRequire } from "module";
5
+ import { dirname, join } from "path";
6
+ import { pathToFileURL } from "url";
7
+ var require2 = createRequire(import.meta.url);
8
+ function resolveDocsEntrypoint() {
9
+ const packageJsonPath = require2.resolve("@outfitter/docs/package.json");
10
+ const packageRoot = dirname(packageJsonPath);
11
+ const srcEntrypoint = join(packageRoot, "src", "index.ts");
12
+ if (existsSync(srcEntrypoint)) {
13
+ return srcEntrypoint;
14
+ }
15
+ const distEntrypoint = join(packageRoot, "dist", "index.js");
16
+ if (existsSync(distEntrypoint)) {
17
+ return distEntrypoint;
18
+ }
19
+ throw new Error("Unable to resolve @outfitter/docs entrypoint (expected src/index.ts or dist/index.js).");
20
+ }
21
+ var docsModulePromise;
22
+ async function loadDocsModule() {
23
+ if (!docsModulePromise) {
24
+ docsModulePromise = (async () => {
25
+ const entrypoint = resolveDocsEntrypoint();
26
+ const module = await import(pathToFileURL(entrypoint).href);
27
+ if (typeof module.createDocsCommand !== "function" || typeof module.executeCheckCommand !== "function" || typeof module.executeSyncCommand !== "function" || typeof module.executeExportCommand !== "function") {
28
+ throw new Error("Resolved @outfitter/docs entrypoint does not export required docs functions.");
29
+ }
30
+ return module;
31
+ })();
32
+ }
33
+ return await docsModulePromise;
34
+ }
35
+
36
+ export { loadDocsModule };
@@ -0,0 +1,4 @@
1
+ import "../shared/outfitter-y784nh31";
2
+ import { INIT_TARGET_IDS, READY_TARGET_IDS, SCAFFOLD_TARGET_IDS, TARGET_IDS, TARGET_REGISTRY, getInitTarget, getReadyTarget, getScaffoldTarget, getTarget, listTargets, resolvePlacement } from "../shared/outfitter-33w361tc";
3
+ import { TargetCategory, TargetDefinition, TargetId, TargetScope, TargetStatus } from "../shared/outfitter-k56rmt24";
4
+ export { resolvePlacement, listTargets, getTarget, getScaffoldTarget, getReadyTarget, getInitTarget, TargetStatus, TargetScope, TargetId, TargetDefinition, TargetCategory, TARGET_REGISTRY, TARGET_IDS, SCAFFOLD_TARGET_IDS, READY_TARGET_IDS, INIT_TARGET_IDS };
@@ -0,0 +1,29 @@
1
+ // @bun
2
+ import"../shared/outfitter-ehp18x1n.js";
3
+ import {
4
+ INIT_TARGET_IDS,
5
+ READY_TARGET_IDS,
6
+ SCAFFOLD_TARGET_IDS,
7
+ TARGET_IDS,
8
+ TARGET_REGISTRY,
9
+ getInitTarget,
10
+ getReadyTarget,
11
+ getScaffoldTarget,
12
+ getTarget,
13
+ listTargets,
14
+ resolvePlacement
15
+ } from "../shared/outfitter-1dd0k853.js";
16
+ import"../shared/outfitter-mdt37hqm.js";
17
+ export {
18
+ resolvePlacement,
19
+ listTargets,
20
+ getTarget,
21
+ getScaffoldTarget,
22
+ getReadyTarget,
23
+ getInitTarget,
24
+ TARGET_REGISTRY,
25
+ TARGET_IDS,
26
+ SCAFFOLD_TARGET_IDS,
27
+ READY_TARGET_IDS,
28
+ INIT_TARGET_IDS
29
+ };
@@ -0,0 +1,3 @@
1
+ import { INIT_TARGET_IDS, READY_TARGET_IDS, SCAFFOLD_TARGET_IDS, TARGET_IDS, TARGET_REGISTRY, getInitTarget, getReadyTarget, getScaffoldTarget, getTarget, listTargets, resolvePlacement } from "../shared/outfitter-33w361tc";
2
+ import "../shared/outfitter-k56rmt24";
3
+ export { resolvePlacement, listTargets, getTarget, getScaffoldTarget, getReadyTarget, getInitTarget, TARGET_REGISTRY, TARGET_IDS, SCAFFOLD_TARGET_IDS, READY_TARGET_IDS, INIT_TARGET_IDS };
@@ -0,0 +1,28 @@
1
+ // @bun
2
+ import {
3
+ INIT_TARGET_IDS,
4
+ READY_TARGET_IDS,
5
+ SCAFFOLD_TARGET_IDS,
6
+ TARGET_IDS,
7
+ TARGET_REGISTRY,
8
+ getInitTarget,
9
+ getReadyTarget,
10
+ getScaffoldTarget,
11
+ getTarget,
12
+ listTargets,
13
+ resolvePlacement
14
+ } from "../shared/outfitter-1dd0k853.js";
15
+ import"../shared/outfitter-mdt37hqm.js";
16
+ export {
17
+ resolvePlacement,
18
+ listTargets,
19
+ getTarget,
20
+ getScaffoldTarget,
21
+ getReadyTarget,
22
+ getInitTarget,
23
+ TARGET_REGISTRY,
24
+ TARGET_IDS,
25
+ SCAFFOLD_TARGET_IDS,
26
+ READY_TARGET_IDS,
27
+ INIT_TARGET_IDS
28
+ };
@@ -0,0 +1,2 @@
1
+ import { TargetCategory, TargetDefinition, TargetId, TargetScope, TargetStatus } from "../shared/outfitter-k56rmt24";
2
+ export { TargetStatus, TargetScope, TargetId, TargetDefinition, TargetCategory };
@@ -0,0 +1 @@
1
+ // @bun
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "outfitter",
3
3
  "description": "Outfitter umbrella CLI for scaffolding and project management",
4
- "version": "0.2.1",
4
+ "version": "0.2.3",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",
@@ -16,28 +16,64 @@
16
16
  "default": "./dist/index.js"
17
17
  }
18
18
  },
19
+ "./actions": {
20
+ "import": {
21
+ "types": "./dist/actions.d.ts",
22
+ "default": "./dist/actions.js"
23
+ }
24
+ },
25
+ "./commands/add": {
26
+ "import": {
27
+ "types": "./dist/commands/add.d.ts",
28
+ "default": "./dist/commands/add.js"
29
+ }
30
+ },
31
+ "./commands/check": {
32
+ "import": {
33
+ "types": "./dist/commands/check.d.ts",
34
+ "default": "./dist/commands/check.js"
35
+ }
36
+ },
19
37
  "./commands/demo": {
20
38
  "import": {
21
- "types": "./dist/commands/demo/index.d.ts",
22
- "default": "./dist/commands/demo/index.js"
39
+ "types": "./dist/commands/demo.d.ts",
40
+ "default": "./dist/commands/demo.js"
23
41
  }
24
42
  },
25
- "./commands/demo/errors": {
43
+ "./commands/docs-module-loader": {
26
44
  "import": {
27
- "types": "./dist/commands/demo/errors.d.ts",
28
- "default": "./dist/commands/demo/errors.js"
45
+ "types": "./dist/commands/docs-module-loader.d.ts",
46
+ "default": "./dist/commands/docs-module-loader.js"
29
47
  }
30
48
  },
31
- "./actions": {
49
+ "./commands/doctor": {
32
50
  "import": {
33
- "types": "./dist/actions.d.ts",
34
- "default": "./dist/actions.js"
51
+ "types": "./dist/commands/doctor.d.ts",
52
+ "default": "./dist/commands/doctor.js"
35
53
  }
36
54
  },
37
- "./commands/update": {
55
+ "./commands/init": {
38
56
  "import": {
39
- "types": "./dist/commands/update.d.ts",
40
- "default": "./dist/commands/update.js"
57
+ "types": "./dist/commands/init.d.ts",
58
+ "default": "./dist/commands/init.js"
59
+ }
60
+ },
61
+ "./commands/migrate-kit": {
62
+ "import": {
63
+ "types": "./dist/commands/migrate-kit.d.ts",
64
+ "default": "./dist/commands/migrate-kit.js"
65
+ }
66
+ },
67
+ "./commands/repo": {
68
+ "import": {
69
+ "types": "./dist/commands/repo.d.ts",
70
+ "default": "./dist/commands/repo.js"
71
+ }
72
+ },
73
+ "./commands/scaffold": {
74
+ "import": {
75
+ "types": "./dist/commands/scaffold.d.ts",
76
+ "default": "./dist/commands/scaffold.js"
41
77
  }
42
78
  },
43
79
  "./commands/shared-deps": {
@@ -46,25 +82,139 @@
46
82
  "default": "./dist/commands/shared-deps.js"
47
83
  }
48
84
  },
49
- "./commands/doctor": {
85
+ "./commands/update": {
50
86
  "import": {
51
- "types": "./dist/commands/doctor.d.ts",
52
- "default": "./dist/commands/doctor.js"
87
+ "types": "./dist/commands/update.d.ts",
88
+ "default": "./dist/commands/update.js"
53
89
  }
54
90
  },
55
- "./commands/add": {
91
+ "./commands/update-planner": {
56
92
  "import": {
57
- "types": "./dist/commands/add.d.ts",
58
- "default": "./dist/commands/add.js"
93
+ "types": "./dist/commands/update-planner.d.ts",
94
+ "default": "./dist/commands/update-planner.js"
59
95
  }
60
96
  },
61
- "./commands/init": {
97
+ "./commands/update-workspace": {
62
98
  "import": {
63
- "types": "./dist/commands/init.d.ts",
64
- "default": "./dist/commands/init.js"
99
+ "types": "./dist/commands/update-workspace.d.ts",
100
+ "default": "./dist/commands/update-workspace.js"
101
+ }
102
+ },
103
+ "./create": {
104
+ "import": {
105
+ "types": "./dist/create/index.d.ts",
106
+ "default": "./dist/create/index.js"
107
+ }
108
+ },
109
+ "./create/planner": {
110
+ "import": {
111
+ "types": "./dist/create/planner.d.ts",
112
+ "default": "./dist/create/planner.js"
113
+ }
114
+ },
115
+ "./create/presets": {
116
+ "import": {
117
+ "types": "./dist/create/presets.d.ts",
118
+ "default": "./dist/create/presets.js"
119
+ }
120
+ },
121
+ "./create/types": {
122
+ "import": {
123
+ "types": "./dist/create/types.d.ts",
124
+ "default": "./dist/create/types.js"
125
+ }
126
+ },
127
+ "./engine": {
128
+ "import": {
129
+ "types": "./dist/engine/index.d.ts",
130
+ "default": "./dist/engine/index.js"
131
+ }
132
+ },
133
+ "./engine/blocks": {
134
+ "import": {
135
+ "types": "./dist/engine/blocks.d.ts",
136
+ "default": "./dist/engine/blocks.js"
137
+ }
138
+ },
139
+ "./engine/collector": {
140
+ "import": {
141
+ "types": "./dist/engine/collector.d.ts",
142
+ "default": "./dist/engine/collector.js"
143
+ }
144
+ },
145
+ "./engine/config": {
146
+ "import": {
147
+ "types": "./dist/engine/config.d.ts",
148
+ "default": "./dist/engine/config.js"
149
+ }
150
+ },
151
+ "./engine/executor": {
152
+ "import": {
153
+ "types": "./dist/engine/executor.d.ts",
154
+ "default": "./dist/engine/executor.js"
155
+ }
156
+ },
157
+ "./engine/names": {
158
+ "import": {
159
+ "types": "./dist/engine/names.d.ts",
160
+ "default": "./dist/engine/names.js"
65
161
  }
66
162
  },
67
- "./package.json": "./package.json"
163
+ "./engine/post-scaffold": {
164
+ "import": {
165
+ "types": "./dist/engine/post-scaffold.d.ts",
166
+ "default": "./dist/engine/post-scaffold.js"
167
+ }
168
+ },
169
+ "./engine/render-plan": {
170
+ "import": {
171
+ "types": "./dist/engine/render-plan.d.ts",
172
+ "default": "./dist/engine/render-plan.js"
173
+ }
174
+ },
175
+ "./engine/template": {
176
+ "import": {
177
+ "types": "./dist/engine/template.d.ts",
178
+ "default": "./dist/engine/template.js"
179
+ }
180
+ },
181
+ "./engine/types": {
182
+ "import": {
183
+ "types": "./dist/engine/types.d.ts",
184
+ "default": "./dist/engine/types.js"
185
+ }
186
+ },
187
+ "./engine/workspace": {
188
+ "import": {
189
+ "types": "./dist/engine/workspace.d.ts",
190
+ "default": "./dist/engine/workspace.js"
191
+ }
192
+ },
193
+ "./manifest": {
194
+ "import": {
195
+ "types": "./dist/manifest.d.ts",
196
+ "default": "./dist/manifest.js"
197
+ }
198
+ },
199
+ "./package.json": "./package.json",
200
+ "./targets": {
201
+ "import": {
202
+ "types": "./dist/targets/index.d.ts",
203
+ "default": "./dist/targets/index.js"
204
+ }
205
+ },
206
+ "./targets/registry": {
207
+ "import": {
208
+ "types": "./dist/targets/registry.d.ts",
209
+ "default": "./dist/targets/registry.js"
210
+ }
211
+ },
212
+ "./targets/types": {
213
+ "import": {
214
+ "types": "./dist/targets/types.d.ts",
215
+ "default": "./dist/targets/types.js"
216
+ }
217
+ }
68
218
  },
69
219
  "bin": {
70
220
  "outfitter": "./dist/cli.js",
@@ -79,6 +229,7 @@
79
229
  "test:watch": "bun test --watch",
80
230
  "lint": "biome lint ./src",
81
231
  "lint:fix": "biome lint --write ./src",
232
+ "pretypecheck": "bun run --filter @outfitter/logging build && bun run --filter @outfitter/cli build",
82
233
  "typecheck": "tsc --noEmit",
83
234
  "sync:templates": "bun run ../../scripts/sync-templates.ts",
84
235
  "prepack": "bun run sync:templates",
@@ -86,18 +237,20 @@
86
237
  },
87
238
  "dependencies": {
88
239
  "@clack/prompts": "^0.10.0",
89
- "@outfitter/cli": "0.3.0",
90
- "@outfitter/config": "0.3.0",
91
- "@outfitter/contracts": "0.2.0",
92
- "@outfitter/logging": "0.3.0",
93
- "@outfitter/tooling": "0.2.1",
240
+ "@outfitter/cli": "0.4.0",
241
+ "@outfitter/tui": "0.2.0",
242
+ "@outfitter/config": "0.3.1",
243
+ "@outfitter/contracts": "0.3.0",
244
+ "@outfitter/docs": "0.1.1",
245
+ "@outfitter/logging": "0.4.0",
246
+ "@outfitter/tooling": "0.2.3",
94
247
  "commander": "^14.0.2",
248
+ "typescript": "^5.9.3",
95
249
  "zod": "^4.3.5"
96
250
  },
97
251
  "devDependencies": {
98
252
  "@types/bun": "^1.3.7",
99
- "@types/node": "^25.0.10",
100
- "typescript": "^5.9.3"
253
+ "@types/node": "^25.0.10"
101
254
  },
102
255
  "engines": {
103
256
  "bun": ">=1.3.7"
@@ -20,8 +20,7 @@ pre-commit:
20
20
  pre-push:
21
21
  parallel: false
22
22
  commands:
23
- build:
24
- run: bun run build
25
-
26
- test:
27
- run: bun run test
23
+ verify:
24
+ # TDD-aware strict verification with RED-phase branch carveout
25
+ # (*-tests, */tests, *_tests).
26
+ run: bunx @outfitter/tooling pre-push
@@ -22,19 +22,24 @@
22
22
  "test": "bun test",
23
23
  "test:watch": "bun test --watch",
24
24
  "typecheck": "tsc --noEmit",
25
+ "check": "ultracite check",
26
+ "verify:ci": "bun run typecheck && bun run check && bun run build && bun run test",
25
27
  "lint": "biome check .",
26
28
  "lint:fix": "biome check . --write",
27
29
  "format": "biome format --write .",
30
+ "clean:artifacts": "rm -rf dist .turbo",
28
31
  "clean": "rm -rf dist"
29
32
  },
30
33
  "devDependencies": {
31
- "@biomejs/biome": "^2.3.11",
32
- "@types/bun": "^1.3.6",
33
- "lefthook": "^1.11.0",
34
- "typescript": "^5.9.3"
34
+ "@biomejs/biome": "^2.3.12",
35
+ "@outfitter/tooling": "^0.2.1",
36
+ "@types/bun": "^1.3.7",
37
+ "lefthook": "^2.0.16",
38
+ "typescript": "^5.9.3",
39
+ "ultracite": "^7.1.1"
35
40
  },
36
41
  "engines": {
37
- "bun": ">=1.0.0"
42
+ "bun": ">=1.3.7"
38
43
  },
39
44
  "keywords": [],
40
45
  "license": "MIT"
@@ -20,8 +20,7 @@ pre-commit:
20
20
  pre-push:
21
21
  parallel: false
22
22
  commands:
23
- build:
24
- run: bun run build
25
-
26
- test:
27
- run: bun run test
23
+ verify:
24
+ # TDD-aware strict verification with RED-phase branch carveout
25
+ # (*-tests, */tests, *_tests).
26
+ run: bunx @outfitter/tooling pre-push
@@ -1,17 +1,4 @@
1
1
  {
2
- "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json",
3
- "organizeImports": {
4
- "enabled": true
5
- },
6
- "linter": {
7
- "enabled": true,
8
- "rules": {
9
- "recommended": true
10
- }
11
- },
12
- "formatter": {
13
- "enabled": true,
14
- "indentStyle": "tab",
15
- "lineWidth": 100
16
- }
2
+ "$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
3
+ "extends": ["ultracite/config/biome/core/biome.jsonc"]
17
4
  }