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,188 @@
1
+ "use strict";
2
+ /**
3
+ * ๐ŸŸ AZERCLAW Agent Runtime
4
+ * Core autonomous agent loop with sub-agent spawning, tool execution,
5
+ * approval gates, and multi-agent orchestration.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.AgentRuntime = void 0;
9
+ const router_1 = require("../providers/router");
10
+ const registry_1 = require("../tools/registry");
11
+ const manager_1 = require("../config/manager");
12
+ // โ”€โ”€โ”€ Default System Prompt โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
13
+ const DEFAULT_SYSTEM_PROMPT = `You are AZERCLAW ๐ŸŸ, an autonomous AI agent running locally on the user's machine.
14
+
15
+ You are powerful, precise, and proactive. You have access to tools for:
16
+ - Running shell commands (run_shell)
17
+ - Reading files (read_file)
18
+ - Writing files (write_file)
19
+ - Listing directories (list_directory)
20
+ - Searching files (search_files)
21
+ - Spawning sub-agents for parallel tasks (spawn_sub_agent)
22
+
23
+ RULES:
24
+ 1. Always use tools to accomplish tasks โ€” don't just describe what you'd do.
25
+ 2. Break complex tasks into steps and execute them sequentially.
26
+ 3. For large/parallel workloads, spawn sub-agents to handle subtasks.
27
+ 4. Always verify your work by reading back files you've written.
28
+ 5. Be concise but thorough in your responses.
29
+ 6. If a command might be destructive, explain what it does before running it.
30
+
31
+ You are running on: ${process.platform} (${process.arch})
32
+ Current directory: ${process.cwd()}`;
33
+ // โ”€โ”€โ”€ Agent Runtime โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
34
+ class AgentRuntime {
35
+ context;
36
+ eventHandler;
37
+ aborted = false;
38
+ subAgents = new Map();
39
+ constructor(options) {
40
+ const config = (0, manager_1.getConfigManager)().getAll();
41
+ this.context = {
42
+ sessionId: options.sessionId || `session_${Date.now()}`,
43
+ messages: [],
44
+ systemPrompt: options.systemPrompt || DEFAULT_SYSTEM_PROMPT,
45
+ maxIterations: options.maxIterations || config.agent.maxIterations,
46
+ currentIteration: 0,
47
+ parentAgentId: options.parentAgentId,
48
+ metadata: {},
49
+ };
50
+ this.eventHandler = options.eventHandler;
51
+ }
52
+ /**
53
+ * Send a user message and run the agent loop.
54
+ */
55
+ async run(userMessage) {
56
+ this.context.messages.push({ role: 'user', content: userMessage });
57
+ return this.agentLoop();
58
+ }
59
+ /**
60
+ * Continue a conversation with a new message.
61
+ */
62
+ async chat(userMessage) {
63
+ this.context.messages.push({ role: 'user', content: userMessage });
64
+ return this.agentLoop();
65
+ }
66
+ /**
67
+ * Core agent loop โ€” iterates until task completion or max iterations.
68
+ */
69
+ async agentLoop() {
70
+ const router = (0, router_1.getRouter)();
71
+ const registry = (0, registry_1.getToolRegistry)();
72
+ let finalResponse = '';
73
+ while (this.context.currentIteration < this.context.maxIterations && !this.aborted) {
74
+ this.context.currentIteration++;
75
+ await this.emit({ type: 'thinking' });
76
+ const result = await router.complete({
77
+ messages: this.context.messages,
78
+ systemPrompt: this.context.systemPrompt,
79
+ tools: registry.getDefinitions(),
80
+ maxTokens: (0, manager_1.getConfigManager)().getAll().ai.maxTokens || 2048,
81
+ });
82
+ // Handle errors from provider
83
+ if (result.finishReason === 'error') {
84
+ finalResponse = result.content;
85
+ await this.emit({ type: 'error', error: result.content });
86
+ break;
87
+ }
88
+ // Handle tool calls
89
+ if (result.toolCalls && result.toolCalls.length > 0) {
90
+ // Add assistant message with tool calls
91
+ this.context.messages.push({
92
+ role: 'assistant',
93
+ content: result.content || '',
94
+ toolCalls: result.toolCalls,
95
+ });
96
+ if (result.content) {
97
+ await this.emit({ type: 'response', content: result.content });
98
+ }
99
+ // Execute each tool call
100
+ for (const toolCall of result.toolCalls) {
101
+ await this.emit({
102
+ type: 'tool_call',
103
+ toolName: toolCall.function.name,
104
+ toolArgs: JSON.parse(toolCall.function.arguments || '{}'),
105
+ });
106
+ let toolResult;
107
+ if (toolCall.function.name === 'spawn_sub_agent') {
108
+ toolResult = await this.handleSubAgent(toolCall);
109
+ }
110
+ else {
111
+ toolResult = await registry.execute(toolCall.function.name, JSON.parse(toolCall.function.arguments || '{}'));
112
+ }
113
+ await this.emit({ type: 'tool_result', toolName: toolCall.function.name, toolResult });
114
+ this.context.messages.push({
115
+ role: 'tool',
116
+ content: toolResult.success ? toolResult.output : `Error: ${toolResult.error}`,
117
+ toolCallId: toolCall.id,
118
+ });
119
+ }
120
+ // Continue the loop for next iteration
121
+ continue;
122
+ }
123
+ // No tool calls โ€” this is the final response
124
+ finalResponse = result.content;
125
+ this.context.messages.push({ role: 'assistant', content: finalResponse });
126
+ await this.emit({ type: 'response', content: finalResponse });
127
+ break;
128
+ }
129
+ await this.emit({ type: 'done', content: finalResponse });
130
+ return finalResponse;
131
+ }
132
+ /**
133
+ * Spawn a sub-agent for parallel/delegated tasks.
134
+ */
135
+ async handleSubAgent(toolCall) {
136
+ const args = JSON.parse(toolCall.function.arguments || '{}');
137
+ const subAgentId = `sub_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
138
+ await this.emit({ type: 'sub_agent_spawn', subAgentId, content: args.task });
139
+ const subAgent = new AgentRuntime({
140
+ sessionId: subAgentId,
141
+ systemPrompt: args.systemPrompt || this.context.systemPrompt,
142
+ maxIterations: args.maxIterations || 10,
143
+ parentAgentId: this.context.sessionId,
144
+ eventHandler: async (event) => {
145
+ // Prefix sub-agent events
146
+ await this.emit({ ...event, subAgentId });
147
+ },
148
+ });
149
+ this.subAgents.set(subAgentId, subAgent);
150
+ try {
151
+ const result = await subAgent.run(args.task);
152
+ await this.emit({ type: 'sub_agent_done', subAgentId, content: result });
153
+ return { success: true, output: result };
154
+ }
155
+ catch (error) {
156
+ return { success: false, output: '', error: error.message };
157
+ }
158
+ finally {
159
+ this.subAgents.delete(subAgentId);
160
+ }
161
+ }
162
+ /**
163
+ * Abort the current agent loop.
164
+ */
165
+ abort() {
166
+ this.aborted = true;
167
+ for (const [, subAgent] of this.subAgents) {
168
+ subAgent.abort();
169
+ }
170
+ }
171
+ /**
172
+ * Get conversation history.
173
+ */
174
+ getHistory() {
175
+ return [...this.context.messages];
176
+ }
177
+ /**
178
+ * Get session ID.
179
+ */
180
+ getSessionId() {
181
+ return this.context.sessionId;
182
+ }
183
+ async emit(event) {
184
+ await this.eventHandler(event);
185
+ }
186
+ }
187
+ exports.AgentRuntime = AgentRuntime;
188
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * ๐ŸŸ AZERCLAW Security Module
3
+ * Ensures zero data leakage โ€” all data stays local, keys are encrypted,
4
+ * no telemetry, no analytics, no phone-home.
5
+ */
6
+ /**
7
+ * Encrypt a string value using AES-256-GCM.
8
+ * Returns base64-encoded ciphertext with IV and auth tag.
9
+ */
10
+ export declare function encryptValue(plaintext: string): string;
11
+ /**
12
+ * Decrypt a value encrypted with encryptValue.
13
+ */
14
+ export declare function decryptValue(encrypted: string): string;
15
+ /**
16
+ * Log a security-relevant event to the local audit log.
17
+ * NO data is sent externally โ€” this is purely local.
18
+ */
19
+ export declare function auditLog(event: string, details?: string): void;
20
+ /**
21
+ * Validate file permissions are secure (owner-only).
22
+ */
23
+ export declare function checkFilePermissions(filePath: string): {
24
+ secure: boolean;
25
+ mode: string;
26
+ issue?: string;
27
+ };
28
+ /**
29
+ * Fix permissions on a file to be owner-only.
30
+ */
31
+ export declare function fixPermissions(filePath: string, mode?: number): boolean;
32
+ /**
33
+ * Strip API keys from a string for safe logging.
34
+ */
35
+ export declare function sanitizeForLogging(text: string): string;
36
+ /**
37
+ * Sanitize environment variables before passing to child processes.
38
+ */
39
+ export declare function getSafeEnv(): Record<string, string>;
40
+ /**
41
+ * Validate that a URL is safe to access (no internal/private IPs).
42
+ */
43
+ export declare function isUrlSafe(url: string): boolean;
44
+ export declare const SECURITY_POLICY: {
45
+ telemetry: boolean;
46
+ analytics: boolean;
47
+ phoneHome: boolean;
48
+ dataCollection: boolean;
49
+ keyStorage: string;
50
+ filePermissions: string;
51
+ auditLog: string;
52
+ networkPolicy: string;
53
+ childProcesses: string;
54
+ };
55
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/core/security.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8BH;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAWtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAetD;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAU9D;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBxG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,MAAc,GAAG,OAAO,CAQ9E;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnD;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CA2B9C;AAID,eAAO,MAAM,eAAe;;;;;;;;;;CAU3B,CAAC"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ /**
3
+ * ๐ŸŸ AZERCLAW Security Module
4
+ * Ensures zero data leakage โ€” all data stays local, keys are encrypted,
5
+ * no telemetry, no analytics, no phone-home.
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.SECURITY_POLICY = void 0;
42
+ exports.encryptValue = encryptValue;
43
+ exports.decryptValue = decryptValue;
44
+ exports.auditLog = auditLog;
45
+ exports.checkFilePermissions = checkFilePermissions;
46
+ exports.fixPermissions = fixPermissions;
47
+ exports.sanitizeForLogging = sanitizeForLogging;
48
+ exports.getSafeEnv = getSafeEnv;
49
+ exports.isUrlSafe = isUrlSafe;
50
+ const crypto = __importStar(require("crypto"));
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const SECURITY_DIR = path.join(os.homedir(), '.azerclaw');
55
+ const AUDIT_LOG = path.join(SECURITY_DIR, 'audit.log');
56
+ const ENCRYPTION_KEY_FILE = path.join(SECURITY_DIR, '.keyfile');
57
+ // โ”€โ”€โ”€ Key Encryption โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
58
+ /**
59
+ * Get or create a machine-local encryption key.
60
+ * This key never leaves the user's machine.
61
+ */
62
+ function getMachineKey() {
63
+ if (fs.existsSync(ENCRYPTION_KEY_FILE)) {
64
+ const raw = fs.readFileSync(ENCRYPTION_KEY_FILE);
65
+ return raw;
66
+ }
67
+ // Generate a new 256-bit key
68
+ const key = crypto.randomBytes(32);
69
+ fs.mkdirSync(SECURITY_DIR, { recursive: true, mode: 0o700 });
70
+ fs.writeFileSync(ENCRYPTION_KEY_FILE, key, { mode: 0o400 }); // read-only by owner
71
+ return key;
72
+ }
73
+ /**
74
+ * Encrypt a string value using AES-256-GCM.
75
+ * Returns base64-encoded ciphertext with IV and auth tag.
76
+ */
77
+ function encryptValue(plaintext) {
78
+ const key = getMachineKey();
79
+ const iv = crypto.randomBytes(16);
80
+ const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
81
+ let encrypted = cipher.update(plaintext, 'utf8', 'base64');
82
+ encrypted += cipher.final('base64');
83
+ const authTag = cipher.getAuthTag();
84
+ // Format: iv:authTag:ciphertext (all base64)
85
+ return `${iv.toString('base64')}:${authTag.toString('base64')}:${encrypted}`;
86
+ }
87
+ /**
88
+ * Decrypt a value encrypted with encryptValue.
89
+ */
90
+ function decryptValue(encrypted) {
91
+ const key = getMachineKey();
92
+ const parts = encrypted.split(':');
93
+ if (parts.length !== 3)
94
+ throw new Error('Invalid encrypted format');
95
+ const iv = Buffer.from(parts[0], 'base64');
96
+ const authTag = Buffer.from(parts[1], 'base64');
97
+ const ciphertext = parts[2];
98
+ const decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
99
+ decipher.setAuthTag(authTag);
100
+ let decrypted = decipher.update(ciphertext, 'base64', 'utf8');
101
+ decrypted += decipher.final('utf8');
102
+ return decrypted;
103
+ }
104
+ // โ”€โ”€โ”€ Audit Logging โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
105
+ /**
106
+ * Log a security-relevant event to the local audit log.
107
+ * NO data is sent externally โ€” this is purely local.
108
+ */
109
+ function auditLog(event, details) {
110
+ const timestamp = new Date().toISOString();
111
+ const entry = `[${timestamp}] ${event}${details ? ` | ${details}` : ''}\n`;
112
+ try {
113
+ fs.mkdirSync(SECURITY_DIR, { recursive: true, mode: 0o700 });
114
+ fs.appendFileSync(AUDIT_LOG, entry, { mode: 0o600 });
115
+ }
116
+ catch {
117
+ // Silently fail โ€” never block operations for audit logging
118
+ }
119
+ }
120
+ // โ”€โ”€โ”€ Permission Checks โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
121
+ /**
122
+ * Validate file permissions are secure (owner-only).
123
+ */
124
+ function checkFilePermissions(filePath) {
125
+ try {
126
+ const stats = fs.statSync(filePath);
127
+ const mode = (stats.mode & 0o777).toString(8);
128
+ // Check if group or others have any access
129
+ const groupOther = stats.mode & 0o077;
130
+ if (groupOther !== 0) {
131
+ return {
132
+ secure: false,
133
+ mode,
134
+ issue: `File ${filePath} has permissions 0${mode} โ€” group/others can access`,
135
+ };
136
+ }
137
+ return { secure: true, mode };
138
+ }
139
+ catch {
140
+ return { secure: false, mode: '???', issue: `Cannot stat ${filePath}` };
141
+ }
142
+ }
143
+ /**
144
+ * Fix permissions on a file to be owner-only.
145
+ */
146
+ function fixPermissions(filePath, mode = 0o600) {
147
+ try {
148
+ fs.chmodSync(filePath, mode);
149
+ auditLog('PERMISSIONS_FIXED', `${filePath} โ†’ 0${mode.toString(8)}`);
150
+ return true;
151
+ }
152
+ catch {
153
+ return false;
154
+ }
155
+ }
156
+ // โ”€โ”€โ”€ Sanitization โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
157
+ /**
158
+ * Strip API keys from a string for safe logging.
159
+ */
160
+ function sanitizeForLogging(text) {
161
+ // Common API key patterns
162
+ const patterns = [
163
+ /sk-[a-zA-Z0-9]{20,}/g, // OpenAI
164
+ /sk-ant-[a-zA-Z0-9-]{20,}/g, // Anthropic
165
+ /sk-or-[a-zA-Z0-9-]{20,}/g, // OpenRouter
166
+ /gsk_[a-zA-Z0-9]{20,}/g, // Groq
167
+ /AI[a-zA-Z0-9_-]{30,}/g, // Google
168
+ /ghp_[a-zA-Z0-9]{20,}/g, // GitHub
169
+ /glpat-[a-zA-Z0-9_-]{20,}/g, // GitLab
170
+ ];
171
+ let sanitized = text;
172
+ for (const pattern of patterns) {
173
+ sanitized = sanitized.replace(pattern, '[REDACTED]');
174
+ }
175
+ return sanitized;
176
+ }
177
+ /**
178
+ * Sanitize environment variables before passing to child processes.
179
+ */
180
+ function getSafeEnv() {
181
+ const env = { ...process.env };
182
+ const sensitiveKeys = [
183
+ 'OPENAI_API_KEY', 'ANTHROPIC_API_KEY', 'GOOGLE_API_KEY',
184
+ 'AZERCLAW_OPENAI_KEY', 'AZERCLAW_ANTHROPIC_KEY', 'AZERCLAW_GOOGLE_KEY',
185
+ 'AZERCLAW_GROQ_KEY', 'AZERCLAW_DEEPSEEK_KEY', 'AZERCLAW_OPENROUTER_KEY',
186
+ 'AWS_SECRET_ACCESS_KEY', 'GITHUB_TOKEN', 'NPM_TOKEN',
187
+ ];
188
+ const safe = {};
189
+ for (const [key, value] of Object.entries(env)) {
190
+ if (value === undefined)
191
+ continue;
192
+ if (sensitiveKeys.includes(key))
193
+ continue;
194
+ safe[key] = value;
195
+ }
196
+ return safe;
197
+ }
198
+ // โ”€โ”€โ”€ Network Security โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
199
+ /**
200
+ * Validate that a URL is safe to access (no internal/private IPs).
201
+ */
202
+ function isUrlSafe(url) {
203
+ try {
204
+ const parsed = new URL(url);
205
+ const hostname = parsed.hostname;
206
+ // Block private/internal IPs
207
+ const privatePatterns = [
208
+ /^10\./,
209
+ /^172\.(1[6-9]|2[0-9]|3[01])\./,
210
+ /^192\.168\./,
211
+ /^127\./,
212
+ /^0\./,
213
+ /^169\.254\./,
214
+ /^localhost$/i,
215
+ /^::1$/,
216
+ /^fc00:/i,
217
+ /^fe80:/i,
218
+ ];
219
+ for (const pattern of privatePatterns) {
220
+ if (pattern.test(hostname))
221
+ return false;
222
+ }
223
+ return true;
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ }
229
+ // โ”€โ”€โ”€ Security Summary โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
230
+ exports.SECURITY_POLICY = {
231
+ telemetry: false,
232
+ analytics: false,
233
+ phoneHome: false,
234
+ dataCollection: false,
235
+ keyStorage: 'local-only, AES-256-GCM encrypted',
236
+ filePermissions: '0600 (owner read/write only)',
237
+ auditLog: 'local-only, never transmitted',
238
+ networkPolicy: 'only connects to user-configured LLM providers',
239
+ childProcesses: 'sensitive env vars stripped',
240
+ };
241
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/core/security.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCH,oCAWC;AAKD,oCAeC;AAQD,4BAUC;AAOD,oDAmBC;AAKD,wCAQC;AAOD,gDAiBC;AAKD,gCAgBC;AAOD,8BA2BC;AAvMD,+CAAiC;AACjC,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEhE,mEAAmE;AAEnE;;;GAGG;AACH,SAAS,aAAa;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6BAA6B;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,EAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAE7D,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3D,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,6CAA6C;IAC7C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEpE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE5B,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACjE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9D,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,mEAAmE;AAEnE;;;GAGG;AACH,SAAgB,QAAQ,CAAC,KAAa,EAAE,OAAgB;IACtD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,SAAS,KAAK,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAE3E,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC;AAED,kEAAkE;AAElE;;GAEG;AACH,SAAgB,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE9C,2CAA2C;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACtC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,IAAI;gBACJ,KAAK,EAAE,QAAQ,QAAQ,qBAAqB,IAAI,4BAA4B;aAC7E,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,QAAQ,EAAE,EAAE,CAAC;IAC1E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,OAAe,KAAK;IACnE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC7B,QAAQ,CAAC,mBAAmB,EAAE,GAAG,QAAQ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,mEAAmE;AAEnE;;GAEG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,0BAA0B;IAC1B,MAAM,QAAQ,GAAG;QACf,sBAAsB,EAAY,SAAS;QAC3C,2BAA2B,EAAO,YAAY;QAC9C,0BAA0B,EAAQ,aAAa;QAC/C,uBAAuB,EAAW,OAAO;QACzC,uBAAuB,EAAW,SAAS;QAC3C,uBAAuB,EAAW,SAAS;QAC3C,2BAA2B,EAAO,SAAS;KAC5C,CAAC;IAEF,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAgB,UAAU;IACxB,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG;QACpB,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB;QACvD,qBAAqB,EAAE,wBAAwB,EAAE,qBAAqB;QACtE,mBAAmB,EAAE,uBAAuB,EAAE,yBAAyB;QACvE,uBAAuB,EAAE,cAAc,EAAE,WAAW;KACrD,CAAC;IAEF,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mEAAmE;AAEnE;;GAEG;AACH,SAAgB,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEjC,6BAA6B;QAC7B,MAAM,eAAe,GAAG;YACtB,OAAO;YACP,+BAA+B;YAC/B,aAAa;YACb,QAAQ;YACR,MAAM;YACN,aAAa;YACb,cAAc;YACd,OAAO;YACP,SAAS;YACT,SAAS;SACV,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,kEAAkE;AAErD,QAAA,eAAe,GAAG;IAC7B,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,cAAc,EAAE,KAAK;IACrB,UAAU,EAAE,mCAAmC;IAC/C,eAAe,EAAE,8BAA8B;IAC/C,QAAQ,EAAE,+BAA+B;IACzC,aAAa,EAAE,gDAAgD;IAC/D,cAAc,EAAE,6BAA6B;CAC9C,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * ๐ŸŸ AZERCLAW โ€” Official Public API
3
+ * Your AI ยท Your Keys ยท Your Way
4
+ */
5
+ export * from './core/runtime';
6
+ export * from './core/gateway';
7
+ export * from './core/security';
8
+ export * from './providers/base';
9
+ export * from './providers/router';
10
+ export * from './providers/openai';
11
+ export * from './providers/anthropic';
12
+ export * from './providers/google';
13
+ export * from './providers/ollama';
14
+ export * from './agents/builtin';
15
+ export * from './tools/registry';
16
+ export * from './tools/shell';
17
+ export * from './tools/filesystem';
18
+ export * from './tools/advanced';
19
+ export * from './workflow/engine';
20
+ export * from './scheduler/heartbeat';
21
+ export * from './memory/store';
22
+ export * from './config/manager';
23
+ export * from './config/schema';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * ๐ŸŸ AZERCLAW โ€” Official Public API
4
+ * Your AI ยท Your Keys ยท Your Way
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ // Core Runtime
22
+ __exportStar(require("./core/runtime"), exports);
23
+ __exportStar(require("./core/gateway"), exports);
24
+ __exportStar(require("./core/security"), exports);
25
+ // AI Providers
26
+ __exportStar(require("./providers/base"), exports);
27
+ __exportStar(require("./providers/router"), exports);
28
+ __exportStar(require("./providers/openai"), exports);
29
+ __exportStar(require("./providers/anthropic"), exports);
30
+ __exportStar(require("./providers/google"), exports);
31
+ __exportStar(require("./providers/ollama"), exports);
32
+ // Agents
33
+ __exportStar(require("./agents/builtin"), exports);
34
+ // Tools
35
+ __exportStar(require("./tools/registry"), exports);
36
+ __exportStar(require("./tools/shell"), exports);
37
+ __exportStar(require("./tools/filesystem"), exports);
38
+ __exportStar(require("./tools/advanced"), exports);
39
+ // Workflow & Scheduler
40
+ __exportStar(require("./workflow/engine"), exports);
41
+ __exportStar(require("./scheduler/heartbeat"), exports);
42
+ // Memory & Config
43
+ __exportStar(require("./memory/store"), exports);
44
+ __exportStar(require("./config/manager"), exports);
45
+ __exportStar(require("./config/schema"), exports);
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,iDAA+B;AAC/B,iDAA+B;AAC/B,kDAAgC;AAEhC,eAAe;AACf,mDAAiC;AACjC,qDAAmC;AACnC,qDAAmC;AACnC,wDAAsC;AACtC,qDAAmC;AACnC,qDAAmC;AAEnC,SAAS;AACT,mDAAiC;AAEjC,QAAQ;AACR,mDAAiC;AACjC,gDAA8B;AAC9B,qDAAmC;AACnC,mDAAiC;AAEjC,uBAAuB;AACvB,oDAAkC;AAClC,wDAAsC;AAEtC,kBAAkB;AAClB,iDAA+B;AAC/B,mDAAiC;AACjC,kDAAgC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * ๐ŸŸ AZERCLAW Memory Store
3
+ * Persistent conversation history and context using lowdb (JSON-based).
4
+ * Zero external dependencies โ€” everything stays local.
5
+ */
6
+ import { ChatMessage } from '../providers/base';
7
+ export interface Session {
8
+ id: string;
9
+ title: string;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ messages: ChatMessage[];
13
+ metadata: Record<string, unknown>;
14
+ tokenCount: number;
15
+ }
16
+ export interface ContextEntry {
17
+ key: string;
18
+ value: string;
19
+ source: string;
20
+ createdAt: string;
21
+ expiresAt?: string;
22
+ tags: string[];
23
+ }
24
+ export declare class SessionStore {
25
+ private sessions;
26
+ constructor();
27
+ private load;
28
+ private save;
29
+ create(title?: string): Session;
30
+ get(id: string): Session | undefined;
31
+ addMessage(sessionId: string, message: ChatMessage): void;
32
+ list(limit?: number): Session[];
33
+ getRecent(count?: number): Session[];
34
+ delete(id: string): boolean;
35
+ /**
36
+ * Search sessions by content.
37
+ */
38
+ search(query: string): Session[];
39
+ /**
40
+ * Get context window for a session โ€” returns last N messages within token budget.
41
+ */
42
+ getContextWindow(sessionId: string, maxTokens?: number): ChatMessage[];
43
+ /**
44
+ * Auto-title a session based on first message.
45
+ */
46
+ autoTitle(sessionId: string): void;
47
+ }
48
+ export declare class ContextStore {
49
+ private entries;
50
+ constructor();
51
+ private load;
52
+ private save;
53
+ set(key: string, value: string, source?: string, tags?: string[]): void;
54
+ get(key: string): string | undefined;
55
+ search(query: string): ContextEntry[];
56
+ /**
57
+ * Format all context as a system prompt addition.
58
+ */
59
+ toPromptContext(): string;
60
+ getAll(): ContextEntry[];
61
+ delete(key: string): boolean;
62
+ }
63
+ export declare function getSessionStore(): SessionStore;
64
+ export declare function getContextStore(): ContextStore;
65
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/memory/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAYD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAmC;;IAOnD,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAKZ,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAe/B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIpC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IASzD,IAAI,CAAC,KAAK,SAAK,GAAG,OAAO,EAAE;IAO3B,SAAS,CAAC,KAAK,SAAI,GAAG,OAAO,EAAE;IAI/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAM3B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,EAAE;IAUhC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,WAAW,EAAE;IAmBpE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAUnC;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAwC;;IAOvD,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAKZ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,IAAI,GAAE,MAAM,EAAO,GAAG,IAAI;IAS3E,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAUrC;;OAEG;IACH,eAAe,IAAI,MAAM;IASzB,MAAM,IAAI,YAAY,EAAE;IAIxB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAK7B;AAOD,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,eAAe,IAAI,YAAY,CAG9C"}