azerclaw 1.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 (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/bin/azerclaw.ts +290 -0
  4. package/dist/bin/azerclaw.d.ts +19 -0
  5. package/dist/bin/azerclaw.d.ts.map +1 -0
  6. package/dist/bin/azerclaw.js +247 -0
  7. package/dist/bin/azerclaw.js.map +1 -0
  8. package/dist/skills/code-review/SKILL.md +46 -0
  9. package/dist/skills/daily-briefing/SKILL.md +35 -0
  10. package/dist/skills/git-assistant/SKILL.md +31 -0
  11. package/dist/src/agents/builtin.d.ts +52 -0
  12. package/dist/src/agents/builtin.d.ts.map +1 -0
  13. package/dist/src/agents/builtin.js +497 -0
  14. package/dist/src/agents/builtin.js.map +1 -0
  15. package/dist/src/agents/loader.d.ts +23 -0
  16. package/dist/src/agents/loader.d.ts.map +1 -0
  17. package/dist/src/agents/loader.js +154 -0
  18. package/dist/src/agents/loader.js.map +1 -0
  19. package/dist/src/channels/adapter.d.ts +57 -0
  20. package/dist/src/channels/adapter.d.ts.map +1 -0
  21. package/dist/src/channels/adapter.js +45 -0
  22. package/dist/src/channels/adapter.js.map +1 -0
  23. package/dist/src/channels/discord.d.ts +23 -0
  24. package/dist/src/channels/discord.d.ts.map +1 -0
  25. package/dist/src/channels/discord.js +129 -0
  26. package/dist/src/channels/discord.js.map +1 -0
  27. package/dist/src/channels/slack.d.ts +19 -0
  28. package/dist/src/channels/slack.d.ts.map +1 -0
  29. package/dist/src/channels/slack.js +97 -0
  30. package/dist/src/channels/slack.js.map +1 -0
  31. package/dist/src/channels/telegram.d.ts +20 -0
  32. package/dist/src/channels/telegram.d.ts.map +1 -0
  33. package/dist/src/channels/telegram.js +87 -0
  34. package/dist/src/channels/telegram.js.map +1 -0
  35. package/dist/src/channels/webhook.d.ts +19 -0
  36. package/dist/src/channels/webhook.d.ts.map +1 -0
  37. package/dist/src/channels/webhook.js +124 -0
  38. package/dist/src/channels/webhook.js.map +1 -0
  39. package/dist/src/cli/animations/fish.d.ts +33 -0
  40. package/dist/src/cli/animations/fish.d.ts.map +1 -0
  41. package/dist/src/cli/animations/fish.js +297 -0
  42. package/dist/src/cli/animations/fish.js.map +1 -0
  43. package/dist/src/cli/commands/agents.d.ts +8 -0
  44. package/dist/src/cli/commands/agents.d.ts.map +1 -0
  45. package/dist/src/cli/commands/agents.js +104 -0
  46. package/dist/src/cli/commands/agents.js.map +1 -0
  47. package/dist/src/cli/commands/chat.d.ts +9 -0
  48. package/dist/src/cli/commands/chat.d.ts.map +1 -0
  49. package/dist/src/cli/commands/chat.js +236 -0
  50. package/dist/src/cli/commands/chat.js.map +1 -0
  51. package/dist/src/cli/commands/config.d.ts +9 -0
  52. package/dist/src/cli/commands/config.d.ts.map +1 -0
  53. package/dist/src/cli/commands/config.js +97 -0
  54. package/dist/src/cli/commands/config.js.map +1 -0
  55. package/dist/src/cli/commands/doctor.d.ts +8 -0
  56. package/dist/src/cli/commands/doctor.d.ts.map +1 -0
  57. package/dist/src/cli/commands/doctor.js +159 -0
  58. package/dist/src/cli/commands/doctor.js.map +1 -0
  59. package/dist/src/cli/commands/models.d.ts +7 -0
  60. package/dist/src/cli/commands/models.d.ts.map +1 -0
  61. package/dist/src/cli/commands/models.js +64 -0
  62. package/dist/src/cli/commands/models.js.map +1 -0
  63. package/dist/src/cli/commands/onboard.d.ts +6 -0
  64. package/dist/src/cli/commands/onboard.d.ts.map +1 -0
  65. package/dist/src/cli/commands/onboard.js +150 -0
  66. package/dist/src/cli/commands/onboard.js.map +1 -0
  67. package/dist/src/cli/commands/run.d.ts +9 -0
  68. package/dist/src/cli/commands/run.d.ts.map +1 -0
  69. package/dist/src/cli/commands/run.js +84 -0
  70. package/dist/src/cli/commands/run.js.map +1 -0
  71. package/dist/src/cli/commands/tui.d.ts +6 -0
  72. package/dist/src/cli/commands/tui.d.ts.map +1 -0
  73. package/dist/src/cli/commands/tui.js +252 -0
  74. package/dist/src/cli/commands/tui.js.map +1 -0
  75. package/dist/src/config/manager.d.ts +80 -0
  76. package/dist/src/config/manager.d.ts.map +1 -0
  77. package/dist/src/config/manager.js +232 -0
  78. package/dist/src/config/manager.js.map +1 -0
  79. package/dist/src/config/schema.d.ts +910 -0
  80. package/dist/src/config/schema.d.ts.map +1 -0
  81. package/dist/src/config/schema.js +138 -0
  82. package/dist/src/config/schema.js.map +1 -0
  83. package/dist/src/core/gateway.d.ts +35 -0
  84. package/dist/src/core/gateway.d.ts.map +1 -0
  85. package/dist/src/core/gateway.js +205 -0
  86. package/dist/src/core/gateway.js.map +1 -0
  87. package/dist/src/core/runtime.d.ts +69 -0
  88. package/dist/src/core/runtime.d.ts.map +1 -0
  89. package/dist/src/core/runtime.js +188 -0
  90. package/dist/src/core/runtime.js.map +1 -0
  91. package/dist/src/core/security.d.ts +55 -0
  92. package/dist/src/core/security.d.ts.map +1 -0
  93. package/dist/src/core/security.js +241 -0
  94. package/dist/src/core/security.js.map +1 -0
  95. package/dist/src/index.d.ts +24 -0
  96. package/dist/src/index.d.ts.map +1 -0
  97. package/dist/src/index.js +46 -0
  98. package/dist/src/index.js.map +1 -0
  99. package/dist/src/memory/store.d.ts +65 -0
  100. package/dist/src/memory/store.d.ts.map +1 -0
  101. package/dist/src/memory/store.js +250 -0
  102. package/dist/src/memory/store.js.map +1 -0
  103. package/dist/src/providers/anthropic.d.ts +25 -0
  104. package/dist/src/providers/anthropic.d.ts.map +1 -0
  105. package/dist/src/providers/anthropic.js +163 -0
  106. package/dist/src/providers/anthropic.js.map +1 -0
  107. package/dist/src/providers/base.d.ts +90 -0
  108. package/dist/src/providers/base.d.ts.map +1 -0
  109. package/dist/src/providers/base.js +12 -0
  110. package/dist/src/providers/base.js.map +1 -0
  111. package/dist/src/providers/google.d.ts +23 -0
  112. package/dist/src/providers/google.d.ts.map +1 -0
  113. package/dist/src/providers/google.js +118 -0
  114. package/dist/src/providers/google.js.map +1 -0
  115. package/dist/src/providers/ollama.d.ts +24 -0
  116. package/dist/src/providers/ollama.d.ts.map +1 -0
  117. package/dist/src/providers/ollama.js +81 -0
  118. package/dist/src/providers/ollama.js.map +1 -0
  119. package/dist/src/providers/openai.d.ts +30 -0
  120. package/dist/src/providers/openai.d.ts.map +1 -0
  121. package/dist/src/providers/openai.js +187 -0
  122. package/dist/src/providers/openai.js.map +1 -0
  123. package/dist/src/providers/router.d.ts +20 -0
  124. package/dist/src/providers/router.d.ts.map +1 -0
  125. package/dist/src/providers/router.js +156 -0
  126. package/dist/src/providers/router.js.map +1 -0
  127. package/dist/src/scheduler/heartbeat.d.ts +62 -0
  128. package/dist/src/scheduler/heartbeat.d.ts.map +1 -0
  129. package/dist/src/scheduler/heartbeat.js +267 -0
  130. package/dist/src/scheduler/heartbeat.js.map +1 -0
  131. package/dist/src/skills/loader.d.ts +25 -0
  132. package/dist/src/skills/loader.d.ts.map +1 -0
  133. package/dist/src/skills/loader.js +165 -0
  134. package/dist/src/skills/loader.js.map +1 -0
  135. package/dist/src/tools/advanced.d.ts +15 -0
  136. package/dist/src/tools/advanced.d.ts.map +1 -0
  137. package/dist/src/tools/advanced.js +102 -0
  138. package/dist/src/tools/advanced.js.map +1 -0
  139. package/dist/src/tools/filesystem.d.ts +10 -0
  140. package/dist/src/tools/filesystem.d.ts.map +1 -0
  141. package/dist/src/tools/filesystem.js +160 -0
  142. package/dist/src/tools/filesystem.js.map +1 -0
  143. package/dist/src/tools/registry.d.ts +26 -0
  144. package/dist/src/tools/registry.d.ts.map +1 -0
  145. package/dist/src/tools/registry.js +49 -0
  146. package/dist/src/tools/registry.js.map +1 -0
  147. package/dist/src/tools/shell.d.ts +7 -0
  148. package/dist/src/tools/shell.d.ts.map +1 -0
  149. package/dist/src/tools/shell.js +46 -0
  150. package/dist/src/tools/shell.js.map +1 -0
  151. package/dist/src/workflow/engine.d.ts +65 -0
  152. package/dist/src/workflow/engine.d.ts.map +1 -0
  153. package/dist/src/workflow/engine.js +297 -0
  154. package/dist/src/workflow/engine.js.map +1 -0
  155. package/package.json +113 -0
  156. package/skills/code-review/SKILL.md +46 -0
  157. package/skills/daily-briefing/SKILL.md +35 -0
  158. package/skills/git-assistant/SKILL.md +31 -0
  159. package/templates/HEARTBEAT.md +27 -0
  160. package/templates/IDENTITY.md +23 -0
  161. package/templates/deploy-pipeline.fishbone +39 -0
@@ -0,0 +1,252 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Premium TUI
4
+ * Full-featured terminal user interface with panels, status bar, and rich formatting.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.runTUI = runTUI;
8
+ const chalk = require('chalk');
9
+ const gradientString = require('gradient-string');
10
+ const readline = require('readline');
11
+ const { AgentRuntime } = require('../../core/runtime');
12
+ const { registerAllTools } = require('./chat');
13
+ const { getConfigManager } = require('../../config/manager');
14
+ const { FishThinkingAnimation, fishSuccess, fishError, fishBox, playSplashScreen } = require('../animations/fish');
15
+ const LUXE = gradientString(['#c084fc', '#818cf8', '#60a5fa', '#34d399']);
16
+ const OCEAN = gradientString(['#0ea5e9', '#06b6d4', '#14b8a6']);
17
+ const NEON = gradientString(['#a855f7', '#6366f1', '#3b82f6', '#06b6d4']);
18
+ // ─── TUI Theme Colors ───────────────────────────────────────────
19
+ const T = {
20
+ border: (s) => chalk.hex('#3b3b6b')(s),
21
+ borderActive: (s) => chalk.hex('#818cf8')(s),
22
+ label: (s) => chalk.hex('#a78bfa')(s),
23
+ text: (s) => chalk.hex('#e2e8f0')(s),
24
+ dim: (s) => chalk.hex('#6b7280')(s),
25
+ accent: (s) => chalk.hex('#06b6d4')(s),
26
+ success: (s) => chalk.hex('#34d399')(s),
27
+ warning: (s) => chalk.hex('#fbbf24')(s),
28
+ error: (s) => chalk.hex('#f87171')(s),
29
+ highlight: (s) => chalk.hex('#c084fc')(s),
30
+ bg: (s) => chalk.bgHex('#0f0f23').hex('#e2e8f0')(s),
31
+ };
32
+ // ─── Status Bar ─────────────────────────────────────────────────
33
+ function renderStatusBar() {
34
+ const config = getConfigManager().getAll();
35
+ const width = process.stdout.columns || 80;
36
+ const provider = T.success(`● ${config.ai.defaultProvider}`);
37
+ const model = T.dim(config.ai.providers[config.ai.defaultProvider]?.defaultModel || 'auto');
38
+ const fish = OCEAN('><(((º>');
39
+ const version = T.dim('v1.0.0');
40
+ const leftContent = ` ${fish} AZERCLAW `;
41
+ const rightContent = ` ${provider} │ ${model} │ ${version} `;
42
+ // Calculate padding (rough — ANSI codes make exact width tricky)
43
+ const rawLeft = ` ><(((º> AZERCLAW `;
44
+ const rawRight = ` ● ${config.ai.defaultProvider} | ${config.ai.providers[config.ai.defaultProvider]?.defaultModel || 'auto'} | v1.0.0 `;
45
+ const padLen = Math.max(0, width - rawLeft.length - rawRight.length);
46
+ console.log(chalk.bgHex('#1e1b4b').hex('#818cf8')(leftContent + ' '.repeat(padLen) + rightContent));
47
+ }
48
+ // ─── Futuristic Features Panel ──────────────────────────────────
49
+ function renderFeaturesPanel() {
50
+ const features = [
51
+ [T.success('●'), T.label('Neural Code Synthesis'), T.dim('Deep code generation via AST analysis')],
52
+ [T.success('●'), T.label('Ambient Awareness'), T.dim('Monitors file changes & git state')],
53
+ [T.success('●'), T.label('Predictive Tasks'), T.dim('Anticipates next steps from patterns')],
54
+ [T.warning('◐'), T.label('Quantum Search'), T.dim('Parallel multi-source code search')],
55
+ [T.warning('◐'), T.label('Swarm Intelligence'), T.dim('Multi-agent collaborative solving')],
56
+ [T.dim('○'), T.label('Temporal Debugging'), T.dim('Time-travel through code states')],
57
+ [T.dim('○'), T.label('Holographic Preview'), T.dim('Real-time visual output prediction')],
58
+ [T.dim('○'), T.label('Synaptic Memory'), T.dim('Cross-project pattern learning')],
59
+ ];
60
+ const width = Math.min(65, (process.stdout.columns || 80) - 4);
61
+ console.log(T.borderActive(` ╭${'─'.repeat(width - 2)}╮`));
62
+ console.log(T.borderActive(' │') + NEON(' ⚡ AZERCLAW CAPABILITIES'.padEnd(width - 3)) + T.borderActive('│'));
63
+ console.log(T.borderActive(` ├${'─'.repeat(width - 2)}┤`));
64
+ for (const [status, name, desc] of features) {
65
+ const line = ` ${status} ${name} ${desc}`;
66
+ const rawLen = ` ● xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`.length;
67
+ const pad = Math.max(0, width - rawLen - 2);
68
+ console.log(T.borderActive(' │') + ` ${status} ${name} ${desc}` + ' '.repeat(Math.max(1, pad)) + T.borderActive('│'));
69
+ }
70
+ console.log(T.borderActive(` ╰${'─'.repeat(width - 2)}╯`));
71
+ }
72
+ // ─── Agent Stats Panel ──────────────────────────────────────────
73
+ function renderAgentStats(stats) {
74
+ const width = Math.min(45, (process.stdout.columns || 80) - 4);
75
+ console.log(T.border(` ╭${'─'.repeat(width - 2)}╮`));
76
+ console.log(T.border(' │') + T.label(' 📊 Session Stats'.padEnd(width - 3)) + T.border('│'));
77
+ console.log(T.border(` ├${'─'.repeat(width - 2)}┤`));
78
+ const lines = [
79
+ ` Messages: ${T.accent(String(stats.messages))}`,
80
+ ` Tool Calls: ${T.accent(String(stats.tools))}`,
81
+ ` Sub-Agents: ${T.accent(String(stats.subAgents))}`,
82
+ ` Uptime: ${T.accent(formatUptime(stats.uptime))}`,
83
+ ];
84
+ for (const line of lines) {
85
+ console.log(T.border(' │') + ` ${line}`.padEnd(width + 20) + T.border('│'));
86
+ }
87
+ console.log(T.border(` ╰${'─'.repeat(width - 2)}╯`));
88
+ }
89
+ function formatUptime(ms) {
90
+ const s = Math.floor(ms / 1000);
91
+ const m = Math.floor(s / 60);
92
+ const h = Math.floor(m / 60);
93
+ if (h > 0)
94
+ return `${h}h ${m % 60}m`;
95
+ if (m > 0)
96
+ return `${m}m ${s % 60}s`;
97
+ return `${s}s`;
98
+ }
99
+ // ─── Main TUI ───────────────────────────────────────────────────
100
+ async function runTUI() {
101
+ registerAllTools();
102
+ const startTime = Date.now();
103
+ let messageCount = 0;
104
+ let toolCount = 0;
105
+ let subAgentCount = 0;
106
+ // Clear screen and show splash
107
+ console.clear();
108
+ await playSplashScreen('1.0.0');
109
+ // Status bar
110
+ renderStatusBar();
111
+ console.log('');
112
+ // Features panel
113
+ renderFeaturesPanel();
114
+ console.log('');
115
+ // Help bar
116
+ console.log(T.dim(' Shortcuts: ') +
117
+ T.accent('Ctrl+C') + T.dim(' exit ') +
118
+ T.accent('/clear') + T.dim(' reset ') +
119
+ T.accent('/stats') + T.dim(' metrics ') +
120
+ T.accent('/help') + T.dim(' commands'));
121
+ console.log('');
122
+ const thinking = new FishThinkingAnimation('Processing');
123
+ let isThinking = false;
124
+ const agent = new AgentRuntime({
125
+ eventHandler: async (event) => {
126
+ switch (event.type) {
127
+ case 'thinking':
128
+ if (!isThinking) {
129
+ isThinking = true;
130
+ thinking.start();
131
+ }
132
+ break;
133
+ case 'response':
134
+ if (isThinking) {
135
+ thinking.stop();
136
+ isThinking = false;
137
+ }
138
+ if (event.content) {
139
+ messageCount++;
140
+ // Render response in a styled box
141
+ const width = Math.min(75, (process.stdout.columns || 80) - 4);
142
+ console.log('');
143
+ console.log(T.borderActive(` ╭─ 🐟 `) + T.highlight('Azerclaw'));
144
+ const lines = event.content.split('\n');
145
+ for (const line of lines) {
146
+ console.log(T.borderActive(' │ ') + T.text(line));
147
+ }
148
+ console.log(T.borderActive(' ╰─'));
149
+ console.log('');
150
+ }
151
+ break;
152
+ case 'tool_call':
153
+ toolCount++;
154
+ if (isThinking)
155
+ thinking.updateMessage(`🔧 ${event.toolName}`);
156
+ break;
157
+ case 'sub_agent_spawn':
158
+ subAgentCount++;
159
+ console.log(T.accent(` 🐠 Sub-agent deployed → ${event.content?.slice(0, 50)}`));
160
+ break;
161
+ case 'sub_agent_done':
162
+ console.log(T.success(` 🐠 Sub-agent completed ✓`));
163
+ break;
164
+ case 'error':
165
+ if (isThinking) {
166
+ thinking.fail(event.error);
167
+ isThinking = false;
168
+ }
169
+ break;
170
+ case 'done':
171
+ if (isThinking) {
172
+ thinking.stop();
173
+ isThinking = false;
174
+ }
175
+ break;
176
+ }
177
+ },
178
+ });
179
+ const rl = readline.createInterface({
180
+ input: process.stdin,
181
+ output: process.stdout,
182
+ prompt: NEON('\n ⟫ '),
183
+ terminal: true,
184
+ });
185
+ rl.prompt();
186
+ rl.on('line', async (line) => {
187
+ const input = line.trim();
188
+ if (!input) {
189
+ rl.prompt();
190
+ return;
191
+ }
192
+ switch (input.toLowerCase()) {
193
+ case '/exit':
194
+ case '/quit':
195
+ case '/q':
196
+ console.log('');
197
+ fishSuccess('Session ended. Goodbye! 🐟');
198
+ renderAgentStats({ messages: messageCount, tools: toolCount, subAgents: subAgentCount, uptime: Date.now() - startTime });
199
+ process.exit(0);
200
+ break;
201
+ case '/clear':
202
+ console.clear();
203
+ renderStatusBar();
204
+ console.log('');
205
+ break;
206
+ case '/stats':
207
+ renderAgentStats({ messages: messageCount, tools: toolCount, subAgents: subAgentCount, uptime: Date.now() - startTime });
208
+ break;
209
+ case '/features':
210
+ renderFeaturesPanel();
211
+ break;
212
+ case '/help':
213
+ fishBox('TUI Commands', [
214
+ T.accent('/exit ') + T.dim('Exit the TUI'),
215
+ T.accent('/clear ') + T.dim('Clear screen'),
216
+ T.accent('/stats ') + T.dim('Session statistics'),
217
+ T.accent('/features ') + T.dim('Capabilities panel'),
218
+ T.accent('/model ') + T.dim('Current model info'),
219
+ T.accent('/help ') + T.dim('This help'),
220
+ ]);
221
+ break;
222
+ case '/model':
223
+ const { getConfigManager: gcm } = require('../../config/manager');
224
+ const cfg = gcm().getAll();
225
+ fishBox('Current Model', [
226
+ T.label('Provider: ') + T.accent(cfg.ai.defaultProvider),
227
+ T.label('Model: ') + T.accent(cfg.ai.providers[cfg.ai.defaultProvider]?.defaultModel || 'auto'),
228
+ ]);
229
+ break;
230
+ default:
231
+ if (input.startsWith('/')) {
232
+ fishError(`Unknown command: ${input}`);
233
+ break;
234
+ }
235
+ messageCount++;
236
+ try {
237
+ await agent.chat(input);
238
+ }
239
+ catch (error) {
240
+ fishError(error.message);
241
+ }
242
+ }
243
+ rl.prompt();
244
+ });
245
+ rl.on('close', () => {
246
+ console.log('');
247
+ fishSuccess('Session ended 🐟');
248
+ process.exit(0);
249
+ });
250
+ }
251
+ module.exports = { runTUI };
252
+ //# sourceMappingURL=tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../../../src/cli/commands/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 🐟 AZERCLAW Configuration Manager
3
+ * Handles reading, writing, and validating the config file.
4
+ * Stored at ~/.azerclaw/config.json with 0600 permissions.
5
+ */
6
+ import { AzerclawConfig, ProviderName } from './schema';
7
+ declare const CONFIG_DIR: string;
8
+ declare const CONFIG_FILE: string;
9
+ declare class ConfigManager {
10
+ private config;
11
+ private configPath;
12
+ constructor();
13
+ /**
14
+ * Load config from disk, creating defaults if not found.
15
+ */
16
+ private load;
17
+ /**
18
+ * Save config to disk with secure permissions.
19
+ */
20
+ private save;
21
+ /**
22
+ * Get the full config object.
23
+ */
24
+ getAll(): AzerclawConfig;
25
+ /**
26
+ * Get a nested config value by dot-path (e.g., "ai.providers.openai.apiKey").
27
+ */
28
+ get(keyPath: string): unknown;
29
+ /**
30
+ * Set a nested config value by dot-path.
31
+ */
32
+ set(keyPath: string, value: unknown): void;
33
+ /**
34
+ * Check if this is the first run.
35
+ */
36
+ isFirstRun(): boolean;
37
+ /**
38
+ * Mark first run as complete.
39
+ */
40
+ completeFirstRun(): void;
41
+ /**
42
+ * Get the active provider configuration.
43
+ */
44
+ getActiveProvider(): {
45
+ name: ProviderName;
46
+ config: any;
47
+ };
48
+ /**
49
+ * Get all enabled providers.
50
+ */
51
+ getEnabledProviders(): {
52
+ name: string;
53
+ config: any;
54
+ }[];
55
+ /**
56
+ * Set API key for a provider and enable it.
57
+ */
58
+ setProviderKey(provider: ProviderName, apiKey: string): void;
59
+ /**
60
+ * Resolve provider from environment variables.
61
+ */
62
+ resolveEnvOverrides(): void;
63
+ /**
64
+ * Get config directory paths.
65
+ */
66
+ get paths(): {
67
+ configDir: string;
68
+ configFile: string;
69
+ skillsDir: string;
70
+ memoryDir: string;
71
+ logsDir: string;
72
+ };
73
+ /**
74
+ * Reset config to defaults.
75
+ */
76
+ reset(): void;
77
+ }
78
+ export declare function getConfigManager(): ConfigManager;
79
+ export { ConfigManager, CONFIG_DIR, CONFIG_FILE };
80
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/config/manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAgB,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtE,QAAA,MAAM,UAAU,QAAuC,CAAC;AACxD,QAAA,MAAM,WAAW,QAAuC,CAAC;AAiBzD,cAAM,aAAa;IACjB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAS;;IAQ3B;;OAEG;IACH,OAAO,CAAC,IAAI;IAgBZ;;OAEG;IACH,OAAO,CAAC,IAAI;IASZ;;OAEG;IACH,MAAM,IAAI,cAAc;IAIxB;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAY7B;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAkB1C;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAIxB;;OAEG;IACH,iBAAiB,IAAI;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE;IAMxD;;OAEG;IACH,mBAAmB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAE,EAAE;IActD;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAU5D;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAwB3B;;OAEG;IACH,IAAI,KAAK;;;;;;MAQR;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAId;AAMD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ /**
3
+ * 🐟 AZERCLAW Configuration Manager
4
+ * Handles reading, writing, and validating the config file.
5
+ * Stored at ~/.azerclaw/config.json with 0600 permissions.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.CONFIG_FILE = exports.CONFIG_DIR = exports.ConfigManager = void 0;
42
+ exports.getConfigManager = getConfigManager;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const schema_1 = require("./schema");
47
+ const CONFIG_DIR = path.join(os.homedir(), '.azerclaw');
48
+ exports.CONFIG_DIR = CONFIG_DIR;
49
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
50
+ exports.CONFIG_FILE = CONFIG_FILE;
51
+ const SKILLS_DIR = path.join(CONFIG_DIR, 'skills');
52
+ const MEMORY_DIR = path.join(CONFIG_DIR, 'memory');
53
+ const LOGS_DIR = path.join(CONFIG_DIR, 'logs');
54
+ // ─── Ensure directories exist ───────────────────────────────────
55
+ function ensureDirs() {
56
+ for (const dir of [CONFIG_DIR, SKILLS_DIR, MEMORY_DIR, LOGS_DIR]) {
57
+ if (!fs.existsSync(dir)) {
58
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
59
+ }
60
+ }
61
+ }
62
+ // ─── Config Manager ─────────────────────────────────────────────
63
+ class ConfigManager {
64
+ config;
65
+ configPath;
66
+ constructor() {
67
+ this.configPath = CONFIG_FILE;
68
+ ensureDirs();
69
+ this.config = this.load();
70
+ }
71
+ /**
72
+ * Load config from disk, creating defaults if not found.
73
+ */
74
+ load() {
75
+ try {
76
+ if (fs.existsSync(this.configPath)) {
77
+ const raw = fs.readFileSync(this.configPath, 'utf-8');
78
+ const parsed = JSON.parse(raw);
79
+ return schema_1.ConfigSchema.parse(parsed);
80
+ }
81
+ }
82
+ catch (e) {
83
+ // Invalid config, fall through to defaults
84
+ }
85
+ const defaults = schema_1.ConfigSchema.parse({});
86
+ this.save(defaults);
87
+ return defaults;
88
+ }
89
+ /**
90
+ * Save config to disk with secure permissions.
91
+ */
92
+ save(config) {
93
+ const data = config || this.config;
94
+ fs.writeFileSync(this.configPath, JSON.stringify(data, null, 2), { mode: 0o600 });
95
+ }
96
+ /**
97
+ * Get the full config object.
98
+ */
99
+ getAll() {
100
+ return JSON.parse(JSON.stringify(this.config));
101
+ }
102
+ /**
103
+ * Get a nested config value by dot-path (e.g., "ai.providers.openai.apiKey").
104
+ */
105
+ get(keyPath) {
106
+ const keys = keyPath.split('.');
107
+ let current = this.config;
108
+ for (const key of keys) {
109
+ if (current === undefined || current === null)
110
+ return undefined;
111
+ current = current[key];
112
+ }
113
+ return current;
114
+ }
115
+ /**
116
+ * Set a nested config value by dot-path.
117
+ */
118
+ set(keyPath, value) {
119
+ const keys = keyPath.split('.');
120
+ let current = this.config;
121
+ for (let i = 0; i < keys.length - 1; i++) {
122
+ if (current[keys[i]] === undefined) {
123
+ current[keys[i]] = {};
124
+ }
125
+ current = current[keys[i]];
126
+ }
127
+ current[keys[keys.length - 1]] = value;
128
+ // Re-validate
129
+ this.config = schema_1.ConfigSchema.parse(this.config);
130
+ this.save();
131
+ }
132
+ /**
133
+ * Check if this is the first run.
134
+ */
135
+ isFirstRun() {
136
+ return this.config.firstRun;
137
+ }
138
+ /**
139
+ * Mark first run as complete.
140
+ */
141
+ completeFirstRun() {
142
+ this.set('firstRun', false);
143
+ }
144
+ /**
145
+ * Get the active provider configuration.
146
+ */
147
+ getActiveProvider() {
148
+ const providerName = this.config.ai.defaultProvider;
149
+ const providerConfig = this.config.ai.providers[providerName];
150
+ return { name: providerName, config: providerConfig };
151
+ }
152
+ /**
153
+ * Get all enabled providers.
154
+ */
155
+ getEnabledProviders() {
156
+ const providers = this.config?.ai?.providers;
157
+ if (!providers || typeof providers !== 'object')
158
+ return [];
159
+ const enabled = [];
160
+ for (const [name, provConfig] of Object.entries(providers)) {
161
+ if (provConfig && provConfig.enabled) {
162
+ enabled.push({ name, config: provConfig });
163
+ }
164
+ }
165
+ return enabled;
166
+ }
167
+ /**
168
+ * Set API key for a provider and enable it.
169
+ */
170
+ setProviderKey(provider, apiKey) {
171
+ this.set(`ai.providers.${provider}.apiKey`, apiKey);
172
+ this.set(`ai.providers.${provider}.enabled`, true);
173
+ // If no default provider set, use this one
174
+ if (!this.getEnabledProviders().some(p => p.name === this.config.ai.defaultProvider)) {
175
+ this.set('ai.defaultProvider', provider);
176
+ }
177
+ }
178
+ /**
179
+ * Resolve provider from environment variables.
180
+ */
181
+ resolveEnvOverrides() {
182
+ const envMap = {
183
+ 'AZERCLAW_OPENAI_KEY': { provider: 'openai', key: 'apiKey' },
184
+ 'OPENAI_API_KEY': { provider: 'openai', key: 'apiKey' },
185
+ 'AZERCLAW_ANTHROPIC_KEY': { provider: 'anthropic', key: 'apiKey' },
186
+ 'ANTHROPIC_API_KEY': { provider: 'anthropic', key: 'apiKey' },
187
+ 'AZERCLAW_GOOGLE_KEY': { provider: 'google', key: 'apiKey' },
188
+ 'GOOGLE_API_KEY': { provider: 'google', key: 'apiKey' },
189
+ 'AZERCLAW_GROQ_KEY': { provider: 'groq', key: 'apiKey' },
190
+ 'GROQ_API_KEY': { provider: 'groq', key: 'apiKey' },
191
+ 'AZERCLAW_DEEPSEEK_KEY': { provider: 'deepseek', key: 'apiKey' },
192
+ 'AZERCLAW_OPENROUTER_KEY': { provider: 'openrouter', key: 'apiKey' },
193
+ 'OPENROUTER_API_KEY': { provider: 'openrouter', key: 'apiKey' },
194
+ };
195
+ for (const [envVar, { provider, key }] of Object.entries(envMap)) {
196
+ const value = process.env[envVar];
197
+ if (value) {
198
+ this.set(`ai.providers.${provider}.${key}`, value);
199
+ this.set(`ai.providers.${provider}.enabled`, true);
200
+ }
201
+ }
202
+ }
203
+ /**
204
+ * Get config directory paths.
205
+ */
206
+ get paths() {
207
+ return {
208
+ configDir: CONFIG_DIR,
209
+ configFile: CONFIG_FILE,
210
+ skillsDir: SKILLS_DIR,
211
+ memoryDir: MEMORY_DIR,
212
+ logsDir: LOGS_DIR,
213
+ };
214
+ }
215
+ /**
216
+ * Reset config to defaults.
217
+ */
218
+ reset() {
219
+ this.config = schema_1.ConfigSchema.parse({});
220
+ this.save();
221
+ }
222
+ }
223
+ exports.ConfigManager = ConfigManager;
224
+ // ─── Singleton Instance ─────────────────────────────────────────
225
+ let instance = null;
226
+ function getConfigManager() {
227
+ if (!instance) {
228
+ instance = new ConfigManager();
229
+ }
230
+ return instance;
231
+ }
232
+ //# 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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"}