@fenglimg/fabric-cli 1.8.0-rc.3 → 2.0.0-rc.8
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.
- package/README.md +6 -6
- package/dist/chunk-6ICJICVU.js +10 -0
- package/dist/chunk-74SZWYPH.js +658 -0
- package/dist/chunk-EYIDD2YS.js +1000 -0
- package/dist/{chunk-QPCRBQ5Y.js → chunk-OBQU6NHO.js} +1 -52
- package/dist/chunk-WWNXR34K.js +49 -0
- package/dist/doctor-T7JWODKG.js +282 -0
- package/dist/hooks-Y74Y5LQS.js +12 -0
- package/dist/index.js +7 -5
- package/dist/{init-7EYGUJNJ.js → init-55WZSUK6.js} +312 -1022
- package/dist/plan-context-hint-QMUPAXIB.js +98 -0
- package/dist/scan-LMK3UCWL.js +22 -0
- package/dist/{serve-466QXQ5Q.js → serve-H554BHLG.js} +8 -4
- package/package.json +3 -3
- package/templates/agents-md/AGENTS.md.template +55 -17
- package/templates/bootstrap/CLAUDE.md +1 -1
- package/templates/bootstrap/codex-AGENTS-header.md +1 -1
- package/templates/bootstrap/cursor-fabric-bootstrap.mdc +1 -1
- package/templates/hooks/configs/README.md +73 -0
- package/templates/hooks/configs/claude-code.json +37 -0
- package/templates/hooks/configs/codex-hooks.json +20 -0
- package/templates/hooks/configs/cursor-hooks.json +20 -0
- package/templates/hooks/fabric-hint.cjs +1307 -0
- package/templates/hooks/knowledge-hint-broad.cjs +464 -0
- package/templates/hooks/knowledge-hint-narrow.cjs +826 -0
- package/templates/hooks/lib/session-digest-writer.cjs +172 -0
- package/templates/skills/fabric-archive/SKILL.md +486 -0
- package/templates/skills/fabric-import/SKILL.md +588 -0
- package/templates/skills/fabric-review/SKILL.md +382 -0
- package/dist/chunk-NMMUETVK.js +0 -216
- package/dist/doctor-F52XWWZC.js +0 -98
- package/dist/scan-NNBNGIZG.js +0 -12
- package/templates/agents-md/variants/cocos.md +0 -20
- package/templates/agents-md/variants/next.md +0 -20
- package/templates/agents-md/variants/vite.md +0 -20
- package/templates/bootstrap/GEMINI.md +0 -8
- package/templates/bootstrap/roo-fabric.md +0 -5
- package/templates/bootstrap/windsurf-fabric.md +0 -5
- package/templates/claude-hooks/fabric-init-reminder.cjs +0 -18
- package/templates/claude-skills/fabric-init/SKILL.md +0 -163
- package/templates/codex-hooks/fabric-session-start.cjs +0 -19
- package/templates/codex-hooks/fabric-stop-reminder.cjs +0 -18
- package/templates/codex-skills/fabric-init/SKILL.md +0 -162
- package/templates/husky/pre-commit +0 -9
- package/templates/skill-source/fabric-init/SOURCE.md +0 -157
- package/templates/skill-source/fabric-init/clients.json +0 -17
|
@@ -1,46 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
// src/colors.ts
|
|
4
|
-
import pc from "picocolors";
|
|
5
|
-
import stringWidth from "string-width";
|
|
6
|
-
function isColorEnabled() {
|
|
7
|
-
return !process.env.NO_COLOR && Boolean(process.stdout.isTTY) && Boolean(process.stderr.isTTY);
|
|
8
|
-
}
|
|
9
|
-
function colorize(painter) {
|
|
10
|
-
return (value) => isColorEnabled() ? painter(value) : value;
|
|
11
|
-
}
|
|
12
|
-
var paint = {
|
|
13
|
-
success: colorize(pc.green),
|
|
14
|
-
warn: colorize(pc.yellow),
|
|
15
|
-
error: colorize(pc.red),
|
|
16
|
-
drift: colorize(pc.magenta),
|
|
17
|
-
ai: colorize(pc.blue),
|
|
18
|
-
human: colorize(pc.cyan),
|
|
19
|
-
muted: colorize(pc.dim)
|
|
20
|
-
};
|
|
21
|
-
var symbol = {
|
|
22
|
-
get ok() {
|
|
23
|
-
return isColorEnabled() ? paint.success("\u2713") : "[ok]";
|
|
24
|
-
},
|
|
25
|
-
get warn() {
|
|
26
|
-
return isColorEnabled() ? paint.warn("!") : "[warn]";
|
|
27
|
-
},
|
|
28
|
-
get error() {
|
|
29
|
-
return isColorEnabled() ? paint.error("x") : "[error]";
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
function displayWidth(value) {
|
|
33
|
-
return stringWidth(value);
|
|
34
|
-
}
|
|
35
|
-
function padEnd(value, width, char = " ") {
|
|
36
|
-
const fill = char.length > 0 ? char : " ";
|
|
37
|
-
let result = value;
|
|
38
|
-
while (displayWidth(result) < width) {
|
|
39
|
-
result += fill;
|
|
40
|
-
}
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
3
|
// src/dev-mode.ts
|
|
45
4
|
import { existsSync, readFileSync } from "fs";
|
|
46
5
|
import { isAbsolute, join, resolve } from "path";
|
|
@@ -97,18 +56,8 @@ function formatResolutionStep(source, value) {
|
|
|
97
56
|
return `${source}: ${value ?? "<unset>"}`;
|
|
98
57
|
}
|
|
99
58
|
|
|
100
|
-
// src/i18n.ts
|
|
101
|
-
import { createTranslator, detectNodeLocale } from "@fenglimg/fabric-shared";
|
|
102
|
-
var locale = detectNodeLocale();
|
|
103
|
-
var t = createTranslator(locale);
|
|
104
|
-
|
|
105
59
|
export {
|
|
106
|
-
paint,
|
|
107
|
-
symbol,
|
|
108
|
-
displayWidth,
|
|
109
|
-
padEnd,
|
|
110
60
|
readFabricConfig,
|
|
111
61
|
resolveDevMode,
|
|
112
|
-
createDebugLogger
|
|
113
|
-
t
|
|
62
|
+
createDebugLogger
|
|
114
63
|
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/colors.ts
|
|
4
|
+
import pc from "picocolors";
|
|
5
|
+
import stringWidth from "string-width";
|
|
6
|
+
function isColorEnabled() {
|
|
7
|
+
return !process.env.NO_COLOR && Boolean(process.stdout.isTTY) && Boolean(process.stderr.isTTY);
|
|
8
|
+
}
|
|
9
|
+
function colorize(painter) {
|
|
10
|
+
return (value) => isColorEnabled() ? painter(value) : value;
|
|
11
|
+
}
|
|
12
|
+
var paint = {
|
|
13
|
+
success: colorize(pc.green),
|
|
14
|
+
warn: colorize(pc.yellow),
|
|
15
|
+
error: colorize(pc.red),
|
|
16
|
+
drift: colorize(pc.magenta),
|
|
17
|
+
ai: colorize(pc.blue),
|
|
18
|
+
human: colorize(pc.cyan),
|
|
19
|
+
muted: colorize(pc.dim)
|
|
20
|
+
};
|
|
21
|
+
var symbol = {
|
|
22
|
+
get ok() {
|
|
23
|
+
return isColorEnabled() ? paint.success("\u2713") : "[ok]";
|
|
24
|
+
},
|
|
25
|
+
get warn() {
|
|
26
|
+
return isColorEnabled() ? paint.warn("!") : "[warn]";
|
|
27
|
+
},
|
|
28
|
+
get error() {
|
|
29
|
+
return isColorEnabled() ? paint.error("x") : "[error]";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
function displayWidth(value) {
|
|
33
|
+
return stringWidth(value);
|
|
34
|
+
}
|
|
35
|
+
function padEnd(value, width, char = " ") {
|
|
36
|
+
const fill = char.length > 0 ? char : " ";
|
|
37
|
+
let result = value;
|
|
38
|
+
while (displayWidth(result) < width) {
|
|
39
|
+
result += fill;
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export {
|
|
45
|
+
paint,
|
|
46
|
+
symbol,
|
|
47
|
+
displayWidth,
|
|
48
|
+
padEnd
|
|
49
|
+
};
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
paint,
|
|
4
|
+
symbol
|
|
5
|
+
} from "./chunk-WWNXR34K.js";
|
|
6
|
+
import {
|
|
7
|
+
t
|
|
8
|
+
} from "./chunk-6ICJICVU.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveDevMode
|
|
11
|
+
} from "./chunk-OBQU6NHO.js";
|
|
12
|
+
|
|
13
|
+
// src/commands/doctor.ts
|
|
14
|
+
import { confirm, isCancel } from "@clack/prompts";
|
|
15
|
+
import { defineCommand } from "citty";
|
|
16
|
+
import {
|
|
17
|
+
appendEventLedgerEvent,
|
|
18
|
+
checkLockOrThrow,
|
|
19
|
+
runDoctorApplyLint,
|
|
20
|
+
runDoctorFix,
|
|
21
|
+
runDoctorReport
|
|
22
|
+
} from "@fenglimg/fabric-server";
|
|
23
|
+
var APPLY_LINT_CODE_LABELS = {
|
|
24
|
+
knowledge_orphan_demote_required: "demote (maturity)",
|
|
25
|
+
knowledge_stale_archive_required: "archive (git mv)",
|
|
26
|
+
knowledge_pending_auto_archive: "archive (git mv, pending)",
|
|
27
|
+
knowledge_index_drift: "counter bump (agents.meta)",
|
|
28
|
+
knowledge_session_hints_stale: "cache delete"
|
|
29
|
+
};
|
|
30
|
+
var PLAN_PREVIEW_LIMIT = 12;
|
|
31
|
+
var doctorCommand = defineCommand({
|
|
32
|
+
meta: {
|
|
33
|
+
name: "doctor",
|
|
34
|
+
description: t("cli.doctor.description")
|
|
35
|
+
},
|
|
36
|
+
args: {
|
|
37
|
+
target: {
|
|
38
|
+
type: "string",
|
|
39
|
+
description: t("cli.doctor.args.target.description")
|
|
40
|
+
},
|
|
41
|
+
fix: {
|
|
42
|
+
type: "boolean",
|
|
43
|
+
description: t("cli.doctor.args.fix.description"),
|
|
44
|
+
default: false
|
|
45
|
+
},
|
|
46
|
+
json: {
|
|
47
|
+
type: "boolean",
|
|
48
|
+
description: t("cli.doctor.args.json.description"),
|
|
49
|
+
default: false
|
|
50
|
+
},
|
|
51
|
+
strict: {
|
|
52
|
+
type: "boolean",
|
|
53
|
+
description: t("cli.doctor.args.strict.description"),
|
|
54
|
+
default: false
|
|
55
|
+
},
|
|
56
|
+
force: {
|
|
57
|
+
type: "boolean",
|
|
58
|
+
description: t("cli.doctor.args.force.description"),
|
|
59
|
+
default: false
|
|
60
|
+
},
|
|
61
|
+
"apply-lint": {
|
|
62
|
+
type: "boolean",
|
|
63
|
+
description: t("cli.doctor.args.apply-lint.description"),
|
|
64
|
+
default: false
|
|
65
|
+
},
|
|
66
|
+
// rc.7 T11: skip the safety confirm before mutations. Required for any
|
|
67
|
+
// non-tty invocation that wants to run --apply-lint without setting
|
|
68
|
+
// FABRIC_NONINTERACTIVE=1 in the environment.
|
|
69
|
+
yes: {
|
|
70
|
+
type: "boolean",
|
|
71
|
+
description: t("cli.doctor.args.yes.description"),
|
|
72
|
+
default: false
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
async run({ args }) {
|
|
76
|
+
const workspaceRoot = process.cwd();
|
|
77
|
+
const resolution = resolveDevMode(args.target, workspaceRoot);
|
|
78
|
+
checkLockOrThrow(resolution.target, { force: args.force });
|
|
79
|
+
const applyLint = args["apply-lint"] === true;
|
|
80
|
+
const fix = args.fix === true;
|
|
81
|
+
if (applyLint && fix) {
|
|
82
|
+
writeStderr(t("cli.doctor.errors.apply-lint-fix-mutually-exclusive"));
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
let applyLintReport = null;
|
|
87
|
+
let fixReport = null;
|
|
88
|
+
let report;
|
|
89
|
+
if (applyLint) {
|
|
90
|
+
const preReport = await runDoctorReport(resolution.target);
|
|
91
|
+
const plan = computeApplyLintPlan(preReport);
|
|
92
|
+
const yesFlag = args.yes === true;
|
|
93
|
+
const envBypass = process.env.FABRIC_NONINTERACTIVE === "1";
|
|
94
|
+
if (plan.totalCount === 0) {
|
|
95
|
+
} else {
|
|
96
|
+
renderApplyLintPlan(plan);
|
|
97
|
+
const decision = await resolveApplyLintConsent({
|
|
98
|
+
yesFlag,
|
|
99
|
+
envBypass,
|
|
100
|
+
plan
|
|
101
|
+
});
|
|
102
|
+
if (decision === "abort") {
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
applyLintReport = await runDoctorApplyLint(resolution.target);
|
|
108
|
+
report = applyLintReport.report;
|
|
109
|
+
} else if (fix) {
|
|
110
|
+
fixReport = await runDoctorFix(resolution.target);
|
|
111
|
+
report = fixReport.report;
|
|
112
|
+
} else {
|
|
113
|
+
report = await runDoctorReport(resolution.target);
|
|
114
|
+
}
|
|
115
|
+
if (args.json === true) {
|
|
116
|
+
writeStdout(JSON.stringify(applyLintReport ?? fixReport ?? report, null, 2));
|
|
117
|
+
} else {
|
|
118
|
+
if (applyLintReport !== null) {
|
|
119
|
+
writeStdout(applyLintReport.message);
|
|
120
|
+
if (applyLintReport.aborted && applyLintReport.abort_reason !== void 0) {
|
|
121
|
+
writeStderr(applyLintReport.abort_reason);
|
|
122
|
+
}
|
|
123
|
+
renderApplyLintMutations(applyLintReport);
|
|
124
|
+
} else if (fixReport !== null) {
|
|
125
|
+
writeStdout(fixReport.message);
|
|
126
|
+
}
|
|
127
|
+
renderHumanReport(report);
|
|
128
|
+
}
|
|
129
|
+
await emitDoctorRunEventBestEffort(resolution.target, {
|
|
130
|
+
mode: applyLint ? "apply-lint" : "lint",
|
|
131
|
+
issues: report.fixable_errors.length + report.manual_errors.length + report.warnings.length,
|
|
132
|
+
mutations: applyLintReport !== null ? applyLintReport.mutations.filter((m) => m.applied).length : void 0
|
|
133
|
+
});
|
|
134
|
+
if (applyLintReport !== null) {
|
|
135
|
+
if (applyLintReport.aborted) {
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (applyLintReport.mutations.some((m) => !m.applied)) {
|
|
140
|
+
process.exitCode = 1;
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (report.status === "error" || args.strict === true && (report.status === "warn" || report.warnings.length > 0)) {
|
|
145
|
+
process.exitCode = 1;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
var doctor_default = doctorCommand;
|
|
150
|
+
function renderHumanReport(report) {
|
|
151
|
+
writeStdout(`${renderStatus(report.status)} ${paint.ai("fabric doctor")} ${paint.human(report.summary.target)}`);
|
|
152
|
+
for (const check of report.checks) {
|
|
153
|
+
writeStdout(`${renderStatus(check.status)} ${check.name}: ${check.message}`);
|
|
154
|
+
}
|
|
155
|
+
writeIssueSection(t("doctor.section.fixable"), report.fixable_errors);
|
|
156
|
+
writeIssueSection(t("doctor.section.manual"), report.manual_errors);
|
|
157
|
+
writeIssueSection(t("doctor.section.warnings"), report.warnings);
|
|
158
|
+
}
|
|
159
|
+
function renderApplyLintMutations(applyLintReport) {
|
|
160
|
+
if (applyLintReport.mutations.length === 0) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
writeStdout("");
|
|
164
|
+
writeStdout(t("doctor.section.apply-lint-mutations"));
|
|
165
|
+
for (const mutation of applyLintReport.mutations) {
|
|
166
|
+
const marker = mutation.applied ? symbol.ok : symbol.error;
|
|
167
|
+
const errSuffix = mutation.applied || mutation.error === void 0 ? "" : ` (${mutation.error})`;
|
|
168
|
+
writeStdout(`${marker} ${mutation.kind}: ${mutation.path} [${mutation.detail}]${errSuffix}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function writeIssueSection(title, issues) {
|
|
172
|
+
if (issues.length === 0) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
writeStdout("");
|
|
176
|
+
writeStdout(title);
|
|
177
|
+
for (const issue of issues) {
|
|
178
|
+
writeStdout(`- ${issue.code}: ${issue.message}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function renderStatus(status) {
|
|
182
|
+
if (status === "ok") {
|
|
183
|
+
return symbol.ok;
|
|
184
|
+
}
|
|
185
|
+
if (status === "warn") {
|
|
186
|
+
return symbol.warn;
|
|
187
|
+
}
|
|
188
|
+
return symbol.error;
|
|
189
|
+
}
|
|
190
|
+
function writeStdout(message) {
|
|
191
|
+
process.stdout.write(`${message}
|
|
192
|
+
`);
|
|
193
|
+
}
|
|
194
|
+
async function emitDoctorRunEventBestEffort(projectRoot, payload) {
|
|
195
|
+
try {
|
|
196
|
+
await appendEventLedgerEvent(projectRoot, {
|
|
197
|
+
event_type: "doctor_run",
|
|
198
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
199
|
+
mode: payload.mode,
|
|
200
|
+
issues: payload.issues,
|
|
201
|
+
...payload.mutations !== void 0 ? { mutations: payload.mutations } : {}
|
|
202
|
+
});
|
|
203
|
+
} catch {
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
function writeStderr(message) {
|
|
207
|
+
process.stderr.write(`${message}
|
|
208
|
+
`);
|
|
209
|
+
}
|
|
210
|
+
function computeApplyLintPlan(report) {
|
|
211
|
+
const buckets = {};
|
|
212
|
+
const sources = [
|
|
213
|
+
...report.fixable_errors,
|
|
214
|
+
...report.warnings
|
|
215
|
+
];
|
|
216
|
+
for (const issue of sources) {
|
|
217
|
+
if (APPLY_LINT_CODE_LABELS[issue.code] === void 0) continue;
|
|
218
|
+
if (!Array.isArray(buckets[issue.code])) {
|
|
219
|
+
buckets[issue.code] = [];
|
|
220
|
+
}
|
|
221
|
+
buckets[issue.code].push(issue);
|
|
222
|
+
}
|
|
223
|
+
const codes = Object.keys(buckets).sort(
|
|
224
|
+
(a, b) => APPLY_LINT_CODE_LABELS[a].localeCompare(APPLY_LINT_CODE_LABELS[b])
|
|
225
|
+
);
|
|
226
|
+
const perCodeLines = [];
|
|
227
|
+
let totalCount = 0;
|
|
228
|
+
for (const code of codes) {
|
|
229
|
+
const items = buckets[code];
|
|
230
|
+
totalCount += items.length;
|
|
231
|
+
perCodeLines.push(` - ${APPLY_LINT_CODE_LABELS[code]}: ${items.length}`);
|
|
232
|
+
}
|
|
233
|
+
const previewLines = [];
|
|
234
|
+
const flattened = codes.flatMap((c) => buckets[c]);
|
|
235
|
+
for (const item of flattened.slice(0, PLAN_PREVIEW_LIMIT)) {
|
|
236
|
+
const where = item.path !== void 0 && item.path.length > 0 ? `${item.path}` : "(no path)";
|
|
237
|
+
previewLines.push(` \u2022 ${where} \u2014 ${item.message}`);
|
|
238
|
+
}
|
|
239
|
+
if (flattened.length > PLAN_PREVIEW_LIMIT) {
|
|
240
|
+
previewLines.push(` \u2022 ... and ${flattened.length - PLAN_PREVIEW_LIMIT} more`);
|
|
241
|
+
}
|
|
242
|
+
return { totalCount, perCodeLines, previewLines };
|
|
243
|
+
}
|
|
244
|
+
function renderApplyLintPlan(plan) {
|
|
245
|
+
writeStdout("");
|
|
246
|
+
writeStdout(`${paint.warn("apply-lint mutation plan")} (${plan.totalCount} total)`);
|
|
247
|
+
for (const line of plan.perCodeLines) {
|
|
248
|
+
writeStdout(line);
|
|
249
|
+
}
|
|
250
|
+
if (plan.previewLines.length > 0) {
|
|
251
|
+
writeStdout("");
|
|
252
|
+
writeStdout(" preview:");
|
|
253
|
+
for (const line of plan.previewLines) {
|
|
254
|
+
writeStdout(line);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
async function resolveApplyLintConsent(options) {
|
|
259
|
+
if (options.yesFlag || options.envBypass) {
|
|
260
|
+
return "proceed";
|
|
261
|
+
}
|
|
262
|
+
if (process.stdin.isTTY !== true) {
|
|
263
|
+
writeStderr(
|
|
264
|
+
"doctor --apply-lint: stdin is not a TTY and neither --yes nor FABRIC_NONINTERACTIVE=1 is set. Refusing to mutate."
|
|
265
|
+
);
|
|
266
|
+
return "abort";
|
|
267
|
+
}
|
|
268
|
+
const message = `About to apply ${options.plan.totalCount} mutation(s) to knowledge entries (frontmatter writes + git mv + cache deletes). Proceed?`;
|
|
269
|
+
const answer = await confirm({
|
|
270
|
+
message,
|
|
271
|
+
initialValue: false
|
|
272
|
+
});
|
|
273
|
+
if (isCancel(answer) || answer !== true) {
|
|
274
|
+
writeStderr("doctor --apply-lint: aborted by user.");
|
|
275
|
+
return "abort";
|
|
276
|
+
}
|
|
277
|
+
return "proceed";
|
|
278
|
+
}
|
|
279
|
+
export {
|
|
280
|
+
doctor_default as default,
|
|
281
|
+
doctorCommand
|
|
282
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -8,17 +8,19 @@ import { defineCommand, runMain } from "citty";
|
|
|
8
8
|
|
|
9
9
|
// src/commands/index.ts
|
|
10
10
|
var allCommands = {
|
|
11
|
-
init: () => import("./init-
|
|
12
|
-
scan: () => import("./scan-
|
|
13
|
-
serve: () => import("./serve-
|
|
14
|
-
doctor: () => import("./doctor-
|
|
11
|
+
init: () => import("./init-55WZSUK6.js").then((module) => module.default),
|
|
12
|
+
scan: () => import("./scan-LMK3UCWL.js").then((module) => module.default),
|
|
13
|
+
serve: () => import("./serve-H554BHLG.js").then((module) => module.default),
|
|
14
|
+
doctor: () => import("./doctor-T7JWODKG.js").then((module) => module.default),
|
|
15
|
+
hooks: () => import("./hooks-Y74Y5LQS.js").then((module) => module.default),
|
|
16
|
+
"plan-context-hint": () => import("./plan-context-hint-QMUPAXIB.js").then((module) => module.default)
|
|
15
17
|
};
|
|
16
18
|
|
|
17
19
|
// src/index.ts
|
|
18
20
|
var main = defineCommand({
|
|
19
21
|
meta: {
|
|
20
22
|
name: "fabric",
|
|
21
|
-
version: "
|
|
23
|
+
version: "2.0.0-rc.8",
|
|
22
24
|
description: 'Initialize and manage Fabric projects. Use "fabric init" for one-shot setup.'
|
|
23
25
|
},
|
|
24
26
|
subCommands: allCommands
|