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.
- package/LICENSE +21 -0
- package/README.md +222 -0
- package/bin/azerclaw.ts +290 -0
- package/dist/bin/azerclaw.d.ts +19 -0
- package/dist/bin/azerclaw.d.ts.map +1 -0
- package/dist/bin/azerclaw.js +247 -0
- package/dist/bin/azerclaw.js.map +1 -0
- package/dist/skills/code-review/SKILL.md +46 -0
- package/dist/skills/daily-briefing/SKILL.md +35 -0
- package/dist/skills/git-assistant/SKILL.md +31 -0
- package/dist/src/agents/builtin.d.ts +52 -0
- package/dist/src/agents/builtin.d.ts.map +1 -0
- package/dist/src/agents/builtin.js +497 -0
- package/dist/src/agents/builtin.js.map +1 -0
- package/dist/src/agents/loader.d.ts +23 -0
- package/dist/src/agents/loader.d.ts.map +1 -0
- package/dist/src/agents/loader.js +154 -0
- package/dist/src/agents/loader.js.map +1 -0
- package/dist/src/channels/adapter.d.ts +57 -0
- package/dist/src/channels/adapter.d.ts.map +1 -0
- package/dist/src/channels/adapter.js +45 -0
- package/dist/src/channels/adapter.js.map +1 -0
- package/dist/src/channels/discord.d.ts +23 -0
- package/dist/src/channels/discord.d.ts.map +1 -0
- package/dist/src/channels/discord.js +129 -0
- package/dist/src/channels/discord.js.map +1 -0
- package/dist/src/channels/slack.d.ts +19 -0
- package/dist/src/channels/slack.d.ts.map +1 -0
- package/dist/src/channels/slack.js +97 -0
- package/dist/src/channels/slack.js.map +1 -0
- package/dist/src/channels/telegram.d.ts +20 -0
- package/dist/src/channels/telegram.d.ts.map +1 -0
- package/dist/src/channels/telegram.js +87 -0
- package/dist/src/channels/telegram.js.map +1 -0
- package/dist/src/channels/webhook.d.ts +19 -0
- package/dist/src/channels/webhook.d.ts.map +1 -0
- package/dist/src/channels/webhook.js +124 -0
- package/dist/src/channels/webhook.js.map +1 -0
- package/dist/src/cli/animations/fish.d.ts +33 -0
- package/dist/src/cli/animations/fish.d.ts.map +1 -0
- package/dist/src/cli/animations/fish.js +297 -0
- package/dist/src/cli/animations/fish.js.map +1 -0
- package/dist/src/cli/commands/agents.d.ts +8 -0
- package/dist/src/cli/commands/agents.d.ts.map +1 -0
- package/dist/src/cli/commands/agents.js +104 -0
- package/dist/src/cli/commands/agents.js.map +1 -0
- package/dist/src/cli/commands/chat.d.ts +9 -0
- package/dist/src/cli/commands/chat.d.ts.map +1 -0
- package/dist/src/cli/commands/chat.js +236 -0
- package/dist/src/cli/commands/chat.js.map +1 -0
- package/dist/src/cli/commands/config.d.ts +9 -0
- package/dist/src/cli/commands/config.d.ts.map +1 -0
- package/dist/src/cli/commands/config.js +97 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +8 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +159 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/models.d.ts +7 -0
- package/dist/src/cli/commands/models.d.ts.map +1 -0
- package/dist/src/cli/commands/models.js +64 -0
- package/dist/src/cli/commands/models.js.map +1 -0
- package/dist/src/cli/commands/onboard.d.ts +6 -0
- package/dist/src/cli/commands/onboard.d.ts.map +1 -0
- package/dist/src/cli/commands/onboard.js +150 -0
- package/dist/src/cli/commands/onboard.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts +9 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -0
- package/dist/src/cli/commands/run.js +84 -0
- package/dist/src/cli/commands/run.js.map +1 -0
- package/dist/src/cli/commands/tui.d.ts +6 -0
- package/dist/src/cli/commands/tui.d.ts.map +1 -0
- package/dist/src/cli/commands/tui.js +252 -0
- package/dist/src/cli/commands/tui.js.map +1 -0
- package/dist/src/config/manager.d.ts +80 -0
- package/dist/src/config/manager.d.ts.map +1 -0
- package/dist/src/config/manager.js +232 -0
- package/dist/src/config/manager.js.map +1 -0
- package/dist/src/config/schema.d.ts +910 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +138 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/core/gateway.d.ts +35 -0
- package/dist/src/core/gateway.d.ts.map +1 -0
- package/dist/src/core/gateway.js +205 -0
- package/dist/src/core/gateway.js.map +1 -0
- package/dist/src/core/runtime.d.ts +69 -0
- package/dist/src/core/runtime.d.ts.map +1 -0
- package/dist/src/core/runtime.js +188 -0
- package/dist/src/core/runtime.js.map +1 -0
- package/dist/src/core/security.d.ts +55 -0
- package/dist/src/core/security.d.ts.map +1 -0
- package/dist/src/core/security.js +241 -0
- package/dist/src/core/security.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +46 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/memory/store.d.ts +65 -0
- package/dist/src/memory/store.d.ts.map +1 -0
- package/dist/src/memory/store.js +250 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/providers/anthropic.d.ts +25 -0
- package/dist/src/providers/anthropic.d.ts.map +1 -0
- package/dist/src/providers/anthropic.js +163 -0
- package/dist/src/providers/anthropic.js.map +1 -0
- package/dist/src/providers/base.d.ts +90 -0
- package/dist/src/providers/base.d.ts.map +1 -0
- package/dist/src/providers/base.js +12 -0
- package/dist/src/providers/base.js.map +1 -0
- package/dist/src/providers/google.d.ts +23 -0
- package/dist/src/providers/google.d.ts.map +1 -0
- package/dist/src/providers/google.js +118 -0
- package/dist/src/providers/google.js.map +1 -0
- package/dist/src/providers/ollama.d.ts +24 -0
- package/dist/src/providers/ollama.d.ts.map +1 -0
- package/dist/src/providers/ollama.js +81 -0
- package/dist/src/providers/ollama.js.map +1 -0
- package/dist/src/providers/openai.d.ts +30 -0
- package/dist/src/providers/openai.d.ts.map +1 -0
- package/dist/src/providers/openai.js +187 -0
- package/dist/src/providers/openai.js.map +1 -0
- package/dist/src/providers/router.d.ts +20 -0
- package/dist/src/providers/router.d.ts.map +1 -0
- package/dist/src/providers/router.js +156 -0
- package/dist/src/providers/router.js.map +1 -0
- package/dist/src/scheduler/heartbeat.d.ts +62 -0
- package/dist/src/scheduler/heartbeat.d.ts.map +1 -0
- package/dist/src/scheduler/heartbeat.js +267 -0
- package/dist/src/scheduler/heartbeat.js.map +1 -0
- package/dist/src/skills/loader.d.ts +25 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +165 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/tools/advanced.d.ts +15 -0
- package/dist/src/tools/advanced.d.ts.map +1 -0
- package/dist/src/tools/advanced.js +102 -0
- package/dist/src/tools/advanced.js.map +1 -0
- package/dist/src/tools/filesystem.d.ts +10 -0
- package/dist/src/tools/filesystem.d.ts.map +1 -0
- package/dist/src/tools/filesystem.js +160 -0
- package/dist/src/tools/filesystem.js.map +1 -0
- package/dist/src/tools/registry.d.ts +26 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +49 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/shell.d.ts +7 -0
- package/dist/src/tools/shell.d.ts.map +1 -0
- package/dist/src/tools/shell.js +46 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/workflow/engine.d.ts +65 -0
- package/dist/src/workflow/engine.d.ts.map +1 -0
- package/dist/src/workflow/engine.js +297 -0
- package/dist/src/workflow/engine.js.map +1 -0
- package/package.json +113 -0
- package/skills/code-review/SKILL.md +46 -0
- package/skills/daily-briefing/SKILL.md +35 -0
- package/skills/git-assistant/SKILL.md +31 -0
- package/templates/HEARTBEAT.md +27 -0
- package/templates/IDENTITY.md +23 -0
- 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":";AAAA;;;;GAIG;;;AAEH,gDAAgD;AAChD,gDAAgE;AAChE,+CAAqD;AA2BrD,mEAAmE;AAEnE,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;sBAkBR,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI;qBAClC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;AAErC,mEAAmE;AAEnE,MAAa,YAAY;IACf,OAAO,CAAe;IACtB,YAAY,CAAoB;IAChC,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEzD,YAAY,OAMX;QACC,MAAM,MAAM,GAAG,IAAA,0BAAgB,GAAE,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG;YACb,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,GAAG,EAAE,EAAE;YACvD,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,qBAAqB;YAC3D,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa;YAClE,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,EAAE;SACb,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,WAAmB;QAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,WAAmB;QAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS;QACrB,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAA,0BAAe,GAAE,CAAC;QACnC,IAAI,aAAa,GAAG,EAAE,CAAC;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnF,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAEtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBACnC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAC/B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;gBACvC,KAAK,EAAE,QAAQ,CAAC,cAAc,EAAE;gBAChC,SAAS,EAAE,IAAA,0BAAgB,GAAE,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI;aAC5D,CAAC,CAAC;YAEH,8BAA8B;YAC9B,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;gBACpC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC/B,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC1D,MAAM;YACR,CAAC;YAED,oBAAoB;YACpB,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,wCAAwC;gBACxC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACzB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;oBAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjE,CAAC;gBAED,yBAAyB;gBACzB,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxC,MAAM,IAAI,CAAC,IAAI,CAAC;wBACd,IAAI,EAAE,WAAW;wBACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI;wBAChC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;qBAC1D,CAAC,CAAC;oBAEH,IAAI,UAAsB,CAAC;oBAE3B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;wBACjD,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CACjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAChD,CAAC;oBACJ,CAAC;oBAED,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;oBAEvF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACzB,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,KAAK,EAAE;wBAC9E,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACxB,CAAC,CAAC;gBACL,CAAC;gBAED,uCAAuC;gBACvC,SAAS;YACX,CAAC;YAED,6CAA6C;YAC7C,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC1E,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;YAC9D,MAAM;QACR,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QAC1D,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,QAAkB;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAEjF,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7E,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;YAChC,SAAS,EAAE,UAAU;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;YAC5D,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;YACvC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YACrC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5B,0BAA0B;gBAC1B,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9D,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,KAAiB;QAClC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;CACF;AAxLD,oCAwLC"}
|
|
@@ -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":"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"}
|
|
@@ -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"}
|