@praveencs/agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1007 -0
- package/bin/agent.ts +6 -0
- package/dist/bin/agent.d.ts +3 -0
- package/dist/bin/agent.d.ts.map +1 -0
- package/dist/bin/agent.js +5 -0
- package/dist/bin/agent.js.map +1 -0
- package/dist/src/cli/commands/config.d.ts +3 -0
- package/dist/src/cli/commands/config.d.ts.map +1 -0
- package/dist/src/cli/commands/config.js +54 -0
- package/dist/src/cli/commands/config.js.map +1 -0
- package/dist/src/cli/commands/daemon.d.ts +3 -0
- package/dist/src/cli/commands/daemon.d.ts.map +1 -0
- package/dist/src/cli/commands/daemon.js +43 -0
- package/dist/src/cli/commands/daemon.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +3 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +84 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +8 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +112 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/mcp.d.ts +3 -0
- package/dist/src/cli/commands/mcp.d.ts.map +1 -0
- package/dist/src/cli/commands/mcp.js +26 -0
- package/dist/src/cli/commands/mcp.js.map +1 -0
- package/dist/src/cli/commands/plan.d.ts +3 -0
- package/dist/src/cli/commands/plan.d.ts.map +1 -0
- package/dist/src/cli/commands/plan.js +220 -0
- package/dist/src/cli/commands/plan.js.map +1 -0
- package/dist/src/cli/commands/run.d.ts +3 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -0
- package/dist/src/cli/commands/run.js +192 -0
- package/dist/src/cli/commands/run.js.map +1 -0
- package/dist/src/cli/commands/skills.d.ts +3 -0
- package/dist/src/cli/commands/skills.d.ts.map +1 -0
- package/dist/src/cli/commands/skills.js +143 -0
- package/dist/src/cli/commands/skills.js.map +1 -0
- package/dist/src/cli/index.d.ts +6 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +33 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/ui/progress.d.ts +17 -0
- package/dist/src/cli/ui/progress.d.ts.map +1 -0
- package/dist/src/cli/ui/progress.js +43 -0
- package/dist/src/cli/ui/progress.js.map +1 -0
- package/dist/src/cli/ui/prompt.d.ts +10 -0
- package/dist/src/cli/ui/prompt.d.ts.map +1 -0
- package/dist/src/cli/ui/prompt.js +53 -0
- package/dist/src/cli/ui/prompt.js.map +1 -0
- package/dist/src/cli/ui/report.d.ts +6 -0
- package/dist/src/cli/ui/report.d.ts.map +1 -0
- package/dist/src/cli/ui/report.js +81 -0
- package/dist/src/cli/ui/report.js.map +1 -0
- package/dist/src/config/defaults.d.ts +3 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +82 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/loader.d.ts +33 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +161 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/schema.d.ts +530 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +97 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/config/secrets.d.ts +31 -0
- package/dist/src/config/secrets.d.ts.map +1 -0
- package/dist/src/config/secrets.js +98 -0
- package/dist/src/config/secrets.js.map +1 -0
- package/dist/src/daemon/manager.d.ts +28 -0
- package/dist/src/daemon/manager.d.ts.map +1 -0
- package/dist/src/daemon/manager.js +77 -0
- package/dist/src/daemon/manager.js.map +1 -0
- package/dist/src/daemon/scheduler.d.ts +6 -0
- package/dist/src/daemon/scheduler.d.ts.map +1 -0
- package/dist/src/daemon/scheduler.js +82 -0
- package/dist/src/daemon/scheduler.js.map +1 -0
- package/dist/src/daemon/watcher.d.ts +16 -0
- package/dist/src/daemon/watcher.d.ts.map +1 -0
- package/dist/src/daemon/watcher.js +59 -0
- package/dist/src/daemon/watcher.js.map +1 -0
- package/dist/src/engine/executor.d.ts +51 -0
- package/dist/src/engine/executor.d.ts.map +1 -0
- package/dist/src/engine/executor.js +189 -0
- package/dist/src/engine/executor.js.map +1 -0
- package/dist/src/engine/rollback.d.ts +37 -0
- package/dist/src/engine/rollback.d.ts.map +1 -0
- package/dist/src/engine/rollback.js +95 -0
- package/dist/src/engine/rollback.js.map +1 -0
- package/dist/src/engine/types.d.ts +31 -0
- package/dist/src/engine/types.d.ts.map +1 -0
- package/dist/src/engine/types.js +2 -0
- package/dist/src/engine/types.js.map +1 -0
- package/dist/src/engine/verification.d.ts +27 -0
- package/dist/src/engine/verification.d.ts.map +1 -0
- package/dist/src/engine/verification.js +75 -0
- package/dist/src/engine/verification.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/llm/cache.d.ts +20 -0
- package/dist/src/llm/cache.d.ts.map +1 -0
- package/dist/src/llm/cache.js +45 -0
- package/dist/src/llm/cache.js.map +1 -0
- package/dist/src/llm/providers/anthropic.d.ts +13 -0
- package/dist/src/llm/providers/anthropic.d.ts.map +1 -0
- package/dist/src/llm/providers/anthropic.js +69 -0
- package/dist/src/llm/providers/anthropic.js.map +1 -0
- package/dist/src/llm/providers/azure.d.ts +14 -0
- package/dist/src/llm/providers/azure.d.ts.map +1 -0
- package/dist/src/llm/providers/azure.js +98 -0
- package/dist/src/llm/providers/azure.js.map +1 -0
- package/dist/src/llm/providers/ollama.d.ts +13 -0
- package/dist/src/llm/providers/ollama.d.ts.map +1 -0
- package/dist/src/llm/providers/ollama.js +80 -0
- package/dist/src/llm/providers/ollama.js.map +1 -0
- package/dist/src/llm/providers/openai.d.ts +13 -0
- package/dist/src/llm/providers/openai.d.ts.map +1 -0
- package/dist/src/llm/providers/openai.js +74 -0
- package/dist/src/llm/providers/openai.js.map +1 -0
- package/dist/src/llm/router.d.ts +26 -0
- package/dist/src/llm/router.d.ts.map +1 -0
- package/dist/src/llm/router.js +104 -0
- package/dist/src/llm/router.js.map +1 -0
- package/dist/src/llm/types.d.ts +44 -0
- package/dist/src/llm/types.d.ts.map +1 -0
- package/dist/src/llm/types.js +2 -0
- package/dist/src/llm/types.js.map +1 -0
- package/dist/src/logging/audit-log.d.ts +89 -0
- package/dist/src/logging/audit-log.d.ts.map +1 -0
- package/dist/src/logging/audit-log.js +132 -0
- package/dist/src/logging/audit-log.js.map +1 -0
- package/dist/src/logging/logger.d.ts +13 -0
- package/dist/src/logging/logger.d.ts.map +1 -0
- package/dist/src/logging/logger.js +57 -0
- package/dist/src/logging/logger.js.map +1 -0
- package/dist/src/logging/redactor.d.ts +14 -0
- package/dist/src/logging/redactor.d.ts.map +1 -0
- package/dist/src/logging/redactor.js +48 -0
- package/dist/src/logging/redactor.js.map +1 -0
- package/dist/src/mcp/handlers.d.ts +21 -0
- package/dist/src/mcp/handlers.d.ts.map +1 -0
- package/dist/src/mcp/handlers.js +156 -0
- package/dist/src/mcp/handlers.js.map +1 -0
- package/dist/src/mcp/server.d.ts +8 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +40 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/types.d.ts +20 -0
- package/dist/src/mcp/types.d.ts.map +1 -0
- package/dist/src/mcp/types.js +2 -0
- package/dist/src/mcp/types.js.map +1 -0
- package/dist/src/plans/parser.d.ts +33 -0
- package/dist/src/plans/parser.d.ts.map +1 -0
- package/dist/src/plans/parser.js +93 -0
- package/dist/src/plans/parser.js.map +1 -0
- package/dist/src/plans/propose.d.ts +26 -0
- package/dist/src/plans/propose.d.ts.map +1 -0
- package/dist/src/plans/propose.js +85 -0
- package/dist/src/plans/propose.js.map +1 -0
- package/dist/src/plans/runner.d.ts +19 -0
- package/dist/src/plans/runner.d.ts.map +1 -0
- package/dist/src/plans/runner.js +159 -0
- package/dist/src/plans/runner.js.map +1 -0
- package/dist/src/plans/triggers.d.ts +12 -0
- package/dist/src/plans/triggers.d.ts.map +1 -0
- package/dist/src/plans/triggers.js +43 -0
- package/dist/src/plans/triggers.js.map +1 -0
- package/dist/src/plans/types.d.ts +454 -0
- package/dist/src/plans/types.d.ts.map +1 -0
- package/dist/src/plans/types.js +56 -0
- package/dist/src/plans/types.js.map +1 -0
- package/dist/src/policy/audit.d.ts +35 -0
- package/dist/src/policy/audit.d.ts.map +1 -0
- package/dist/src/policy/audit.js +39 -0
- package/dist/src/policy/audit.js.map +1 -0
- package/dist/src/policy/engine.d.ts +35 -0
- package/dist/src/policy/engine.d.ts.map +1 -0
- package/dist/src/policy/engine.js +134 -0
- package/dist/src/policy/engine.js.map +1 -0
- package/dist/src/policy/scope.d.ts +27 -0
- package/dist/src/policy/scope.d.ts.map +1 -0
- package/dist/src/policy/scope.js +89 -0
- package/dist/src/policy/scope.js.map +1 -0
- package/dist/src/policy/types.d.ts +15 -0
- package/dist/src/policy/types.d.ts.map +1 -0
- package/dist/src/policy/types.js +2 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/self-extend/generator.d.ts +27 -0
- package/dist/src/self-extend/generator.d.ts.map +1 -0
- package/dist/src/self-extend/generator.js +107 -0
- package/dist/src/self-extend/generator.js.map +1 -0
- package/dist/src/self-extend/publisher.d.ts +5 -0
- package/dist/src/self-extend/publisher.d.ts.map +1 -0
- package/dist/src/self-extend/publisher.js +40 -0
- package/dist/src/self-extend/publisher.js.map +1 -0
- package/dist/src/self-extend/sandbox.d.ts +10 -0
- package/dist/src/self-extend/sandbox.d.ts.map +1 -0
- package/dist/src/self-extend/sandbox.js +22 -0
- package/dist/src/self-extend/sandbox.js.map +1 -0
- package/dist/src/skills/hub/lockfile.d.ts +15 -0
- package/dist/src/skills/hub/lockfile.d.ts.map +1 -0
- package/dist/src/skills/hub/lockfile.js +13 -0
- package/dist/src/skills/hub/lockfile.js.map +1 -0
- package/dist/src/skills/hub/publisher.d.ts +7 -0
- package/dist/src/skills/hub/publisher.d.ts.map +1 -0
- package/dist/src/skills/hub/publisher.js +10 -0
- package/dist/src/skills/hub/publisher.js.map +1 -0
- package/dist/src/skills/hub/registry.d.ts +16 -0
- package/dist/src/skills/hub/registry.d.ts.map +1 -0
- package/dist/src/skills/hub/registry.js +24 -0
- package/dist/src/skills/hub/registry.js.map +1 -0
- package/dist/src/skills/index.d.ts +12 -0
- package/dist/src/skills/index.d.ts.map +1 -0
- package/dist/src/skills/index.js +82 -0
- package/dist/src/skills/index.js.map +1 -0
- package/dist/src/skills/lifecycle.d.ts +19 -0
- package/dist/src/skills/lifecycle.d.ts.map +1 -0
- package/dist/src/skills/lifecycle.js +48 -0
- package/dist/src/skills/lifecycle.js.map +1 -0
- package/dist/src/skills/loader.d.ts +43 -0
- package/dist/src/skills/loader.d.ts.map +1 -0
- package/dist/src/skills/loader.js +142 -0
- package/dist/src/skills/loader.js.map +1 -0
- package/dist/src/skills/runner.d.ts +43 -0
- package/dist/src/skills/runner.d.ts.map +1 -0
- package/dist/src/skills/runner.js +198 -0
- package/dist/src/skills/runner.js.map +1 -0
- package/dist/src/skills/types.d.ts +150 -0
- package/dist/src/skills/types.d.ts.map +1 -0
- package/dist/src/skills/types.js +31 -0
- package/dist/src/skills/types.js.map +1 -0
- package/dist/src/skills/validator.d.ts +19 -0
- package/dist/src/skills/validator.d.ts.map +1 -0
- package/dist/src/skills/validator.js +92 -0
- package/dist/src/skills/validator.js.map +1 -0
- package/dist/src/tools/core/cmd.d.ts +24 -0
- package/dist/src/tools/core/cmd.d.ts.map +1 -0
- package/dist/src/tools/core/cmd.js +55 -0
- package/dist/src/tools/core/cmd.js.map +1 -0
- package/dist/src/tools/core/fs.d.ts +76 -0
- package/dist/src/tools/core/fs.d.ts.map +1 -0
- package/dist/src/tools/core/fs.js +173 -0
- package/dist/src/tools/core/fs.js.map +1 -0
- package/dist/src/tools/core/git.d.ts +62 -0
- package/dist/src/tools/core/git.d.ts.map +1 -0
- package/dist/src/tools/core/git.js +138 -0
- package/dist/src/tools/core/git.js.map +1 -0
- package/dist/src/tools/core/project.d.ts +17 -0
- package/dist/src/tools/core/project.d.ts.map +1 -0
- package/dist/src/tools/core/project.js +104 -0
- package/dist/src/tools/core/project.js.map +1 -0
- package/dist/src/tools/plugins/loader.d.ts +13 -0
- package/dist/src/tools/plugins/loader.d.ts.map +1 -0
- package/dist/src/tools/plugins/loader.js +36 -0
- package/dist/src/tools/plugins/loader.js.map +1 -0
- package/dist/src/tools/registry.d.ts +38 -0
- package/dist/src/tools/registry.d.ts.map +1 -0
- package/dist/src/tools/registry.js +118 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/types.d.ts +46 -0
- package/dist/src/tools/types.d.ts.map +1 -0
- package/dist/src/tools/types.js +10 -0
- package/dist/src/tools/types.js.map +1 -0
- package/dist/src/utils/hash.d.ts +13 -0
- package/dist/src/utils/hash.d.ts.map +1 -0
- package/dist/src/utils/hash.js +22 -0
- package/dist/src/utils/hash.js.map +1 -0
- package/dist/src/utils/paths.d.ts +45 -0
- package/dist/src/utils/paths.d.ts.map +1 -0
- package/dist/src/utils/paths.js +71 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/schema.d.ts +16 -0
- package/dist/src/utils/schema.d.ts.map +1 -0
- package/dist/src/utils/schema.js +66 -0
- package/dist/src/utils/schema.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../../src/llm/providers/azure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LLMProvider, LLMRequest, LLMResponse } from '../types.js';
|
|
2
|
+
import type { ModelProvider } from '../../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Ollama provider adapter (local model support)
|
|
5
|
+
*/
|
|
6
|
+
export declare class OllamaProvider implements LLMProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config: ModelProvider);
|
|
10
|
+
chat(request: LLMRequest): Promise<LLMResponse>;
|
|
11
|
+
isAvailable(): Promise<boolean>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=ollama.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/llm/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAoE/C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CASxC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ollama provider adapter (local model support)
|
|
3
|
+
*/
|
|
4
|
+
export class OllamaProvider {
|
|
5
|
+
name = 'ollama';
|
|
6
|
+
config;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
}
|
|
10
|
+
async chat(request) {
|
|
11
|
+
const baseUrl = this.config.baseUrl ?? 'http://localhost:11434';
|
|
12
|
+
const messages = request.messages.map((m) => ({
|
|
13
|
+
role: m.role,
|
|
14
|
+
content: m.content,
|
|
15
|
+
}));
|
|
16
|
+
const body = {
|
|
17
|
+
model: this.config.model,
|
|
18
|
+
messages,
|
|
19
|
+
stream: false,
|
|
20
|
+
options: {
|
|
21
|
+
temperature: request.temperature ?? this.config.temperature,
|
|
22
|
+
num_predict: request.maxTokens ?? this.config.maxTokens,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
// Ollama tool support (if available)
|
|
26
|
+
if (request.tools && request.tools.length > 0) {
|
|
27
|
+
body['tools'] = request.tools.map((t) => ({
|
|
28
|
+
type: 'function',
|
|
29
|
+
function: {
|
|
30
|
+
name: t.name,
|
|
31
|
+
description: t.description,
|
|
32
|
+
parameters: t.inputSchema,
|
|
33
|
+
},
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
const response = await fetch(`${baseUrl}/api/chat`, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: { 'Content-Type': 'application/json' },
|
|
39
|
+
body: JSON.stringify(body),
|
|
40
|
+
});
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
throw new Error(`Ollama request failed: ${response.status} ${response.statusText}`);
|
|
43
|
+
}
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
const toolCalls = [];
|
|
46
|
+
if (data.message?.tool_calls) {
|
|
47
|
+
for (const tc of data.message.tool_calls) {
|
|
48
|
+
toolCalls.push({
|
|
49
|
+
id: `ollama-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`,
|
|
50
|
+
name: tc.function.name,
|
|
51
|
+
args: tc.function.arguments,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
content: data.message?.content ?? '',
|
|
57
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
58
|
+
usage: data.eval_count
|
|
59
|
+
? {
|
|
60
|
+
promptTokens: data.prompt_eval_count ?? 0,
|
|
61
|
+
completionTokens: data.eval_count,
|
|
62
|
+
totalTokens: (data.prompt_eval_count ?? 0) + data.eval_count,
|
|
63
|
+
}
|
|
64
|
+
: undefined,
|
|
65
|
+
provider: 'ollama',
|
|
66
|
+
model: this.config.model,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async isAvailable() {
|
|
70
|
+
const baseUrl = this.config.baseUrl ?? 'http://localhost:11434';
|
|
71
|
+
try {
|
|
72
|
+
const response = await fetch(`${baseUrl}/api/tags`, { signal: AbortSignal.timeout(3000) });
|
|
73
|
+
return response.ok;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/llm/providers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LLMProvider, LLMRequest, LLMResponse } from '../types.js';
|
|
2
|
+
import type { ModelProvider } from '../../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* OpenAI provider adapter
|
|
5
|
+
*/
|
|
6
|
+
export declare class OpenAIProvider implements LLMProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config: ModelProvider);
|
|
10
|
+
chat(request: LLMRequest): Promise<LLMResponse>;
|
|
11
|
+
isAvailable(): Promise<boolean>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/llm/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,qBAAa,cAAe,YAAW,WAAW;IAC9C,IAAI,SAAY;IAChB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAkE/C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAIxC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI provider adapter
|
|
3
|
+
*/
|
|
4
|
+
export class OpenAIProvider {
|
|
5
|
+
name = 'openai';
|
|
6
|
+
config;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.config = config;
|
|
9
|
+
}
|
|
10
|
+
async chat(request) {
|
|
11
|
+
const { default: OpenAI } = await import('openai');
|
|
12
|
+
const client = new OpenAI({
|
|
13
|
+
apiKey: this.config.apiKey ?? process.env['OPENAI_API_KEY'],
|
|
14
|
+
baseURL: this.config.baseUrl,
|
|
15
|
+
});
|
|
16
|
+
const tools = request.tools?.map((t) => ({
|
|
17
|
+
type: 'function',
|
|
18
|
+
function: {
|
|
19
|
+
name: t.name,
|
|
20
|
+
description: t.description,
|
|
21
|
+
parameters: t.inputSchema,
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
const messages = request.messages.map((m) => {
|
|
25
|
+
if (m.role === 'tool') {
|
|
26
|
+
return {
|
|
27
|
+
role: 'tool',
|
|
28
|
+
content: m.content,
|
|
29
|
+
tool_call_id: m.toolCallId ?? '',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
role: m.role,
|
|
34
|
+
content: m.content,
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
const response = await client.chat.completions.create({
|
|
38
|
+
model: this.config.model,
|
|
39
|
+
messages,
|
|
40
|
+
tools: tools && tools.length > 0 ? tools : undefined,
|
|
41
|
+
max_tokens: request.maxTokens ?? this.config.maxTokens,
|
|
42
|
+
temperature: request.temperature ?? this.config.temperature,
|
|
43
|
+
});
|
|
44
|
+
const choice = response.choices[0];
|
|
45
|
+
const toolCalls = [];
|
|
46
|
+
if (choice.message.tool_calls) {
|
|
47
|
+
for (const tc of choice.message.tool_calls) {
|
|
48
|
+
toolCalls.push({
|
|
49
|
+
id: tc.id,
|
|
50
|
+
name: tc.function.name,
|
|
51
|
+
args: JSON.parse(tc.function.arguments),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
content: choice.message.content ?? '',
|
|
57
|
+
toolCalls: toolCalls.length > 0 ? toolCalls : undefined,
|
|
58
|
+
usage: response.usage
|
|
59
|
+
? {
|
|
60
|
+
promptTokens: response.usage.prompt_tokens,
|
|
61
|
+
completionTokens: response.usage.completion_tokens,
|
|
62
|
+
totalTokens: response.usage.total_tokens,
|
|
63
|
+
}
|
|
64
|
+
: undefined,
|
|
65
|
+
provider: 'openai',
|
|
66
|
+
model: this.config.model,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async isAvailable() {
|
|
70
|
+
const key = this.config.apiKey ?? process.env['OPENAI_API_KEY'];
|
|
71
|
+
return !!key;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/llm/providers/openai.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB,IAAI,GAAG,QAAQ,CAAC;IACR,MAAM,CAAgB;IAE9B,YAAY,MAAqB;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAmB;QAC1B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;YAC3D,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE;gBACN,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,UAAU,EAAE,CAAC,CAAC,WAAsC;aACvD;SACJ,CAAC,CAAC,CAAC;QAEJ,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO;oBACH,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,YAAY,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;iBACnC,CAAC;YACN,CAAC;YACD,OAAO;gBACH,IAAI,EAAE,CAAC,CAAC,IAAuC;gBAC/C,OAAO,EAAE,CAAC,CAAC,OAAO;aACrB,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAClD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,QAAQ;YACR,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACpD,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS;YACtD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;SAC9D,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,SAAS,GAAkB,EAAE,CAAC;QAEpC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACzC,SAAS,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;iBAC1C,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE;YACrC,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACvD,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACjB,CAAC,CAAC;oBACE,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;oBAC1C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;oBAClD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;iBAC3C;gBACD,CAAC,CAAC,SAAS;YACf,QAAQ,EAAE,QAAQ;YAClB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SAC3B,CAAC;IACN,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAChE,OAAO,CAAC,CAAC,GAAG,CAAC;IACjB,CAAC;CACJ"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { LLMProvider, LLMRequest, LLMResponse } from './types.js';
|
|
2
|
+
import type { AgentConfig } from '../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* LLM Router — selects and routes requests to the appropriate provider
|
|
5
|
+
* with configurable offline-first, online fallback, and per-skill overrides
|
|
6
|
+
*/
|
|
7
|
+
export declare class LLMRouter {
|
|
8
|
+
private providers;
|
|
9
|
+
private config;
|
|
10
|
+
constructor(config: AgentConfig);
|
|
11
|
+
/**
|
|
12
|
+
* Send a chat request to the best available provider
|
|
13
|
+
*/
|
|
14
|
+
chat(request: LLMRequest): Promise<LLMResponse>;
|
|
15
|
+
/**
|
|
16
|
+
* Check which providers are available
|
|
17
|
+
*/
|
|
18
|
+
getAvailableProviders(): Promise<string[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Get a specific provider
|
|
21
|
+
*/
|
|
22
|
+
getProvider(name: string): LLMProvider | undefined;
|
|
23
|
+
private initProviders;
|
|
24
|
+
private getOfflineFirstChain;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/llm/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAMvD;;;GAGG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAK/B;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAsCrD;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUhD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMlD,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,oBAAoB;CAe/B"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { OpenAIProvider } from './providers/openai.js';
|
|
2
|
+
import { AnthropicProvider } from './providers/anthropic.js';
|
|
3
|
+
import { OllamaProvider } from './providers/ollama.js';
|
|
4
|
+
import { AzureOpenAIProvider } from './providers/azure.js';
|
|
5
|
+
/**
|
|
6
|
+
* LLM Router — selects and routes requests to the appropriate provider
|
|
7
|
+
* with configurable offline-first, online fallback, and per-skill overrides
|
|
8
|
+
*/
|
|
9
|
+
export class LLMRouter {
|
|
10
|
+
providers = new Map();
|
|
11
|
+
config;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.config = config;
|
|
14
|
+
this.initProviders();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Send a chat request to the best available provider
|
|
18
|
+
*/
|
|
19
|
+
async chat(request) {
|
|
20
|
+
// Check for skill-specific provider override
|
|
21
|
+
if (request.skillName) {
|
|
22
|
+
const override = this.config.models.routing.skillOverrides[request.skillName];
|
|
23
|
+
if (override) {
|
|
24
|
+
const provider = this.providers.get(override);
|
|
25
|
+
if (provider && await provider.isAvailable()) {
|
|
26
|
+
return provider.chat(request);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Determine provider order based on routing config
|
|
31
|
+
const chain = this.config.models.routing.offlineFirst
|
|
32
|
+
? this.getOfflineFirstChain()
|
|
33
|
+
: this.config.models.routing.fallbackChain;
|
|
34
|
+
// Try providers in order
|
|
35
|
+
for (const providerName of chain) {
|
|
36
|
+
const provider = this.providers.get(providerName);
|
|
37
|
+
if (!provider)
|
|
38
|
+
continue;
|
|
39
|
+
try {
|
|
40
|
+
if (await provider.isAvailable()) {
|
|
41
|
+
return await provider.chat(request);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
// Log error and try next provider
|
|
46
|
+
console.error(`Provider ${providerName} failed: ${err.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw new Error(`No LLM provider available. Tried: ${chain.join(', ')}. ` +
|
|
50
|
+
'Configure providers in agent.config.json or set API key environment variables.');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check which providers are available
|
|
54
|
+
*/
|
|
55
|
+
async getAvailableProviders() {
|
|
56
|
+
const available = [];
|
|
57
|
+
for (const [name, provider] of this.providers) {
|
|
58
|
+
if (await provider.isAvailable()) {
|
|
59
|
+
available.push(name);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return available;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get a specific provider
|
|
66
|
+
*/
|
|
67
|
+
getProvider(name) {
|
|
68
|
+
return this.providers.get(name);
|
|
69
|
+
}
|
|
70
|
+
// ─── Private ───
|
|
71
|
+
initProviders() {
|
|
72
|
+
for (const [name, providerConfig] of Object.entries(this.config.models.providers)) {
|
|
73
|
+
switch (providerConfig.type) {
|
|
74
|
+
case 'openai':
|
|
75
|
+
this.providers.set(name, new OpenAIProvider(providerConfig));
|
|
76
|
+
break;
|
|
77
|
+
case 'anthropic':
|
|
78
|
+
this.providers.set(name, new AnthropicProvider(providerConfig));
|
|
79
|
+
break;
|
|
80
|
+
case 'ollama':
|
|
81
|
+
this.providers.set(name, new OllamaProvider(providerConfig));
|
|
82
|
+
break;
|
|
83
|
+
case 'azure':
|
|
84
|
+
this.providers.set(name, new AzureOpenAIProvider(providerConfig));
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
getOfflineFirstChain() {
|
|
90
|
+
// Put local providers first
|
|
91
|
+
const local = [];
|
|
92
|
+
const online = [];
|
|
93
|
+
for (const [name, config] of Object.entries(this.config.models.providers)) {
|
|
94
|
+
if (config.type === 'ollama') {
|
|
95
|
+
local.push(name);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
online.push(name);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return [...local, ...online];
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/llm/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM types — request/response shapes for provider abstraction
|
|
3
|
+
*/
|
|
4
|
+
export interface LLMMessage {
|
|
5
|
+
role: 'system' | 'user' | 'assistant' | 'tool';
|
|
6
|
+
content: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
toolCallId?: string;
|
|
9
|
+
toolCalls?: LLMToolCall[];
|
|
10
|
+
}
|
|
11
|
+
export interface LLMToolDefinition {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
inputSchema: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface LLMRequest {
|
|
17
|
+
messages: LLMMessage[];
|
|
18
|
+
tools?: LLMToolDefinition[];
|
|
19
|
+
maxTokens?: number;
|
|
20
|
+
temperature?: number;
|
|
21
|
+
skillName?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface LLMToolCall {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
args: unknown;
|
|
27
|
+
}
|
|
28
|
+
export interface LLMResponse {
|
|
29
|
+
content: string;
|
|
30
|
+
toolCalls?: LLMToolCall[];
|
|
31
|
+
usage?: {
|
|
32
|
+
promptTokens: number;
|
|
33
|
+
completionTokens: number;
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
};
|
|
36
|
+
provider: string;
|
|
37
|
+
model: string;
|
|
38
|
+
}
|
|
39
|
+
export interface LLMProvider {
|
|
40
|
+
name: string;
|
|
41
|
+
chat(request: LLMRequest): Promise<LLMResponse>;
|
|
42
|
+
isAvailable(): Promise<boolean>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/llm/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE;QACJ,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACnC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/llm/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type AuditEvent } from '../policy/audit.js';
|
|
2
|
+
export interface RunLog {
|
|
3
|
+
runId: string;
|
|
4
|
+
planName?: string;
|
|
5
|
+
startedAt: string;
|
|
6
|
+
completedAt?: string;
|
|
7
|
+
status: 'running' | 'completed' | 'failed' | 'aborted';
|
|
8
|
+
events: AuditEvent[];
|
|
9
|
+
steps: StepLog[];
|
|
10
|
+
diffs: DiffEntry[];
|
|
11
|
+
summary?: RunSummary;
|
|
12
|
+
}
|
|
13
|
+
export interface StepLog {
|
|
14
|
+
stepId: string;
|
|
15
|
+
skill?: string;
|
|
16
|
+
tool?: string;
|
|
17
|
+
startedAt: string;
|
|
18
|
+
completedAt?: string;
|
|
19
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
|
|
20
|
+
input?: Record<string, unknown>;
|
|
21
|
+
output?: Record<string, unknown>;
|
|
22
|
+
error?: string;
|
|
23
|
+
verification?: {
|
|
24
|
+
passed: boolean;
|
|
25
|
+
details: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface DiffEntry {
|
|
29
|
+
file: string;
|
|
30
|
+
before: string;
|
|
31
|
+
after: string;
|
|
32
|
+
stepId: string;
|
|
33
|
+
timestamp: string;
|
|
34
|
+
}
|
|
35
|
+
export interface RunSummary {
|
|
36
|
+
stepsCompleted: number;
|
|
37
|
+
stepsFailed: number;
|
|
38
|
+
stepsSkipped: number;
|
|
39
|
+
filesChanged: number;
|
|
40
|
+
durationMs: number;
|
|
41
|
+
verificationsPassed: number;
|
|
42
|
+
verificationsFailed: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Audit logger — writes run-level audit logs to .agent/runs/<runId>/
|
|
46
|
+
*/
|
|
47
|
+
export declare class AuditLogger {
|
|
48
|
+
private runLog;
|
|
49
|
+
private runDir;
|
|
50
|
+
constructor(runId: string, planName?: string);
|
|
51
|
+
/**
|
|
52
|
+
* Initialize the run directory
|
|
53
|
+
*/
|
|
54
|
+
init(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Add a step log entry
|
|
57
|
+
*/
|
|
58
|
+
addStep(step: StepLog): void;
|
|
59
|
+
/**
|
|
60
|
+
* Update an existing step
|
|
61
|
+
*/
|
|
62
|
+
updateStep(stepId: string, updates: Partial<StepLog>): void;
|
|
63
|
+
/**
|
|
64
|
+
* Record a file diff
|
|
65
|
+
*/
|
|
66
|
+
addDiff(diff: DiffEntry): void;
|
|
67
|
+
/**
|
|
68
|
+
* Complete the run
|
|
69
|
+
*/
|
|
70
|
+
complete(status: 'completed' | 'failed' | 'aborted'): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Get the current run log
|
|
73
|
+
*/
|
|
74
|
+
getRunLog(): RunLog;
|
|
75
|
+
/**
|
|
76
|
+
* Save the run log to disk
|
|
77
|
+
*/
|
|
78
|
+
save(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Load a run log from disk
|
|
81
|
+
*/
|
|
82
|
+
static loadRun(runId: string): Promise<RunLog | null>;
|
|
83
|
+
/**
|
|
84
|
+
* List all run IDs
|
|
85
|
+
*/
|
|
86
|
+
static listRuns(): Promise<string[]>;
|
|
87
|
+
private buildSummary;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=audit-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../src/logging/audit-log.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACvD;AAED,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;gBAEX,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAkB5C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI5B;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAO3D;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI9B;;OAEG;IACG,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzE;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;WACU,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAU3D;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAe1C,OAAO,CAAC,YAAY;CAiBvB"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { mkdir, writeFile, readFile, readdir } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { getRunsDir } from '../utils/paths.js';
|
|
4
|
+
import { auditEmitter } from '../policy/audit.js';
|
|
5
|
+
import { redactSecrets } from '../config/secrets.js';
|
|
6
|
+
/**
|
|
7
|
+
* Audit logger — writes run-level audit logs to .agent/runs/<runId>/
|
|
8
|
+
*/
|
|
9
|
+
export class AuditLogger {
|
|
10
|
+
runLog;
|
|
11
|
+
runDir;
|
|
12
|
+
constructor(runId, planName) {
|
|
13
|
+
this.runDir = path.join(getRunsDir(), runId);
|
|
14
|
+
this.runLog = {
|
|
15
|
+
runId,
|
|
16
|
+
planName,
|
|
17
|
+
startedAt: new Date().toISOString(),
|
|
18
|
+
status: 'running',
|
|
19
|
+
events: [],
|
|
20
|
+
steps: [],
|
|
21
|
+
diffs: [],
|
|
22
|
+
};
|
|
23
|
+
// Subscribe to audit events
|
|
24
|
+
auditEmitter.onAudit((event) => {
|
|
25
|
+
this.runLog.events.push(event);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the run directory
|
|
30
|
+
*/
|
|
31
|
+
async init() {
|
|
32
|
+
await mkdir(this.runDir, { recursive: true });
|
|
33
|
+
await this.save();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Add a step log entry
|
|
37
|
+
*/
|
|
38
|
+
addStep(step) {
|
|
39
|
+
this.runLog.steps.push(step);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Update an existing step
|
|
43
|
+
*/
|
|
44
|
+
updateStep(stepId, updates) {
|
|
45
|
+
const step = this.runLog.steps.find((s) => s.stepId === stepId);
|
|
46
|
+
if (step) {
|
|
47
|
+
Object.assign(step, updates);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Record a file diff
|
|
52
|
+
*/
|
|
53
|
+
addDiff(diff) {
|
|
54
|
+
this.runLog.diffs.push(diff);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Complete the run
|
|
58
|
+
*/
|
|
59
|
+
async complete(status) {
|
|
60
|
+
this.runLog.completedAt = new Date().toISOString();
|
|
61
|
+
this.runLog.status = status;
|
|
62
|
+
this.runLog.summary = this.buildSummary();
|
|
63
|
+
await this.save();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the current run log
|
|
67
|
+
*/
|
|
68
|
+
getRunLog() {
|
|
69
|
+
return this.runLog;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Save the run log to disk
|
|
73
|
+
*/
|
|
74
|
+
async save() {
|
|
75
|
+
const logPath = path.join(this.runDir, 'run.json');
|
|
76
|
+
const content = JSON.stringify(this.runLog, null, 2);
|
|
77
|
+
await writeFile(logPath, redactSecrets(content), 'utf-8');
|
|
78
|
+
// Save diffs separately
|
|
79
|
+
if (this.runLog.diffs.length > 0) {
|
|
80
|
+
const diffPath = path.join(this.runDir, 'diffs.json');
|
|
81
|
+
await writeFile(diffPath, JSON.stringify(this.runLog.diffs, null, 2), 'utf-8');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ─── Static helpers ───
|
|
85
|
+
/**
|
|
86
|
+
* Load a run log from disk
|
|
87
|
+
*/
|
|
88
|
+
static async loadRun(runId) {
|
|
89
|
+
const runDir = path.join(getRunsDir(), runId);
|
|
90
|
+
try {
|
|
91
|
+
const content = await readFile(path.join(runDir, 'run.json'), 'utf-8');
|
|
92
|
+
return JSON.parse(content);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* List all run IDs
|
|
100
|
+
*/
|
|
101
|
+
static async listRuns() {
|
|
102
|
+
try {
|
|
103
|
+
const entries = await readdir(getRunsDir(), { withFileTypes: true });
|
|
104
|
+
return entries
|
|
105
|
+
.filter((e) => e.isDirectory())
|
|
106
|
+
.map((e) => e.name)
|
|
107
|
+
.sort()
|
|
108
|
+
.reverse();
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ─── Private ───
|
|
115
|
+
buildSummary() {
|
|
116
|
+
const steps = this.runLog.steps;
|
|
117
|
+
const startTime = new Date(this.runLog.startedAt).getTime();
|
|
118
|
+
const endTime = this.runLog.completedAt
|
|
119
|
+
? new Date(this.runLog.completedAt).getTime()
|
|
120
|
+
: Date.now();
|
|
121
|
+
return {
|
|
122
|
+
stepsCompleted: steps.filter((s) => s.status === 'completed').length,
|
|
123
|
+
stepsFailed: steps.filter((s) => s.status === 'failed').length,
|
|
124
|
+
stepsSkipped: steps.filter((s) => s.status === 'skipped').length,
|
|
125
|
+
filesChanged: new Set(this.runLog.diffs.map((d) => d.file)).size,
|
|
126
|
+
durationMs: endTime - startTime,
|
|
127
|
+
verificationsPassed: steps.filter((s) => s.verification?.passed).length,
|
|
128
|
+
verificationsFailed: steps.filter((s) => s.verification && !s.verification.passed).length,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=audit-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../../src/logging/audit-log.ts"],"names":[],"mappings":"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"}
|