@kenhkl/agent-moss 0.2.0 → 0.3.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 ADDED
@@ -0,0 +1,169 @@
1
+ # AgentMoss (TypeScript)
2
+
3
+ AgentMoss TypeScript 实现 — 可被任意 AI Agent 调用的独立通用安全分析服务。三层防御引擎(启发式 → 逻辑规则 → LLM 语义分析),两级快速放行白名单,fail-closed 安全原则。
4
+
5
+ > 当前版本:**v0.2.1** | npm: `@kenhkl/agent-moss`
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm install @kenhkl/agent-moss
11
+ ```
12
+
13
+ 从源码构建:
14
+
15
+ ```bash
16
+ cd ts
17
+ npm install
18
+ npm run build
19
+ ```
20
+
21
+ ## CLI 使用
22
+
23
+ ```bash
24
+ # 生成输入模板
25
+ npx agent-moss init -o input.json
26
+
27
+ # 运行安全分析
28
+ npx agent-moss analyze input.json
29
+
30
+ # 启动 HTTP 服务(默认端口 9090)
31
+ npx agent-moss server --port 9090
32
+ ```
33
+
34
+ ## 编程调用
35
+
36
+ ```typescript
37
+ import { createApp } from '@kenhkl/agent-moss';
38
+
39
+ const app = createApp();
40
+ // 通过 Hono app.fetch 在 Node.js / Bun / Electron 中调用
41
+ ```
42
+
43
+ 或直接 HTTP 调用:
44
+
45
+ ```typescript
46
+ const resp = await fetch('http://127.0.0.1:9090/api/v1/analyze', {
47
+ method: 'POST',
48
+ headers: { 'Content-Type': 'application/json' },
49
+ body: JSON.stringify({
50
+ session_id: 'sess-001',
51
+ a_next: { action_type: 'bash', action_detail: 'ls -la' },
52
+ os_type: 'linux',
53
+ cwd: '/home/user',
54
+ }),
55
+ });
56
+ const result = await resp.json();
57
+ // → { decision: 'Allow'|'Deny', risk_level: 'low'|'...', ... }
58
+ ```
59
+
60
+ ## 架构
61
+
62
+ ```
63
+ 快速放行白名单
64
+ ├── 完全安全 (15 bash 模式 + 6 action types) → 跳过 L2+L3
65
+ └── 只读敏感 (15 bash 模式 + 8 action types) → 跳过 L3
66
+
67
+ 层1: 启发式静态检测 (<1ms)
68
+ ├── 危险命令正则: 30 个模式(rm 分级检测: 5 条严格→宽松规则)
69
+ ├── 注入关键词: 56 个中英双语关键词(9 类: 指令覆盖/角色劫持/命令注入/...)
70
+ └── 自定义规则: AGENT_MOSS_CUSTOM_RULES 环境变量注入
71
+
72
+ 层2: 逻辑规则检测 (<1ms)
73
+ ├── Rule 1: read-before-write(有历史但无读取 → flag)
74
+ ├── Rule 2: 意图偏离(读取意图 vs 删除动作)
75
+ ├── Rule 3: 敏感路径访问(20 条路径,4 级风险: critical/high/medium/low)
76
+ ├── Rule 4: 危险操作(通配符删除 + 重定向覆盖 /etc/ /boot/ /proc/)
77
+ ├── Rule 5: 提权检测(sudo/su/chmod u+s/setuid)
78
+ └── Rule 6: 横向移动(ssh/scp/rsync,排除 localhost)
79
+
80
+ 层3: LLM + Skill 深度分析 (2-5s)
81
+ ├── 脚本预扫描: 读取 .sh 文件(最多 500 行),16 个可疑模式
82
+ ├── Skill 匹配: 12 个 Skill,关键词加权评分,返回 top 3
83
+ ├── LLM 缓存: 200 条 FIFO,避免重复调用
84
+ ├── Provider 识别: 15+ Provider,自动注入 HTTP Header
85
+ ├── LLM 调用: 支持重试(默认 2 次重试 = 3 次尝试)
86
+ └── fail-closed: 失败时拒绝(confidence=60, source='llm_failure')
87
+ ```
88
+
89
+ ## 环境变量
90
+
91
+ | 变量 | 说明 | 默认值 |
92
+ |------|------|--------|
93
+ | `AGENT_MOSS_LLM_API_KEY` | LLM API Key(回退 `OPENAI_API_KEY`) | 未设置 |
94
+ | `AGENT_MOSS_LLM_MODEL` | LLM 模型名称 | `gpt-4o` |
95
+ | `AGENT_MOSS_LLM_BASE_URL` | LLM API 端点 | `https://api.openai.com/v1` |
96
+ | `AGENT_MOSS_LLM_TEMPERATURE` | 采样温度 | `0.1` |
97
+ | `AGENT_MOSS_LLM_MAX_TOKENS` | 最大输出 token 数 | `4096` |
98
+ | `AGENT_MOSS_LLM_TIMEOUT` | LLM 超时(秒) | `300` |
99
+ | `AGENT_MOSS_LLM_RETRIES` | LLM 调用重试次数 | `2`(共 3 次尝试) |
100
+ | `AGENT_MOSS_DISABLE_LLM` | 设为 `1` 禁用层3 LLM | 未设置 |
101
+ | `AGENT_MOSS_DISABLE_HEURISTIC` | 设为 `1` 禁用层1 启发式 | 未设置 |
102
+ | `AGENT_MOSS_DISABLE_LOGIC_RULES` | 设为 `1` 禁用层2 逻辑规则 | 未设置 |
103
+ | `AGENT_MOSS_CUSTOM_RULES` | 自定义规则 JSON 数组 | `[]` |
104
+
105
+ ### 自定义规则
106
+
107
+ ```bash
108
+ export AGENT_MOSS_CUSTOM_RULES='[
109
+ {"pattern": "kubectl delete namespace", "action": "Deny", "severity": "critical"},
110
+ {"pattern": "docker rm -f", "action": "Deny", "severity": "high"}
111
+ ]'
112
+ ```
113
+
114
+ ## 支持的 Provider
115
+
116
+ | Provider | URL 匹配 | Provider Hint | Header 注入 |
117
+ |----------|---------|---------------|-------------|
118
+ | OpenAI | `api.openai.com` | `openai` | — |
119
+ | Anthropic | `anthropic.com` | `claude` / `anthropic` | — |
120
+ | Google | `generativelanguage.googleapis.com` | `google` / `gemini` | — |
121
+ | DeepSeek | `api.deepseek.com` | `deepseek` | — |
122
+ | 智谱 (GLM) | `open.bigmodel.cn` | `zhipu` / `glm-cn` | — |
123
+ | 智谱 Coding Plan | `api.z.ai` | `zai-coding-plan` | — |
124
+ | OpenRouter | `openrouter.ai` | `openrouter` | Referer + Title |
125
+ | Groq | `api.groq.com` | `groq` | — |
126
+ | Mistral | `api.mistral.ai` | `mistral` | — |
127
+ | Together | `api.together.xyz` | `together` | — |
128
+ | xAI | `api.x.ai` | `xai` / `xai-grok` | Referer |
129
+ | MiniMax | `api.minimaxi.com` | `minimax` | — |
130
+ | GitCode | `api-ai.gitcode.com` | `gitcode` | — |
131
+ | Ollama | `:11434` | `ollama` | — |
132
+ | 任意兼容 | — | `other` / `custom` / `local` | — |
133
+
134
+ ## 项目结构
135
+
136
+ ```
137
+ ts/src/
138
+ ├── cli.ts # CLI 入口 (init/analyze/server)
139
+ ├── config.ts # 全局配置 (环境变量 + Provider 识别 + Header 注入)
140
+ ├── models.ts # Zod 数据模型
141
+ ├── routes.ts # Hono API 路由 (POST /analyze, GET /health)
142
+ ├── server.ts # Hono HTTP 服务 (CORS + logger)
143
+ └── engine/
144
+ ├── types.ts # 核心类型 (SecurityJudgment, LLMConfig, ...)
145
+ ├── coordinator.ts # 三层协调器 + 两级快速放行白名单
146
+ ├── heuristic.ts # 层1: 30 危险模式 + 56 注入关键词
147
+ ├── logic-rules.ts # 层2: 6 条规则 + 20 敏感路径
148
+ ├── llm-analyzer.ts # 层3: LLM 分析 (缓存 + 重试 + fail-closed)
149
+ ├── script-analyzer.ts # 脚本内容预扫描 (18 个可疑模式)
150
+ ├── skill-loader.ts # Skill 加载与关键词匹配 (12 个 Skill)
151
+ └── template-loader.ts # Prompt 模板加载 (3 个模板)
152
+ ```
153
+
154
+ ## 依赖
155
+
156
+ | 包 | 说明 |
157
+ |---|---|
158
+ | `hono` | HTTP 框架 |
159
+ | `@hono/node-server` | Node.js HTTP 适配 |
160
+ | `openai` | LLM API 客户端 |
161
+ | `zod` | 数据校验 |
162
+ | `yaml` | YAML 解析 |
163
+
164
+ ## 构建
165
+
166
+ ```bash
167
+ npm run build # tsup 打包到 dist/
168
+ npm run dev # tsx 热重载开发 (端口 9090)
169
+ ```