@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
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Functional composable for environment variables
3
+ * Type-safe access to environment with validation
4
+ *
5
+ * DESIGN RATIONALE:
6
+ * - Explicit handling of missing variables
7
+ * - Type-safe environment access
8
+ * - Validation support
9
+ * - Option type for optional values
10
+ */
11
+
12
+ import type { ConfigError } from '../../core/functional/error-types.js';
13
+ import { configError } from '../../core/functional/error-types.js';
14
+ import type { Option } from '../../core/functional/option.js';
15
+ import { fromNullable } from '../../core/functional/option.js';
16
+ import type { Result } from '../../core/functional/result.js';
17
+ import { failure, success } from '../../core/functional/result.js';
18
+
19
+ /**
20
+ * Get environment variable as Option
21
+ * Returns Some(value) if exists, None otherwise
22
+ */
23
+ export const getEnvOpt = (key: string): Option<string> => {
24
+ return fromNullable(process.env[key]);
25
+ };
26
+
27
+ /**
28
+ * Get environment variable or default
29
+ */
30
+ export const getEnvOrElse = (key: string, defaultValue: string): string => {
31
+ return process.env[key] || defaultValue;
32
+ };
33
+
34
+ /**
35
+ * Get required environment variable
36
+ * Returns Result with error if missing
37
+ */
38
+ export const getEnvRequired = (key: string): Result<string, ConfigError> => {
39
+ const value = process.env[key];
40
+
41
+ if (value === undefined || value === '') {
42
+ return failure(
43
+ configError(`Required environment variable is missing: ${key}`, { configKey: key })
44
+ );
45
+ }
46
+
47
+ return success(value);
48
+ };
49
+
50
+ /**
51
+ * Get multiple required environment variables
52
+ * Returns Result with all errors if any are missing
53
+ */
54
+ export const getEnvRequiredAll = (keys: string[]): Result<Record<string, string>, ConfigError> => {
55
+ const missing: string[] = [];
56
+ const values: Record<string, string> = {};
57
+
58
+ for (const key of keys) {
59
+ const value = process.env[key];
60
+ if (value === undefined || value === '') {
61
+ missing.push(key);
62
+ } else {
63
+ values[key] = value;
64
+ }
65
+ }
66
+
67
+ if (missing.length > 0) {
68
+ return failure(
69
+ configError(`Required environment variables are missing: ${missing.join(', ')}`, {
70
+ context: { missing },
71
+ })
72
+ );
73
+ }
74
+
75
+ return success(values);
76
+ };
77
+
78
+ /**
79
+ * Parse environment variable as number
80
+ */
81
+ export const getEnvNumber = (key: string): Result<number, ConfigError> => {
82
+ const value = process.env[key];
83
+
84
+ if (value === undefined || value === '') {
85
+ return failure(configError(`Environment variable is missing: ${key}`, { configKey: key }));
86
+ }
87
+
88
+ const parsed = Number(value);
89
+ if (Number.isNaN(parsed)) {
90
+ return failure(
91
+ configError(`Environment variable is not a valid number: ${key}`, {
92
+ configKey: key,
93
+ context: { value },
94
+ })
95
+ );
96
+ }
97
+
98
+ return success(parsed);
99
+ };
100
+
101
+ /**
102
+ * Parse environment variable as boolean
103
+ * Accepts: true, false, 1, 0, yes, no (case insensitive)
104
+ */
105
+ export const getEnvBoolean = (key: string): Result<boolean, ConfigError> => {
106
+ const value = process.env[key]?.toLowerCase();
107
+
108
+ if (value === undefined || value === '') {
109
+ return failure(configError(`Environment variable is missing: ${key}`, { configKey: key }));
110
+ }
111
+
112
+ const trueValues = ['true', '1', 'yes'];
113
+ const falseValues = ['false', '0', 'no'];
114
+
115
+ if (trueValues.includes(value)) {
116
+ return success(true);
117
+ }
118
+
119
+ if (falseValues.includes(value)) {
120
+ return success(false);
121
+ }
122
+
123
+ return failure(
124
+ configError(`Environment variable is not a valid boolean: ${key}`, {
125
+ configKey: key,
126
+ context: { value },
127
+ })
128
+ );
129
+ };
130
+
131
+ /**
132
+ * Parse environment variable as enum
133
+ */
134
+ export const getEnvEnum = <T extends string>(
135
+ key: string,
136
+ allowedValues: readonly T[]
137
+ ): Result<T, ConfigError> => {
138
+ const value = process.env[key];
139
+
140
+ if (value === undefined || value === '') {
141
+ return failure(configError(`Environment variable is missing: ${key}`, { configKey: key }));
142
+ }
143
+
144
+ if (!allowedValues.includes(value as T)) {
145
+ return failure(
146
+ configError(`Environment variable has invalid value: ${key}`, {
147
+ configKey: key,
148
+ context: {
149
+ value,
150
+ allowedValues: allowedValues as unknown as string[],
151
+ },
152
+ })
153
+ );
154
+ }
155
+
156
+ return success(value as T);
157
+ };
158
+
159
+ /**
160
+ * Get all environment variables
161
+ */
162
+ export const getAllEnv = (): NodeJS.ProcessEnv => {
163
+ return process.env;
164
+ };
165
+
166
+ /**
167
+ * Check if environment variable is set
168
+ */
169
+ export const hasEnv = (key: string): boolean => {
170
+ return key in process.env && process.env[key] !== undefined && process.env[key] !== '';
171
+ };
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Functional composable for file system operations
3
+ * Returns Result instead of throwing exceptions
4
+ *
5
+ * DESIGN RATIONALE:
6
+ * - Explicit error handling
7
+ * - Composable file operations
8
+ * - Type-safe path handling
9
+ * - Separation of concerns (pure path operations vs side effects)
10
+ */
11
+
12
+ import fsPromises from 'node:fs/promises';
13
+ import path from 'node:path';
14
+ import type { FileSystemError } from '../../core/functional/error-types.js';
15
+ import { fileSystemError } from '../../core/functional/error-types.js';
16
+ import type { Result } from '../../core/functional/result.js';
17
+ import { tryCatchAsync } from '../../core/functional/result.js';
18
+
19
+ /**
20
+ * Pure path operations (no side effects)
21
+ */
22
+
23
+ export const joinPath = (...segments: string[]): string => path.join(...segments);
24
+
25
+ export const resolvePath = (...segments: string[]): string => path.resolve(...segments);
26
+
27
+ export const dirname = (filePath: string): string => path.dirname(filePath);
28
+
29
+ export const basename = (filePath: string, ext?: string): string => path.basename(filePath, ext);
30
+
31
+ export const extname = (filePath: string): string => path.extname(filePath);
32
+
33
+ /**
34
+ * File system operations (side effects, return Result)
35
+ */
36
+
37
+ export const readFile = async (filePath: string): Promise<Result<string, FileSystemError>> => {
38
+ return tryCatchAsync(
39
+ async () => {
40
+ return await fsPromises.readFile(filePath, 'utf-8');
41
+ },
42
+ (error) =>
43
+ fileSystemError(`Failed to read file: ${filePath}`, filePath, 'read', {
44
+ cause: error instanceof Error ? error : undefined,
45
+ })
46
+ );
47
+ };
48
+
49
+ export const writeFile = async (
50
+ filePath: string,
51
+ content: string
52
+ ): Promise<Result<void, FileSystemError>> => {
53
+ return tryCatchAsync(
54
+ async () => {
55
+ await fsPromises.writeFile(filePath, content, 'utf-8');
56
+ },
57
+ (error) =>
58
+ fileSystemError(`Failed to write file: ${filePath}`, filePath, 'write', {
59
+ cause: error instanceof Error ? error : undefined,
60
+ })
61
+ );
62
+ };
63
+
64
+ export const deleteFile = async (filePath: string): Promise<Result<void, FileSystemError>> => {
65
+ return tryCatchAsync(
66
+ async () => {
67
+ await fsPromises.unlink(filePath);
68
+ },
69
+ (error) =>
70
+ fileSystemError(`Failed to delete file: ${filePath}`, filePath, 'delete', {
71
+ cause: error instanceof Error ? error : undefined,
72
+ })
73
+ );
74
+ };
75
+
76
+ export const createDirectory = async (
77
+ dirPath: string,
78
+ options?: { recursive?: boolean }
79
+ ): Promise<Result<void, FileSystemError>> => {
80
+ return tryCatchAsync(
81
+ async () => {
82
+ await fsPromises.mkdir(dirPath, { recursive: options?.recursive ?? true });
83
+ },
84
+ (error) =>
85
+ fileSystemError(`Failed to create directory: ${dirPath}`, dirPath, 'create', {
86
+ cause: error instanceof Error ? error : undefined,
87
+ })
88
+ );
89
+ };
90
+
91
+ export const pathExists = async (filePath: string): Promise<Result<boolean, FileSystemError>> => {
92
+ return tryCatchAsync(
93
+ async () => {
94
+ try {
95
+ await fsPromises.access(filePath);
96
+ return true;
97
+ } catch {
98
+ return false;
99
+ }
100
+ },
101
+ (error) =>
102
+ fileSystemError(`Failed to check if path exists: ${filePath}`, filePath, 'stat', {
103
+ cause: error instanceof Error ? error : undefined,
104
+ })
105
+ );
106
+ };
107
+
108
+ export const readDirectory = async (
109
+ dirPath: string
110
+ ): Promise<Result<string[], FileSystemError>> => {
111
+ return tryCatchAsync(
112
+ async () => {
113
+ return await fsPromises.readdir(dirPath);
114
+ },
115
+ (error) =>
116
+ fileSystemError(`Failed to read directory: ${dirPath}`, dirPath, 'read', {
117
+ cause: error instanceof Error ? error : undefined,
118
+ })
119
+ );
120
+ };
121
+
122
+ export const getStats = async (
123
+ filePath: string
124
+ ): Promise<Result<{ isFile: boolean; isDirectory: boolean; size: number }, FileSystemError>> => {
125
+ return tryCatchAsync(
126
+ async () => {
127
+ const stats = await fsPromises.stat(filePath);
128
+ return {
129
+ isFile: stats.isFile(),
130
+ isDirectory: stats.isDirectory(),
131
+ size: stats.size,
132
+ };
133
+ },
134
+ (error) =>
135
+ fileSystemError(`Failed to get stats for: ${filePath}`, filePath, 'stat', {
136
+ cause: error instanceof Error ? error : undefined,
137
+ })
138
+ );
139
+ };
@@ -0,0 +1,5 @@
1
+ // Re-export all composables for easy importing
2
+
3
+ export { useEnv, useEnvVar } from './useEnv.js';
4
+ export { useIsCI, useIsDebug, useRuntimeConfig } from './useRuntimeConfig.js';
5
+ export { useTargetConfig, useTargetConfigById } from './useTargetConfig.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get environment variables with type safety
3
+ */
4
+ export function useEnv(): NodeJS.ProcessEnv {
5
+ return process.env;
6
+ }
7
+
8
+ /**
9
+ * Get specific environment variable with optional default
10
+ */
11
+ export function useEnvVar(key: string, defaultValue?: string): string | undefined {
12
+ return process.env[key] || defaultValue;
13
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Get runtime configuration/state
3
+ * This can be extended to include more runtime context
4
+ */
5
+ export function useRuntimeConfig() {
6
+ return {
7
+ isDebug: process.env.NODE_ENV === 'development' || process.env.DEBUG === 'true',
8
+ isCI: process.env.CI === 'true',
9
+ cwd: process.cwd(),
10
+ platform: process.platform,
11
+ nodeVersion: process.version,
12
+ };
13
+ }
14
+
15
+ /**
16
+ * Check if running in CI/CD environment
17
+ */
18
+ export function useIsCI(): boolean {
19
+ return process.env.CI === 'true' || !!process.env.CI || !!process.env.CONTINUOUS_INTEGRATION;
20
+ }
21
+
22
+ /**
23
+ * Check if running in debug mode
24
+ */
25
+ export function useIsDebug(): boolean {
26
+ return process.env.DEBUG === 'true' || process.env.NODE_ENV === 'development';
27
+ }
@@ -0,0 +1,45 @@
1
+ import { getTarget, getDefaultTargetUnsafe } from '../config/targets.js';
2
+ import { projectSettings } from '../utils/settings.js';
3
+ import type { MCPServerConfigFlags } from '../types.js';
4
+
5
+ /**
6
+ * Get the current target's MCP server configuration
7
+ * Follows the same resolution pattern as targetManager.resolveTarget()
8
+ * Returns undefined if no target is set or target has no mcpServerConfig
9
+ */
10
+ export async function useTargetConfig(): Promise<MCPServerConfigFlags | undefined> {
11
+ try {
12
+ // Try to get target from project settings first
13
+ const settings = await projectSettings.load();
14
+ const targetId = settings?.target;
15
+
16
+ if (targetId) {
17
+ const targetOption = getTarget(targetId);
18
+ if (targetOption._tag === 'Some') {
19
+ return targetOption.value.mcpServerConfig;
20
+ }
21
+ }
22
+
23
+ // Fall back to default target
24
+ const defaultTarget = getDefaultTargetUnsafe();
25
+ return defaultTarget.mcpServerConfig;
26
+ } catch {
27
+ // If no target can be resolved, return undefined
28
+ return undefined;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Get a specific target's MCP server configuration by ID
34
+ */
35
+ export function useTargetConfigById(targetId: string): MCPServerConfigFlags | undefined {
36
+ try {
37
+ const targetOption = getTarget(targetId);
38
+ if (targetOption._tag === 'None') {
39
+ return undefined;
40
+ }
41
+ return targetOption.value.mcpServerConfig;
42
+ } catch {
43
+ return undefined;
44
+ }
45
+ }