@sylphx/flow 1.0.1 → 1.0.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 (229) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/package.json +10 -9
  3. package/src/commands/codebase-command.ts +168 -0
  4. package/src/commands/flow-command.ts +1137 -0
  5. package/src/commands/flow-orchestrator.ts +296 -0
  6. package/src/commands/hook-command.ts +444 -0
  7. package/src/commands/init-command.ts +92 -0
  8. package/src/commands/init-core.ts +322 -0
  9. package/src/commands/knowledge-command.ts +161 -0
  10. package/src/commands/run-command.ts +120 -0
  11. package/src/components/benchmark-monitor.tsx +331 -0
  12. package/src/components/reindex-progress.tsx +261 -0
  13. package/src/composables/functional/index.ts +14 -0
  14. package/src/composables/functional/useEnvironment.ts +171 -0
  15. package/src/composables/functional/useFileSystem.ts +139 -0
  16. package/src/composables/index.ts +5 -0
  17. package/src/composables/useEnv.ts +13 -0
  18. package/src/composables/useRuntimeConfig.ts +27 -0
  19. package/src/composables/useTargetConfig.ts +45 -0
  20. package/src/config/ai-config.ts +376 -0
  21. package/src/config/constants.ts +35 -0
  22. package/src/config/index.ts +27 -0
  23. package/src/config/rules.ts +43 -0
  24. package/src/config/servers.ts +371 -0
  25. package/src/config/targets.ts +126 -0
  26. package/src/core/agent-loader.ts +141 -0
  27. package/src/core/agent-manager.ts +174 -0
  28. package/src/core/ai-sdk.ts +603 -0
  29. package/src/core/app-factory.ts +381 -0
  30. package/src/core/builtin-agents.ts +9 -0
  31. package/src/core/command-system.ts +550 -0
  32. package/src/core/config-system.ts +550 -0
  33. package/src/core/connection-pool.ts +390 -0
  34. package/src/core/di-container.ts +155 -0
  35. package/src/core/error-handling.ts +519 -0
  36. package/src/core/formatting/bytes.test.ts +115 -0
  37. package/src/core/formatting/bytes.ts +64 -0
  38. package/src/core/functional/async.ts +313 -0
  39. package/src/core/functional/either.ts +109 -0
  40. package/src/core/functional/error-handler.ts +135 -0
  41. package/src/core/functional/error-types.ts +311 -0
  42. package/src/core/functional/index.ts +19 -0
  43. package/src/core/functional/option.ts +142 -0
  44. package/src/core/functional/pipe.ts +189 -0
  45. package/src/core/functional/result.ts +204 -0
  46. package/src/core/functional/validation.ts +138 -0
  47. package/src/core/headless-display.ts +96 -0
  48. package/src/core/index.ts +6 -0
  49. package/src/core/installers/file-installer.ts +303 -0
  50. package/src/core/installers/mcp-installer.ts +213 -0
  51. package/src/core/interfaces/index.ts +22 -0
  52. package/src/core/interfaces/repository.interface.ts +91 -0
  53. package/src/core/interfaces/service.interface.ts +133 -0
  54. package/src/core/interfaces.ts +129 -0
  55. package/src/core/loop-controller.ts +200 -0
  56. package/src/core/result.ts +351 -0
  57. package/src/core/rule-loader.ts +147 -0
  58. package/src/core/rule-manager.ts +240 -0
  59. package/src/core/service-config.ts +252 -0
  60. package/src/core/session-service.ts +121 -0
  61. package/src/core/state-detector.ts +389 -0
  62. package/src/core/storage-factory.ts +115 -0
  63. package/src/core/stream-handler.ts +288 -0
  64. package/src/core/target-manager.ts +161 -0
  65. package/src/core/type-utils.ts +427 -0
  66. package/src/core/unified-storage.ts +456 -0
  67. package/src/core/upgrade-manager.ts +300 -0
  68. package/src/core/validation/limit.test.ts +155 -0
  69. package/src/core/validation/limit.ts +46 -0
  70. package/src/core/validation/query.test.ts +44 -0
  71. package/src/core/validation/query.ts +20 -0
  72. package/src/db/auto-migrate.ts +322 -0
  73. package/src/db/base-database-client.ts +144 -0
  74. package/src/db/cache-db.ts +218 -0
  75. package/src/db/cache-schema.ts +75 -0
  76. package/src/db/database.ts +70 -0
  77. package/src/db/index.ts +252 -0
  78. package/src/db/memory-db.ts +153 -0
  79. package/src/db/memory-schema.ts +29 -0
  80. package/src/db/schema.ts +289 -0
  81. package/src/db/session-repository.ts +733 -0
  82. package/src/domains/codebase/index.ts +5 -0
  83. package/src/domains/codebase/tools.ts +139 -0
  84. package/src/domains/index.ts +8 -0
  85. package/src/domains/knowledge/index.ts +10 -0
  86. package/src/domains/knowledge/resources.ts +537 -0
  87. package/src/domains/knowledge/tools.ts +174 -0
  88. package/src/domains/utilities/index.ts +6 -0
  89. package/src/domains/utilities/time/index.ts +5 -0
  90. package/src/domains/utilities/time/tools.ts +291 -0
  91. package/src/index.ts +211 -0
  92. package/src/services/agent-service.ts +273 -0
  93. package/src/services/claude-config-service.ts +252 -0
  94. package/src/services/config-service.ts +258 -0
  95. package/src/services/evaluation-service.ts +271 -0
  96. package/src/services/functional/evaluation-logic.ts +296 -0
  97. package/src/services/functional/file-processor.ts +273 -0
  98. package/src/services/functional/index.ts +12 -0
  99. package/src/services/index.ts +13 -0
  100. package/src/services/mcp-service.ts +432 -0
  101. package/src/services/memory.service.ts +476 -0
  102. package/src/services/search/base-indexer.ts +156 -0
  103. package/src/services/search/codebase-indexer-types.ts +38 -0
  104. package/src/services/search/codebase-indexer.ts +647 -0
  105. package/src/services/search/embeddings-provider.ts +455 -0
  106. package/src/services/search/embeddings.ts +316 -0
  107. package/src/services/search/functional-indexer.ts +323 -0
  108. package/src/services/search/index.ts +27 -0
  109. package/src/services/search/indexer.ts +380 -0
  110. package/src/services/search/knowledge-indexer.ts +422 -0
  111. package/src/services/search/semantic-search.ts +244 -0
  112. package/src/services/search/tfidf.ts +559 -0
  113. package/src/services/search/unified-search-service.ts +888 -0
  114. package/src/services/smart-config-service.ts +385 -0
  115. package/src/services/storage/cache-storage.ts +487 -0
  116. package/src/services/storage/drizzle-storage.ts +581 -0
  117. package/src/services/storage/index.ts +15 -0
  118. package/src/services/storage/lancedb-vector-storage.ts +494 -0
  119. package/src/services/storage/memory-storage.ts +268 -0
  120. package/src/services/storage/separated-storage.ts +467 -0
  121. package/src/services/storage/vector-storage.ts +13 -0
  122. package/src/shared/agents/index.ts +63 -0
  123. package/src/shared/files/index.ts +99 -0
  124. package/src/shared/index.ts +32 -0
  125. package/src/shared/logging/index.ts +24 -0
  126. package/src/shared/processing/index.ts +153 -0
  127. package/src/shared/types/index.ts +25 -0
  128. package/src/targets/claude-code.ts +574 -0
  129. package/src/targets/functional/claude-code-logic.ts +185 -0
  130. package/src/targets/functional/index.ts +6 -0
  131. package/src/targets/opencode.ts +529 -0
  132. package/src/types/agent.types.ts +32 -0
  133. package/src/types/api/batch.ts +108 -0
  134. package/src/types/api/errors.ts +118 -0
  135. package/src/types/api/index.ts +55 -0
  136. package/src/types/api/requests.ts +76 -0
  137. package/src/types/api/responses.ts +180 -0
  138. package/src/types/api/websockets.ts +85 -0
  139. package/src/types/api.types.ts +9 -0
  140. package/src/types/benchmark.ts +49 -0
  141. package/src/types/cli.types.ts +87 -0
  142. package/src/types/common.types.ts +35 -0
  143. package/src/types/database.types.ts +510 -0
  144. package/src/types/mcp-config.types.ts +448 -0
  145. package/src/types/mcp.types.ts +69 -0
  146. package/src/types/memory-types.ts +63 -0
  147. package/src/types/provider.types.ts +28 -0
  148. package/src/types/rule.types.ts +24 -0
  149. package/src/types/session.types.ts +214 -0
  150. package/src/types/target-config.types.ts +295 -0
  151. package/src/types/target.types.ts +140 -0
  152. package/src/types/todo.types.ts +25 -0
  153. package/src/types.ts +40 -0
  154. package/src/utils/advanced-tokenizer.ts +191 -0
  155. package/src/utils/agent-enhancer.ts +114 -0
  156. package/src/utils/ai-model-fetcher.ts +19 -0
  157. package/src/utils/async-file-operations.ts +516 -0
  158. package/src/utils/audio-player.ts +345 -0
  159. package/src/utils/cli-output.ts +266 -0
  160. package/src/utils/codebase-helpers.ts +211 -0
  161. package/src/utils/console-ui.ts +79 -0
  162. package/src/utils/database-errors.ts +140 -0
  163. package/src/utils/debug-logger.ts +49 -0
  164. package/src/utils/error-handler.ts +53 -0
  165. package/src/utils/file-operations.ts +310 -0
  166. package/src/utils/file-scanner.ts +259 -0
  167. package/src/utils/functional/array.ts +355 -0
  168. package/src/utils/functional/index.ts +15 -0
  169. package/src/utils/functional/object.ts +279 -0
  170. package/src/utils/functional/string.ts +281 -0
  171. package/src/utils/functional.ts +543 -0
  172. package/src/utils/help.ts +20 -0
  173. package/src/utils/immutable-cache.ts +106 -0
  174. package/src/utils/index.ts +78 -0
  175. package/src/utils/jsonc.ts +158 -0
  176. package/src/utils/logger.ts +396 -0
  177. package/src/utils/mcp-config.ts +249 -0
  178. package/src/utils/memory-tui.ts +414 -0
  179. package/src/utils/models-dev.ts +91 -0
  180. package/src/utils/notifications.ts +169 -0
  181. package/src/utils/object-utils.ts +51 -0
  182. package/src/utils/parallel-operations.ts +487 -0
  183. package/src/utils/paths.ts +143 -0
  184. package/src/utils/process-manager.ts +155 -0
  185. package/src/utils/prompts.ts +120 -0
  186. package/src/utils/search-tool-builder.ts +214 -0
  187. package/src/utils/secret-utils.ts +179 -0
  188. package/src/utils/security.ts +537 -0
  189. package/src/utils/session-manager.ts +168 -0
  190. package/src/utils/session-title.ts +87 -0
  191. package/src/utils/settings.ts +182 -0
  192. package/src/utils/simplified-errors.ts +410 -0
  193. package/src/utils/sync-utils.ts +159 -0
  194. package/src/utils/target-config.ts +570 -0
  195. package/src/utils/target-utils.ts +394 -0
  196. package/src/utils/template-engine.ts +94 -0
  197. package/src/utils/test-audio.ts +71 -0
  198. package/src/utils/todo-context.ts +46 -0
  199. package/src/utils/token-counter.ts +288 -0
  200. package/dist/index.d.ts +0 -10
  201. package/dist/index.js +0 -59554
  202. package/dist/lancedb.linux-x64-gnu-b7f0jgsz.node +0 -0
  203. package/dist/lancedb.linux-x64-musl-tgcv22rx.node +0 -0
  204. package/dist/shared/chunk-25dwp0dp.js +0 -89
  205. package/dist/shared/chunk-3pjb6063.js +0 -208
  206. package/dist/shared/chunk-4d6ydpw7.js +0 -2854
  207. package/dist/shared/chunk-4wjcadjk.js +0 -225
  208. package/dist/shared/chunk-5j4w74t6.js +0 -30
  209. package/dist/shared/chunk-5j8m3dh3.js +0 -58
  210. package/dist/shared/chunk-5thh3qem.js +0 -91
  211. package/dist/shared/chunk-6g9xy73m.js +0 -252
  212. package/dist/shared/chunk-7eq34c42.js +0 -23
  213. package/dist/shared/chunk-c2gwgx3r.js +0 -115
  214. package/dist/shared/chunk-cjd3mk4c.js +0 -1320
  215. package/dist/shared/chunk-g5cv6703.js +0 -368
  216. package/dist/shared/chunk-hpkhykhq.js +0 -574
  217. package/dist/shared/chunk-m2322pdk.js +0 -122
  218. package/dist/shared/chunk-nd5fdvaq.js +0 -26
  219. package/dist/shared/chunk-pgd3m6zf.js +0 -108
  220. package/dist/shared/chunk-qk8n91hw.js +0 -494
  221. package/dist/shared/chunk-rkkn8szp.js +0 -16855
  222. package/dist/shared/chunk-t16rfxh0.js +0 -61
  223. package/dist/shared/chunk-t4fbfa5v.js +0 -19
  224. package/dist/shared/chunk-t77h86w6.js +0 -276
  225. package/dist/shared/chunk-v0ez4aef.js +0 -71
  226. package/dist/shared/chunk-v29j2r3s.js +0 -32051
  227. package/dist/shared/chunk-vfbc6ew5.js +0 -765
  228. package/dist/shared/chunk-vmeqwm1c.js +0 -204
  229. package/dist/shared/chunk-x66eh37x.js +0 -137
@@ -1,61 +0,0 @@
1
- import {
2
- pathSecurity
3
- } from "./chunk-hpkhykhq.js";
4
-
5
- // src/utils/paths.ts
6
- import fs from "node:fs";
7
- import path from "node:path";
8
- import { fileURLToPath } from "node:url";
9
- function findPackageRoot(context) {
10
- const __filename2 = fileURLToPath(import.meta.url);
11
- let currentDir = path.dirname(__filename2);
12
- for (let i = 0;i < 10; i++) {
13
- const packageJsonPath = path.join(currentDir, "package.json");
14
- if (fs.existsSync(packageJsonPath)) {
15
- return currentDir;
16
- }
17
- const parentDir = path.dirname(currentDir);
18
- if (parentDir === currentDir)
19
- break;
20
- currentDir = parentDir;
21
- }
22
- const errorMsg = context ? `Cannot find package.json - ${context} location unknown` : "Cannot find package.json";
23
- throw new Error(errorMsg);
24
- }
25
- var PACKAGE_ROOT = findPackageRoot();
26
- var MONOREPO_ROOT = path.join(PACKAGE_ROOT, "..", "..");
27
- var ASSETS_ROOT = fs.existsSync(path.join(MONOREPO_ROOT, "assets")) ? path.join(MONOREPO_ROOT, "assets") : path.join(PACKAGE_ROOT, "assets");
28
- function getAgentsDir() {
29
- return path.join(ASSETS_ROOT, "agents");
30
- }
31
- function getRulesDir() {
32
- return path.join(ASSETS_ROOT, "rules");
33
- }
34
- function getKnowledgeDir() {
35
- return path.join(ASSETS_ROOT, "knowledge");
36
- }
37
- function getOutputStylesDir() {
38
- return path.join(ASSETS_ROOT, "output-styles");
39
- }
40
- function getSlashCommandsDir() {
41
- return path.join(ASSETS_ROOT, "slash-commands");
42
- }
43
- function getRuleFile(filename) {
44
- if (!filename || typeof filename !== "string") {
45
- throw new Error("Filename must be a non-empty string");
46
- }
47
- if (filename.includes("..") || filename.includes("/") || filename.includes("\\")) {
48
- throw new Error(`Invalid filename: ${filename}. Path traversal not allowed.`);
49
- }
50
- if (!/^[a-zA-Z0-9._-]+$/.test(filename)) {
51
- throw new Error(`Filename contains invalid characters: ${filename}`);
52
- }
53
- const rulesDir = getRulesDir();
54
- const filePath = pathSecurity.safeJoin(rulesDir, filename);
55
- if (!fs.existsSync(filePath)) {
56
- throw new Error(`Rule file not found: ${filename} (looked in ${rulesDir})`);
57
- }
58
- return filePath;
59
- }
60
-
61
- export { getAgentsDir, getRulesDir, getKnowledgeDir, getOutputStylesDir, getSlashCommandsDir, getRuleFile };
@@ -1,19 +0,0 @@
1
- // src/core/functional/error-types.ts
2
- var configError = (message, options) => ({
3
- kind: "ConfigError",
4
- message,
5
- configKey: options?.configKey,
6
- configPath: options?.configPath,
7
- context: options?.context,
8
- cause: options?.cause
9
- });
10
- var fileSystemError = (message, path, operation, options) => ({
11
- kind: "FileSystemError",
12
- message,
13
- path,
14
- operation,
15
- context: options?.context,
16
- cause: options?.cause
17
- });
18
-
19
- export { configError, fileSystemError };
@@ -1,276 +0,0 @@
1
- import {
2
- ConfigService
3
- } from "./chunk-x66eh37x.js";
4
- import {
5
- __require,
6
- __toESM
7
- } from "./chunk-5j4w74t6.js";
8
-
9
- // src/core/state-detector.ts
10
- import fs from "node:fs/promises";
11
- import path from "node:path";
12
- import { fileURLToPath } from "node:url";
13
- var __filename2 = fileURLToPath(import.meta.url);
14
- var __dirname2 = path.dirname(__filename2);
15
-
16
- class StateDetector {
17
- projectPath;
18
- constructor(projectPath = process.cwd()) {
19
- this.projectPath = projectPath;
20
- }
21
- async detect() {
22
- const state = {
23
- initialized: false,
24
- version: null,
25
- latestVersion: await this.getLatestFlowVersion(),
26
- target: null,
27
- targetVersion: null,
28
- targetLatestVersion: null,
29
- components: {
30
- agents: { installed: false, count: 0, version: null },
31
- rules: { installed: false, count: 0, version: null },
32
- hooks: { installed: false, version: null },
33
- mcp: { installed: false, serverCount: 0, version: null },
34
- outputStyles: { installed: false, version: null },
35
- slashCommands: { installed: false, count: 0, version: null }
36
- },
37
- corrupted: false,
38
- outdated: false,
39
- lastUpdated: null
40
- };
41
- try {
42
- state.initialized = await ConfigService.isInitialized(this.projectPath);
43
- if (!state.initialized) {
44
- return state;
45
- }
46
- const config = await ConfigService.loadProjectSettings(this.projectPath);
47
- state.version = config.version || null;
48
- state.target = config.target || null;
49
- state.lastUpdated = config.lastUpdated ? new Date(config.lastUpdated) : null;
50
- if (state.version && state.latestVersion) {
51
- state.outdated = this.isVersionOutdated(state.version, state.latestVersion);
52
- }
53
- if (state.target === "opencode") {
54
- await this.checkComponent("agents", ".opencode/agent", "*.md", state);
55
- await this.checkFileComponent("rules", "AGENTS.md", state);
56
- state.components.hooks.installed = false;
57
- state.components.outputStyles.installed = await this.checkOutputStylesInAGENTS();
58
- await this.checkComponent("slashCommands", ".opencode/command", "*.md", state);
59
- } else {
60
- await this.checkComponent("agents", ".claude/agents", "*.md", state);
61
- await this.checkComponent("rules", ".claude/rules", "*.md", state);
62
- await this.checkComponent("hooks", ".claude/hooks", "*.js", state);
63
- await this.checkComponent("outputStyles", ".claude/output-styles", "*.md", state);
64
- await this.checkComponent("slashCommands", ".claude/commands", "*.md", state);
65
- }
66
- const mcpConfig = await this.checkMCPConfig(state.target);
67
- state.components.mcp.installed = mcpConfig.exists;
68
- state.components.mcp.serverCount = mcpConfig.serverCount;
69
- state.components.mcp.version = mcpConfig.version;
70
- if (state.target) {
71
- const targetInfo = await this.checkTargetVersion(state.target);
72
- state.targetVersion = targetInfo.version;
73
- state.targetLatestVersion = targetInfo.latestVersion;
74
- }
75
- state.corrupted = await this.checkCorruption(state);
76
- } catch (error) {
77
- state.corrupted = true;
78
- }
79
- return state;
80
- }
81
- recommendAction(state) {
82
- if (!state.initialized) {
83
- return "FULL_INIT";
84
- }
85
- if (state.corrupted) {
86
- return "REPAIR";
87
- }
88
- if (state.outdated && state.version !== state.latestVersion) {
89
- return "UPGRADE";
90
- }
91
- if (state.targetVersion && state.targetLatestVersion && this.isVersionOutdated(state.targetVersion, state.targetLatestVersion)) {
92
- return "UPGRADE_TARGET";
93
- }
94
- return "RUN_ONLY";
95
- }
96
- async explainState(state) {
97
- const explanations = [];
98
- if (!state.initialized) {
99
- explanations.push("Project not initialized yet");
100
- explanations.push("Run `bun dev:flow` to start initialization");
101
- return explanations;
102
- }
103
- if (state.corrupted) {
104
- explanations.push("Configuration corruption detected");
105
- explanations.push("Run `bun dev:flow --clean` to repair");
106
- return explanations;
107
- }
108
- if (state.outdated) {
109
- explanations.push(`Flow version outdated: ${state.version} → ${state.latestVersion}`);
110
- explanations.push("Run `bun dev:flow upgrade` to upgrade");
111
- }
112
- if (state.targetVersion && state.targetLatestVersion && this.isVersionOutdated(state.targetVersion, state.targetLatestVersion)) {
113
- explanations.push(`${state.target} update available`);
114
- explanations.push(`Run \`bun dev:flow upgrade-target\` to upgrade`);
115
- }
116
- Object.entries(state.components).forEach(([name, component]) => {
117
- if (!component.installed) {
118
- explanations.push(`Missing ${name}`);
119
- }
120
- });
121
- if (explanations.length === 0) {
122
- explanations.push("Project status is normal");
123
- explanations.push("Run `bun dev:flow` to start Claude Code");
124
- }
125
- return explanations;
126
- }
127
- async getLatestFlowVersion() {
128
- try {
129
- const packagePath = path.join(__dirname2, "..", "..", "package.json");
130
- const packageJson = JSON.parse(await fs.readFile(packagePath, "utf-8"));
131
- return packageJson.version || null;
132
- } catch {
133
- return null;
134
- }
135
- }
136
- async checkComponent(componentName, componentPath, pattern, state) {
137
- try {
138
- const fullPath = path.join(this.projectPath, componentPath);
139
- const exists = await fs.access(fullPath).then(() => true).catch(() => false);
140
- state.components[componentName].installed = exists;
141
- if (exists) {
142
- const files = await fs.readdir(fullPath).catch(() => []);
143
- const count = pattern === "*.js" ? files.filter((f) => f.endsWith(".js")).length : pattern === "*.md" ? files.filter((f) => f.endsWith(".md")).length : files.length;
144
- if (componentName === "agents" || componentName === "slashCommands" || componentName === "rules") {
145
- state.components[componentName].count = count;
146
- }
147
- const versionPath = path.join(fullPath, ".version");
148
- const versionExists = await fs.access(versionPath).then(() => true).catch(() => false);
149
- if (versionExists) {
150
- state.components[componentName].version = await fs.readFile(versionPath, "utf-8");
151
- }
152
- }
153
- } catch {
154
- state.components[componentName].installed = false;
155
- }
156
- }
157
- async checkFileComponent(componentName, filePath, state) {
158
- try {
159
- const fullPath = path.join(this.projectPath, filePath);
160
- const exists = await fs.access(fullPath).then(() => true).catch(() => false);
161
- state.components[componentName].installed = exists;
162
- if (exists && componentName === "rules") {
163
- state.components[componentName].count = 1;
164
- }
165
- } catch {
166
- state.components[componentName].installed = false;
167
- }
168
- }
169
- async checkOutputStylesInAGENTS() {
170
- try {
171
- const agentsPath = path.join(this.projectPath, "AGENTS.md");
172
- const exists = await fs.access(agentsPath).then(() => true).catch(() => false);
173
- if (!exists) {
174
- return false;
175
- }
176
- const content = await fs.readFile(agentsPath, "utf-8");
177
- return content.includes("# Output Styles");
178
- } catch {
179
- return false;
180
- }
181
- }
182
- async checkMCPConfig(target) {
183
- try {
184
- let mcpPath;
185
- let serversKey;
186
- if (target === "opencode") {
187
- mcpPath = path.join(this.projectPath, "opencode.jsonc");
188
- serversKey = "mcp";
189
- } else {
190
- mcpPath = path.join(this.projectPath, ".mcp.json");
191
- serversKey = "mcpServers";
192
- }
193
- const exists = await fs.access(mcpPath).then(() => true).catch(() => false);
194
- if (!exists) {
195
- return { exists: false, serverCount: 0, version: null };
196
- }
197
- let content;
198
- if (target === "opencode") {
199
- const { fileUtils } = await import("./chunk-hpkhykhq.js");
200
- const { opencodeTarget } = await import("./chunk-cjd3mk4c.js");
201
- content = await fileUtils.readConfig(opencodeTarget.config, this.projectPath);
202
- } else {
203
- content = JSON.parse(await fs.readFile(mcpPath, "utf-8"));
204
- }
205
- const servers = content[serversKey] || {};
206
- return {
207
- exists: true,
208
- serverCount: Object.keys(servers).length,
209
- version: content.version || null
210
- };
211
- } catch {
212
- return { exists: false, serverCount: 0, version: null };
213
- }
214
- }
215
- async checkTargetVersion(target) {
216
- try {
217
- if (target === "claude-code") {
218
- const { exec } = await import("node:child_process");
219
- const { promisify } = await import("node:util");
220
- const execAsync = promisify(exec);
221
- try {
222
- const { stdout } = await execAsync("claude --version");
223
- const match = stdout.match(/v?(\d+\.\d+\.\d+)/);
224
- return {
225
- version: match ? match[1] : null,
226
- latestVersion: await this.getLatestClaudeVersion()
227
- };
228
- } catch {
229
- return { version: null, latestVersion: null };
230
- }
231
- }
232
- return { version: null, latestVersion: null };
233
- } catch {
234
- return { version: null, latestVersion: null };
235
- }
236
- }
237
- async getLatestClaudeVersion() {
238
- try {
239
- const { exec } = await import("node:child_process");
240
- const { promisify } = await import("node:util");
241
- const execAsync = promisify(exec);
242
- const { stdout } = await execAsync("npm view @anthropic-ai/claude-code version");
243
- return stdout.trim();
244
- } catch {
245
- return null;
246
- }
247
- }
248
- async checkCorruption(state) {
249
- if (state.initialized && !state.target) {
250
- return true;
251
- }
252
- if (state.initialized && state.target === "claude-code" && !state.components.agents.installed) {
253
- return true;
254
- }
255
- return false;
256
- }
257
- isVersionOutdated(current, latest) {
258
- try {
259
- return this.compareVersions(current, latest) < 0;
260
- } catch {
261
- return false;
262
- }
263
- }
264
- compareVersions(v1, v2) {
265
- const parts1 = v1.split(".").map(Number);
266
- const parts2 = v2.split(".").map(Number);
267
- for (let i = 0;i < Math.min(parts1.length, parts2.length); i++) {
268
- if (parts1[i] !== parts2[i]) {
269
- return parts1[i] - parts2[i];
270
- }
271
- }
272
- return parts1.length - parts2.length;
273
- }
274
- }
275
-
276
- export { StateDetector };
@@ -1,71 +0,0 @@
1
- import {
2
- installComponents,
3
- previewDryRun,
4
- selectAndValidateTarget
5
- } from "./chunk-6g9xy73m.js";
6
- import"./chunk-x66eh37x.js";
7
- import"./chunk-7eq34c42.js";
8
- import"./chunk-vmeqwm1c.js";
9
- import"./chunk-qk8n91hw.js";
10
- import"./chunk-nd5fdvaq.js";
11
- import"./chunk-cjd3mk4c.js";
12
- import"./chunk-t16rfxh0.js";
13
- import"./chunk-hpkhykhq.js";
14
- import"./chunk-5j4w74t6.js";
15
-
16
- // src/commands/init-command.ts
17
- import boxen from "boxen";
18
- import chalk from "chalk";
19
- import gradient from "gradient-string";
20
- async function runInit(options) {
21
- const title = `
22
- ███████╗██╗ ██╗██╗ ██████╗ ██╗ ██╗██╗ ██╗ ███████╗██╗ ██████╗ ██╗ ██╗
23
- ██╔════╝╚██╗ ██╔╝██║ ██╔══██╗██║ ██║╚██╗██╔╝ ██╔════╝██║ ██╔═══██╗██║ ██║
24
- ███████╗ ╚████╔╝ ██║ ██████╔╝███████║ ╚███╔╝ █████╗ ██║ ██║ ██║██║ █╗ ██║
25
- ╚════██║ ╚██╔╝ ██║ ██╔═══╝ ██╔══██║ ██╔██╗ ██╔══╝ ██║ ██║ ██║██║███╗██║
26
- ███████║ ██║ ███████╗██║ ██║ ██║██╔╝ ██╗ ██║ ███████╗╚██████╔╝╚███╔███╔╝
27
- ╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚══╝╚══╝
28
- `;
29
- console.log(gradient(["cyan", "blue"])(title));
30
- console.log(chalk.dim.cyan(` Project Initialization
31
- `));
32
- const targetId = await selectAndValidateTarget(options);
33
- if (options.dryRun) {
34
- console.log(boxen(chalk.yellow("⚠ Dry Run Mode") + chalk.dim(`
35
- No changes will be made to your project`), {
36
- padding: 1,
37
- margin: { top: 0, bottom: 1, left: 0, right: 0 },
38
- borderStyle: "round",
39
- borderColor: "yellow"
40
- }));
41
- await previewDryRun(targetId, options);
42
- console.log(`
43
- ` + boxen(chalk.green.bold("✓ Dry run complete"), {
44
- padding: { top: 0, bottom: 0, left: 2, right: 2 },
45
- margin: 0,
46
- borderStyle: "round",
47
- borderColor: "green"
48
- }) + `
49
- `);
50
- return;
51
- }
52
- console.log(chalk.cyan.bold(`
53
- ━━━ Installing Core Components ━━━
54
- `));
55
- const result = await installComponents(targetId, options);
56
- console.log(`
57
- ` + boxen(chalk.green.bold("✓ Setup complete!") + `
58
-
59
- ` + chalk.dim(`Target: ${result.targetName}`) + `
60
-
61
- ` + chalk.cyan("Ready to code with Sylphx Flow"), {
62
- padding: 1,
63
- margin: 0,
64
- borderStyle: "round",
65
- borderColor: "green"
66
- }) + `
67
- `);
68
- }
69
- export {
70
- runInit
71
- };