@smooai/config 2.0.0

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 (259) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +430 -0
  3. package/dist/chunk-3SU3SMKN.mjs +73 -0
  4. package/dist/chunk-3SU3SMKN.mjs.map +1 -0
  5. package/dist/chunk-CASNDTCH.mjs +12 -0
  6. package/dist/chunk-CASNDTCH.mjs.map +1 -0
  7. package/dist/chunk-GLLYQ6FK.mjs +173 -0
  8. package/dist/chunk-GLLYQ6FK.mjs.map +1 -0
  9. package/dist/chunk-HPSOF46N.mjs +71 -0
  10. package/dist/chunk-HPSOF46N.mjs.map +1 -0
  11. package/dist/chunk-HPXCKD6M.mjs +118 -0
  12. package/dist/chunk-HPXCKD6M.mjs.map +1 -0
  13. package/dist/chunk-J5LGTIGS.mjs +10 -0
  14. package/dist/chunk-J5LGTIGS.mjs.map +1 -0
  15. package/dist/chunk-LKV73SD2.mjs +25 -0
  16. package/dist/chunk-LKV73SD2.mjs.map +1 -0
  17. package/dist/chunk-MJ52ZIWV.mjs +98 -0
  18. package/dist/chunk-MJ52ZIWV.mjs.map +1 -0
  19. package/dist/chunk-O7BSFCCY.mjs +89 -0
  20. package/dist/chunk-O7BSFCCY.mjs.map +1 -0
  21. package/dist/chunk-QBM74JB5.mjs +47 -0
  22. package/dist/chunk-QBM74JB5.mjs.map +1 -0
  23. package/dist/chunk-QGMLTMB5.mjs +37 -0
  24. package/dist/chunk-QGMLTMB5.mjs.map +1 -0
  25. package/dist/chunk-SKX7CPGS.mjs +73 -0
  26. package/dist/chunk-SKX7CPGS.mjs.map +1 -0
  27. package/dist/chunk-VPKO6D4W.mjs +33 -0
  28. package/dist/chunk-VPKO6D4W.mjs.map +1 -0
  29. package/dist/chunk-YQWYYS7P.mjs +12194 -0
  30. package/dist/chunk-YQWYYS7P.mjs.map +1 -0
  31. package/dist/chunk-Z3CZGNU5.mjs +99 -0
  32. package/dist/chunk-Z3CZGNU5.mjs.map +1 -0
  33. package/dist/chunk-ZOKHXR5I.mjs +33 -0
  34. package/dist/chunk-ZOKHXR5I.mjs.map +1 -0
  35. package/dist/cli.mjs +1562 -0
  36. package/dist/cli.mjs.map +1 -0
  37. package/dist/config/FeatureFlagKey.d.mts +24 -0
  38. package/dist/config/FeatureFlagKey.d.ts +24 -0
  39. package/dist/config/FeatureFlagKey.js +31 -0
  40. package/dist/config/FeatureFlagKey.js.map +1 -0
  41. package/dist/config/FeatureFlagKey.mjs +8 -0
  42. package/dist/config/FeatureFlagKey.mjs.map +1 -0
  43. package/dist/config/PublicConfigKey.d.mts +22 -0
  44. package/dist/config/PublicConfigKey.d.ts +22 -0
  45. package/dist/config/PublicConfigKey.js +36 -0
  46. package/dist/config/PublicConfigKey.js.map +1 -0
  47. package/dist/config/PublicConfigKey.mjs +8 -0
  48. package/dist/config/PublicConfigKey.mjs.map +1 -0
  49. package/dist/config/SecretConfigKey.d.mts +22 -0
  50. package/dist/config/SecretConfigKey.d.ts +22 -0
  51. package/dist/config/SecretConfigKey.js +31 -0
  52. package/dist/config/SecretConfigKey.js.map +1 -0
  53. package/dist/config/SecretConfigKey.mjs +8 -0
  54. package/dist/config/SecretConfigKey.mjs.map +1 -0
  55. package/dist/config/config.d.mts +178 -0
  56. package/dist/config/config.d.ts +178 -0
  57. package/dist/config/config.js +12364 -0
  58. package/dist/config/config.js.map +1 -0
  59. package/dist/config/config.mjs +23 -0
  60. package/dist/config/config.mjs.map +1 -0
  61. package/dist/config/findAndProcessEnvConfig.d.mts +17 -0
  62. package/dist/config/findAndProcessEnvConfig.d.ts +17 -0
  63. package/dist/config/findAndProcessEnvConfig.js +12290 -0
  64. package/dist/config/findAndProcessEnvConfig.js.map +1 -0
  65. package/dist/config/findAndProcessEnvConfig.mjs +14 -0
  66. package/dist/config/findAndProcessEnvConfig.mjs.map +1 -0
  67. package/dist/config/findAndProcessFileConfig.d.mts +38 -0
  68. package/dist/config/findAndProcessFileConfig.d.ts +38 -0
  69. package/dist/config/findAndProcessFileConfig.js +12431 -0
  70. package/dist/config/findAndProcessFileConfig.js.map +1 -0
  71. package/dist/config/findAndProcessFileConfig.mjs +18 -0
  72. package/dist/config/findAndProcessFileConfig.mjs.map +1 -0
  73. package/dist/config/getCloudRegion.d.mts +8 -0
  74. package/dist/config/getCloudRegion.d.ts +8 -0
  75. package/dist/config/getCloudRegion.js +92 -0
  76. package/dist/config/getCloudRegion.js.map +1 -0
  77. package/dist/config/getCloudRegion.mjs +9 -0
  78. package/dist/config/getCloudRegion.mjs.map +1 -0
  79. package/dist/config/index.d.mts +5 -0
  80. package/dist/config/index.d.ts +5 -0
  81. package/dist/config/index.js +12638 -0
  82. package/dist/config/index.js.map +1 -0
  83. package/dist/config/index.mjs +33 -0
  84. package/dist/config/index.mjs.map +1 -0
  85. package/dist/config/parseConfigSchema.d.mts +13 -0
  86. package/dist/config/parseConfigSchema.d.ts +13 -0
  87. package/dist/config/parseConfigSchema.js +12177 -0
  88. package/dist/config/parseConfigSchema.js.map +1 -0
  89. package/dist/config/parseConfigSchema.mjs +16 -0
  90. package/dist/config/parseConfigSchema.mjs.map +1 -0
  91. package/dist/config/standardSchemaToJson.d.mts +6 -0
  92. package/dist/config/standardSchemaToJson.d.ts +6 -0
  93. package/dist/config/standardSchemaToJson.js +138 -0
  94. package/dist/config/standardSchemaToJson.js.map +1 -0
  95. package/dist/config/standardSchemaToJson.mjs +9 -0
  96. package/dist/config/standardSchemaToJson.mjs.map +1 -0
  97. package/dist/index.d.mts +2 -0
  98. package/dist/index.d.ts +2 -0
  99. package/dist/index.js +19 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/index.mjs +1 -0
  102. package/dist/index.mjs.map +1 -0
  103. package/dist/integration-tests/1/smooai-config/config.d.mts +4108 -0
  104. package/dist/integration-tests/1/smooai-config/config.d.ts +4108 -0
  105. package/dist/integration-tests/1/smooai-config/config.js +12353 -0
  106. package/dist/integration-tests/1/smooai-config/config.js.map +1 -0
  107. package/dist/integration-tests/1/smooai-config/config.mjs +12 -0
  108. package/dist/integration-tests/1/smooai-config/config.mjs.map +1 -0
  109. package/dist/integration-tests/1/smooai-config/default.d.mts +55 -0
  110. package/dist/integration-tests/1/smooai-config/default.d.ts +55 -0
  111. package/dist/integration-tests/1/smooai-config/default.js +12419 -0
  112. package/dist/integration-tests/1/smooai-config/default.js.map +1 -0
  113. package/dist/integration-tests/1/smooai-config/default.mjs +78 -0
  114. package/dist/integration-tests/1/smooai-config/default.mjs.map +1 -0
  115. package/dist/integration-tests/1/smooai-config/development.d.mts +41 -0
  116. package/dist/integration-tests/1/smooai-config/development.d.ts +41 -0
  117. package/dist/integration-tests/1/smooai-config/development.js +12403 -0
  118. package/dist/integration-tests/1/smooai-config/development.js.map +1 -0
  119. package/dist/integration-tests/1/smooai-config/development.mjs +62 -0
  120. package/dist/integration-tests/1/smooai-config/development.mjs.map +1 -0
  121. package/dist/integration-tests/1/smooai-config/production.aws.d.mts +128 -0
  122. package/dist/integration-tests/1/smooai-config/production.aws.d.ts +128 -0
  123. package/dist/integration-tests/1/smooai-config/production.aws.js +12371 -0
  124. package/dist/integration-tests/1/smooai-config/production.aws.js.map +1 -0
  125. package/dist/integration-tests/1/smooai-config/production.aws.mjs +30 -0
  126. package/dist/integration-tests/1/smooai-config/production.aws.mjs.map +1 -0
  127. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.d.mts +64 -0
  128. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.d.ts +64 -0
  129. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.js +12364 -0
  130. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.js.map +1 -0
  131. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.mjs +23 -0
  132. package/dist/integration-tests/1/smooai-config/production.aws.us-east-1.mjs.map +1 -0
  133. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.d.mts +64 -0
  134. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.d.ts +64 -0
  135. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.js +12364 -0
  136. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.js.map +1 -0
  137. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.mjs +23 -0
  138. package/dist/integration-tests/1/smooai-config/production.aws.us-east-2.mjs.map +1 -0
  139. package/dist/integration-tests/1/smooai-config/production.d.mts +42 -0
  140. package/dist/integration-tests/1/smooai-config/production.d.ts +42 -0
  141. package/dist/integration-tests/1/smooai-config/production.js +12399 -0
  142. package/dist/integration-tests/1/smooai-config/production.js.map +1 -0
  143. package/dist/integration-tests/1/smooai-config/production.mjs +58 -0
  144. package/dist/integration-tests/1/smooai-config/production.mjs.map +1 -0
  145. package/dist/integration-tests/1/smooai-config/staging.d.mts +129 -0
  146. package/dist/integration-tests/1/smooai-config/staging.d.ts +129 -0
  147. package/dist/integration-tests/1/smooai-config/staging.js +12377 -0
  148. package/dist/integration-tests/1/smooai-config/staging.js.map +1 -0
  149. package/dist/integration-tests/1/smooai-config/staging.mjs +36 -0
  150. package/dist/integration-tests/1/smooai-config/staging.mjs.map +1 -0
  151. package/dist/integration-tests/2/smooai-config/config.d.mts +1262 -0
  152. package/dist/integration-tests/2/smooai-config/config.d.ts +1262 -0
  153. package/dist/integration-tests/2/smooai-config/config.js +12301 -0
  154. package/dist/integration-tests/2/smooai-config/config.js.map +1 -0
  155. package/dist/integration-tests/2/smooai-config/config.mjs +12 -0
  156. package/dist/integration-tests/2/smooai-config/config.mjs.map +1 -0
  157. package/dist/integration-tests/2/smooai-config/default.d.mts +19 -0
  158. package/dist/integration-tests/2/smooai-config/default.d.ts +19 -0
  159. package/dist/integration-tests/2/smooai-config/default.js +12321 -0
  160. package/dist/integration-tests/2/smooai-config/default.js.map +1 -0
  161. package/dist/integration-tests/2/smooai-config/default.mjs +32 -0
  162. package/dist/integration-tests/2/smooai-config/default.mjs.map +1 -0
  163. package/dist/integration-tests/2/smooai-config/development.d.mts +9 -0
  164. package/dist/integration-tests/2/smooai-config/development.d.ts +9 -0
  165. package/dist/integration-tests/2/smooai-config/development.js +12311 -0
  166. package/dist/integration-tests/2/smooai-config/development.js.map +1 -0
  167. package/dist/integration-tests/2/smooai-config/development.mjs +22 -0
  168. package/dist/integration-tests/2/smooai-config/development.mjs.map +1 -0
  169. package/dist/integration-tests/2/smooai-config/production.aws.d.mts +26 -0
  170. package/dist/integration-tests/2/smooai-config/production.aws.d.ts +26 -0
  171. package/dist/integration-tests/2/smooai-config/production.aws.js +12311 -0
  172. package/dist/integration-tests/2/smooai-config/production.aws.js.map +1 -0
  173. package/dist/integration-tests/2/smooai-config/production.aws.mjs +22 -0
  174. package/dist/integration-tests/2/smooai-config/production.aws.mjs.map +1 -0
  175. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.d.mts +25 -0
  176. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.d.ts +25 -0
  177. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.js +12310 -0
  178. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.js.map +1 -0
  179. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.mjs +21 -0
  180. package/dist/integration-tests/2/smooai-config/production.aws.us-east-1.mjs.map +1 -0
  181. package/dist/integration-tests/2/smooai-config/production.d.mts +19 -0
  182. package/dist/integration-tests/2/smooai-config/production.d.ts +19 -0
  183. package/dist/integration-tests/2/smooai-config/production.js +12321 -0
  184. package/dist/integration-tests/2/smooai-config/production.js.map +1 -0
  185. package/dist/integration-tests/2/smooai-config/production.mjs +32 -0
  186. package/dist/integration-tests/2/smooai-config/production.mjs.map +1 -0
  187. package/dist/platform/client.d.mts +49 -0
  188. package/dist/platform/client.d.ts +49 -0
  189. package/dist/platform/client.js +123 -0
  190. package/dist/platform/client.js.map +1 -0
  191. package/dist/platform/client.mjs +8 -0
  192. package/dist/platform/client.mjs.map +1 -0
  193. package/dist/platform/server/server.async.d.mts +12 -0
  194. package/dist/platform/server/server.async.d.ts +12 -0
  195. package/dist/platform/server/server.async.js +12586 -0
  196. package/dist/platform/server/server.async.js.map +1 -0
  197. package/dist/platform/server/server.async.mjs +18 -0
  198. package/dist/platform/server/server.async.mjs.map +1 -0
  199. package/dist/platform/server/server.featureFlag.sync.d.mts +2 -0
  200. package/dist/platform/server/server.featureFlag.sync.d.ts +2 -0
  201. package/dist/platform/server/server.featureFlag.sync.js +12589 -0
  202. package/dist/platform/server/server.featureFlag.sync.js.map +1 -0
  203. package/dist/platform/server/server.featureFlag.sync.mjs +24 -0
  204. package/dist/platform/server/server.featureFlag.sync.mjs.map +1 -0
  205. package/dist/platform/server/server.publicConfig.sync.d.mts +2 -0
  206. package/dist/platform/server/server.publicConfig.sync.d.ts +2 -0
  207. package/dist/platform/server/server.publicConfig.sync.js +12589 -0
  208. package/dist/platform/server/server.publicConfig.sync.js.map +1 -0
  209. package/dist/platform/server/server.publicConfig.sync.mjs +24 -0
  210. package/dist/platform/server/server.publicConfig.sync.mjs.map +1 -0
  211. package/dist/platform/server/server.secretConfig.sync.d.mts +2 -0
  212. package/dist/platform/server/server.secretConfig.sync.d.ts +2 -0
  213. package/dist/platform/server/server.secretConfig.sync.js +12589 -0
  214. package/dist/platform/server/server.secretConfig.sync.js.map +1 -0
  215. package/dist/platform/server/server.secretConfig.sync.mjs +24 -0
  216. package/dist/platform/server/server.secretConfig.sync.mjs.map +1 -0
  217. package/dist/platform/server.d.mts +21 -0
  218. package/dist/platform/server.d.ts +21 -0
  219. package/dist/platform/server.js +12626 -0
  220. package/dist/platform/server.js.map +1 -0
  221. package/dist/platform/server.mjs +58 -0
  222. package/dist/platform/server.mjs.map +1 -0
  223. package/dist/react/hooks.d.mts +36 -0
  224. package/dist/react/hooks.d.ts +36 -0
  225. package/dist/react/hooks.js +90 -0
  226. package/dist/react/hooks.js.map +1 -0
  227. package/dist/react/hooks.mjs +14 -0
  228. package/dist/react/hooks.mjs.map +1 -0
  229. package/dist/react/index.d.mts +28 -0
  230. package/dist/react/index.d.ts +28 -0
  231. package/dist/react/index.js +194 -0
  232. package/dist/react/index.js.map +1 -0
  233. package/dist/react/index.mjs +17 -0
  234. package/dist/react/index.mjs.map +1 -0
  235. package/dist/schema-spec/smooai-config-schema-spec.d.mts +25 -0
  236. package/dist/schema-spec/smooai-config-schema-spec.d.ts +25 -0
  237. package/dist/schema-spec/smooai-config-schema-spec.js +177 -0
  238. package/dist/schema-spec/smooai-config-schema-spec.js.map +1 -0
  239. package/dist/schema-spec/smooai-config-schema-spec.mjs +154 -0
  240. package/dist/schema-spec/smooai-config-schema-spec.mjs.map +1 -0
  241. package/dist/utils/fs.d.mts +10 -0
  242. package/dist/utils/fs.d.ts +10 -0
  243. package/dist/utils/fs.js +74 -0
  244. package/dist/utils/fs.js.map +1 -0
  245. package/dist/utils/fs.mjs +11 -0
  246. package/dist/utils/fs.mjs.map +1 -0
  247. package/dist/utils/index.d.mts +29 -0
  248. package/dist/utils/index.d.ts +29 -0
  249. package/dist/utils/index.js +113 -0
  250. package/dist/utils/index.js.map +1 -0
  251. package/dist/utils/index.mjs +18 -0
  252. package/dist/utils/index.mjs.map +1 -0
  253. package/dist/utils/mergeReplaceArrays.d.mts +9 -0
  254. package/dist/utils/mergeReplaceArrays.d.ts +9 -0
  255. package/dist/utils/mergeReplaceArrays.js +63 -0
  256. package/dist/utils/mergeReplaceArrays.js.map +1 -0
  257. package/dist/utils/mergeReplaceArrays.mjs +9 -0
  258. package/dist/utils/mergeReplaceArrays.mjs.map +1 -0
  259. package/package.json +133 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/Banner.tsx","../src/cli/components/TaskList.tsx","../src/cli/utils/output.ts","../src/cli/commands/init.tsx","../src/cli/utils/api-client.ts","../src/cli/utils/credentials.ts","../src/cli/commands/login.tsx","../src/cli/utils/schema-loader.ts","../src/schema-spec/smooai-config-schema-spec.ts","../src/cli/utils/schema-validator.ts","../src/cli/commands/push.tsx","../src/cli/commands/pull.tsx","../src/cli/commands/set.tsx","../src/cli/commands/get.tsx","../src/cli/commands/list.tsx","../src/cli/commands/diff.tsx","../src/cli/index.ts"],"sourcesContent":["import { Box, Text } from 'ink';\nimport BigText from 'ink-big-text';\nimport Gradient from 'ink-gradient';\nimport React from 'react';\n\nexport function Banner({ title }: { title: string }) {\n return (\n <Box marginBottom={1} flexDirection=\"column\">\n <Gradient colors={['#f49f0a', '#ff6b6c']}>\n <BigText text=\"Smoo AI\" font=\"tiny\" />\n </Gradient>\n <Text bold>{title}</Text>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport React from 'react';\n\nexport interface TaskItem {\n label: string;\n status: 'pending' | 'running' | 'done' | 'error';\n error?: string;\n}\n\nexport function TaskList({ tasks }: { tasks: TaskItem[] }) {\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n {tasks.map((task, i) => (\n <Box key={i}>\n <Box width={3}>\n {task.status === 'running' && (\n <Text color=\"yellow\">\n <Spinner type=\"dots\" />\n </Text>\n )}\n {task.status === 'done' && <Text color=\"green\">✓</Text>}\n {task.status === 'error' && <Text color=\"red\">✗</Text>}\n {task.status === 'pending' && <Text color=\"gray\">○</Text>}\n </Box>\n <Text color={task.status === 'error' ? 'red' : task.status === 'done' ? 'green' : undefined}>{task.label}</Text>\n {task.error && <Text color=\"red\"> — {task.error}</Text>}\n </Box>\n ))}\n </Box>\n );\n}\n","/**\n * Dual-mode output utilities for CLI commands.\n * Supports both interactive (Ink TUI) and non-interactive (JSON) output.\n */\n\nexport function isInteractive(jsonFlag?: boolean): boolean {\n if (jsonFlag) return false;\n return Boolean(process.stdout.isTTY);\n}\n\nexport function jsonOutput(data: unknown, exitCode = 0): never {\n console.log(JSON.stringify(data, null, 2));\n process.exit(exitCode);\n}\n\nexport function errorOutput(message: string, details?: unknown): never {\n if (isInteractive()) {\n console.error(`Error: ${message}`);\n if (details) console.error(details);\n process.exit(1);\n }\n jsonOutput({ success: false, error: message, details }, 1);\n}\n","import { existsSync, mkdirSync, writeFileSync, readFileSync, appendFileSync } from 'fs';\nimport { join } from 'path';\nimport { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { isInteractive, jsonOutput } from '../utils/output';\n\ninterface InitOptions {\n json?: boolean;\n language?: string;\n}\n\nconst TS_DEFAULT_CONFIG = `import { defineConfig, StringSchema, BooleanSchema, NumberSchema } from '@smooai/config';\n\n// Define your configuration schema\nexport default defineConfig({\n publicConfigSchema: {\n // Add your public config keys here\n // Example: apiUrl: StringSchema,\n },\n secretConfigSchema: {\n // Add your secret config keys here\n // Example: databaseUrl: StringSchema,\n },\n featureFlagSchema: {\n // Add your feature flag keys here\n // Example: enableNewFeature: BooleanSchema,\n },\n});\n`;\n\nconst TS_ENV_CONFIG = `// Environment-specific overrides for development\n// Import your config definition to get type-safe keys\n// import config from './config';\n\nexport default {\n // Override config values for this environment\n};\n`;\n\nconst JSON_SCHEMA_STARTER = JSON.stringify(\n {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n public: {\n type: 'object',\n properties: {},\n description: 'Public configuration values',\n },\n secret: {\n type: 'object',\n properties: {},\n description: 'Secret configuration values',\n },\n featureFlags: {\n type: 'object',\n properties: {},\n description: 'Feature flag values',\n },\n },\n },\n null,\n 2,\n);\n\nconst JSON_ENV_STARTER = JSON.stringify(\n {\n public: {},\n secret: {},\n featureFlags: {},\n },\n null,\n 2,\n);\n\nconst PYTHON_SCHEMA_GEN = `\"\"\"Schema generator for Smoo AI config.\n\nRun this file to generate JSON Schema output:\n python3 schema_gen.py\n\"\"\"\n\nimport json\nimport sys\n\nfrom pydantic import BaseModel\n\nfrom smooai_config.schema import define_config\n\n\nclass PublicConfig(BaseModel):\n # Add your public config fields here\n # Example: api_url: str = \"https://api.example.com\"\n pass\n\n\nclass SecretConfig(BaseModel):\n # Add your secret config fields here\n # Example: database_url: str\n pass\n\n\nclass FeatureFlags(BaseModel):\n # Add your feature flag fields here\n # Example: enable_new_feature: bool = False\n pass\n\n\nconfig = define_config(\n public=PublicConfig,\n secret=SecretConfig,\n feature_flags=FeatureFlags,\n)\n\n# Print JSON Schema to stdout for CLI consumption\njson.dump(config.json_schema, sys.stdout, indent=2)\n`;\n\nconst GO_SCHEMA_GEN = [\n '// Schema generator for Smoo AI config.',\n '//',\n '// Run this file to generate JSON Schema output:',\n '// go run main.go',\n 'package main',\n '',\n 'import (',\n '\\t\"encoding/json\"',\n '\\t\"fmt\"',\n '\\t\"log\"',\n '',\n '\\tconfig \"github.com/SmooAI/config/go/config\"',\n ')',\n '',\n '// PublicConfig defines public configuration values.',\n 'type PublicConfig struct {',\n '\\t// Add your public config fields here',\n '\\t// Example: APIUrl string `json:\"api_url\"`',\n '}',\n '',\n '// SecretConfig defines secret configuration values.',\n 'type SecretConfig struct {',\n '\\t// Add your secret config fields here',\n '}',\n '',\n '// FeatureFlags defines feature flag values.',\n 'type FeatureFlags struct {',\n '\\t// Add your feature flag fields here',\n '}',\n '',\n 'func main() {',\n '\\tresult, err := config.DefineConfigTyped(&PublicConfig{}, &SecretConfig{}, &FeatureFlags{})',\n '\\tif err != nil {',\n '\\t\\tlog.Fatal(err)',\n '\\t}',\n '',\n '\\tdata, err := json.MarshalIndent(result.JSONSchema, \"\", \" \")',\n '\\tif err != nil {',\n '\\t\\tlog.Fatal(err)',\n '\\t}',\n '\\tfmt.Println(string(data))',\n '}',\n '',\n].join('\\n');\n\nconst RUST_CARGO_TOML = `[package]\nname = \"smooai-config-gen\"\nversion = \"0.1.0\"\nedition = \"2021\"\n\n[dependencies]\nsmooai-config = \"1\"\nschemars = { version = \"0.8\", features = [\"derive\"] }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\n`;\n\nconst RUST_MAIN_RS = `//! Schema generator for Smoo AI config.\n//!\n//! Run this to generate JSON Schema output:\n//! cargo run --manifest-path .smooai-config/Cargo.toml\n\nuse schemars::JsonSchema;\nuse serde::{Deserialize, Serialize};\nuse smooai_config::schema::{define_config_typed, EmptySchema};\n\n/// Public configuration values.\n#[derive(Default, Serialize, Deserialize, JsonSchema)]\nstruct PublicConfig {\n // Add your public config fields here\n // Example: api_url: String,\n}\n\n/// Secret configuration values.\n#[derive(Default, Serialize, Deserialize, JsonSchema)]\nstruct SecretConfig {\n // Add your secret config fields here\n}\n\n/// Feature flag values.\n#[derive(Default, Serialize, Deserialize, JsonSchema)]\nstruct FeatureFlags {\n // Add your feature flag fields here\n}\n\nfn main() {\n let config = define_config_typed::<PublicConfig, SecretConfig, FeatureFlags>();\n let json = serde_json::to_string_pretty(&config.json_schema).unwrap();\n println!(\"{}\", json);\n}\n`;\n\nexport async function initLogic(options: InitOptions): Promise<{ success: boolean; filesCreated: string[] }> {\n const configDir = join(process.cwd(), '.smooai-config');\n const filesCreated: string[] = [];\n const language = options.language ?? 'typescript';\n\n // Create config directory\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true });\n filesCreated.push('.smooai-config/');\n }\n\n switch (language) {\n case 'typescript': {\n const defaultPath = join(configDir, 'default.ts');\n if (!existsSync(defaultPath)) {\n writeFileSync(defaultPath, TS_DEFAULT_CONFIG);\n filesCreated.push('.smooai-config/default.ts');\n }\n const devPath = join(configDir, 'development.ts');\n if (!existsSync(devPath)) {\n writeFileSync(devPath, TS_ENV_CONFIG);\n filesCreated.push('.smooai-config/development.ts');\n }\n break;\n }\n case 'python': {\n const genPath = join(configDir, 'schema_gen.py');\n if (!existsSync(genPath)) {\n writeFileSync(genPath, PYTHON_SCHEMA_GEN);\n filesCreated.push('.smooai-config/schema_gen.py');\n }\n const devPath = join(configDir, 'development.json');\n if (!existsSync(devPath)) {\n writeFileSync(devPath, JSON_ENV_STARTER);\n filesCreated.push('.smooai-config/development.json');\n }\n break;\n }\n case 'go': {\n const genPath = join(configDir, 'main.go');\n if (!existsSync(genPath)) {\n writeFileSync(genPath, GO_SCHEMA_GEN);\n filesCreated.push('.smooai-config/main.go');\n }\n const devPath = join(configDir, 'development.json');\n if (!existsSync(devPath)) {\n writeFileSync(devPath, JSON_ENV_STARTER);\n filesCreated.push('.smooai-config/development.json');\n }\n break;\n }\n case 'rust': {\n // Rust needs a Cargo.toml + src/main.rs structure\n const cargoPath = join(configDir, 'Cargo.toml');\n if (!existsSync(cargoPath)) {\n writeFileSync(cargoPath, RUST_CARGO_TOML);\n filesCreated.push('.smooai-config/Cargo.toml');\n }\n const srcDir = join(configDir, 'src');\n if (!existsSync(srcDir)) {\n mkdirSync(srcDir, { recursive: true });\n }\n const mainPath = join(srcDir, 'main.rs');\n if (!existsSync(mainPath)) {\n writeFileSync(mainPath, RUST_MAIN_RS);\n filesCreated.push('.smooai-config/src/main.rs');\n }\n const devPath = join(configDir, 'development.json');\n if (!existsSync(devPath)) {\n writeFileSync(devPath, JSON_ENV_STARTER);\n filesCreated.push('.smooai-config/development.json');\n }\n break;\n }\n default: {\n // Fallback: JSON schema (language-agnostic)\n const schemaPath = join(configDir, 'schema.json');\n if (!existsSync(schemaPath)) {\n writeFileSync(schemaPath, JSON_SCHEMA_STARTER);\n filesCreated.push('.smooai-config/schema.json');\n }\n const devPath = join(configDir, 'development.json');\n if (!existsSync(devPath)) {\n writeFileSync(devPath, JSON_ENV_STARTER);\n filesCreated.push('.smooai-config/development.json');\n }\n break;\n }\n }\n\n // Add local.* to .gitignore\n const gitignorePath = join(process.cwd(), '.gitignore');\n const localPattern = '.smooai-config/local.*';\n if (existsSync(gitignorePath)) {\n const content = readFileSync(gitignorePath, 'utf-8');\n if (!content.includes(localPattern)) {\n appendFileSync(gitignorePath, `\\n# Smoo AI local config\\n${localPattern}\\n`);\n filesCreated.push('.gitignore (updated)');\n }\n }\n\n return { success: true, filesCreated };\n}\n\nfunction InitUI({ options }: { options: InitOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: 'Creating .smooai-config/ directory', status: 'pending' },\n { label: 'Writing config files', status: 'pending' },\n { label: 'Updating .gitignore', status: 'pending' },\n ]);\n const [result, setResult] = useState<{ filesCreated: string[] } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n const res = await initLogic(options);\n\n setTasks([\n { label: 'Creating .smooai-config/ directory', status: 'done' },\n { label: 'Writing config files', status: 'done' },\n { label: 'Updating .gitignore', status: 'done' },\n ]);\n setResult(res);\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Initialize Project\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"green\" bold>\n Project initialized!\n </Text>\n {result.filesCreated.map((f, i) => (\n <Text key={i} color=\"gray\">\n {' '}\n Created: {f}\n </Text>\n ))}\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runInit(options: InitOptions): void {\n if (!isInteractive(options.json)) {\n initLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<InitUI options={options} />);\n}\n","/**\n * API client wrapper for CLI commands.\n * Extends ConfigClient with schema and environment management methods.\n */\n\nimport { type Credentials } from './credentials';\n\nexport interface ConfigSchema {\n id: string;\n organizationId: string;\n name: string;\n description?: string | null;\n currentVersion: number;\n jsonSchema: Record<string, unknown>;\n createdBy: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ConfigEnvironment {\n id: string;\n organizationId: string;\n name: string;\n description?: string | null;\n createdBy: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface PushVersionResponse {\n schema: ConfigSchema;\n version: {\n id: string;\n schemaId: string;\n version: number;\n jsonSchema: Record<string, unknown>;\n changeDescription?: string | null;\n pushedBy: string;\n pushedAt: string;\n };\n}\n\nexport class CliApiClient {\n private baseUrl: string;\n private apiKey: string;\n private orgId: string;\n\n constructor(credentials: Credentials) {\n this.baseUrl = credentials.baseUrl.replace(/\\/+$/, '');\n this.apiKey = credentials.apiKey;\n this.orgId = credentials.orgId;\n }\n\n private async fetchJson<T>(path: string, options?: RequestInit): Promise<T> {\n const response = await fetch(`${this.baseUrl}${path}`, {\n ...options,\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new Error(`API error: HTTP ${response.status} ${response.statusText}${body ? ` — ${body}` : ''}`);\n }\n return response.json() as Promise<T>;\n }\n\n async listSchemas(): Promise<ConfigSchema[]> {\n return this.fetchJson<ConfigSchema[]>(`/organizations/${this.orgId}/config/schemas`);\n }\n\n async getSchema(schemaId: string): Promise<ConfigSchema> {\n return this.fetchJson<ConfigSchema>(`/organizations/${this.orgId}/config/schemas/${schemaId}`);\n }\n\n async createSchema(data: { name: string; jsonSchema: Record<string, unknown>; description?: string }): Promise<ConfigSchema> {\n return this.fetchJson<ConfigSchema>(`/organizations/${this.orgId}/config/schemas`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async pushSchemaVersion(schemaId: string, data: { jsonSchema: Record<string, unknown>; changeDescription?: string }): Promise<PushVersionResponse> {\n return this.fetchJson<PushVersionResponse>(`/organizations/${this.orgId}/config/schemas/${schemaId}/push`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async listEnvironments(): Promise<ConfigEnvironment[]> {\n return this.fetchJson<ConfigEnvironment[]>(`/organizations/${this.orgId}/config/environments`);\n }\n\n async getAllValues(environment: string): Promise<Record<string, unknown>> {\n const result = await this.fetchJson<{ values: Record<string, unknown> }>(\n `/organizations/${this.orgId}/config/values?environment=${encodeURIComponent(environment)}`,\n );\n return result.values;\n }\n\n async getValue(key: string, environment: string): Promise<unknown> {\n const result = await this.fetchJson<{ value: unknown }>(\n `/organizations/${this.orgId}/config/values/${encodeURIComponent(key)}?environment=${encodeURIComponent(environment)}`,\n );\n return result.value;\n }\n\n async setValue(data: { schemaId: string; environmentId: string; key: string; value: unknown; tier: string }): Promise<unknown> {\n return this.fetchJson(`/organizations/${this.orgId}/config/values`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async getEnvironmentByName(envName: string): Promise<ConfigEnvironment | null> {\n const envs = await this.listEnvironments();\n return envs.find((e) => e.name === envName) ?? null;\n }\n\n async getSchemaByName(name: string): Promise<ConfigSchema | null> {\n const schemas = await this.listSchemas();\n return schemas.find((s) => s.name === name) ?? null;\n }\n}\n","/**\n * Manage CLI credentials stored at ~/.smooai/credentials.json.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface Credentials {\n apiKey: string;\n orgId: string;\n baseUrl: string;\n}\n\nconst SMOOAI_DIR = join(homedir(), '.smooai');\nconst CREDENTIALS_FILE = join(SMOOAI_DIR, 'credentials.json');\n\nexport function loadCredentials(): Credentials | null {\n try {\n if (!existsSync(CREDENTIALS_FILE)) return null;\n const raw = readFileSync(CREDENTIALS_FILE, 'utf-8');\n const parsed = JSON.parse(raw);\n if (!parsed.apiKey || !parsed.orgId || !parsed.baseUrl) return null;\n return parsed as Credentials;\n } catch {\n return null;\n }\n}\n\nexport function saveCredentials(credentials: Credentials): void {\n mkdirSync(SMOOAI_DIR, { recursive: true });\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), { mode: 0o600 });\n}\n\nexport function getCredentialsOrExit(): Credentials {\n const creds = loadCredentials();\n if (!creds) {\n console.error('Not logged in. Run `smooai-config login` first.');\n process.exit(1);\n }\n return creds;\n}\n","import { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { saveCredentials } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\n\ninterface LoginOptions {\n json?: boolean;\n apiKey?: string;\n orgId?: string;\n baseUrl?: string;\n}\n\nconst DEFAULT_BASE_URL = 'https://api.smoo.ai';\n\nexport async function loginLogic(options: LoginOptions): Promise<{ success: boolean; orgId: string }> {\n const apiKey = options.apiKey;\n const orgId = options.orgId;\n const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;\n\n if (!apiKey) throw new Error('API key is required. Use --api-key flag.');\n if (!orgId) throw new Error('Organization ID is required. Use --org-id flag.');\n\n // Validate credentials by calling the API\n const client = new CliApiClient({ apiKey, orgId, baseUrl });\n await client.listSchemas(); // Throws on auth failure\n\n // Save credentials\n saveCredentials({ apiKey, orgId, baseUrl });\n\n return { success: true, orgId };\n}\n\nfunction LoginUI({ options }: { options: LoginOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: 'Validating credentials', status: 'pending' },\n { label: 'Saving to ~/.smooai/credentials.json', status: 'pending' },\n ]);\n const [result, setResult] = useState<{ orgId: string } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n const res = await loginLogic(options);\n\n setTasks([\n { label: 'Validating credentials', status: 'done' },\n { label: 'Saving to ~/.smooai/credentials.json', status: 'done' },\n ]);\n setResult({ orgId: res.orgId });\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Login\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1}>\n <Text color=\"green\" bold>\n Logged in successfully! Organization: {result.orgId}\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runLogin(options: LoginOptions): void {\n if (!isInteractive(options.json)) {\n loginLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<LoginUI options={options} />);\n}\n","/**\n * Load config schema from local .smooai-config/ directory.\n * Supports TypeScript (via defineConfig + serializeConfigSchema), raw JSON Schema,\n * and language-specific generators (Python, Go, Rust) that print JSON to stdout.\n */\n\nimport { execSync } from 'child_process';\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nexport interface LoadedSchema {\n format: 'typescript' | 'json-schema' | 'python-generator' | 'go-generator' | 'rust-generator';\n jsonSchema: Record<string, unknown>;\n filePath: string;\n}\n\n/**\n * Find the project's .smooai-config directory, searching up from cwd.\n */\nexport function findLocalConfigDir(): string | null {\n let dir = process.cwd();\n const root = '/';\n\n for (let i = 0; i < 10; i++) {\n const candidate = join(dir, '.smooai-config');\n if (existsSync(candidate)) return candidate;\n const candidate2 = join(dir, 'smooai-config');\n if (existsSync(candidate2)) return candidate2;\n const parent = join(dir, '..');\n if (parent === dir || dir === root) break;\n dir = parent;\n }\n\n return null;\n}\n\n/**\n * Run a generator command and parse its JSON stdout output.\n */\nfunction runGenerator(command: string, filePath: string, format: LoadedSchema['format']): LoadedSchema {\n try {\n const output = execSync(command, {\n encoding: 'utf-8',\n timeout: 30000,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n return {\n format,\n jsonSchema: JSON.parse(output.trim()),\n filePath,\n };\n } catch (err) {\n throw new Error(`Failed to run generator ${filePath}: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\n/**\n * Load config schema from .smooai-config/.\n *\n * Detection order:\n * 1. schema.json — raw JSON Schema (any language)\n * 2. default.ts / config.ts — TypeScript with defineConfig\n * 3. schema_gen.py — Python generator (prints JSON to stdout)\n * 4. main.go — Go generator (prints JSON to stdout)\n * 5. Cargo.toml — Rust generator (cargo run, prints JSON to stdout)\n */\nexport async function loadLocalSchema(configDir?: string): Promise<LoadedSchema | null> {\n const dir = configDir ?? findLocalConfigDir();\n if (!dir) return null;\n\n // 1. Check for JSON Schema first\n const jsonSchemaPath = join(dir, 'schema.json');\n if (existsSync(jsonSchemaPath)) {\n const raw = readFileSync(jsonSchemaPath, 'utf-8');\n return {\n format: 'json-schema',\n jsonSchema: JSON.parse(raw),\n filePath: jsonSchemaPath,\n };\n }\n\n // 2. Fall back to TypeScript config\n const defaultTsPath = join(dir, 'default.ts');\n const configTsPath = join(dir, 'config.ts');\n const tsPath = existsSync(configTsPath) ? configTsPath : existsSync(defaultTsPath) ? defaultTsPath : null;\n\n if (tsPath) {\n try {\n const mod = await import(tsPath);\n const configDef = mod.default ?? mod;\n if (configDef.serializedAllConfigSchema) {\n return {\n format: 'typescript',\n jsonSchema: configDef.serializedAllConfigSchema,\n filePath: tsPath,\n };\n }\n } catch (err) {\n throw new Error(`Failed to load TypeScript config from ${tsPath}: ${err}`);\n }\n }\n\n // 3. Python generator\n const pyGenPath = join(dir, 'schema_gen.py');\n if (existsSync(pyGenPath)) {\n return runGenerator(`python3 \"${pyGenPath}\"`, pyGenPath, 'python-generator');\n }\n\n // 4. Go generator\n const goGenPath = join(dir, 'main.go');\n if (existsSync(goGenPath)) {\n return runGenerator(`go run \"${goGenPath}\"`, goGenPath, 'go-generator');\n }\n\n // 5. Rust generator (Cargo.toml)\n const cargoPath = join(dir, 'Cargo.toml');\n if (existsSync(cargoPath)) {\n return runGenerator(`cargo run --manifest-path \"${cargoPath}\"`, cargoPath, 'rust-generator');\n }\n\n return null;\n}\n","/**\n * Cross-language JSON Schema validation for the Smoo AI config SDK.\n *\n * Validates that a JSON Schema uses only the subset of keywords that all\n * four language SDKs (TypeScript, Python, Rust, Go) can reliably support.\n */\n\nexport interface SchemaValidationError {\n path: string;\n keyword: string;\n message: string;\n suggestion: string;\n}\n\nexport interface SchemaValidationResult {\n valid: boolean;\n errors: SchemaValidationError[];\n}\n\n/** Keywords supported across all four SDK languages. */\nconst SUPPORTED_KEYWORDS = new Set([\n // Core\n 'type',\n 'properties',\n 'required',\n 'enum',\n 'const',\n 'default',\n // Metadata\n 'title',\n 'description',\n '$schema',\n // String\n 'minLength',\n 'maxLength',\n 'pattern',\n 'format',\n // Numeric\n 'minimum',\n 'maximum',\n 'exclusiveMinimum',\n 'exclusiveMaximum',\n 'multipleOf',\n // Array\n 'items',\n 'minItems',\n 'maxItems',\n 'uniqueItems',\n // Object\n 'additionalProperties',\n // Composition\n 'anyOf',\n 'oneOf',\n 'allOf',\n // References\n '$ref',\n '$defs',\n 'definitions',\n]);\n\n/** Keywords explicitly rejected with actionable error messages. */\nconst REJECTED_KEYWORDS: Record<string, { message: string; suggestion: string }> = {\n if: {\n message: 'Conditional schemas (if/then/else) are not supported across all SDK languages.',\n suggestion: 'Use \"oneOf\" or \"anyOf\" with discriminator properties instead.',\n },\n then: {\n message: 'Conditional schemas (if/then/else) are not supported across all SDK languages.',\n suggestion: 'Use \"oneOf\" or \"anyOf\" with discriminator properties instead.',\n },\n else: {\n message: 'Conditional schemas (if/then/else) are not supported across all SDK languages.',\n suggestion: 'Use \"oneOf\" or \"anyOf\" with discriminator properties instead.',\n },\n patternProperties: {\n message: '\"patternProperties\" is not supported across all SDK languages.',\n suggestion: 'Use explicit \"properties\" with known key names, or \"additionalProperties\" with a type constraint.',\n },\n propertyNames: {\n message: '\"propertyNames\" is not supported across all SDK languages.',\n suggestion: 'Validate property names in application code instead.',\n },\n dependencies: {\n message: '\"dependencies\" is not supported across all SDK languages.',\n suggestion: 'Use \"required\" within \"oneOf\"/\"anyOf\" variants to express conditional requirements.',\n },\n contains: {\n message: '\"contains\" is not supported across all SDK languages.',\n suggestion: 'Use \"items\" with a union type (\"anyOf\") instead.',\n },\n not: {\n message: '\"not\" is not supported across all SDK languages.',\n suggestion: 'Express the constraint positively using \"enum\", \"oneOf\", or validation in application code.',\n },\n prefixItems: {\n message: '\"prefixItems\" (tuple validation) is not supported across all SDK languages.',\n suggestion: 'Use an \"object\" with named fields instead of a positional tuple.',\n },\n unevaluatedProperties: {\n message: '\"unevaluatedProperties\" is not supported across all SDK languages.',\n suggestion: 'Use \"additionalProperties\" instead.',\n },\n unevaluatedItems: {\n message: '\"unevaluatedItems\" is not supported across all SDK languages.',\n suggestion: 'Use \"items\" with a specific schema instead.',\n },\n};\n\n/** Formats supported across all four SDKs. */\nconst SUPPORTED_FORMATS = new Set(['email', 'uri', 'uuid', 'date-time', 'ipv4', 'ipv6']);\n\n/**\n * Validate that a JSON Schema uses only the cross-language-compatible subset.\n *\n * Walks the schema tree and reports unsupported keywords with actionable\n * error messages and suggestions for compatible alternatives.\n */\nexport function validateSmooaiSchema(schema: Record<string, unknown>): SchemaValidationResult {\n const errors: SchemaValidationError[] = [];\n walkSchema(schema, '', errors);\n return { valid: errors.length === 0, errors };\n}\n\nfunction walkSchema(node: unknown, path: string, errors: SchemaValidationError[]): void {\n if (typeof node !== 'object' || node === null || Array.isArray(node)) {\n return;\n }\n\n const obj = node as Record<string, unknown>;\n\n for (const key of Object.keys(obj)) {\n // Check for rejected keywords first (specific error messages)\n if (key in REJECTED_KEYWORDS) {\n const info = REJECTED_KEYWORDS[key];\n errors.push({\n path: path || '/',\n keyword: key,\n message: info.message,\n suggestion: info.suggestion,\n });\n continue;\n }\n\n // Skip known supported keywords — they're fine\n if (SUPPORTED_KEYWORDS.has(key)) {\n // Validate format values\n if (key === 'format' && typeof obj[key] === 'string' && !SUPPORTED_FORMATS.has(obj[key] as string)) {\n errors.push({\n path: path || '/',\n keyword: 'format',\n message: `Format \"${obj[key]}\" is not supported across all SDK languages.`,\n suggestion: `Supported formats: ${[...SUPPORTED_FORMATS].join(', ')}. Use \"pattern\" for custom string validation.`,\n });\n }\n continue;\n }\n\n // Unknown keywords that aren't standard JSON Schema — ignore\n // (could be vendor extensions like x-*, or $id, etc.)\n }\n\n // Recurse into sub-schemas\n if (obj.properties && typeof obj.properties === 'object') {\n const props = obj.properties as Record<string, unknown>;\n for (const [propName, propSchema] of Object.entries(props)) {\n walkSchema(propSchema, `${path}/properties/${propName}`, errors);\n }\n }\n\n if (obj.items && typeof obj.items === 'object') {\n walkSchema(obj.items, `${path}/items`, errors);\n }\n\n if (obj.additionalProperties && typeof obj.additionalProperties === 'object') {\n walkSchema(obj.additionalProperties, `${path}/additionalProperties`, errors);\n }\n\n // Composition keywords\n for (const compKey of ['anyOf', 'oneOf', 'allOf'] as const) {\n if (Array.isArray(obj[compKey])) {\n (obj[compKey] as unknown[]).forEach((subSchema, i) => {\n walkSchema(subSchema, `${path}/${compKey}/${i}`, errors);\n });\n }\n }\n\n // $defs / definitions\n for (const defsKey of ['$defs', 'definitions'] as const) {\n if (obj[defsKey] && typeof obj[defsKey] === 'object') {\n const defs = obj[defsKey] as Record<string, unknown>;\n for (const [defName, defSchema] of Object.entries(defs)) {\n walkSchema(defSchema, `${path}/${defsKey}/${defName}`, errors);\n }\n }\n }\n}\n","/**\n * Validate config values against JSON Schema using ajv.\n */\n\nimport Ajv from 'ajv';\n\nexport { validateSmooaiSchema } from '@/schema-spec/smooai-config-schema-spec';\nexport type { SchemaValidationError, SchemaValidationResult } from '@/schema-spec/smooai-config-schema-spec';\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\n\n/**\n * Validate that a JSON Schema definition is well-formed.\n */\nexport function validateJsonSchema(schema: Record<string, unknown>): { valid: boolean; errors?: string[] } {\n try {\n ajv.compile(schema);\n return { valid: true };\n } catch (err) {\n return {\n valid: false,\n errors: [err instanceof Error ? err.message : String(err)],\n };\n }\n}\n\n/**\n * Validate a value against a JSON Schema for a specific key.\n */\nexport function validateValue(schema: Record<string, unknown>, key: string, value: unknown): { valid: boolean; errors?: string[] } {\n // Look for the key's schema in the top-level properties\n const properties = schema.properties as Record<string, unknown> | undefined;\n if (!properties || !properties[key]) {\n // If there's no schema for this key at top level, check if the schema\n // itself defines the key directly (serialized config schema format)\n const keySchema = schema[key];\n if (!keySchema) {\n return { valid: true }; // No schema to validate against\n }\n\n // Handle serialized config schema format (stringSchema, booleanSchema, numberSchema)\n if (typeof keySchema === 'string') {\n return validatePrimitiveType(keySchema, value);\n }\n\n // It's a JSON Schema object — validate directly\n if (typeof keySchema === 'object') {\n return validateWithAjv(keySchema as Record<string, unknown>, value);\n }\n\n return { valid: true };\n }\n\n return validateWithAjv(properties[key] as Record<string, unknown>, value);\n}\n\nfunction validatePrimitiveType(schemaType: string, value: unknown): { valid: boolean; errors?: string[] } {\n switch (schemaType) {\n case 'stringSchema':\n if (typeof value !== 'string') {\n return { valid: false, errors: [`Expected string, got ${typeof value}`] };\n }\n return { valid: true };\n case 'booleanSchema':\n if (typeof value !== 'boolean' && value !== 'true' && value !== 'false') {\n return { valid: false, errors: [`Expected boolean, got ${typeof value}`] };\n }\n return { valid: true };\n case 'numberSchema':\n if (typeof value !== 'number' && isNaN(Number(value))) {\n return { valid: false, errors: [`Expected number, got ${typeof value}`] };\n }\n return { valid: true };\n default:\n return { valid: true };\n }\n}\n\nfunction validateWithAjv(schema: Record<string, unknown>, value: unknown): { valid: boolean; errors?: string[] } {\n try {\n const validate = ajv.compile(schema);\n const valid = validate(value);\n if (!valid && validate.errors) {\n return {\n valid: false,\n errors: validate.errors.map((e) => `${e.instancePath || '/'} ${e.message}`),\n };\n }\n return { valid: true };\n } catch (err) {\n return { valid: false, errors: [err instanceof Error ? err.message : String(err)] };\n }\n}\n","import { basename } from 'path';\nimport { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\nimport { loadLocalSchema } from '../utils/schema-loader';\nimport { validateJsonSchema, validateSmooaiSchema } from '../utils/schema-validator';\n\ninterface PushOptions {\n json?: boolean;\n schemaName?: string;\n description?: string;\n yes?: boolean;\n}\n\ninterface SchemaDiff {\n added: string[];\n removed: string[];\n changed: string[];\n}\n\nfunction computeSchemaDiff(local: Record<string, unknown>, remote: Record<string, unknown>): SchemaDiff {\n const localKeys = new Set(Object.keys(local));\n const remoteKeys = new Set(Object.keys(remote));\n\n const added = [...localKeys].filter((k) => !remoteKeys.has(k));\n const removed = [...remoteKeys].filter((k) => !localKeys.has(k));\n const changed = [...localKeys].filter((k) => {\n if (!remoteKeys.has(k)) return false;\n return JSON.stringify(local[k]) !== JSON.stringify(remote[k]);\n });\n\n return { added, removed, changed };\n}\n\nexport async function pushLogic(options: PushOptions): Promise<{ success: boolean; schema?: unknown; version?: unknown; diff?: SchemaDiff }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n // Load local schema\n const loaded = await loadLocalSchema();\n if (!loaded) {\n throw new Error('No local schema found. Run `smooai-config init` first or create .smooai-config/schema.json.');\n }\n\n // Validate the schema is well-formed\n const validation = validateJsonSchema(loaded.jsonSchema);\n if (!validation.valid) {\n throw new Error(`Invalid JSON Schema: ${validation.errors?.join(', ')}`);\n }\n\n // Validate cross-language compatibility\n const smooaiValidation = validateSmooaiSchema(loaded.jsonSchema);\n if (!smooaiValidation.valid) {\n const errorMessages = smooaiValidation.errors.map((e) => ` ${e.path}: ${e.message}\\n Suggestion: ${e.suggestion}`);\n throw new Error(`Schema uses unsupported JSON Schema features:\\n${errorMessages.join('\\n')}`);\n }\n\n const schemaName = options.schemaName ?? basename(process.cwd());\n\n // Check if schema already exists\n const existingSchema = await client.getSchemaByName(schemaName).catch(() => null);\n\n let diff: SchemaDiff | undefined;\n\n if (existingSchema) {\n diff = computeSchemaDiff(loaded.jsonSchema, existingSchema.jsonSchema);\n\n // Push new version\n const result = await client.pushSchemaVersion(existingSchema.id, {\n jsonSchema: loaded.jsonSchema,\n changeDescription: options.description,\n });\n\n return { success: true, schema: result.schema, version: result.version, diff };\n }\n\n // Create new schema\n const schema = await client.createSchema({\n name: schemaName,\n jsonSchema: loaded.jsonSchema,\n description: options.description,\n });\n\n return { success: true, schema };\n}\n\nfunction DiffDisplay({ diff }: { diff: SchemaDiff }) {\n if (diff.added.length === 0 && diff.removed.length === 0 && diff.changed.length === 0) {\n return <Text color=\"gray\">No changes detected.</Text>;\n }\n\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text bold>Schema Changes:</Text>\n {diff.added.map((k) => (\n <Text key={k} color=\"green\">\n + {k}\n </Text>\n ))}\n {diff.removed.map((k) => (\n <Text key={k} color=\"red\">\n - {k}\n </Text>\n ))}\n {diff.changed.map((k) => (\n <Text key={k} color=\"yellow\">\n ~ {k}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction PushUI({ options }: { options: PushOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: 'Loading local schema', status: 'pending' },\n { label: 'Validating schema', status: 'pending' },\n { label: 'Pushing to platform', status: 'pending' },\n ]);\n const [result, setResult] = useState<{ schema?: unknown; version?: unknown; diff?: SchemaDiff } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n // Simulate step progression\n setTasks((t) => [{ ...t[0], status: 'done' }, { ...t[1], status: 'running' }, t[2]]);\n\n const res = await pushLogic(options);\n\n setTasks([\n { label: 'Loading local schema', status: 'done' },\n { label: 'Validating schema', status: 'done' },\n { label: 'Pushing to platform', status: 'done' },\n ]);\n setResult(res);\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Push Schema\" />\n <TaskList tasks={tasks} />\n {result?.diff && <DiffDisplay diff={result.diff} />}\n {result && (\n <Box marginTop={1}>\n <Text color=\"green\" bold>\n Schema pushed successfully!\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runPush(options: PushOptions): void {\n if (!isInteractive(options.json)) {\n pushLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<PushUI options={options} />);\n}\n","import { writeFileSync } from 'fs';\nimport { join } from 'path';\nimport { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\nimport { findLocalConfigDir } from '../utils/schema-loader';\n\ninterface PullOptions {\n json?: boolean;\n environment?: string;\n}\n\nexport async function pullLogic(options: PullOptions): Promise<{ success: boolean; values: Record<string, unknown>; environment: string; filePath?: string }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n const environment = options.environment ?? 'development';\n\n // Fetch all values for the environment\n const values = await client.getAllValues(environment);\n\n // Write to local config directory if it exists\n const configDir = findLocalConfigDir();\n let filePath: string | undefined;\n\n if (configDir) {\n // Determine file format based on what exists in the directory\n const jsonPath = join(configDir, `${environment}.json`);\n writeFileSync(jsonPath, JSON.stringify(values, null, 2));\n filePath = jsonPath;\n }\n\n return { success: true, values, environment, filePath };\n}\n\nfunction PullUI({ options }: { options: PullOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: `Fetching values for ${options.environment ?? 'development'}`, status: 'pending' },\n { label: 'Writing to local config', status: 'pending' },\n ]);\n const [result, setResult] = useState<{\n values: Record<string, unknown>;\n environment: string;\n filePath?: string;\n } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n const res = await pullLogic(options);\n\n setTasks([\n { label: `Fetching values for ${res.environment}`, status: 'done' },\n { label: 'Writing to local config', status: res.filePath ? 'done' : 'pending' },\n ]);\n setResult(res);\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Pull Config\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"green\" bold>\n Pulled {Object.keys(result.values).length} values for {result.environment}\n </Text>\n {result.filePath && <Text color=\"gray\">Written to: {result.filePath}</Text>}\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runPull(options: PullOptions): void {\n if (!isInteractive(options.json)) {\n pullLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<PullUI options={options} />);\n}\n","import { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\nimport { validateValue } from '../utils/schema-validator';\n\ninterface SetOptions {\n json?: boolean;\n environment?: string;\n tier?: string;\n schemaName?: string;\n}\n\nfunction parseValue(raw: string): unknown {\n // Try JSON parse first for objects, arrays, booleans, numbers\n try {\n return JSON.parse(raw);\n } catch {\n return raw; // Keep as string\n }\n}\n\nexport async function setLogic(\n key: string,\n rawValue: string,\n options: SetOptions,\n): Promise<{ success: boolean; key: string; value: unknown; tier: string; environment: string }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n const environment = options.environment ?? 'development';\n const tier = options.tier ?? 'public';\n const value = parseValue(rawValue);\n\n // Find the environment\n const env = await client.getEnvironmentByName(environment);\n if (!env) {\n throw new Error(`Environment \"${environment}\" not found. Create it first.`);\n }\n\n // Find the schema (optional validation)\n const schemas = await client.listSchemas();\n if (schemas.length > 0) {\n const schema = options.schemaName ? schemas.find((s) => s.name === options.schemaName) : schemas[0];\n\n if (schema?.jsonSchema) {\n const validation = validateValue(schema.jsonSchema, key, value);\n if (!validation.valid) {\n throw new Error(`Validation failed for \"${key}\": ${validation.errors?.join(', ')}`);\n }\n }\n\n if (schema) {\n await client.setValue({\n schemaId: schema.id,\n environmentId: env.id,\n key,\n value,\n tier,\n });\n\n return { success: true, key, value, tier, environment };\n }\n }\n\n throw new Error('No schemas found. Push a schema first with `smooai-config push`.');\n}\n\nfunction SetUI({ configKey, value, options }: { configKey: string; value: string; options: SetOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: 'Validating value', status: 'pending' },\n { label: `Setting ${configKey}`, status: 'pending' },\n ]);\n const [result, setResult] = useState<{ key: string; value: unknown; tier: string; environment: string } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n const res = await setLogic(configKey, value, options);\n\n setTasks([\n { label: 'Validating value', status: 'done' },\n { label: `Setting ${configKey}`, status: 'done' },\n ]);\n setResult(res);\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Set Config Value\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"green\" bold>\n Value set successfully!\n </Text>\n <Text>\n {result.key} = {JSON.stringify(result.value)} [{result.tier}] ({result.environment})\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runSet(key: string, value: string, options: SetOptions): void {\n if (!isInteractive(options.json)) {\n setLogic(key, value, options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<SetUI configKey={key} value={value} options={options} />);\n}\n","import { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\n\ninterface GetOptions {\n json?: boolean;\n environment?: string;\n}\n\nexport async function getLogic(key: string, options: GetOptions): Promise<{ success: boolean; key: string; value: unknown; environment: string }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n const environment = options.environment ?? 'development';\n const value = await client.getValue(key, environment);\n\n return { success: true, key, value, environment };\n}\n\nfunction GetUI({ configKey, options }: { configKey: string; options: GetOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([{ label: `Fetching ${configKey}`, status: 'pending' }]);\n const [result, setResult] = useState<{ key: string; value: unknown; environment: string } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks([{ label: `Fetching ${configKey}`, status: 'running' }]);\n\n try {\n const res = await getLogic(configKey, options);\n\n setTasks([{ label: `Fetching ${configKey}`, status: 'done' }]);\n setResult(res);\n } catch (err) {\n setTasks([\n {\n label: `Fetching ${configKey}`,\n status: 'error',\n error: err instanceof Error ? err.message : String(err),\n },\n ]);\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Get Config Value\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>{result.key}</Text>\n <Text>{typeof result.value === 'object' ? JSON.stringify(result.value, null, 2) : String(result.value)}</Text>\n <Text color=\"gray\">Environment: {result.environment}</Text>\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runGet(key: string, options: GetOptions): void {\n if (!isInteractive(options.json)) {\n getLogic(key, options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<GetUI configKey={key} options={options} />);\n}\n","import { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\n\ninterface ListOptions {\n json?: boolean;\n environment?: string;\n}\n\nexport async function listLogic(options: ListOptions): Promise<{ success: boolean; environment: string; values: Record<string, unknown> }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n const environment = options.environment ?? 'development';\n const values = await client.getAllValues(environment);\n\n return { success: true, environment, values };\n}\n\nfunction ListUI({ options }: { options: ListOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([{ label: `Fetching values for ${options.environment ?? 'development'}`, status: 'pending' }]);\n const [result, setResult] = useState<{\n environment: string;\n values: Record<string, unknown>;\n } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks([{ label: `Fetching values for ${options.environment ?? 'development'}`, status: 'running' }]);\n\n try {\n const res = await listLogic(options);\n\n setTasks([{ label: `Fetching values for ${res.environment}`, status: 'done' }]);\n setResult(res);\n } catch (err) {\n setTasks([\n {\n label: `Fetching values for ${options.environment ?? 'development'}`,\n status: 'error',\n error: err instanceof Error ? err.message : String(err),\n },\n ]);\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"List Config Values\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text bold>\n Environment: {result.environment} ({Object.keys(result.values).length} values)\n </Text>\n <Box marginTop={1} flexDirection=\"column\">\n {Object.entries(result.values).map(([key, value]) => (\n <Box key={key}>\n <Text bold color=\"cyan\">\n {key}\n </Text>\n <Text> = </Text>\n <Text>{typeof value === 'object' ? JSON.stringify(value) : String(value)}</Text>\n </Box>\n ))}\n </Box>\n {Object.keys(result.values).length === 0 && <Text color=\"gray\">No values found for this environment.</Text>}\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runList(options: ListOptions): void {\n if (!isInteractive(options.json)) {\n listLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<ListUI options={options} />);\n}\n","import { render, Box, Text } from 'ink';\nimport React, { useEffect, useState } from 'react';\nimport { Banner } from '../components/Banner';\nimport { TaskList, type TaskItem } from '../components/TaskList';\nimport { CliApiClient } from '../utils/api-client';\nimport { getCredentialsOrExit } from '../utils/credentials';\nimport { isInteractive, jsonOutput } from '../utils/output';\nimport { loadLocalSchema } from '../utils/schema-loader';\n\ninterface DiffOptions {\n json?: boolean;\n schemaName?: string;\n}\n\ninterface SchemaDiff {\n added: string[];\n removed: string[];\n changed: string[];\n}\n\nfunction computeDiff(local: Record<string, unknown>, remote: Record<string, unknown>): SchemaDiff {\n const localKeys = new Set(Object.keys(local));\n const remoteKeys = new Set(Object.keys(remote));\n\n const added = [...localKeys].filter((k) => !remoteKeys.has(k));\n const removed = [...remoteKeys].filter((k) => !localKeys.has(k));\n const changed = [...localKeys].filter((k) => {\n if (!remoteKeys.has(k)) return false;\n return JSON.stringify(local[k]) !== JSON.stringify(remote[k]);\n });\n\n return { added, removed, changed };\n}\n\nexport async function diffLogic(options: DiffOptions): Promise<{ success: boolean; diff: SchemaDiff; hasChanges: boolean }> {\n const creds = getCredentialsOrExit();\n const client = new CliApiClient(creds);\n\n // Load local schema\n const loaded = await loadLocalSchema();\n if (!loaded) {\n throw new Error('No local schema found. Run `smooai-config init` first.');\n }\n\n // Fetch remote schema\n const schemas = await client.listSchemas();\n const schemaName = options.schemaName;\n const remoteSchema = schemaName ? schemas.find((s) => s.name === schemaName) : schemas[0];\n\n if (!remoteSchema) {\n // No remote schema — everything is \"added\"\n const added = Object.keys(loaded.jsonSchema);\n return {\n success: true,\n diff: { added, removed: [], changed: [] },\n hasChanges: added.length > 0,\n };\n }\n\n const diff = computeDiff(loaded.jsonSchema, remoteSchema.jsonSchema);\n const hasChanges = diff.added.length > 0 || diff.removed.length > 0 || diff.changed.length > 0;\n\n return { success: true, diff, hasChanges };\n}\n\nfunction DiffUI({ options }: { options: DiffOptions }) {\n const [tasks, setTasks] = useState<TaskItem[]>([\n { label: 'Loading local schema', status: 'pending' },\n { label: 'Fetching remote schema', status: 'pending' },\n { label: 'Computing diff', status: 'pending' },\n ]);\n const [result, setResult] = useState<{ diff: SchemaDiff; hasChanges: boolean } | null>(null);\n\n useEffect(() => {\n (async () => {\n setTasks((t) => t.map((task, i) => (i === 0 ? { ...task, status: 'running' } : task)));\n\n try {\n const res = await diffLogic(options);\n\n setTasks([\n { label: 'Loading local schema', status: 'done' },\n { label: 'Fetching remote schema', status: 'done' },\n { label: 'Computing diff', status: 'done' },\n ]);\n setResult(res);\n } catch (err) {\n setTasks((t) =>\n t.map((task) => (task.status === 'running' ? { ...task, status: 'error', error: err instanceof Error ? err.message : String(err) } : task)),\n );\n }\n })();\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Banner title=\"Schema Diff\" />\n <TaskList tasks={tasks} />\n {result && (\n <Box marginTop={1} flexDirection=\"column\">\n {!result.hasChanges ? (\n <Text color=\"green\" bold>\n Schemas are in sync. No changes detected.\n </Text>\n ) : (\n <>\n <Text bold>Changes:</Text>\n {result.diff.added.map((k) => (\n <Text key={k} color=\"green\">\n + {k} (new)\n </Text>\n ))}\n {result.diff.removed.map((k) => (\n <Text key={k} color=\"red\">\n - {k} (removed)\n </Text>\n ))}\n {result.diff.changed.map((k) => (\n <Text key={k} color=\"yellow\">\n ~ {k} (modified)\n </Text>\n ))}\n </>\n )}\n </Box>\n )}\n </Box>\n );\n}\n\nexport function runDiff(options: DiffOptions): void {\n if (!isInteractive(options.json)) {\n diffLogic(options).then(\n (result) => jsonOutput(result),\n (err) => jsonOutput({ success: false, error: err.message }, 1),\n );\n return;\n }\n render(<DiffUI options={options} />);\n}\n","import { Command } from 'commander';\n\nconst program = new Command();\n\nprogram.name('smooai-config').description('Smoo AI Configuration Management CLI').version('1.1.0');\n\n// Global --json flag\nprogram.option('--json', 'Output in JSON format (auto-enabled when no TTY detected)');\n\nprogram\n .command('init')\n .description('Initialize a project with .smooai-config/ directory')\n .option('--language <lang>', 'Project language: typescript, python, go, rust, other', 'typescript')\n .action(async (opts) => {\n const { runInit } = await import('./commands/init');\n runInit({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('login')\n .description('Store credentials for CLI access')\n .option('--api-key <key>', 'API key for authentication')\n .option('--org-id <id>', 'Organization ID')\n .option('--base-url <url>', 'API base URL', 'https://api.smoo.ai')\n .action(async (opts) => {\n const { runLogin } = await import('./commands/login');\n runLogin({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('push')\n .description('Push local config schema to the remote platform')\n .option('--schema-name <name>', 'Schema name (default: project directory name)')\n .option('--description <desc>', 'Change description for this version')\n .option('--yes', 'Skip confirmation prompt')\n .action(async (opts) => {\n const { runPush } = await import('./commands/push');\n runPush({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('pull')\n .description('Pull remote config values to local files')\n .option('--environment <env>', 'Environment name', 'development')\n .action(async (opts) => {\n const { runPull } = await import('./commands/pull');\n runPull({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('set <key> <value>')\n .description('Set a config value on the remote platform')\n .option('--environment <env>', 'Environment name', 'development')\n .option('--tier <tier>', 'Value tier: public, secret, feature_flag', 'public')\n .option('--schema-name <name>', 'Schema name to use for validation')\n .action(async (key: string, value: string, opts) => {\n const { runSet } = await import('./commands/set');\n runSet(key, value, { ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('get <key>')\n .description('Get a config value from the remote platform')\n .option('--environment <env>', 'Environment name', 'development')\n .action(async (key: string, opts) => {\n const { runGet } = await import('./commands/get');\n runGet(key, { ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('list')\n .description('List all config values for an environment')\n .option('--environment <env>', 'Environment name', 'development')\n .action(async (opts) => {\n const { runList } = await import('./commands/list');\n runList({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram\n .command('diff')\n .description('Compare local config schema vs remote')\n .option('--schema-name <name>', 'Schema name to compare against')\n .action(async (opts) => {\n const { runDiff } = await import('./commands/diff');\n runDiff({ ...opts, json: program.opts().json ?? opts.json });\n });\n\nprogram.parse();\n"],"mappings":"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","names":["Box","Text","jsx","jsxs","Box","Text","jsx","jsxs","existsSync","mkdirSync","readFileSync","writeFileSync","join","render","Box","Text","useEffect","useState","jsx","jsxs","existsSync","readFileSync","join","render","Box","Text","useEffect","useState","jsx","jsxs","writeFileSync","join","render","Box","Text","useEffect","useState","jsx","jsxs","render","Box","Text","useEffect","useState","jsx","jsxs","render","Box","Text","useEffect","useState","jsx","jsxs","render","Box","Text","useEffect","useState","jsx","jsxs","render","Box","Text","useEffect","useState","jsx","jsxs","runInit","runLogin","runPush","runPull","runSet","runGet","runList","runDiff"]}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * FeatureFlagKey
3
+ *
4
+ * Extendable enum representing feature flag keys.
5
+ *
6
+ * This class is used to define the feature flag keys that are available to the application.
7
+ *
8
+ * Feature flags are used to control the availability of features in the application,
9
+ * allowing for gradual rollouts, A/B testing, and feature toggling.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const MyFeatureFlagKey = extendFeatureFlagKey({
14
+ * ENABLE_NEW_UI: 'ENABLE_NEW_UI',
15
+ * BETA_FEATURES: 'BETA_FEATURES',
16
+ * } as const);
17
+ *
18
+ * export type MyFeatureFlagKey = InferFeatureFlagKeyType<typeof MyFeatureFlagKey>;
19
+ * ```
20
+ */
21
+ declare const FeatureFlagKey: {};
22
+ type FeatureFlagKey = (typeof FeatureFlagKey)[keyof typeof FeatureFlagKey];
23
+
24
+ export { FeatureFlagKey };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * FeatureFlagKey
3
+ *
4
+ * Extendable enum representing feature flag keys.
5
+ *
6
+ * This class is used to define the feature flag keys that are available to the application.
7
+ *
8
+ * Feature flags are used to control the availability of features in the application,
9
+ * allowing for gradual rollouts, A/B testing, and feature toggling.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const MyFeatureFlagKey = extendFeatureFlagKey({
14
+ * ENABLE_NEW_UI: 'ENABLE_NEW_UI',
15
+ * BETA_FEATURES: 'BETA_FEATURES',
16
+ * } as const);
17
+ *
18
+ * export type MyFeatureFlagKey = InferFeatureFlagKeyType<typeof MyFeatureFlagKey>;
19
+ * ```
20
+ */
21
+ declare const FeatureFlagKey: {};
22
+ type FeatureFlagKey = (typeof FeatureFlagKey)[keyof typeof FeatureFlagKey];
23
+
24
+ export { FeatureFlagKey };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/config/FeatureFlagKey.ts
21
+ var FeatureFlagKey_exports = {};
22
+ __export(FeatureFlagKey_exports, {
23
+ FeatureFlagKey: () => FeatureFlagKey
24
+ });
25
+ module.exports = __toCommonJS(FeatureFlagKey_exports);
26
+ var FeatureFlagKey = {};
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ FeatureFlagKey
30
+ });
31
+ //# sourceMappingURL=FeatureFlagKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/FeatureFlagKey.ts"],"sourcesContent":["/**\n * FeatureFlagKey\n *\n * Extendable enum representing feature flag keys.\n *\n * This class is used to define the feature flag keys that are available to the application.\n *\n * Feature flags are used to control the availability of features in the application,\n * allowing for gradual rollouts, A/B testing, and feature toggling.\n *\n * @example\n * ```typescript\n * const MyFeatureFlagKey = extendFeatureFlagKey({\n * ENABLE_NEW_UI: 'ENABLE_NEW_UI',\n * BETA_FEATURES: 'BETA_FEATURES',\n * } as const);\n *\n * export type MyFeatureFlagKey = InferFeatureFlagKeyType<typeof MyFeatureFlagKey>;\n * ```\n */\nexport const FeatureFlagKey = {} as const;\n\nexport type FeatureFlagKey = (typeof FeatureFlagKey)[keyof typeof FeatureFlagKey];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBO,IAAM,iBAAiB,CAAC;","names":[]}
@@ -0,0 +1,8 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/config/FeatureFlagKey.ts
4
+ var FeatureFlagKey = {};
5
+ export {
6
+ FeatureFlagKey
7
+ };
8
+ //# sourceMappingURL=FeatureFlagKey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/FeatureFlagKey.ts"],"sourcesContent":["/**\n * FeatureFlagKey\n *\n * Extendable enum representing feature flag keys.\n *\n * This class is used to define the feature flag keys that are available to the application.\n *\n * Feature flags are used to control the availability of features in the application,\n * allowing for gradual rollouts, A/B testing, and feature toggling.\n *\n * @example\n * ```typescript\n * const MyFeatureFlagKey = extendFeatureFlagKey({\n * ENABLE_NEW_UI: 'ENABLE_NEW_UI',\n * BETA_FEATURES: 'BETA_FEATURES',\n * } as const);\n *\n * export type MyFeatureFlagKey = InferFeatureFlagKeyType<typeof MyFeatureFlagKey>;\n * ```\n */\nexport const FeatureFlagKey = {} as const;\n\nexport type FeatureFlagKey = (typeof FeatureFlagKey)[keyof typeof FeatureFlagKey];\n"],"mappings":";;;AAoBO,IAAM,iBAAiB,CAAC;","names":[]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Extendable enum representing public config keys.
3
+ *
4
+ * This class is used to define the public config keys that are available to the application.
5
+ *
6
+ * An example of public confg keys is configurable values that you don't mind being exposed to the user, like a public API key for accessing a headless CMS.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * export class MyPublicConfigKey extends PublicConfigKey {
11
+ * static readonly MY_PUBLIC_API_KEY = 'MY_PUBLIC_API_KEY';
12
+ * }
13
+ */
14
+ declare const PublicConfigKey: {
15
+ readonly ENV: "ENV";
16
+ readonly IS_LOCAL: "IS_LOCAL";
17
+ readonly REGION: "REGION";
18
+ readonly CLOUD_PROVIDER: "CLOUD_PROVIDER";
19
+ };
20
+ type PublicConfigKey = (typeof PublicConfigKey)[keyof typeof PublicConfigKey];
21
+
22
+ export { PublicConfigKey };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Extendable enum representing public config keys.
3
+ *
4
+ * This class is used to define the public config keys that are available to the application.
5
+ *
6
+ * An example of public confg keys is configurable values that you don't mind being exposed to the user, like a public API key for accessing a headless CMS.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * export class MyPublicConfigKey extends PublicConfigKey {
11
+ * static readonly MY_PUBLIC_API_KEY = 'MY_PUBLIC_API_KEY';
12
+ * }
13
+ */
14
+ declare const PublicConfigKey: {
15
+ readonly ENV: "ENV";
16
+ readonly IS_LOCAL: "IS_LOCAL";
17
+ readonly REGION: "REGION";
18
+ readonly CLOUD_PROVIDER: "CLOUD_PROVIDER";
19
+ };
20
+ type PublicConfigKey = (typeof PublicConfigKey)[keyof typeof PublicConfigKey];
21
+
22
+ export { PublicConfigKey };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/config/PublicConfigKey.ts
21
+ var PublicConfigKey_exports = {};
22
+ __export(PublicConfigKey_exports, {
23
+ PublicConfigKey: () => PublicConfigKey
24
+ });
25
+ module.exports = __toCommonJS(PublicConfigKey_exports);
26
+ var PublicConfigKey = {
27
+ ENV: "ENV",
28
+ IS_LOCAL: "IS_LOCAL",
29
+ REGION: "REGION",
30
+ CLOUD_PROVIDER: "CLOUD_PROVIDER"
31
+ };
32
+ // Annotate the CommonJS export names for ESM import in node:
33
+ 0 && (module.exports = {
34
+ PublicConfigKey
35
+ });
36
+ //# sourceMappingURL=PublicConfigKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/PublicConfigKey.ts"],"sourcesContent":["/**\n * Extendable enum representing public config keys.\n *\n * This class is used to define the public config keys that are available to the application.\n *\n * An example of public confg keys is configurable values that you don't mind being exposed to the user, like a public API key for accessing a headless CMS.\n *\n * @example\n * ```typescript\n * export class MyPublicConfigKey extends PublicConfigKey {\n * static readonly MY_PUBLIC_API_KEY = 'MY_PUBLIC_API_KEY';\n * }\n */\nexport const PublicConfigKey = {\n ENV: 'ENV',\n IS_LOCAL: 'IS_LOCAL',\n REGION: 'REGION',\n CLOUD_PROVIDER: 'CLOUD_PROVIDER',\n} as const;\n\nexport type PublicConfigKey = (typeof PublicConfigKey)[keyof typeof PublicConfigKey];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaO,IAAM,kBAAkB;AAAA,EAC3B,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,gBAAgB;AACpB;","names":[]}
@@ -0,0 +1,8 @@
1
+ import {
2
+ PublicConfigKey
3
+ } from "../chunk-CASNDTCH.mjs";
4
+ import "../chunk-J5LGTIGS.mjs";
5
+ export {
6
+ PublicConfigKey
7
+ };
8
+ //# sourceMappingURL=PublicConfigKey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SecretConfigKey
3
+ *
4
+ * Extendable enum representing secret config keys.
5
+ *
6
+ * This class is used to define the secret config keys that are available to the application.
7
+ *
8
+ * An example of secret confg keys is configurable values that you do not want to expose to users, like a private API key for accessing customer data.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const MySecretConfigKey = extendSecretConfigKey({
13
+ * MY_SECRET_API_KEY: 'MY_SECRET_API_KEY',
14
+ * } as const);
15
+ *
16
+ * export type MySecretConfigKey = InferSecretConfigKeyType<typeof MySecretConfigKey>;
17
+ * ```
18
+ */
19
+ declare const SecretConfigKey: {};
20
+ type SecretConfigKey = (typeof SecretConfigKey)[keyof typeof SecretConfigKey];
21
+
22
+ export { SecretConfigKey };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SecretConfigKey
3
+ *
4
+ * Extendable enum representing secret config keys.
5
+ *
6
+ * This class is used to define the secret config keys that are available to the application.
7
+ *
8
+ * An example of secret confg keys is configurable values that you do not want to expose to users, like a private API key for accessing customer data.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const MySecretConfigKey = extendSecretConfigKey({
13
+ * MY_SECRET_API_KEY: 'MY_SECRET_API_KEY',
14
+ * } as const);
15
+ *
16
+ * export type MySecretConfigKey = InferSecretConfigKeyType<typeof MySecretConfigKey>;
17
+ * ```
18
+ */
19
+ declare const SecretConfigKey: {};
20
+ type SecretConfigKey = (typeof SecretConfigKey)[keyof typeof SecretConfigKey];
21
+
22
+ export { SecretConfigKey };
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/config/SecretConfigKey.ts
21
+ var SecretConfigKey_exports = {};
22
+ __export(SecretConfigKey_exports, {
23
+ SecretConfigKey: () => SecretConfigKey
24
+ });
25
+ module.exports = __toCommonJS(SecretConfigKey_exports);
26
+ var SecretConfigKey = {};
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ SecretConfigKey
30
+ });
31
+ //# sourceMappingURL=SecretConfigKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/SecretConfigKey.ts"],"sourcesContent":["/**\n * SecretConfigKey\n *\n * Extendable enum representing secret config keys.\n *\n * This class is used to define the secret config keys that are available to the application.\n *\n * An example of secret confg keys is configurable values that you do not want to expose to users, like a private API key for accessing customer data.\n *\n * @example\n * ```typescript\n * const MySecretConfigKey = extendSecretConfigKey({\n * MY_SECRET_API_KEY: 'MY_SECRET_API_KEY',\n * } as const);\n *\n * export type MySecretConfigKey = InferSecretConfigKeyType<typeof MySecretConfigKey>;\n * ```\n */\nexport const SecretConfigKey = {} as const;\n\nexport type SecretConfigKey = (typeof SecretConfigKey)[keyof typeof SecretConfigKey];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,IAAM,kBAAkB,CAAC;","names":[]}
@@ -0,0 +1,8 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/config/SecretConfigKey.ts
4
+ var SecretConfigKey = {};
5
+ export {
6
+ SecretConfigKey
7
+ };
8
+ //# sourceMappingURL=SecretConfigKey.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/SecretConfigKey.ts"],"sourcesContent":["/**\n * SecretConfigKey\n *\n * Extendable enum representing secret config keys.\n *\n * This class is used to define the secret config keys that are available to the application.\n *\n * An example of secret confg keys is configurable values that you do not want to expose to users, like a private API key for accessing customer data.\n *\n * @example\n * ```typescript\n * const MySecretConfigKey = extendSecretConfigKey({\n * MY_SECRET_API_KEY: 'MY_SECRET_API_KEY',\n * } as const);\n *\n * export type MySecretConfigKey = InferSecretConfigKeyType<typeof MySecretConfigKey>;\n * ```\n */\nexport const SecretConfigKey = {} as const;\n\nexport type SecretConfigKey = (typeof SecretConfigKey)[keyof typeof SecretConfigKey];\n"],"mappings":";;;AAkBO,IAAM,kBAAkB,CAAC;","names":[]}