opena2a-cli 0.1.0 → 0.1.2
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 +280 -0
- package/dist/adapters/registry.js +1 -1
- package/dist/adapters/registry.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +78 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/protect.d.ts +2 -0
- package/dist/commands/protect.d.ts.map +1 -1
- package/dist/commands/protect.js +56 -10
- package/dist/commands/protect.js.map +1 -1
- package/dist/commands/runtime.d.ts +1 -1
- package/dist/commands/runtime.js +5 -5
- package/dist/commands/runtime.js.map +1 -1
- package/dist/commands/self-register.js +6 -6
- package/dist/commands/self-register.js.map +1 -1
- package/dist/commands/shield.d.ts +36 -0
- package/dist/commands/shield.d.ts.map +1 -0
- package/dist/commands/shield.js +834 -0
- package/dist/commands/shield.js.map +1 -0
- package/dist/commands/verify.js +1 -1
- package/dist/commands/verify.js.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/shield/detect.d.ts +18 -0
- package/dist/shield/detect.d.ts.map +1 -0
- package/dist/shield/detect.js +402 -0
- package/dist/shield/detect.js.map +1 -0
- package/dist/shield/events.d.ts +65 -0
- package/dist/shield/events.d.ts.map +1 -0
- package/dist/shield/events.js +342 -0
- package/dist/shield/events.js.map +1 -0
- package/dist/shield/init.d.ts +22 -0
- package/dist/shield/init.d.ts.map +1 -0
- package/dist/shield/init.js +290 -0
- package/dist/shield/init.js.map +1 -0
- package/dist/shield/integrity.d.ts +75 -0
- package/dist/shield/integrity.d.ts.map +1 -0
- package/dist/shield/integrity.js +435 -0
- package/dist/shield/integrity.js.map +1 -0
- package/dist/shield/llm-backend.d.ts +36 -0
- package/dist/shield/llm-backend.d.ts.map +1 -0
- package/dist/shield/llm-backend.js +145 -0
- package/dist/shield/llm-backend.js.map +1 -0
- package/dist/shield/llm.d.ts +116 -0
- package/dist/shield/llm.d.ts.map +1 -0
- package/dist/shield/llm.js +536 -0
- package/dist/shield/llm.js.map +1 -0
- package/dist/shield/policy.d.ts +70 -0
- package/dist/shield/policy.d.ts.map +1 -0
- package/dist/shield/policy.js +399 -0
- package/dist/shield/policy.js.map +1 -0
- package/dist/shield/session.d.ts +63 -0
- package/dist/shield/session.d.ts.map +1 -0
- package/dist/shield/session.js +242 -0
- package/dist/shield/session.js.map +1 -0
- package/dist/shield/signing.d.ts +41 -0
- package/dist/shield/signing.d.ts.map +1 -0
- package/dist/shield/signing.js +161 -0
- package/dist/shield/signing.js.map +1 -0
- package/dist/shield/status.d.ts +4 -0
- package/dist/shield/status.d.ts.map +1 -0
- package/dist/shield/status.js +241 -0
- package/dist/shield/status.js.map +1 -0
- package/dist/shield/types.d.ts +398 -0
- package/dist/shield/types.d.ts.map +1 -0
- package/dist/shield/types.js +31 -0
- package/dist/shield/types.js.map +1 -0
- package/dist/util/drift-liveness.d.ts +37 -0
- package/dist/util/drift-liveness.d.ts.map +1 -0
- package/dist/util/drift-liveness.js +114 -0
- package/dist/util/drift-liveness.js.map +1 -0
- package/dist/util/drift-verification.d.ts +60 -0
- package/dist/util/drift-verification.d.ts.map +1 -0
- package/dist/util/drift-verification.js +457 -0
- package/dist/util/drift-verification.js.map +1 -0
- package/package.json +4 -2
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Shield LLM Backend Abstraction
|
|
3
|
+
//
|
|
4
|
+
// Two backends:
|
|
5
|
+
// 1. Claude Code CLI (primary, zero-config): detects `claude` binary and
|
|
6
|
+
// uses `claude --print` for completions. No API key required.
|
|
7
|
+
// 2. Anthropic API (secondary): uses ANTHROPIC_API_KEY for direct API calls.
|
|
8
|
+
//
|
|
9
|
+
// Nesting prevention: if $CLAUDECODE is set, we're already inside a Claude
|
|
10
|
+
// Code session and spawning `claude --print` would nest. Fall back to API.
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.isClaudeCodeAvailable = isClaudeCodeAvailable;
|
|
13
|
+
exports.detectBackend = detectBackend;
|
|
14
|
+
exports.callClaudeCode = callClaudeCode;
|
|
15
|
+
exports.callLlm = callLlm;
|
|
16
|
+
const node_child_process_1 = require("node:child_process");
|
|
17
|
+
const CLAUDE_CODE_TIMEOUT_MS = 30_000;
|
|
18
|
+
// Approximate tokens from text length (used when Claude Code doesn't report exact counts)
|
|
19
|
+
function estimateTokens(text) {
|
|
20
|
+
// ~4 chars per token is a reasonable approximation
|
|
21
|
+
return Math.ceil(text.length / 4);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Check if the Claude Code CLI binary is available and safe to call.
|
|
25
|
+
*
|
|
26
|
+
* Returns false if:
|
|
27
|
+
* - `which claude` fails (not installed)
|
|
28
|
+
* - $CLAUDECODE is set (nesting prevention)
|
|
29
|
+
*/
|
|
30
|
+
function isClaudeCodeAvailable() {
|
|
31
|
+
// Nesting prevention: if CLAUDECODE env var is set, we're already
|
|
32
|
+
// inside a Claude Code session. Don't spawn another.
|
|
33
|
+
if (process.env.CLAUDECODE) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const result = (0, node_child_process_1.execSync)('which claude', {
|
|
38
|
+
encoding: 'utf-8',
|
|
39
|
+
timeout: 5_000,
|
|
40
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
41
|
+
});
|
|
42
|
+
return result.trim().length > 0;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Detect which LLM backend is available.
|
|
50
|
+
*
|
|
51
|
+
* Priority:
|
|
52
|
+
* 1. Claude Code CLI (zero-config, no API key needed)
|
|
53
|
+
* 2. Anthropic API (requires ANTHROPIC_API_KEY + consent)
|
|
54
|
+
* 3. None
|
|
55
|
+
*/
|
|
56
|
+
async function detectBackend() {
|
|
57
|
+
// 1. Try Claude Code CLI
|
|
58
|
+
if (isClaudeCodeAvailable()) {
|
|
59
|
+
return { backend: 'claude-code' };
|
|
60
|
+
}
|
|
61
|
+
// 2. Try Anthropic API
|
|
62
|
+
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
63
|
+
if (apiKey) {
|
|
64
|
+
// Check consent via @opena2a/shared
|
|
65
|
+
try {
|
|
66
|
+
const shared = await import('@opena2a/shared');
|
|
67
|
+
const mod = 'default' in shared ? shared.default : shared;
|
|
68
|
+
if (!mod.isLlmEnabled()) {
|
|
69
|
+
return { backend: 'none' };
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// shared not available -- allow (backward compat)
|
|
74
|
+
}
|
|
75
|
+
return { backend: 'api', apiKey };
|
|
76
|
+
}
|
|
77
|
+
return { backend: 'none' };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Call the Claude Code CLI as an LLM backend.
|
|
81
|
+
*
|
|
82
|
+
* Uses `claude --print` with JSON output format and Haiku model
|
|
83
|
+
* for cost-efficient, fast completions.
|
|
84
|
+
*/
|
|
85
|
+
function callClaudeCode(systemPrompt, userPrompt, _maxTokens) {
|
|
86
|
+
try {
|
|
87
|
+
const result = (0, node_child_process_1.execFileSync)('claude', [
|
|
88
|
+
'--print',
|
|
89
|
+
'--output-format', 'json',
|
|
90
|
+
'--model', 'haiku',
|
|
91
|
+
'--max-turns', '1',
|
|
92
|
+
'--no-session-persistence',
|
|
93
|
+
'--system-prompt', systemPrompt,
|
|
94
|
+
userPrompt,
|
|
95
|
+
], {
|
|
96
|
+
encoding: 'utf-8',
|
|
97
|
+
timeout: CLAUDE_CODE_TIMEOUT_MS,
|
|
98
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
99
|
+
env: { ...process.env },
|
|
100
|
+
});
|
|
101
|
+
// Parse JSON output from claude --print --output-format json
|
|
102
|
+
const parsed = JSON.parse(result);
|
|
103
|
+
const text = parsed.result ?? '';
|
|
104
|
+
if (!text)
|
|
105
|
+
return null;
|
|
106
|
+
return {
|
|
107
|
+
text,
|
|
108
|
+
inputTokens: estimateTokens(systemPrompt + userPrompt),
|
|
109
|
+
outputTokens: estimateTokens(text),
|
|
110
|
+
backend: 'claude-code',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Unified LLM call interface.
|
|
119
|
+
*
|
|
120
|
+
* Routes to Claude Code CLI or Anthropic API based on detected backend.
|
|
121
|
+
* Returns null if no backend is available or the call fails.
|
|
122
|
+
*/
|
|
123
|
+
async function callLlm(systemPrompt, userPrompt, maxTokens) {
|
|
124
|
+
const { backend, apiKey } = await detectBackend();
|
|
125
|
+
if (backend === 'none')
|
|
126
|
+
return null;
|
|
127
|
+
if (backend === 'claude-code') {
|
|
128
|
+
return callClaudeCode(systemPrompt, userPrompt, maxTokens);
|
|
129
|
+
}
|
|
130
|
+
// API backend -- use callHaiku (imported lazily to avoid circular deps)
|
|
131
|
+
if (backend === 'api' && apiKey) {
|
|
132
|
+
const { callHaiku } = await import('./llm.js');
|
|
133
|
+
const result = await callHaiku(systemPrompt, userPrompt, maxTokens, apiKey);
|
|
134
|
+
if (!result)
|
|
135
|
+
return null;
|
|
136
|
+
return {
|
|
137
|
+
text: result.text,
|
|
138
|
+
inputTokens: result.inputTokens,
|
|
139
|
+
outputTokens: result.outputTokens,
|
|
140
|
+
backend: 'api',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=llm-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-backend.js","sourceRoot":"","sources":["../../src/shield/llm-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shield LLM Intelligence Layer
|
|
3
|
+
*
|
|
4
|
+
* Uses Claude Haiku for lightweight, cost-efficient security analysis:
|
|
5
|
+
* 1. Policy suggestions from observed agent behavior
|
|
6
|
+
* 2. Anomaly explanations for unusual actions
|
|
7
|
+
* 3. Weekly report narrative generation
|
|
8
|
+
* 4. Incident triage and severity classification
|
|
9
|
+
*
|
|
10
|
+
* Design principles:
|
|
11
|
+
* - Batch processing: aggregate events, analyze in bulk (not per-event)
|
|
12
|
+
* - Aggressive caching: file-based cache with TTLs per analysis type
|
|
13
|
+
* - Graceful degradation: returns null if no API key or no consent
|
|
14
|
+
* - Cost target: <$1/month at typical usage (~$0.40/month estimated)
|
|
15
|
+
* - Zero network by default: only calls API when LLM is explicitly enabled
|
|
16
|
+
*/
|
|
17
|
+
import type { AnomalyExplanation, IncidentTriage, LlmAnalysisType, LlmBackend, LlmCache, LlmCacheEntry, PolicySuggestion, ReportNarrative, ShieldEvent, WeeklyReport } from './types.js';
|
|
18
|
+
/** Load the LLM response cache from disk. Verifies signature integrity first. */
|
|
19
|
+
export declare function loadCache(): LlmCache;
|
|
20
|
+
/** Save the cache to disk, pruning expired entries. Re-signs the cache file. */
|
|
21
|
+
export declare function saveCache(cache: LlmCache): void;
|
|
22
|
+
/** Compute a cache key from input data. */
|
|
23
|
+
export declare function cacheKey(analysisType: LlmAnalysisType, input: string): string;
|
|
24
|
+
/** Look up a cached result. Returns null if not found or expired. */
|
|
25
|
+
export declare function getCached(cache: LlmCache, key: string): LlmCacheEntry | null;
|
|
26
|
+
/**
|
|
27
|
+
* Make a single API call to Claude Haiku.
|
|
28
|
+
* Returns the text response and token usage, or null on failure.
|
|
29
|
+
*/
|
|
30
|
+
export declare function callHaiku(systemPrompt: string, userPrompt: string, maxTokens: number, apiKey: string): Promise<{
|
|
31
|
+
text: string;
|
|
32
|
+
inputTokens: number;
|
|
33
|
+
outputTokens: number;
|
|
34
|
+
} | null>;
|
|
35
|
+
/**
|
|
36
|
+
* Check if LLM intelligence is available.
|
|
37
|
+
*
|
|
38
|
+
* Priority:
|
|
39
|
+
* 1. Claude Code CLI (zero-config, no API key needed)
|
|
40
|
+
* 2. Anthropic API (requires ANTHROPIC_API_KEY + consent)
|
|
41
|
+
* 3. None
|
|
42
|
+
*
|
|
43
|
+
* Returns the detected backend and optional API key.
|
|
44
|
+
*/
|
|
45
|
+
export declare function checkLlmAvailable(): Promise<{
|
|
46
|
+
backend: LlmBackend;
|
|
47
|
+
apiKey?: string;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Analyze observed agent behavior and suggest a security policy.
|
|
51
|
+
*
|
|
52
|
+
* Input: summarized event data (not raw events -- pre-aggregated to save tokens).
|
|
53
|
+
*/
|
|
54
|
+
export declare function suggestPolicy(agent: string, behaviorSummary: {
|
|
55
|
+
totalActions: number;
|
|
56
|
+
totalSessions: number;
|
|
57
|
+
topProcesses: {
|
|
58
|
+
name: string;
|
|
59
|
+
count: number;
|
|
60
|
+
}[];
|
|
61
|
+
topCredentials: {
|
|
62
|
+
name: string;
|
|
63
|
+
count: number;
|
|
64
|
+
}[];
|
|
65
|
+
topFilePaths: {
|
|
66
|
+
path: string;
|
|
67
|
+
count: number;
|
|
68
|
+
}[];
|
|
69
|
+
topNetworkHosts: {
|
|
70
|
+
host: string;
|
|
71
|
+
count: number;
|
|
72
|
+
}[];
|
|
73
|
+
}): Promise<PolicySuggestion | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Explain why a specific event or action is anomalous.
|
|
76
|
+
*
|
|
77
|
+
* Designed for batch use: call with a few flagged events, not every event.
|
|
78
|
+
*/
|
|
79
|
+
export declare function explainAnomaly(event: ShieldEvent, context: {
|
|
80
|
+
agentName: string;
|
|
81
|
+
normalActions: string[];
|
|
82
|
+
isFirstOccurrence: boolean;
|
|
83
|
+
}): Promise<AnomalyExplanation | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Generate a human-readable narrative for a weekly report.
|
|
86
|
+
*
|
|
87
|
+
* Input: pre-computed report metrics (not raw events).
|
|
88
|
+
*/
|
|
89
|
+
export declare function generateNarrative(report: WeeklyReport): Promise<ReportNarrative | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Triage a batch of related events as a potential incident.
|
|
92
|
+
*
|
|
93
|
+
* Input: a small batch of related high-severity events.
|
|
94
|
+
*/
|
|
95
|
+
export declare function triageIncident(events: ShieldEvent[], context: {
|
|
96
|
+
policyMode: string;
|
|
97
|
+
agentName: string;
|
|
98
|
+
recentBaseline: string[];
|
|
99
|
+
}): Promise<IncidentTriage | null>;
|
|
100
|
+
export interface LlmCacheStats {
|
|
101
|
+
totalEntries: number;
|
|
102
|
+
validEntries: number;
|
|
103
|
+
totalInputTokens: number;
|
|
104
|
+
totalOutputTokens: number;
|
|
105
|
+
estimatedCostUsd: number;
|
|
106
|
+
byType: Record<LlmAnalysisType, number>;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Compute cache statistics for diagnostics.
|
|
110
|
+
*
|
|
111
|
+
* Estimated cost uses Haiku pricing:
|
|
112
|
+
* Input: $0.80 per million tokens
|
|
113
|
+
* Output: $4.00 per million tokens
|
|
114
|
+
*/
|
|
115
|
+
export declare function getCacheStats(): LlmCacheStats;
|
|
116
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/shield/llm.ts"],"names":[],"mappings":"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"}
|