@sylphx/flow 0.2.13 → 1.0.1

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 (158) hide show
  1. package/CHANGELOG.md +318 -0
  2. package/LOOP_MODE.md +446 -0
  3. package/dist/index.d.ts +10 -0
  4. package/dist/index.js +59398 -698
  5. package/dist/lancedb.linux-x64-gnu-b7f0jgsz.node +0 -0
  6. package/dist/lancedb.linux-x64-musl-tgcv22rx.node +0 -0
  7. package/dist/shared/chunk-25dwp0dp.js +89 -0
  8. package/dist/shared/chunk-3pjb6063.js +208 -0
  9. package/dist/shared/chunk-4d6ydpw7.js +2854 -0
  10. package/dist/shared/chunk-4wjcadjk.js +225 -0
  11. package/dist/shared/chunk-5j4w74t6.js +30 -0
  12. package/dist/shared/chunk-5j8m3dh3.js +58 -0
  13. package/dist/shared/chunk-5thh3qem.js +91 -0
  14. package/dist/shared/chunk-6g9xy73m.js +252 -0
  15. package/dist/shared/chunk-7eq34c42.js +23 -0
  16. package/dist/shared/chunk-c2gwgx3r.js +115 -0
  17. package/dist/shared/chunk-cjd3mk4c.js +1320 -0
  18. package/dist/shared/chunk-g5cv6703.js +368 -0
  19. package/dist/shared/chunk-hpkhykhq.js +574 -0
  20. package/dist/shared/chunk-m2322pdk.js +122 -0
  21. package/dist/shared/chunk-nd5fdvaq.js +26 -0
  22. package/dist/shared/chunk-pgd3m6zf.js +108 -0
  23. package/dist/shared/chunk-qk8n91hw.js +494 -0
  24. package/dist/shared/chunk-rkkn8szp.js +16855 -0
  25. package/dist/shared/chunk-t16rfxh0.js +61 -0
  26. package/dist/shared/chunk-t4fbfa5v.js +19 -0
  27. package/dist/shared/chunk-t77h86w6.js +276 -0
  28. package/dist/shared/chunk-v0ez4aef.js +71 -0
  29. package/dist/shared/chunk-v29j2r3s.js +32051 -0
  30. package/dist/shared/chunk-vfbc6ew5.js +765 -0
  31. package/dist/shared/chunk-vmeqwm1c.js +204 -0
  32. package/dist/shared/chunk-x66eh37x.js +137 -0
  33. package/package.json +45 -93
  34. package/README.md +0 -625
  35. package/assets/agents/coder.md +0 -32
  36. package/assets/agents/orchestrator.md +0 -36
  37. package/assets/agents/reviewer.md +0 -30
  38. package/assets/agents/writer.md +0 -30
  39. package/assets/knowledge/data/sql.md +0 -216
  40. package/assets/knowledge/guides/saas-template.md +0 -85
  41. package/assets/knowledge/guides/system-prompt.md +0 -344
  42. package/assets/knowledge/guides/tech-stack.md +0 -92
  43. package/assets/knowledge/guides/ui-ux.md +0 -44
  44. package/assets/knowledge/stacks/nextjs-app.md +0 -165
  45. package/assets/knowledge/stacks/node-api.md +0 -220
  46. package/assets/knowledge/stacks/react-app.md +0 -232
  47. package/assets/knowledge/universal/deployment.md +0 -109
  48. package/assets/knowledge/universal/performance.md +0 -121
  49. package/assets/knowledge/universal/security.md +0 -79
  50. package/assets/knowledge/universal/testing.md +0 -111
  51. package/assets/output-styles/silent.md +0 -23
  52. package/assets/rules/core.md +0 -197
  53. package/assets/slash-commands/commit.md +0 -23
  54. package/assets/slash-commands/context.md +0 -112
  55. package/assets/slash-commands/explain.md +0 -35
  56. package/assets/slash-commands/mep.md +0 -63
  57. package/assets/slash-commands/review.md +0 -39
  58. package/assets/slash-commands/test.md +0 -30
  59. package/dist/assets/agents/coder.md +0 -32
  60. package/dist/assets/agents/orchestrator.md +0 -36
  61. package/dist/assets/agents/reviewer.md +0 -30
  62. package/dist/assets/agents/writer.md +0 -30
  63. package/dist/assets/knowledge/data/sql.md +0 -216
  64. package/dist/assets/knowledge/guides/saas-template.md +0 -85
  65. package/dist/assets/knowledge/guides/system-prompt.md +0 -344
  66. package/dist/assets/knowledge/guides/tech-stack.md +0 -92
  67. package/dist/assets/knowledge/guides/ui-ux.md +0 -44
  68. package/dist/assets/knowledge/stacks/nextjs-app.md +0 -165
  69. package/dist/assets/knowledge/stacks/node-api.md +0 -220
  70. package/dist/assets/knowledge/stacks/react-app.md +0 -232
  71. package/dist/assets/knowledge/universal/deployment.md +0 -109
  72. package/dist/assets/knowledge/universal/performance.md +0 -121
  73. package/dist/assets/knowledge/universal/security.md +0 -79
  74. package/dist/assets/knowledge/universal/testing.md +0 -111
  75. package/dist/assets/output-styles/silent.md +0 -23
  76. package/dist/assets/rules/core.md +0 -197
  77. package/dist/assets/slash-commands/commit.md +0 -23
  78. package/dist/assets/slash-commands/context.md +0 -112
  79. package/dist/assets/slash-commands/explain.md +0 -35
  80. package/dist/assets/slash-commands/mep.md +0 -63
  81. package/dist/assets/slash-commands/review.md +0 -39
  82. package/dist/assets/slash-commands/test.md +0 -30
  83. package/dist/chunk-01gv4qey.js +0 -4
  84. package/dist/chunk-01gv4qey.js.map +0 -11
  85. package/dist/chunk-1e8xf3f6.js +0 -27
  86. package/dist/chunk-1e8xf3f6.js.map +0 -23
  87. package/dist/chunk-3m9whg4q.js +0 -4
  88. package/dist/chunk-3m9whg4q.js.map +0 -9
  89. package/dist/chunk-3qxj0zy3.js +0 -23
  90. package/dist/chunk-3qxj0zy3.js.map +0 -11
  91. package/dist/chunk-3w6pd43t.js +0 -25
  92. package/dist/chunk-3w6pd43t.js.map +0 -61
  93. package/dist/chunk-4e5g3df9.js +0 -105
  94. package/dist/chunk-4e5g3df9.js.map +0 -27
  95. package/dist/chunk-4nm4ere4.js +0 -4
  96. package/dist/chunk-4nm4ere4.js.map +0 -11
  97. package/dist/chunk-4vrj3f8r.js +0 -26
  98. package/dist/chunk-4vrj3f8r.js.map +0 -75
  99. package/dist/chunk-5njgv5k5.js +0 -161
  100. package/dist/chunk-5njgv5k5.js.map +0 -83
  101. package/dist/chunk-67n29s4q.js +0 -7
  102. package/dist/chunk-67n29s4q.js.map +0 -10
  103. package/dist/chunk-7yyg008s.js +0 -27
  104. package/dist/chunk-7yyg008s.js.map +0 -14
  105. package/dist/chunk-86ce45n6.js +0 -3
  106. package/dist/chunk-86ce45n6.js.map +0 -10
  107. package/dist/chunk-99pz5wm0.js +0 -75
  108. package/dist/chunk-99pz5wm0.js.map +0 -12
  109. package/dist/chunk-cv1nhr27.js +0 -2
  110. package/dist/chunk-cv1nhr27.js.map +0 -9
  111. package/dist/chunk-g4baca7p.js +0 -10
  112. package/dist/chunk-g4baca7p.js.map +0 -23
  113. package/dist/chunk-gc66xe7z.js +0 -4
  114. package/dist/chunk-gc66xe7z.js.map +0 -11
  115. package/dist/chunk-hj6qtsqp.js +0 -15
  116. package/dist/chunk-hj6qtsqp.js.map +0 -10
  117. package/dist/chunk-jbd95k1f.js +0 -14
  118. package/dist/chunk-jbd95k1f.js.map +0 -20
  119. package/dist/chunk-jk1ebfqn.js +0 -23
  120. package/dist/chunk-jk1ebfqn.js.map +0 -132
  121. package/dist/chunk-kn908zkk.js +0 -4
  122. package/dist/chunk-kn908zkk.js.map +0 -10
  123. package/dist/chunk-mw13a082.js +0 -4
  124. package/dist/chunk-mw13a082.js.map +0 -10
  125. package/dist/chunk-n8vzewr3.js +0 -4
  126. package/dist/chunk-n8vzewr3.js.map +0 -12
  127. package/dist/chunk-nke51f3c.js +0 -4
  128. package/dist/chunk-nke51f3c.js.map +0 -10
  129. package/dist/chunk-ns5atzyz.js +0 -3
  130. package/dist/chunk-ns5atzyz.js.map +0 -10
  131. package/dist/chunk-q4nh3vst.js +0 -54
  132. package/dist/chunk-q4nh3vst.js.map +0 -53
  133. package/dist/chunk-q5gqgs0p.js +0 -4
  134. package/dist/chunk-q5gqgs0p.js.map +0 -10
  135. package/dist/chunk-qpej66sh.js +0 -6
  136. package/dist/chunk-qpej66sh.js.map +0 -11
  137. package/dist/chunk-s9bsh0gp.js +0 -4
  138. package/dist/chunk-s9bsh0gp.js.map +0 -10
  139. package/dist/chunk-waemzsf4.js +0 -4
  140. package/dist/chunk-waemzsf4.js.map +0 -10
  141. package/dist/chunk-wnhhwtsy.js +0 -19
  142. package/dist/chunk-wnhhwtsy.js.map +0 -11
  143. package/dist/chunk-xs370t8p.js +0 -119
  144. package/dist/chunk-xs370t8p.js.map +0 -26
  145. package/dist/chunk-xtrn4wn0.js +0 -3
  146. package/dist/chunk-xtrn4wn0.js.map +0 -10
  147. package/dist/index.js.map +0 -920
  148. package/drizzle/0000_wooden_lady_bullseye.sql +0 -52
  149. package/drizzle/0001_material_pyro.sql +0 -85
  150. package/drizzle/0002_lyrical_random.sql +0 -2
  151. package/drizzle/0003_romantic_lockjaw.sql +0 -4
  152. package/drizzle/0004_blushing_meteorite.sql +0 -6
  153. package/drizzle/meta/0000_snapshot.json +0 -310
  154. package/drizzle/meta/0001_snapshot.json +0 -906
  155. package/drizzle/meta/0002_snapshot.json +0 -920
  156. package/drizzle/meta/0003_snapshot.json +0 -920
  157. package/drizzle/meta/0004_snapshot.json +0 -921
  158. package/drizzle/meta/_journal.json +0 -41
@@ -0,0 +1,765 @@
1
+ import {
2
+ StateDetector
3
+ } from "./chunk-t77h86w6.js";
4
+ import {
5
+ extractAgentInstructions,
6
+ loadAgentContent
7
+ } from "./chunk-5j8m3dh3.js";
8
+ import {
9
+ UpgradeManager
10
+ } from "./chunk-3pjb6063.js";
11
+ import"./chunk-x66eh37x.js";
12
+ import"./chunk-7eq34c42.js";
13
+ import {
14
+ projectSettings,
15
+ targetManager
16
+ } from "./chunk-vmeqwm1c.js";
17
+ import"./chunk-qk8n91hw.js";
18
+ import"./chunk-nd5fdvaq.js";
19
+ import {
20
+ CLIError
21
+ } from "./chunk-cjd3mk4c.js";
22
+ import"./chunk-t16rfxh0.js";
23
+ import"./chunk-hpkhykhq.js";
24
+ import {
25
+ __require,
26
+ __toESM
27
+ } from "./chunk-5j4w74t6.js";
28
+
29
+ // src/commands/flow-command.ts
30
+ import { Command } from "commander";
31
+ import chalk from "chalk";
32
+ import boxen from "boxen";
33
+ import path from "node:path";
34
+ import fs from "node:fs/promises";
35
+ function showWelcome() {
36
+ console.log(boxen(`${chalk.cyan.bold("Sylphx Flow")} ${chalk.dim("- AI-Powered Development Framework")}
37
+ ` + `${chalk.dim("Auto-initialization • Smart upgrades • One-click launch")}`, {
38
+ padding: 1,
39
+ margin: { bottom: 1 },
40
+ borderStyle: "round",
41
+ borderColor: "cyan"
42
+ }));
43
+ }
44
+ async function showStatus(state) {
45
+ console.log(chalk.cyan.bold(`\uD83D\uDCCA Project Status
46
+ `));
47
+ if (!state.initialized) {
48
+ console.log(" " + chalk.yellow("⚠ Not initialized"));
49
+ } else {
50
+ console.log(` ${chalk.green("✓")} Initialized (Flow v${state.version || "unknown"})`);
51
+ if (state.target) {
52
+ const versionStr = state.targetVersion ? ` (v${state.targetVersion})` : "";
53
+ console.log(` ${chalk.green("✓")} Target platform: ${state.target}${versionStr}`);
54
+ }
55
+ const components = state.components;
56
+ console.log(`
57
+ ${chalk.cyan("Components:")}`);
58
+ console.log(` Agents: ${components.agents.installed ? chalk.green(`✓ ${components.agents.count}`) : chalk.red("✗")}`);
59
+ console.log(` Rules: ${components.rules.installed ? chalk.green(`✓ ${components.rules.count}`) : chalk.red("✗")}`);
60
+ console.log(` Hooks: ${components.hooks.installed ? chalk.green("✓") : chalk.red("✗")}`);
61
+ console.log(` MCP: ${components.mcp.installed ? chalk.green(`✓ ${components.mcp.serverCount} servers`) : chalk.red("✗")}`);
62
+ console.log(` Output styles: ${components.outputStyles.installed ? chalk.green("✓") : chalk.red("✗")}`);
63
+ console.log(` Slash commands: ${components.slashCommands.installed ? chalk.green(`✓ ${components.slashCommands.count}`) : chalk.red("✗")}`);
64
+ if (state.outdated) {
65
+ console.log(`
66
+ ${chalk.yellow("⚠")} Flow version outdated: ${state.version} → ${state.latestVersion}`);
67
+ }
68
+ if (state.targetVersion && state.targetLatestVersion && isVersionOutdated(state.targetVersion, state.targetLatestVersion)) {
69
+ console.log(` ${chalk.yellow("⚠")} ${state.target} update available: v${state.targetVersion} → v${state.targetLatestVersion}`);
70
+ }
71
+ if (state.lastUpdated) {
72
+ const days = Math.floor((Date.now() - state.lastUpdated.getTime()) / (1000 * 60 * 60 * 24));
73
+ if (days > 7) {
74
+ console.log(`
75
+ ${chalk.yellow("⚠")} Last updated: ${days} days ago`);
76
+ }
77
+ }
78
+ }
79
+ console.log("");
80
+ }
81
+ function getExecutableTargets() {
82
+ return targetManager.getImplementedTargetIDs().filter((targetId) => {
83
+ const targetOption = targetManager.getTarget(targetId);
84
+ if (targetOption._tag === "None") {
85
+ return false;
86
+ }
87
+ return targetOption.value.executeCommand !== undefined;
88
+ });
89
+ }
90
+ async function executeTargetCommand(targetId, systemPrompt, userPrompt, options) {
91
+ const targetOption = targetManager.getTarget(targetId);
92
+ if (targetOption._tag === "None") {
93
+ throw new CLIError(`Target not found: ${targetId}`, "TARGET_NOT_FOUND");
94
+ }
95
+ const target = targetOption.value;
96
+ if (!target.isImplemented) {
97
+ throw new CLIError(`Target '${targetId}' is not implemented. Supported targets: ${getExecutableTargets().join(", ")}`, "TARGET_NOT_IMPLEMENTED");
98
+ }
99
+ if (!target.executeCommand) {
100
+ throw new CLIError(`Target '${targetId}' does not support command execution. Supported targets: ${getExecutableTargets().join(", ")}`, "EXECUTION_NOT_SUPPORTED");
101
+ }
102
+ return target.executeCommand(systemPrompt, userPrompt, options);
103
+ }
104
+ function isVersionOutdated(current, latest) {
105
+ try {
106
+ return compareVersions(current, latest) < 0;
107
+ } catch {
108
+ return false;
109
+ }
110
+ }
111
+ function compareVersions(v1, v2) {
112
+ const parts1 = v1.split(".").map(Number);
113
+ const parts2 = v2.split(".").map(Number);
114
+ for (let i = 0;i < Math.min(parts1.length, parts2.length); i++) {
115
+ if (parts1[i] !== parts2[i]) {
116
+ return parts1[i] - parts2[i];
117
+ }
118
+ }
119
+ return parts1.length - parts2.length;
120
+ }
121
+ async function resolvePrompt(prompt) {
122
+ if (!prompt)
123
+ return prompt;
124
+ if (prompt.startsWith("@")) {
125
+ const filePath = prompt.slice(1);
126
+ try {
127
+ const resolvedPath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
128
+ const content = await fs.readFile(resolvedPath, "utf-8");
129
+ console.log(chalk.dim(` ✓ Loaded prompt from: ${filePath}
130
+ `));
131
+ return content.trim();
132
+ } catch (error) {
133
+ throw new Error(`Failed to read prompt file: ${filePath}`);
134
+ }
135
+ }
136
+ return prompt;
137
+ }
138
+ async function executeFlow(prompt, options) {
139
+ const resolvedPrompt = await resolvePrompt(prompt);
140
+ if (options.loop !== undefined) {
141
+ const { LoopController } = await import("./chunk-c2gwgx3r.js");
142
+ const controller = new LoopController;
143
+ const interval = typeof options.loop === "number" ? options.loop : 0;
144
+ options.print = true;
145
+ const setupContext = await executeSetupPhase(resolvedPrompt, options);
146
+ const originalContinue = options.continue || false;
147
+ await controller.run(async () => {
148
+ const isFirstIteration = controller["state"].iteration === 1;
149
+ options.continue = originalContinue || !isFirstIteration;
150
+ try {
151
+ await executeCommandOnly(setupContext, resolvedPrompt, options);
152
+ return { exitCode: 0 };
153
+ } catch (error) {
154
+ return { exitCode: 1, error };
155
+ }
156
+ }, {
157
+ enabled: true,
158
+ interval,
159
+ maxRuns: options.maxRuns
160
+ });
161
+ return;
162
+ }
163
+ await executeFlowOnce(resolvedPrompt, options);
164
+ }
165
+ async function executeSetupPhase(prompt, options) {
166
+ if (options.quick) {
167
+ options.useDefaults = true;
168
+ console.log(chalk.cyan(`⚡ Quick mode enabled - using saved defaults
169
+ `));
170
+ }
171
+ const {
172
+ checkUpgrades,
173
+ checkComponentIntegrity,
174
+ selectTarget,
175
+ initializeProject
176
+ } = await import("./chunk-4wjcadjk.js");
177
+ showWelcome();
178
+ let selectedTarget;
179
+ let state;
180
+ const initialTarget = options.target || await projectSettings.getDefaultTarget();
181
+ if (initialTarget && !options.sync) {
182
+ const detector = new StateDetector;
183
+ if (options.verbose) {
184
+ console.log(chalk.dim(`\uD83E\uDD14 Checking project status...
185
+ `));
186
+ }
187
+ state = await detector.detect();
188
+ if (options.verbose) {
189
+ await showStatus(state);
190
+ }
191
+ if (!options.quick) {
192
+ await checkUpgrades(state, options);
193
+ }
194
+ await checkComponentIntegrity(state, options);
195
+ }
196
+ const shouldInitialize = !state?.initialized || options.sync || options.repair || options.initOnly;
197
+ if (shouldInitialize) {
198
+ try {
199
+ const { selectAndValidateTarget, previewDryRun, installComponents } = await import("./chunk-6g9xy73m.js");
200
+ const initOptions = {
201
+ target: options.target,
202
+ verbose: options.verbose || false,
203
+ dryRun: options.dryRun || false,
204
+ clear: options.sync || false,
205
+ mcp: options.mcp !== false,
206
+ agents: options.agents !== false,
207
+ rules: options.rules !== false,
208
+ outputStyles: options.outputStyles !== false,
209
+ slashCommands: options.slashCommands !== false,
210
+ hooks: options.hooks !== false
211
+ };
212
+ if (options.sync && !options.dryRun) {
213
+ const { buildSyncManifest, showSyncPreview, confirmSync, executeSyncDelete } = await import("./chunk-m2322pdk.js");
214
+ const targetId = await selectAndValidateTarget(initOptions);
215
+ selectedTarget = targetId;
216
+ const targetOption = targetManager.getTarget(targetId);
217
+ if (targetOption._tag === "None") {
218
+ throw new Error(`Target not found: ${targetId}`);
219
+ }
220
+ const target = targetOption.value;
221
+ const manifest = await buildSyncManifest(process.cwd(), target);
222
+ console.log(chalk.cyan.bold(`━━━ \uD83D\uDD04 Synchronizing Files
223
+ `));
224
+ showSyncPreview(manifest, process.cwd());
225
+ const confirmed = await confirmSync();
226
+ if (!confirmed) {
227
+ console.log(chalk.yellow(`
228
+ ✗ Sync cancelled
229
+ `));
230
+ process.exit(0);
231
+ }
232
+ const deletedCount = await executeSyncDelete(manifest);
233
+ console.log(chalk.green(`
234
+ ✓ Deleted ${deletedCount} files
235
+ `));
236
+ } else if (!options.sync) {
237
+ const targetId = await selectAndValidateTarget(initOptions);
238
+ selectedTarget = targetId;
239
+ }
240
+ if (options.dryRun) {
241
+ if (!selectedTarget) {
242
+ const targetId = await selectAndValidateTarget(initOptions);
243
+ selectedTarget = targetId;
244
+ }
245
+ console.log(boxen(chalk.yellow("⚠ Dry Run Mode") + chalk.dim(`
246
+ No changes will be made to your project`), {
247
+ padding: 1,
248
+ margin: { top: 0, bottom: 1, left: 0, right: 0 },
249
+ borderStyle: "round",
250
+ borderColor: "yellow"
251
+ }));
252
+ await previewDryRun(selectedTarget, initOptions);
253
+ console.log(`
254
+ ` + boxen(chalk.green.bold("✓ Dry run complete"), {
255
+ padding: { top: 0, bottom: 0, left: 2, right: 2 },
256
+ margin: 0,
257
+ borderStyle: "round",
258
+ borderColor: "green"
259
+ }) + `
260
+ `);
261
+ console.log(chalk.dim(`✓ Initialization dry run complete
262
+ `));
263
+ } else {
264
+ if (!selectedTarget) {
265
+ const targetId = await selectAndValidateTarget(initOptions);
266
+ selectedTarget = targetId;
267
+ }
268
+ await installComponents(selectedTarget, initOptions);
269
+ console.log(chalk.green.bold(`✓ Initialization complete
270
+ `));
271
+ }
272
+ } catch (error) {
273
+ console.error(chalk.red.bold("✗ Initialization failed:"), error);
274
+ process.exit(1);
275
+ }
276
+ }
277
+ let targetForResolution = options.target || state?.target || selectedTarget;
278
+ if (selectedTarget) {
279
+ targetForResolution = selectedTarget;
280
+ }
281
+ if (!targetForResolution) {
282
+ console.error(chalk.red.bold("✗ No target selected. Use --target or run init first."));
283
+ process.exit(1);
284
+ }
285
+ const resolvedTarget = await targetManager.resolveTarget({
286
+ target: targetForResolution,
287
+ allowSelection: false
288
+ });
289
+ console.log(chalk.cyan.bold(`━━━ \uD83C\uDFAF Launching ${resolvedTarget}
290
+ `));
291
+ const { getTargetsWithCommandSupport } = await import("./chunk-qk8n91hw.js");
292
+ const supportedTargets = getTargetsWithCommandSupport().map((t) => t.id);
293
+ if (!supportedTargets.includes(resolvedTarget)) {
294
+ console.log(chalk.red.bold(`✗ Unsupported target platform
295
+ `));
296
+ console.log(chalk.yellow(`Target '${resolvedTarget}' does not support agent execution.`));
297
+ console.log(chalk.cyan(`Supported platforms: ${supportedTargets.join(", ")}
298
+ `));
299
+ console.log(chalk.dim("Tip: Use --target claude-code to specify Claude Code platform"));
300
+ console.log(chalk.dim(`Example: bun dev:flow --target claude-code
301
+ `));
302
+ process.exit(1);
303
+ }
304
+ if (resolvedTarget === "claude-code") {
305
+ const { SmartConfigService } = await import("./chunk-g5cv6703.js");
306
+ const { ConfigService } = await import("./chunk-x66eh37x.js");
307
+ if (!await ConfigService.hasInitialSetup()) {
308
+ console.log(chalk.cyan(`\uD83D\uDD11 First-time setup for Claude Code
309
+ `));
310
+ await SmartConfigService.initialSetup();
311
+ console.log(chalk.green(`✓ Setup complete!
312
+ `));
313
+ }
314
+ const runtimeChoices = await SmartConfigService.selectRuntimeChoices({
315
+ selectProvider: options.selectProvider,
316
+ selectAgent: options.selectAgent,
317
+ useDefaults: options.useDefaults,
318
+ provider: options.provider,
319
+ agent: options.agent
320
+ });
321
+ await SmartConfigService.setupEnvironment(runtimeChoices.provider);
322
+ options.agent = runtimeChoices.agent;
323
+ }
324
+ const agent = options.agent || "coder";
325
+ const verbose = options.verbose || false;
326
+ if (verbose || options.runOnly || !options.quick) {
327
+ console.log(` \uD83E\uDD16 Agent: ${chalk.cyan(agent)}`);
328
+ console.log(` \uD83C\uDFAF Target: ${chalk.cyan(resolvedTarget)}`);
329
+ if (prompt) {
330
+ console.log(` \uD83D\uDCAC Prompt: ${chalk.dim(prompt)}
331
+ `);
332
+ } else {
333
+ console.log(` \uD83D\uDCAC Mode: ${chalk.dim("Interactive")}
334
+ `);
335
+ }
336
+ }
337
+ const agentContent = await loadAgentContent(agent, options.agentFile);
338
+ const agentInstructions = extractAgentInstructions(agentContent);
339
+ const systemPrompt = `AGENT INSTRUCTIONS:
340
+ ${agentInstructions}`;
341
+ const runOptions = {
342
+ target: resolvedTarget,
343
+ verbose,
344
+ dryRun: options.dryRun,
345
+ agent,
346
+ agentFile: options.agentFile,
347
+ prompt,
348
+ print: options.print,
349
+ continue: options.continue
350
+ };
351
+ return {
352
+ resolvedTarget,
353
+ agent,
354
+ systemPrompt,
355
+ runOptions
356
+ };
357
+ }
358
+ async function executeCommandOnly(context, prompt, options) {
359
+ const userPrompt = prompt?.trim() || "";
360
+ const runOptions = {
361
+ ...context.runOptions,
362
+ continue: options.continue
363
+ };
364
+ try {
365
+ await executeTargetCommand(context.resolvedTarget, context.systemPrompt, userPrompt, runOptions);
366
+ } catch (error) {
367
+ console.error(chalk.red.bold(`
368
+ ✗ Launch failed:`), error);
369
+ throw error;
370
+ }
371
+ }
372
+ async function executeFlowOnce(prompt, options) {
373
+ if (options.quick) {
374
+ options.useDefaults = true;
375
+ console.log(chalk.cyan(`⚡ Quick mode enabled - using saved defaults
376
+ `));
377
+ }
378
+ if (options.continue && !options.print) {
379
+ options.print = true;
380
+ }
381
+ const {
382
+ checkUpgrades,
383
+ checkComponentIntegrity,
384
+ selectTarget,
385
+ initializeProject,
386
+ launchTarget
387
+ } = await import("./chunk-4wjcadjk.js");
388
+ showWelcome();
389
+ let selectedTarget;
390
+ let state;
391
+ const initialTarget = options.target || await projectSettings.getDefaultTarget();
392
+ if (initialTarget && !options.sync) {
393
+ const detector = new StateDetector;
394
+ const upgradeManager = new UpgradeManager;
395
+ if (options.verbose) {
396
+ console.log(chalk.dim(`\uD83E\uDD14 Checking project status...
397
+ `));
398
+ }
399
+ state = await detector.detect();
400
+ if (options.verbose) {
401
+ await showStatus(state);
402
+ }
403
+ if (!options.quick) {
404
+ await checkUpgrades(state, options);
405
+ }
406
+ if (options.upgrade && state.outdated && state.latestVersion) {
407
+ console.log(chalk.cyan.bold(`━━━ \uD83D\uDCE6 Upgrading Flow
408
+ `));
409
+ await upgradeManager.upgradeFlow(state);
410
+ console.log(chalk.green(`✓ Upgrade complete
411
+ `));
412
+ state.version = state.latestVersion;
413
+ state.outdated = false;
414
+ }
415
+ if (options.upgradeTarget && state.target) {
416
+ console.log(chalk.cyan.bold(`━━━ \uD83C\uDFAF Upgrading ${state.target}
417
+ `));
418
+ await upgradeManager.upgradeTarget(state);
419
+ console.log(chalk.green(`✓ Target upgrade complete
420
+ `));
421
+ }
422
+ await checkComponentIntegrity(state, options);
423
+ }
424
+ const shouldInitialize = !state?.initialized || options.sync || options.repair || options.initOnly;
425
+ if (shouldInitialize) {
426
+ console.log(chalk.cyan.bold(`━━━ \uD83D\uDE80 Initializing Project
427
+ `));
428
+ const {
429
+ selectAndValidateTarget,
430
+ previewDryRun,
431
+ installComponents
432
+ } = await import("./chunk-6g9xy73m.js");
433
+ try {
434
+ const targetForInit = options.repair && state?.target ? state.target : options.target;
435
+ const initOptions = {
436
+ target: targetForInit,
437
+ verbose: options.verbose,
438
+ dryRun: options.dryRun,
439
+ clear: options.sync || false,
440
+ mcp: options.mcp !== false,
441
+ agents: options.agents !== false,
442
+ rules: options.rules !== false,
443
+ outputStyles: options.outputStyles !== false,
444
+ slashCommands: options.slashCommands !== false,
445
+ hooks: options.hooks !== false
446
+ };
447
+ if (options.sync && !options.dryRun) {
448
+ const { buildSyncManifest, showSyncPreview, confirmSync, executeSyncDelete } = await import("./chunk-m2322pdk.js");
449
+ const targetId = await selectAndValidateTarget(initOptions);
450
+ selectedTarget = targetId;
451
+ const targetOption = targetManager.getTarget(targetId);
452
+ if (targetOption._tag === "None") {
453
+ throw new Error(`Target not found: ${targetId}`);
454
+ }
455
+ const target = targetOption.value;
456
+ const manifest = await buildSyncManifest(process.cwd(), target);
457
+ console.log(chalk.cyan.bold(`━━━ \uD83D\uDD04 Synchronizing Files
458
+ `));
459
+ showSyncPreview(manifest, process.cwd());
460
+ const confirmed = await confirmSync();
461
+ if (!confirmed) {
462
+ console.log(chalk.yellow(`
463
+ ✗ Sync cancelled
464
+ `));
465
+ process.exit(0);
466
+ }
467
+ const deletedCount = await executeSyncDelete(manifest);
468
+ console.log(chalk.green(`
469
+ ✓ Deleted ${deletedCount} files
470
+ `));
471
+ } else {
472
+ const targetId = await selectAndValidateTarget(initOptions);
473
+ selectedTarget = targetId;
474
+ }
475
+ if (options.dryRun) {
476
+ if (!selectedTarget) {
477
+ const targetId = await selectAndValidateTarget(initOptions);
478
+ selectedTarget = targetId;
479
+ }
480
+ console.log(boxen(chalk.yellow("⚠ Dry Run Mode") + chalk.dim(`
481
+ No changes will be made to your project`), {
482
+ padding: 1,
483
+ margin: { top: 0, bottom: 1, left: 0, right: 0 },
484
+ borderStyle: "round",
485
+ borderColor: "yellow"
486
+ }));
487
+ await previewDryRun(selectedTarget, initOptions);
488
+ console.log(`
489
+ ` + boxen(chalk.green.bold("✓ Dry run complete"), {
490
+ padding: { top: 0, bottom: 0, left: 2, right: 2 },
491
+ margin: 0,
492
+ borderStyle: "round",
493
+ borderColor: "green"
494
+ }) + `
495
+ `);
496
+ console.log(chalk.dim(`✓ Initialization dry run complete
497
+ `));
498
+ } else {
499
+ if (!selectedTarget) {
500
+ const targetId = await selectAndValidateTarget(initOptions);
501
+ selectedTarget = targetId;
502
+ }
503
+ const result = await installComponents(selectedTarget, initOptions);
504
+ console.log(chalk.green.bold(`✓ Initialization complete
505
+ `));
506
+ }
507
+ } catch (error) {
508
+ console.error(chalk.red.bold("✗ Initialization failed:"), error);
509
+ process.exit(1);
510
+ }
511
+ }
512
+ if (!options.initOnly) {
513
+ let targetForResolution = options.target || state?.target || selectedTarget;
514
+ if (selectedTarget) {
515
+ targetForResolution = selectedTarget;
516
+ }
517
+ if (!targetForResolution) {
518
+ console.error(chalk.red.bold("✗ No target selected. Use --target or run init first."));
519
+ process.exit(1);
520
+ }
521
+ const resolvedTarget = await targetManager.resolveTarget({
522
+ target: targetForResolution,
523
+ allowSelection: false
524
+ });
525
+ console.log(chalk.cyan.bold(`━━━ \uD83C\uDFAF Launching ${resolvedTarget}
526
+ `));
527
+ const { getTargetsWithCommandSupport } = await import("./chunk-qk8n91hw.js");
528
+ const supportedTargets = getTargetsWithCommandSupport().map((t) => t.id);
529
+ if (!supportedTargets.includes(resolvedTarget)) {
530
+ console.log(chalk.red.bold(`✗ Unsupported target platform
531
+ `));
532
+ console.log(chalk.yellow(`Target '${resolvedTarget}' does not support agent execution.`));
533
+ console.log(chalk.cyan(`Supported platforms: ${supportedTargets.join(", ")}
534
+ `));
535
+ console.log(chalk.dim("Tip: Use --target claude-code to specify Claude Code platform"));
536
+ console.log(chalk.dim(`Example: bun dev:flow --target claude-code
537
+ `));
538
+ process.exit(1);
539
+ }
540
+ if (resolvedTarget === "claude-code") {
541
+ const { SmartConfigService } = await import("./chunk-g5cv6703.js");
542
+ const { ConfigService } = await import("./chunk-x66eh37x.js");
543
+ if (!await ConfigService.hasInitialSetup()) {
544
+ console.log(chalk.cyan(`\uD83D\uDD11 First-time setup for Claude Code
545
+ `));
546
+ await SmartConfigService.initialSetup();
547
+ console.log(chalk.green(`✓ Setup complete!
548
+ `));
549
+ }
550
+ const runtimeChoices = await SmartConfigService.selectRuntimeChoices({
551
+ selectProvider: options.selectProvider,
552
+ selectAgent: options.selectAgent,
553
+ useDefaults: options.useDefaults,
554
+ provider: options.provider,
555
+ agent: options.agent
556
+ });
557
+ await SmartConfigService.setupEnvironment(runtimeChoices.provider);
558
+ options.agent = runtimeChoices.agent;
559
+ }
560
+ const agent = options.agent || "coder";
561
+ const verbose = options.verbose || false;
562
+ if (verbose || options.runOnly || !options.quick) {
563
+ console.log(` \uD83E\uDD16 Agent: ${chalk.cyan(agent)}`);
564
+ console.log(` \uD83C\uDFAF Target: ${chalk.cyan(resolvedTarget)}`);
565
+ if (prompt) {
566
+ console.log(` \uD83D\uDCAC Prompt: ${chalk.dim(prompt)}
567
+ `);
568
+ } else {
569
+ console.log(` \uD83D\uDCAC Mode: ${chalk.dim("Interactive")}
570
+ `);
571
+ }
572
+ }
573
+ const agentContent = await loadAgentContent(agent, options.agentFile);
574
+ const agentInstructions = extractAgentInstructions(agentContent);
575
+ const systemPrompt = `AGENT INSTRUCTIONS:
576
+ ${agentInstructions}`;
577
+ const userPrompt = prompt?.trim() || "";
578
+ const runOptions = {
579
+ target: resolvedTarget,
580
+ verbose,
581
+ dryRun: options.dryRun,
582
+ agent,
583
+ agentFile: options.agentFile,
584
+ prompt,
585
+ print: options.print,
586
+ continue: options.continue
587
+ };
588
+ try {
589
+ await executeTargetCommand(resolvedTarget, systemPrompt, userPrompt, runOptions);
590
+ } catch (error) {
591
+ console.error(chalk.red.bold(`
592
+ ✗ Launch failed:`), error);
593
+ process.exit(1);
594
+ }
595
+ if (!options.dryRun) {
596
+ console.log(chalk.dim(`━━━
597
+ `));
598
+ console.log(chalk.green(`✓ Session complete
599
+ `));
600
+ }
601
+ } else {
602
+ console.log(chalk.dim(`✓ Init-only mode, skipping execution
603
+ `));
604
+ }
605
+ }
606
+ var flowCommand = new Command("flow").description("Intelligent development flow (auto-detect state and act accordingly)").option("--init-only", "Only initialize, do not run").option("--run-only", "Only run, skip initialization").option("--sync", "Synchronize with Flow templates (delete and re-install template files)").option("--upgrade", "Upgrade Sylphx Flow to latest version").option("--upgrade-target", "Upgrade target platform (Claude Code/OpenCode)").option("--quick", "Quick mode: use saved defaults and skip all prompts").option("--select-provider", "Prompt to select provider each run").option("--select-agent", "Prompt to select agent each run").option("--use-defaults", "Skip prompts, use saved defaults").option("--provider <provider>", "Override provider for this run (anthropic|z.ai|kimi)").option("--target <type>", "Target platform (opencode, claude-code, auto-detect)").option("--verbose", "Show detailed output").option("--dry-run", "Show what would be done without making changes").option("--no-mcp", "Skip MCP installation").option("--no-agents", "Skip agents installation").option("--no-rules", "Skip rules installation").option("--no-output-styles", "Skip output styles installation").option("--no-slash-commands", "Skip slash commands installation").option("--no-hooks", "Skip hooks setup").option("--agent <name>", "Agent to use (default: coder)", "coder").option("--agent-file <path>", "Load agent from specific file").option("-p, --print", "Headless print mode (output only, no interactive)").option("-c, --continue", "Continue previous conversation (requires print mode)").argument("[prompt]", "Prompt to execute with agent (optional, supports @file.txt for file input)").action(async (prompt, options) => {
607
+ await executeFlow(prompt, options);
608
+ });
609
+ var setupCommand = new Command("setup").description("Initialize project configuration (alias for: flow --init-only)").action(async () => {
610
+ console.log(chalk.yellow('ℹ The "setup" command is deprecated.'));
611
+ console.log(chalk.yellow(` Please use: flow --init-only
612
+ `));
613
+ showWelcome();
614
+ const { runInit } = await import("./chunk-v0ez4aef.js");
615
+ await runInit({
616
+ target: undefined,
617
+ verbose: false,
618
+ dryRun: false,
619
+ clear: false,
620
+ mcp: true,
621
+ agents: true,
622
+ rules: true,
623
+ outputStyles: true,
624
+ slashCommands: true,
625
+ hooks: true,
626
+ helpOption: () => {}
627
+ });
628
+ console.log(chalk.green(`
629
+ ✅ Setup complete!`));
630
+ console.log(chalk.dim(`
631
+ Next time, use: flow --init-only`));
632
+ });
633
+ var statusCommand = new Command("status").description("Show project status and configuration").option("--verbose", "Show detailed information").action(async (options) => {
634
+ const detector = new StateDetector;
635
+ const state = await detector.detect();
636
+ showWelcome();
637
+ await showStatus(state);
638
+ if (options.verbose) {
639
+ console.log(chalk.cyan.bold(`
640
+ \uD83D\uDCCB 详细信息
641
+ `));
642
+ try {
643
+ const { getProjectSettingsFile } = await import("./chunk-7eq34c42.js");
644
+ const configPath = path.join(process.cwd(), getProjectSettingsFile());
645
+ const config = JSON.parse(await fs.readFile(configPath, "utf-8"));
646
+ console.log("配置文件:", JSON.stringify(config, null, 2));
647
+ } catch {
648
+ console.log("配置文件: 不存在");
649
+ }
650
+ }
651
+ });
652
+ var doctorCommand = new Command("doctor").description("Diagnose and fix common issues").option("--fix", "Automatically fix issues").option("--verbose", "Show detailed diagnostics").action(async (options) => {
653
+ console.log(chalk.cyan.bold(`\uD83D\uDD0D 诊断项目
654
+ `));
655
+ const detector = new StateDetector;
656
+ const state = await detector.detect();
657
+ let issuesFound = false;
658
+ console.log("检查 Claude Code 安装...");
659
+ try {
660
+ const { exec } = await import("node:child_process");
661
+ const { promisify } = await import("node:util");
662
+ const execAsync = promisify(exec);
663
+ await execAsync("which claude");
664
+ console.log(chalk.green(" ✓ Claude Code 已安装"));
665
+ } catch {
666
+ console.log(chalk.red(" ✗ Claude Code 未安装"));
667
+ console.log(chalk.dim(" 运行: npm install -g @anthropic-ai/claude-code"));
668
+ issuesFound = true;
669
+ }
670
+ console.log(`
671
+ 检查配置...`);
672
+ if (state.corrupted) {
673
+ console.log(chalk.red(" ✗ 配置损坏"));
674
+ issuesFound = true;
675
+ if (options.fix) {
676
+ console.log(chalk.yellow(" \uD83D\uDD04 正在修复..."));
677
+ const { executeFlow: executeFlow2 } = await Promise.resolve().then(() => require_flow_command());
678
+ await executeFlow2(undefined, { clean: true });
679
+ console.log(chalk.green(" ✓ 已修复"));
680
+ }
681
+ } else if (!state.initialized) {
682
+ console.log(chalk.yellow(" ⚠ 项目未初始化"));
683
+ issuesFound = true;
684
+ } else {
685
+ console.log(chalk.green(" ✓ 配置正常"));
686
+ }
687
+ console.log(`
688
+ 检查组件...`);
689
+ Object.entries(state.components).forEach(([name, component]) => {
690
+ const status = component.installed ? chalk.green("✓") : chalk.red("✗");
691
+ const count = "count" in component && component.count ? ` (${component.count})` : "";
692
+ console.log(` ${status} ${name}${count}`);
693
+ });
694
+ console.log(`
695
+ ` + chalk.bold("结果:"));
696
+ if (!issuesFound) {
697
+ console.log(chalk.green("✓ 所有检查通过"));
698
+ } else if (options.fix) {
699
+ console.log(chalk.green("✓ 所有问题已修复"));
700
+ } else {
701
+ console.log(chalk.yellow("⚠ 发现问题,运行加 --fix 参数自动修复"));
702
+ }
703
+ });
704
+ var upgradeCommand = new Command("upgrade").description("Upgrade Sylphx Flow and components").option("--check", "Only check for updates, do not upgrade").option("--components", "Upgrade components (agents, rules, etc)", true).option("--target", "Upgrade target platform (Claude Code/OpenCode)").option("--verbose", "Show detailed output").action(async (options) => {
705
+ console.log(chalk.cyan.bold(`\uD83D\uDCE6 检查更新
706
+ `));
707
+ const detector = new StateDetector;
708
+ const upgradeManager = new UpgradeManager;
709
+ const updates = await upgradeManager.checkUpdates();
710
+ if (!updates.flowUpdate && !updates.targetUpdate) {
711
+ console.log(chalk.green(`✓ 所有组件已是最新版本
712
+ `));
713
+ return;
714
+ }
715
+ if (updates.flowVersion) {
716
+ console.log(`Sylphx Flow: ${updates.flowVersion.current} → ${chalk.green(updates.flowVersion.latest)}`);
717
+ }
718
+ if (updates.targetVersion) {
719
+ console.log(`${updates.targetVersion.current ? "claude-code" : "target"}: ${updates.targetVersion.current} → ${chalk.green(updates.targetVersion.latest)}`);
720
+ }
721
+ if (options.check) {
722
+ console.log(`
723
+ ` + chalk.dim("使用 --no-check 或省略参数进行升级"));
724
+ return;
725
+ }
726
+ const { default: inquirer } = await import("inquirer");
727
+ const { confirm } = await inquirer.prompt([
728
+ {
729
+ type: "confirm",
730
+ name: "confirm",
731
+ message: "确认升级到最新版本?",
732
+ default: true
733
+ }
734
+ ]);
735
+ if (!confirm) {
736
+ console.log(chalk.dim(`
737
+ 升级已取消`));
738
+ return;
739
+ }
740
+ console.log("");
741
+ const state = await detector.detect();
742
+ if (updates.flowUpdate) {
743
+ console.log(chalk.cyan.bold(`
744
+ ━ 升级 Sylphx Flow
745
+ `));
746
+ await upgradeManager.upgradeFlow(state);
747
+ }
748
+ if (updates.targetUpdate && options.target) {
749
+ console.log(chalk.cyan.bold(`
750
+ ━ 升级 Target
751
+ `));
752
+ await upgradeManager.upgradeTarget(state);
753
+ }
754
+ console.log(chalk.green(`
755
+ ✓ 升级完成
756
+ `));
757
+ });
758
+ export {
759
+ upgradeCommand,
760
+ statusCommand,
761
+ setupCommand,
762
+ flowCommand,
763
+ executeFlow,
764
+ doctorCommand
765
+ };