genieceo 0.1.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 (87) hide show
  1. package/DEVELOPMENT.md +240 -0
  2. package/LICENSE +21 -0
  3. package/README.md +443 -0
  4. package/config.example.json +28 -0
  5. package/dist/agent/context.d.ts +38 -0
  6. package/dist/agent/context.d.ts.map +1 -0
  7. package/dist/agent/context.js +131 -0
  8. package/dist/agent/context.js.map +1 -0
  9. package/dist/agent/index.d.ts +10 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +54 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/agent/loop.d.ts +40 -0
  14. package/dist/agent/loop.d.ts.map +1 -0
  15. package/dist/agent/loop.js +104 -0
  16. package/dist/agent/loop.js.map +1 -0
  17. package/dist/agent/subagent.d.ts +35 -0
  18. package/dist/agent/subagent.d.ts.map +1 -0
  19. package/dist/agent/subagent.js +96 -0
  20. package/dist/agent/subagent.js.map +1 -0
  21. package/dist/cli/commands/chat.d.ts +8 -0
  22. package/dist/cli/commands/chat.d.ts.map +1 -0
  23. package/dist/cli/commands/chat.js +161 -0
  24. package/dist/cli/commands/chat.js.map +1 -0
  25. package/dist/cli/commands/init.d.ts +6 -0
  26. package/dist/cli/commands/init.d.ts.map +1 -0
  27. package/dist/cli/commands/init.js +56 -0
  28. package/dist/cli/commands/init.js.map +1 -0
  29. package/dist/cli/commands/onboard.d.ts +6 -0
  30. package/dist/cli/commands/onboard.d.ts.map +1 -0
  31. package/dist/cli/commands/onboard.js +277 -0
  32. package/dist/cli/commands/onboard.js.map +1 -0
  33. package/dist/cli/commands/status.d.ts +6 -0
  34. package/dist/cli/commands/status.d.ts.map +1 -0
  35. package/dist/cli/commands/status.js +107 -0
  36. package/dist/cli/commands/status.js.map +1 -0
  37. package/dist/cli/index.d.ts +3 -0
  38. package/dist/cli/index.d.ts.map +1 -0
  39. package/dist/cli/index.js +49 -0
  40. package/dist/cli/index.js.map +1 -0
  41. package/dist/config/manager.d.ts +43 -0
  42. package/dist/config/manager.d.ts.map +1 -0
  43. package/dist/config/manager.js +147 -0
  44. package/dist/config/manager.js.map +1 -0
  45. package/dist/config/schema.d.ts +179 -0
  46. package/dist/config/schema.d.ts.map +1 -0
  47. package/dist/config/schema.js +74 -0
  48. package/dist/config/schema.js.map +1 -0
  49. package/dist/providers/llm.d.ts +46 -0
  50. package/dist/providers/llm.d.ts.map +1 -0
  51. package/dist/providers/llm.js +175 -0
  52. package/dist/providers/llm.js.map +1 -0
  53. package/dist/skills/loader.d.ts +49 -0
  54. package/dist/skills/loader.d.ts.map +1 -0
  55. package/dist/skills/loader.js +218 -0
  56. package/dist/skills/loader.js.map +1 -0
  57. package/dist/tools/base.d.ts +42 -0
  58. package/dist/tools/base.d.ts.map +1 -0
  59. package/dist/tools/base.js +90 -0
  60. package/dist/tools/base.js.map +1 -0
  61. package/dist/tools/filesystem.d.ts +17 -0
  62. package/dist/tools/filesystem.d.ts.map +1 -0
  63. package/dist/tools/filesystem.js +117 -0
  64. package/dist/tools/filesystem.js.map +1 -0
  65. package/dist/tools/shell.d.ts +8 -0
  66. package/dist/tools/shell.d.ts.map +1 -0
  67. package/dist/tools/shell.js +79 -0
  68. package/dist/tools/shell.js.map +1 -0
  69. package/dist/tools/spawn.d.ts +8 -0
  70. package/dist/tools/spawn.d.ts.map +1 -0
  71. package/dist/tools/spawn.js +23 -0
  72. package/dist/tools/spawn.js.map +1 -0
  73. package/dist/tools/web.d.ts +8 -0
  74. package/dist/tools/web.d.ts.map +1 -0
  75. package/dist/tools/web.js +194 -0
  76. package/dist/tools/web.js.map +1 -0
  77. package/dist/types/index.d.ts +51 -0
  78. package/dist/types/index.d.ts.map +1 -0
  79. package/dist/types/index.js +6 -0
  80. package/dist/types/index.js.map +1 -0
  81. package/dist/workspace/manager.d.ts +38 -0
  82. package/dist/workspace/manager.d.ts.map +1 -0
  83. package/dist/workspace/manager.js +140 -0
  84. package/dist/workspace/manager.js.map +1 -0
  85. package/docs/ONBOARDING.md +229 -0
  86. package/docs/WEB_SEARCH.md +365 -0
  87. package/package.json +38 -0
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.statusCommand = statusCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const manager_1 = require("../../config/manager");
9
+ const manager_2 = require("../../workspace/manager");
10
+ const fs_1 = require("fs");
11
+ /**
12
+ * Status command
13
+ * Shows configuration and workspace status
14
+ */
15
+ async function statusCommand() {
16
+ console.log(chalk_1.default.blue.bold('\n📊 genieceo Status\n'));
17
+ try {
18
+ // Config status
19
+ const configManager = (0, manager_1.getConfigManager)();
20
+ const configPath = configManager.getConfigPath();
21
+ const configExists = (0, fs_1.existsSync)(configPath);
22
+ console.log(chalk_1.default.bold('Configuration:'));
23
+ console.log(` Location: ${configPath}`);
24
+ console.log(` Status: ${configExists ? chalk_1.default.green('✓ Exists') : chalk_1.default.red('✗ Not found')}`);
25
+ if (configExists) {
26
+ const config = await configManager.load();
27
+ console.log(` Model: ${config.model}`);
28
+ console.log(` Max Iterations: ${config.maxIterations}`);
29
+ // API key status (masked)
30
+ const openaiKey = config.llm.openai.apiKey;
31
+ const hasOpenAI = openaiKey && openaiKey.length > 0;
32
+ console.log(` OpenAI API Key: ${hasOpenAI ? chalk_1.default.green('✓ Set') : chalk_1.default.red('✗ Not set')}`);
33
+ if (hasOpenAI) {
34
+ const masked = openaiKey.substring(0, 8) + '...' + openaiKey.substring(openaiKey.length - 4);
35
+ console.log(chalk_1.default.gray(` (${masked})`));
36
+ }
37
+ // Web Search Configuration
38
+ const searchProvider = config.tools.webSearch.provider || 'auto';
39
+ console.log(`\n Web Search Provider: ${chalk_1.default.cyan(searchProvider)}`);
40
+ // Check legacy config
41
+ const legacyKey = config.tools.webSearch.apiKey;
42
+ if (legacyKey) {
43
+ console.log(chalk_1.default.yellow(' ⚠️ Legacy config detected (tools.webSearch.apiKey)'));
44
+ console.log(chalk_1.default.yellow(' Consider migrating to tools.webSearch.brave.apiKey or tools.webSearch.tavily.apiKey'));
45
+ }
46
+ // Brave Search API key
47
+ const braveKey = config.tools.webSearch.brave?.apiKey || config.tools.webSearch.apiKey;
48
+ const hasBrave = braveKey && braveKey.length > 0;
49
+ console.log(` Brave: ${hasBrave ? chalk_1.default.green('✓ Configured') : chalk_1.default.gray('○ Not configured')}`);
50
+ if (hasBrave) {
51
+ const masked = braveKey.substring(0, 8) + '...' + braveKey.substring(braveKey.length - 4);
52
+ console.log(chalk_1.default.gray(` (${masked})`));
53
+ }
54
+ // Tavily API key
55
+ const tavilyKey = config.tools.webSearch.tavily?.apiKey;
56
+ const hasTavily = tavilyKey && tavilyKey.length > 0;
57
+ console.log(` Tavily: ${hasTavily ? chalk_1.default.green('✓ Configured') : chalk_1.default.gray('○ Not configured')}`);
58
+ if (hasTavily) {
59
+ const masked = tavilyKey.substring(0, 8) + '...' + tavilyKey.substring(tavilyKey.length - 4);
60
+ console.log(chalk_1.default.gray(` (${masked})`));
61
+ }
62
+ // Browser fallback
63
+ console.log(` Browser (fallback): ${chalk_1.default.green('✓ Always available')}`);
64
+ if (!hasBrave && !hasTavily) {
65
+ console.log(chalk_1.default.yellow(' ℹ️ No API-based search configured. Will use browser fallback.'));
66
+ console.log(chalk_1.default.yellow(' For better results, configure Tavily or Brave API.'));
67
+ }
68
+ // Validation
69
+ const validation = await configManager.validate();
70
+ if (!validation.valid) {
71
+ console.log(chalk_1.default.yellow('\n Warnings:'));
72
+ validation.errors?.forEach(error => {
73
+ console.log(chalk_1.default.yellow(` • ${error}`));
74
+ });
75
+ }
76
+ }
77
+ // Workspace status
78
+ console.log(chalk_1.default.bold('\nWorkspace:'));
79
+ if (configExists) {
80
+ const config = await configManager.load();
81
+ const workspaceManager = (0, manager_2.getWorkspaceManager)(config.workspace);
82
+ const workspacePath = workspaceManager.getWorkspacePath();
83
+ const isInitialized = await workspaceManager.isInitialized();
84
+ console.log(` Location: ${workspacePath}`);
85
+ console.log(` Status: ${isInitialized ? chalk_1.default.green('✓ Initialized') : chalk_1.default.yellow('○ Not initialized')}`);
86
+ if (isInitialized) {
87
+ console.log(` Skills: ${workspaceManager.getSkillsPath()}`);
88
+ console.log(` Files: ${workspaceManager.getFilesPath()}`);
89
+ }
90
+ }
91
+ else {
92
+ console.log(chalk_1.default.yellow(' Run "genieceo init" to initialize'));
93
+ }
94
+ console.log(chalk_1.default.bold('\nTools:'));
95
+ console.log(' • readFile, writeFile, listDir');
96
+ console.log(' • executeCommand (shell)');
97
+ console.log(' • webSearch (multi-provider: Brave, Tavily, Browser)');
98
+ console.log(' • spawnSubagent');
99
+ console.log('');
100
+ }
101
+ catch (error) {
102
+ console.error(chalk_1.default.red('✗ Failed to get status:'));
103
+ console.error(chalk_1.default.red(error instanceof Error ? error.message : String(error)));
104
+ process.exit(1);
105
+ }
106
+ }
107
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const commander_1 = require("commander");
5
+ const init_1 = require("./commands/init");
6
+ const chat_1 = require("./commands/chat");
7
+ const status_1 = require("./commands/status");
8
+ const onboard_1 = require("./commands/onboard");
9
+ const program = new commander_1.Command();
10
+ program
11
+ .name('genieceo')
12
+ .description('Ultra-lightweight AI agent CLI assistant')
13
+ .version('0.1.0');
14
+ // Init command
15
+ program
16
+ .command('init')
17
+ .description('Initialize workspace and configuration')
18
+ .action(async () => {
19
+ await (0, init_1.initCommand)();
20
+ });
21
+ // Onboard command
22
+ program
23
+ .command('onboard')
24
+ .description('Interactive setup wizard for LLM and web search configuration')
25
+ .action(async () => {
26
+ await (0, onboard_1.onboardCommand)();
27
+ });
28
+ // Chat command
29
+ program
30
+ .command('chat')
31
+ .description('Start interactive chat or send a single message')
32
+ .option('-m, --message <text>', 'Send a single message instead of interactive mode')
33
+ .action(async (options) => {
34
+ await (0, chat_1.chatCommand)(options);
35
+ });
36
+ // Status command
37
+ program
38
+ .command('status')
39
+ .description('Show configuration and workspace status')
40
+ .action(async () => {
41
+ await (0, status_1.statusCommand)();
42
+ });
43
+ // Parse arguments
44
+ program.parse(process.argv);
45
+ // Show help if no command provided
46
+ if (!process.argv.slice(2).length) {
47
+ program.outputHelp();
48
+ }
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,0CAA8C;AAC9C,0CAA8C;AAC9C,8CAAkD;AAClD,gDAAoD;AAEpD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,0CAA0C,CAAC;KACvD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,kBAAW,GAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,+DAA+D,CAAC;KAC5E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,wBAAc,GAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,sBAAsB,EAAE,mDAAmD,CAAC;KACnF,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,IAAA,sBAAa,GAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEL,kBAAkB;AAClB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,mCAAmC;AACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { ConfigType } from './schema';
2
+ /**
3
+ * Configuration Manager
4
+ * Handles loading, saving, and validation of configuration
5
+ */
6
+ export declare class ConfigManager {
7
+ private configPath;
8
+ private config;
9
+ constructor(configPath?: string);
10
+ /**
11
+ * Get the configuration path
12
+ */
13
+ getConfigPath(): string;
14
+ /**
15
+ * Load configuration from file
16
+ */
17
+ load(): Promise<ConfigType>;
18
+ /**
19
+ * Migrate legacy config format to new multi-provider format
20
+ */
21
+ private migrateLegacyConfig;
22
+ /**
23
+ * Create default configuration file
24
+ */
25
+ createDefault(): Promise<ConfigType>;
26
+ /**
27
+ * Save configuration to file
28
+ */
29
+ save(config: ConfigType): Promise<void>;
30
+ /**
31
+ * Update specific config values
32
+ */
33
+ update(updates: Partial<ConfigType>): Promise<ConfigType>;
34
+ /**
35
+ * Validate configuration
36
+ */
37
+ validate(): Promise<{
38
+ valid: boolean;
39
+ errors?: string[];
40
+ }>;
41
+ }
42
+ export declare function getConfigManager(configPath?: string): ConfigManager;
43
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,UAAU,EAAuB,MAAM,UAAU,CAAC;AAEzE;;;GAGG;AAEH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAA2B;gBAE7B,UAAU,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAyBjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAiB1C;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAO/D;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA2BjE;AAKD,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAKnE"}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigManager = void 0;
4
+ exports.getConfigManager = getConfigManager;
5
+ const promises_1 = require("fs/promises");
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const os_1 = require("os");
9
+ const schema_1 = require("./schema");
10
+ /**
11
+ * Configuration Manager
12
+ * Handles loading, saving, and validation of configuration
13
+ */
14
+ class ConfigManager {
15
+ constructor(configPath) {
16
+ this.config = null;
17
+ this.configPath = configPath || (0, path_1.join)((0, os_1.homedir)(), '.genieceo', 'config.json');
18
+ }
19
+ /**
20
+ * Get the configuration path
21
+ */
22
+ getConfigPath() {
23
+ return this.configPath;
24
+ }
25
+ /**
26
+ * Load configuration from file
27
+ */
28
+ async load() {
29
+ if (this.config) {
30
+ return this.config;
31
+ }
32
+ try {
33
+ if ((0, fs_1.existsSync)(this.configPath)) {
34
+ const content = await (0, promises_1.readFile)(this.configPath, 'utf-8');
35
+ const rawConfig = JSON.parse(content);
36
+ // Migrate legacy config if needed
37
+ const migratedConfig = this.migrateLegacyConfig(rawConfig);
38
+ // Validate and parse with Zod
39
+ this.config = schema_1.ConfigSchema.parse(migratedConfig);
40
+ return this.config;
41
+ }
42
+ else {
43
+ // Create default config if file doesn't exist
44
+ return await this.createDefault();
45
+ }
46
+ }
47
+ catch (error) {
48
+ throw new Error(`Failed to load config: ${error instanceof Error ? error.message : error}`);
49
+ }
50
+ }
51
+ /**
52
+ * Migrate legacy config format to new multi-provider format
53
+ */
54
+ migrateLegacyConfig(config) {
55
+ // Check if using legacy webSearch.apiKey format
56
+ if (config.tools?.webSearch?.apiKey && !config.tools.webSearch.brave) {
57
+ console.warn('⚠️ Migrating legacy config format (tools.webSearch.apiKey → tools.webSearch.brave.apiKey)');
58
+ return {
59
+ ...config,
60
+ tools: {
61
+ ...config.tools,
62
+ webSearch: {
63
+ provider: 'auto',
64
+ brave: {
65
+ apiKey: config.tools.webSearch.apiKey,
66
+ },
67
+ // Keep legacy key for backward compatibility but it won't be saved
68
+ },
69
+ },
70
+ };
71
+ }
72
+ return config;
73
+ }
74
+ /**
75
+ * Create default configuration file
76
+ */
77
+ async createDefault() {
78
+ const defaultConfig = (0, schema_1.createDefaultConfig)();
79
+ // Ensure directory exists
80
+ const dir = (0, path_1.dirname)(this.configPath);
81
+ if (!(0, fs_1.existsSync)(dir)) {
82
+ await (0, promises_1.mkdir)(dir, { recursive: true });
83
+ }
84
+ // Save to file
85
+ await (0, promises_1.writeFile)(this.configPath, JSON.stringify(defaultConfig, null, 2));
86
+ // Validate and parse
87
+ this.config = schema_1.ConfigSchema.parse(defaultConfig);
88
+ return this.config;
89
+ }
90
+ /**
91
+ * Save configuration to file
92
+ */
93
+ async save(config) {
94
+ const dir = (0, path_1.dirname)(this.configPath);
95
+ if (!(0, fs_1.existsSync)(dir)) {
96
+ await (0, promises_1.mkdir)(dir, { recursive: true });
97
+ }
98
+ await (0, promises_1.writeFile)(this.configPath, JSON.stringify(config, null, 2));
99
+ this.config = config;
100
+ }
101
+ /**
102
+ * Update specific config values
103
+ */
104
+ async update(updates) {
105
+ const current = await this.load();
106
+ const updated = { ...current, ...updates };
107
+ await this.save(updated);
108
+ return updated;
109
+ }
110
+ /**
111
+ * Validate configuration
112
+ */
113
+ async validate() {
114
+ try {
115
+ const config = await this.load();
116
+ const errors = [];
117
+ // Check for required API keys
118
+ if (!config.llm.openai.apiKey) {
119
+ errors.push('OpenAI API key is required');
120
+ }
121
+ // Validate model format
122
+ if (!config.model.includes(':')) {
123
+ errors.push('Model must be in format "provider:model" (e.g., "openai:gpt-4o")');
124
+ }
125
+ return {
126
+ valid: errors.length === 0,
127
+ errors: errors.length > 0 ? errors : undefined,
128
+ };
129
+ }
130
+ catch (error) {
131
+ return {
132
+ valid: false,
133
+ errors: [error instanceof Error ? error.message : String(error)],
134
+ };
135
+ }
136
+ }
137
+ }
138
+ exports.ConfigManager = ConfigManager;
139
+ // Singleton instance
140
+ let configManagerInstance = null;
141
+ function getConfigManager(configPath) {
142
+ if (!configManagerInstance) {
143
+ configManagerInstance = new ConfigManager(configPath);
144
+ }
145
+ return configManagerInstance;
146
+ }
147
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/config/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Zod schema for configuration validation
4
+ */
5
+ export declare const ConfigSchema: z.ZodObject<{
6
+ workspace: z.ZodDefault<z.ZodString>;
7
+ model: z.ZodDefault<z.ZodString>;
8
+ maxIterations: z.ZodDefault<z.ZodNumber>;
9
+ llm: z.ZodObject<{
10
+ openai: z.ZodObject<{
11
+ apiKey: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ apiKey: string;
14
+ }, {
15
+ apiKey: string;
16
+ }>;
17
+ anthropic: z.ZodOptional<z.ZodObject<{
18
+ apiKey: z.ZodString;
19
+ }, "strip", z.ZodTypeAny, {
20
+ apiKey: string;
21
+ }, {
22
+ apiKey: string;
23
+ }>>;
24
+ }, "strip", z.ZodTypeAny, {
25
+ openai: {
26
+ apiKey: string;
27
+ };
28
+ anthropic?: {
29
+ apiKey: string;
30
+ } | undefined;
31
+ }, {
32
+ openai: {
33
+ apiKey: string;
34
+ };
35
+ anthropic?: {
36
+ apiKey: string;
37
+ } | undefined;
38
+ }>;
39
+ tools: z.ZodDefault<z.ZodObject<{
40
+ webSearch: z.ZodDefault<z.ZodObject<{
41
+ provider: z.ZodOptional<z.ZodDefault<z.ZodEnum<["auto", "brave", "tavily", "browser"]>>>;
42
+ brave: z.ZodOptional<z.ZodObject<{
43
+ apiKey: z.ZodString;
44
+ }, "strip", z.ZodTypeAny, {
45
+ apiKey: string;
46
+ }, {
47
+ apiKey: string;
48
+ }>>;
49
+ tavily: z.ZodOptional<z.ZodObject<{
50
+ apiKey: z.ZodString;
51
+ }, "strip", z.ZodTypeAny, {
52
+ apiKey: string;
53
+ }, {
54
+ apiKey: string;
55
+ }>>;
56
+ apiKey: z.ZodOptional<z.ZodString>;
57
+ }, "strip", z.ZodTypeAny, {
58
+ brave?: {
59
+ apiKey: string;
60
+ } | undefined;
61
+ tavily?: {
62
+ apiKey: string;
63
+ } | undefined;
64
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
65
+ apiKey?: string | undefined;
66
+ }, {
67
+ brave?: {
68
+ apiKey: string;
69
+ } | undefined;
70
+ tavily?: {
71
+ apiKey: string;
72
+ } | undefined;
73
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
74
+ apiKey?: string | undefined;
75
+ }>>;
76
+ shell: z.ZodDefault<z.ZodObject<{
77
+ timeout: z.ZodDefault<z.ZodNumber>;
78
+ allowDangerous: z.ZodDefault<z.ZodBoolean>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ timeout: number;
81
+ allowDangerous: boolean;
82
+ }, {
83
+ timeout?: number | undefined;
84
+ allowDangerous?: boolean | undefined;
85
+ }>>;
86
+ }, "strip", z.ZodTypeAny, {
87
+ webSearch: {
88
+ brave?: {
89
+ apiKey: string;
90
+ } | undefined;
91
+ tavily?: {
92
+ apiKey: string;
93
+ } | undefined;
94
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
95
+ apiKey?: string | undefined;
96
+ };
97
+ shell: {
98
+ timeout: number;
99
+ allowDangerous: boolean;
100
+ };
101
+ }, {
102
+ webSearch?: {
103
+ brave?: {
104
+ apiKey: string;
105
+ } | undefined;
106
+ tavily?: {
107
+ apiKey: string;
108
+ } | undefined;
109
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
110
+ apiKey?: string | undefined;
111
+ } | undefined;
112
+ shell?: {
113
+ timeout?: number | undefined;
114
+ allowDangerous?: boolean | undefined;
115
+ } | undefined;
116
+ }>>;
117
+ }, "strip", z.ZodTypeAny, {
118
+ workspace: string;
119
+ model: string;
120
+ maxIterations: number;
121
+ llm: {
122
+ openai: {
123
+ apiKey: string;
124
+ };
125
+ anthropic?: {
126
+ apiKey: string;
127
+ } | undefined;
128
+ };
129
+ tools: {
130
+ webSearch: {
131
+ brave?: {
132
+ apiKey: string;
133
+ } | undefined;
134
+ tavily?: {
135
+ apiKey: string;
136
+ } | undefined;
137
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
138
+ apiKey?: string | undefined;
139
+ };
140
+ shell: {
141
+ timeout: number;
142
+ allowDangerous: boolean;
143
+ };
144
+ };
145
+ }, {
146
+ llm: {
147
+ openai: {
148
+ apiKey: string;
149
+ };
150
+ anthropic?: {
151
+ apiKey: string;
152
+ } | undefined;
153
+ };
154
+ workspace?: string | undefined;
155
+ model?: string | undefined;
156
+ maxIterations?: number | undefined;
157
+ tools?: {
158
+ webSearch?: {
159
+ brave?: {
160
+ apiKey: string;
161
+ } | undefined;
162
+ tavily?: {
163
+ apiKey: string;
164
+ } | undefined;
165
+ provider?: "auto" | "brave" | "tavily" | "browser" | undefined;
166
+ apiKey?: string | undefined;
167
+ } | undefined;
168
+ shell?: {
169
+ timeout?: number | undefined;
170
+ allowDangerous?: boolean | undefined;
171
+ } | undefined;
172
+ } | undefined;
173
+ }>;
174
+ export type ConfigType = z.infer<typeof ConfigSchema>;
175
+ /**
176
+ * Create default configuration
177
+ */
178
+ export declare function createDefaultConfig(): Partial<ConfigType>;
179
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCvB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEtD;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAoBzD"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfigSchema = void 0;
4
+ exports.createDefaultConfig = createDefaultConfig;
5
+ const zod_1 = require("zod");
6
+ const os_1 = require("os");
7
+ const path_1 = require("path");
8
+ /**
9
+ * Zod schema for configuration validation
10
+ */
11
+ exports.ConfigSchema = zod_1.z.object({
12
+ workspace: zod_1.z.string().default((0, path_1.join)((0, os_1.homedir)(), '.genieceo', 'workspace')),
13
+ model: zod_1.z.string().default('openai:gpt-4o'),
14
+ maxIterations: zod_1.z.number().int().positive().default(15),
15
+ llm: zod_1.z.object({
16
+ openai: zod_1.z.object({
17
+ apiKey: zod_1.z.string(),
18
+ }),
19
+ anthropic: zod_1.z.object({
20
+ apiKey: zod_1.z.string(),
21
+ }).optional(),
22
+ }),
23
+ tools: zod_1.z.object({
24
+ webSearch: zod_1.z.object({
25
+ provider: zod_1.z.enum(['auto', 'brave', 'tavily', 'browser']).default('auto').optional(),
26
+ brave: zod_1.z.object({
27
+ apiKey: zod_1.z.string(),
28
+ }).optional(),
29
+ tavily: zod_1.z.object({
30
+ apiKey: zod_1.z.string(),
31
+ }).optional(),
32
+ // Legacy support for old config format
33
+ apiKey: zod_1.z.string().optional(),
34
+ }).default({}),
35
+ shell: zod_1.z.object({
36
+ timeout: zod_1.z.number().int().positive().default(30000),
37
+ allowDangerous: zod_1.z.boolean().default(false),
38
+ }).default({
39
+ timeout: 30000,
40
+ allowDangerous: false,
41
+ }),
42
+ }).default({
43
+ webSearch: {},
44
+ shell: {
45
+ timeout: 30000,
46
+ allowDangerous: false,
47
+ },
48
+ }),
49
+ });
50
+ /**
51
+ * Create default configuration
52
+ */
53
+ function createDefaultConfig() {
54
+ return {
55
+ workspace: (0, path_1.join)((0, os_1.homedir)(), '.genieceo', 'workspace'),
56
+ model: 'openai:gpt-4o',
57
+ maxIterations: 15,
58
+ llm: {
59
+ openai: {
60
+ apiKey: '',
61
+ },
62
+ },
63
+ tools: {
64
+ webSearch: {
65
+ provider: 'auto',
66
+ },
67
+ shell: {
68
+ timeout: 30000,
69
+ allowDangerous: false,
70
+ },
71
+ },
72
+ };
73
+ }
74
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":";;;AAqDA,kDAoBC;AAzED,6BAAwB;AACxB,2BAA6B;AAC7B,+BAA4B;AAE5B;;GAEG;AAEU,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACxE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC;IAC1C,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,GAAG,EAAE,OAAC,CAAC,MAAM,CAAC;QACZ,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;SACnB,CAAC;QACF,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC;YAClB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;SACnB,CAAC,CAAC,QAAQ,EAAE;KACd,CAAC;IACF,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,OAAC,CAAC,MAAM,CAAC;YAClB,QAAQ,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;YACnF,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;gBACd,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;aACnB,CAAC,CAAC,QAAQ,EAAE;YACb,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC;gBACf,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;aACnB,CAAC,CAAC,QAAQ,EAAE;YACb,uCAAuC;YACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC9B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACd,KAAK,EAAE,OAAC,CAAC,MAAM,CAAC;YACd,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YACnD,cAAc,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC,OAAO,CAAC;YACT,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,KAAK;SACtB,CAAC;KACH,CAAC,CAAC,OAAO,CAAC;QACT,SAAS,EAAE,EAAE;QACb,KAAK,EAAE;YACL,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,KAAK;SACtB;KACF,CAAC;CACH,CAAC,CAAC;AAIH;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO;QACL,SAAS,EAAE,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,WAAW,EAAE,WAAW,CAAC;QACpD,KAAK,EAAE,eAAe;QACtB,aAAa,EAAE,EAAE;QACjB,GAAG,EAAE;YACH,MAAM,EAAE;gBACN,MAAM,EAAE,EAAE;aACX;SACF;QACD,KAAK,EAAE;YACL,SAAS,EAAE;gBACT,QAAQ,EAAE,MAAM;aACjB;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,KAAK;aACtB;SACF;KACF,CAAC;AACJ,CAAC"}