@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,204 @@
1
+ import {
2
+ getAllTargetIDs,
3
+ getAllTargets,
4
+ getDefaultTargetUnsafe,
5
+ getImplementedTargetIDs,
6
+ getImplementedTargets,
7
+ getOrElse,
8
+ getTarget,
9
+ getTargetsWithMCPSupport,
10
+ isSome,
11
+ isTargetImplemented
12
+ } from "./chunk-qk8n91hw.js";
13
+ import {
14
+ success,
15
+ tryCatchAsync
16
+ } from "./chunk-nd5fdvaq.js";
17
+
18
+ // src/utils/settings.ts
19
+ import fs from "node:fs/promises";
20
+ import path from "node:path";
21
+ var SETTINGS_FILE = ".sylphx-flow/settings.json";
22
+ var CURRENT_VERSION = "1.0.0";
23
+ var getSettingsPath = (cwd = process.cwd()) => path.join(cwd, SETTINGS_FILE);
24
+ var settingsExists = async (cwd = process.cwd()) => {
25
+ try {
26
+ await fs.access(getSettingsPath(cwd));
27
+ return true;
28
+ } catch {
29
+ return false;
30
+ }
31
+ };
32
+ var loadSettings = async (cwd = process.cwd()) => {
33
+ const settingsPath = getSettingsPath(cwd);
34
+ return tryCatchAsync(async () => {
35
+ const content = await fs.readFile(settingsPath, "utf8");
36
+ return JSON.parse(content);
37
+ }, (error) => {
38
+ if (error.code === "ENOENT") {
39
+ return new Error("EMPTY_SETTINGS");
40
+ }
41
+ return new Error(`Failed to load settings: ${error.message}`);
42
+ }).then((result) => {
43
+ if (result._tag === "Failure" && result.error.message === "EMPTY_SETTINGS") {
44
+ return success({});
45
+ }
46
+ return result;
47
+ });
48
+ };
49
+ var saveSettings = async (settings, cwd = process.cwd()) => {
50
+ const settingsPath = getSettingsPath(cwd);
51
+ return tryCatchAsync(async () => {
52
+ await fs.mkdir(path.dirname(settingsPath), { recursive: true });
53
+ const settingsWithVersion = {
54
+ ...settings,
55
+ version: settings.version || CURRENT_VERSION
56
+ };
57
+ await fs.writeFile(settingsPath, `${JSON.stringify(settingsWithVersion, null, 2)}
58
+ `, "utf8");
59
+ }, (error) => new Error(`Failed to save settings: ${error.message}`));
60
+ };
61
+ var updateSettings = async (updates, cwd = process.cwd()) => {
62
+ const currentResult = await loadSettings(cwd);
63
+ if (currentResult._tag === "Failure") {
64
+ return currentResult;
65
+ }
66
+ const newSettings = { ...currentResult.value, ...updates };
67
+ return saveSettings(newSettings, cwd);
68
+ };
69
+ var getDefaultTarget = async (cwd = process.cwd()) => {
70
+ const result = await loadSettings(cwd);
71
+ return result._tag === "Success" ? result.value.defaultTarget : undefined;
72
+ };
73
+ var setDefaultTarget = async (target, cwd = process.cwd()) => updateSettings({ defaultTarget: target }, cwd);
74
+
75
+ class ProjectSettings {
76
+ cwd;
77
+ constructor(cwd = process.cwd()) {
78
+ this.cwd = cwd;
79
+ this.settingsPath = getSettingsPath(cwd);
80
+ }
81
+ async load() {
82
+ const result = await loadSettings(this.cwd);
83
+ if (result._tag === "Failure") {
84
+ throw result.error;
85
+ }
86
+ return result.value;
87
+ }
88
+ async save(settings) {
89
+ const result = await saveSettings(settings, this.cwd);
90
+ if (result._tag === "Failure") {
91
+ throw result.error;
92
+ }
93
+ }
94
+ async update(updates) {
95
+ const result = await updateSettings(updates, this.cwd);
96
+ if (result._tag === "Failure") {
97
+ throw result.error;
98
+ }
99
+ }
100
+ async getDefaultTarget() {
101
+ return getDefaultTarget(this.cwd);
102
+ }
103
+ async setDefaultTarget(target) {
104
+ const result = await setDefaultTarget(target, this.cwd);
105
+ if (result._tag === "Failure") {
106
+ throw result.error;
107
+ }
108
+ }
109
+ async exists() {
110
+ return settingsExists(this.cwd);
111
+ }
112
+ }
113
+ var projectSettings = new ProjectSettings;
114
+
115
+ // src/core/target-manager.ts
116
+ import inquirer from "inquirer";
117
+ function createTargetManager() {
118
+ const detectTargetFromEnvironment = () => {
119
+ try {
120
+ const implementedTargets = getImplementedTargets();
121
+ const nonDefaultTargets = implementedTargets.filter((target) => !target.isDefault);
122
+ const defaultTargets = implementedTargets.filter((target) => target.isDefault);
123
+ for (const target of nonDefaultTargets) {
124
+ const detected = target.detectFromEnvironment?.();
125
+ if (detected) {
126
+ return target.id;
127
+ }
128
+ }
129
+ for (const target of defaultTargets) {
130
+ const detected = target.detectFromEnvironment?.();
131
+ if (detected) {
132
+ return target.id;
133
+ }
134
+ }
135
+ return null;
136
+ } catch {
137
+ return null;
138
+ }
139
+ };
140
+ const promptForTargetSelection = async () => {
141
+ const availableTargets = getImplementedTargetIDs();
142
+ let defaultTarget = getDefaultTargetUnsafe().id;
143
+ try {
144
+ const savedDefaultTarget = await projectSettings.getDefaultTarget();
145
+ if (savedDefaultTarget && isSome(getTarget(savedDefaultTarget))) {
146
+ defaultTarget = savedDefaultTarget;
147
+ }
148
+ } catch {}
149
+ const answer = await inquirer.prompt([
150
+ {
151
+ type: "list",
152
+ name: "target",
153
+ message: "Select target platform:",
154
+ choices: availableTargets.map((id) => {
155
+ const targetOption = getTarget(id);
156
+ const target = getOrElse({ id, name: id })(targetOption);
157
+ return {
158
+ name: target.name || id,
159
+ value: id
160
+ };
161
+ }),
162
+ default: defaultTarget
163
+ }
164
+ ]);
165
+ return answer.target;
166
+ };
167
+ const resolveTarget = async (options) => {
168
+ if (options.target) {
169
+ if (!isSome(getTarget(options.target))) {
170
+ throw new Error(`Unknown target: ${options.target}. Available targets: ${getAllTargetIDs().join(", ")}`);
171
+ }
172
+ return options.target;
173
+ }
174
+ try {
175
+ const savedDefaultTarget = await projectSettings.getDefaultTarget();
176
+ if (savedDefaultTarget && isSome(getTarget(savedDefaultTarget))) {
177
+ return savedDefaultTarget;
178
+ }
179
+ } catch (_error) {}
180
+ const detectedTarget = detectTargetFromEnvironment();
181
+ if (detectedTarget) {
182
+ return detectedTarget;
183
+ }
184
+ if (options.allowSelection) {
185
+ return await promptForTargetSelection();
186
+ }
187
+ const defaultTarget = getDefaultTargetUnsafe();
188
+ return defaultTarget.id;
189
+ };
190
+ return {
191
+ getAllTargets: () => getAllTargets(),
192
+ getImplementedTargets: () => getImplementedTargets(),
193
+ getTarget: (id) => getTarget(id),
194
+ promptForTargetSelection,
195
+ resolveTarget,
196
+ isTargetImplemented: (targetId) => isTargetImplemented(targetId),
197
+ getTargetsWithMCPSupport: () => getTargetsWithMCPSupport(),
198
+ getImplementedTargetIDs: () => getImplementedTargetIDs(),
199
+ getAllTargetIDs: () => getAllTargetIDs()
200
+ };
201
+ }
202
+ var targetManager = createTargetManager();
203
+
204
+ export { projectSettings, targetManager };
@@ -0,0 +1,137 @@
1
+ import {
2
+ CONFIG_DIR,
3
+ USER_SETTINGS_FILE,
4
+ getProjectLocalSettingsFile,
5
+ getProjectSettingsFile
6
+ } from "./chunk-7eq34c42.js";
7
+ import"./chunk-5j4w74t6.js";
8
+
9
+ // src/services/config-service.ts
10
+ import fs from "node:fs/promises";
11
+ import path from "node:path";
12
+ class ConfigService {
13
+ static async loadConfiguration(cwd = process.cwd()) {
14
+ const userSettings = await this.loadHomeSettings();
15
+ const projectSettings = await this.loadProjectSettings(cwd);
16
+ const localSettings = await this.loadLocalSettings(cwd);
17
+ const choices = {
18
+ provider: localSettings.provider || userSettings.defaultProvider,
19
+ agent: localSettings.agent || projectSettings.defaultAgent || userSettings.defaultAgent
20
+ };
21
+ return {
22
+ user: userSettings,
23
+ project: projectSettings,
24
+ choices
25
+ };
26
+ }
27
+ static async loadSettings(cwd = process.cwd()) {
28
+ const config = await this.loadConfiguration(cwd);
29
+ return {
30
+ ...config.user,
31
+ ...config.project,
32
+ ...config.choices
33
+ };
34
+ }
35
+ static async loadHomeSettings() {
36
+ try {
37
+ const content = await fs.readFile(USER_SETTINGS_FILE, "utf-8");
38
+ return JSON.parse(content);
39
+ } catch {
40
+ return {};
41
+ }
42
+ }
43
+ static async saveHomeSettings(settings) {
44
+ await fs.mkdir(USER_SETTINGS_FILE.replace("/settings.json", ""), { recursive: true });
45
+ const existing = await this.loadHomeSettings();
46
+ const merged = { ...existing, ...settings };
47
+ await fs.writeFile(USER_SETTINGS_FILE, JSON.stringify(merged, null, 2) + `
48
+ `);
49
+ }
50
+ static async hasInitialSetup() {
51
+ const userSettings = await this.loadHomeSettings();
52
+ return !!(userSettings.hasCompletedSetup || userSettings.apiKeys && Object.keys(userSettings.apiKeys).length > 0);
53
+ }
54
+ static getAvailableProviders(userSettings) {
55
+ const providers = ["default"];
56
+ if (userSettings.apiKeys?.kimi)
57
+ providers.push("kimi");
58
+ if (userSettings.apiKeys?.["z.ai"])
59
+ providers.push("z.ai");
60
+ return providers;
61
+ }
62
+ static async loadProjectSettings(cwd = process.cwd()) {
63
+ try {
64
+ const configPath = getProjectSettingsFile(cwd);
65
+ const content = await fs.readFile(configPath, "utf-8");
66
+ return JSON.parse(content);
67
+ } catch {
68
+ return {};
69
+ }
70
+ }
71
+ static async saveProjectSettings(settings, cwd = process.cwd()) {
72
+ const configDir = path.join(cwd, CONFIG_DIR);
73
+ await fs.mkdir(configDir, { recursive: true });
74
+ const existing = await this.loadProjectSettings(cwd);
75
+ const merged = { ...existing, ...settings };
76
+ const configPath = getProjectSettingsFile(cwd);
77
+ await fs.writeFile(configPath, JSON.stringify(merged, null, 2) + `
78
+ `);
79
+ }
80
+ static async loadLocalSettings(cwd = process.cwd()) {
81
+ try {
82
+ const configPath = getProjectLocalSettingsFile(cwd);
83
+ const content = await fs.readFile(configPath, "utf-8");
84
+ return JSON.parse(content);
85
+ } catch {
86
+ return {};
87
+ }
88
+ }
89
+ static async saveLocalSettings(settings, cwd = process.cwd()) {
90
+ const configDir = path.join(cwd, CONFIG_DIR);
91
+ await fs.mkdir(configDir, { recursive: true });
92
+ const configPath = getProjectLocalSettingsFile(cwd);
93
+ await fs.writeFile(configPath, JSON.stringify(settings, null, 2) + `
94
+ `);
95
+ }
96
+ static async saveClaudeConfig(projectConfig, userConfig, cwd = process.cwd()) {
97
+ if (userConfig.claudeApiKey || userConfig.claudeProvider || userConfig.claudeProviderConfig) {
98
+ await this.saveHomeSettings(userConfig);
99
+ }
100
+ await this.saveProjectSettings(projectConfig, cwd);
101
+ await this.addGitignore(cwd);
102
+ }
103
+ static async addGitignore(cwd) {
104
+ const gitignorePath = path.join(cwd, ".gitignore");
105
+ const patterns = [
106
+ "",
107
+ "# Sylphx Flow - local settings (never commit)",
108
+ ".sylphx-flow/*.local.json"
109
+ ];
110
+ try {
111
+ const content = await fs.readFile(gitignorePath, "utf-8");
112
+ if (!content.includes(".sylphx-flow/*.local.json")) {
113
+ await fs.appendFile(gitignorePath, patterns.join(`
114
+ `) + `
115
+ `);
116
+ }
117
+ } catch {
118
+ await fs.writeFile(gitignorePath, patterns.join(`
119
+ `).trim() + `
120
+ `);
121
+ }
122
+ }
123
+ static async isInitialized(cwd = process.cwd()) {
124
+ try {
125
+ const configDir = path.join(cwd, CONFIG_DIR);
126
+ await fs.access(configDir);
127
+ return true;
128
+ } catch {
129
+ return false;
130
+ }
131
+ }
132
+ }
133
+ export {
134
+ ConfigService
135
+ };
136
+
137
+ export { ConfigService };
package/package.json CHANGED
@@ -1,115 +1,67 @@
1
1
  {
2
2
  "name": "@sylphx/flow",
3
- "version": "0.2.13",
4
- "description": "Sylphx Flow - Type-safe development flow for modern web development",
3
+ "version": "1.0.1",
4
+ "description": "AI-powered development workflow automation with autonomous loop mode and smart configuration",
5
5
  "type": "module",
6
- "main": "dist/index.js",
7
6
  "bin": {
8
- "sylphx-flow": "dist/index.js"
7
+ "sylphx-flow": "./dist/index.js"
9
8
  },
10
- "files": [
11
- "dist",
12
- "drizzle",
13
- "assets",
14
- "README.md",
15
- "LICENSE"
16
- ],
17
- "repository": {
18
- "type": "git",
19
- "url": "https://github.com/sylphxltd/flow.git"
20
- },
21
- "keywords": [
22
- "development",
23
- "flow",
24
- "guidelines",
25
- "typescript",
26
- "nextjs",
27
- "sveltekit",
28
- "react",
29
- "flutter",
30
- "type-safe",
31
- "mcp",
32
- "ai-agents",
33
- "github-installation"
34
- ],
35
- "author": "sylphxltd",
36
- "license": "MIT",
37
- "bugs": {
38
- "url": "https://github.com/sylphxltd/flow/issues"
39
- },
40
- "homepage": "https://github.com/sylphxltd/flow#readme",
41
9
  "scripts": {
42
- "build": "bun run build.ts",
43
- "prepare": "bun run build.ts",
10
+ "build": "bunup",
44
11
  "dev": "bun src/index.ts",
45
12
  "start": "bun dist/index.js",
46
- "start:node": "node dist/index.js",
47
- "clean": "rm -rf dist",
48
- "clean:all": "rm -rf dist node_modules/.cache",
49
- "lint": "biome check .",
50
- "lint:fix": "biome check --write .",
51
- "format": "biome format --write .",
52
- "format:check": "biome format .",
13
+ "test": "vitest run",
14
+ "test:watch": "vitest",
53
15
  "type-check": "tsc --noEmit",
54
- "test": "vitest",
55
- "test:ui": "vitest --ui",
56
- "test:chat": "bun src/test-chat.ts",
57
- "test:run": "vitest run",
58
- "test:coverage": "vitest run --coverage"
59
- },
60
- "engines": {
61
- "node": ">=18.0.0"
16
+ "clean": "rm -rf dist",
17
+ "prepublishOnly": "bun run build"
62
18
  },
63
- "packageManager": "bun@1.3.1",
64
19
  "dependencies": {
65
- "@ai-sdk/anthropic": "^2.0.40",
66
- "@ai-sdk/google": "^2.0.26",
67
- "@ai-sdk/openai": "^2.0.59",
68
- "@ai-sdk/openai-compatible": "^1.0.25",
69
- "@huggingface/transformers": "^3.7.6",
70
- "@jescalan/ink-markdown": "^2.0.0",
71
- "@lancedb/lancedb": "^0.22.2",
72
- "@libsql/client": "^0.15.15",
73
- "@modelcontextprotocol/sdk": "^1.20.2",
74
- "@openrouter/ai-sdk-provider": "^1.2.0",
75
- "ai": "^5.0.86",
76
- "ai-sdk-provider-claude-code": "^2.1.0",
77
- "apache-arrow": "^21.1.0",
78
- "boxen": "^8.0.1",
79
- "chalk": "^5.6.2",
80
- "chokidar": "^4.0.3",
81
- "cli-progress": "^3.12.0",
82
- "cli-table3": "^0.6.5",
83
20
  "commander": "^14.0.2",
84
- "drizzle-orm": "^0.44.7",
21
+ "chalk": "^5.6.2",
22
+ "boxen": "^8.0.1",
85
23
  "gradient-string": "^3.0.0",
86
- "gray-matter": "^4.0.3",
87
- "ignore": "^7.0.5",
88
- "immer": "^10.2.0",
89
- "ink": "^6.4.0",
90
- "ink-select-input": "^6.2.0",
91
- "ink-text-input": "^6.0.0",
92
- "inquirer": "^12.10.0",
93
24
  "ora": "^9.0.0",
94
- "react": "^19.2.0",
95
- "react-devtools-core": "^7.0.1",
25
+ "inquirer": "^12.10.0",
26
+ "gray-matter": "^4.0.3",
96
27
  "yaml": "^2.8.1",
97
28
  "zod": "^4.1.12",
98
- "zustand": "^5.0.8"
29
+ "debug": "^4.4.3"
99
30
  },
100
31
  "devDependencies": {
101
- "@biomejs/biome": "^2.3.2",
102
- "@types/bun": "^1.3.1",
103
32
  "@types/node": "^24.9.2",
104
- "@vitest/coverage-v8": "^4.0.6",
105
- "@vitest/ui": "^4.0.6",
106
- "drizzle-kit": "^0.31.6",
107
- "esbuild": "^0.25.11",
108
- "jscpd": "^4.0.5",
109
- "madge": "^8.0.0",
110
- "ts-prune": "^0.10.3",
111
- "tsx": "^4.20.6",
112
33
  "typescript": "^5.9.3",
113
34
  "vitest": "^4.0.6"
114
- }
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "files": [
40
+ "dist",
41
+ "README.md",
42
+ "CHANGELOG.md",
43
+ "LOOP_MODE.md"
44
+ ],
45
+ "keywords": [
46
+ "ai",
47
+ "automation",
48
+ "workflow",
49
+ "claude",
50
+ "opencode",
51
+ "cli",
52
+ "autonomous",
53
+ "loop-mode",
54
+ "developer-tools"
55
+ ],
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "https://github.com/sylphxltd/flow.git",
59
+ "directory": "packages/flow"
60
+ },
61
+ "bugs": {
62
+ "url": "https://github.com/sylphxltd/flow/issues"
63
+ },
64
+ "homepage": "https://github.com/sylphxltd/flow#readme",
65
+ "license": "MIT",
66
+ "author": "sylphxltd"
115
67
  }