@aion0/bastion 0.1.11 → 0.1.13
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 +49 -6
- package/README.zh.md +48 -22
- package/config/default.yaml +2 -2
- package/dist/cli/commands/plugins.d.ts +3 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +201 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +0 -18
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/paths.d.ts +2 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +2 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.d.ts +29 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +10 -0
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/dashboard/api-routes.d.ts.map +1 -1
- package/dist/dashboard/api-routes.js +114 -50
- package/dist/dashboard/api-routes.js.map +1 -1
- package/dist/dashboard/page.d.ts.map +1 -1
- package/dist/dashboard/page.js +132 -69
- package/dist/dashboard/page.js.map +1 -1
- package/dist/dlp/ai-validator.d.ts +5 -2
- package/dist/dlp/ai-validator.d.ts.map +1 -1
- package/dist/dlp/ai-validator.js +20 -2
- package/dist/dlp/ai-validator.js.map +1 -1
- package/dist/dlp/heuristic-validator.d.ts +24 -0
- package/dist/dlp/heuristic-validator.d.ts.map +1 -0
- package/dist/dlp/heuristic-validator.js +97 -0
- package/dist/dlp/heuristic-validator.js.map +1 -0
- package/dist/plugin-api/index.d.ts +1 -1
- package/dist/plugin-api/index.d.ts.map +1 -1
- package/dist/plugin-api/index.js.map +1 -1
- package/dist/plugin-api/types.d.ts +19 -0
- package/dist/plugin-api/types.d.ts.map +1 -1
- package/dist/plugins/builtin/audit-logger.js +1 -1
- package/dist/plugins/builtin/dlp-scanner.d.ts +2 -0
- package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -1
- package/dist/plugins/builtin/dlp-scanner.js +9 -3
- package/dist/plugins/builtin/dlp-scanner.js.map +1 -1
- package/dist/plugins/builtin/metrics-collector.js +1 -1
- package/dist/plugins/builtin/metrics-collector.js.map +1 -1
- package/dist/plugins/builtin/threat-scorer.d.ts +6 -0
- package/dist/plugins/builtin/threat-scorer.d.ts.map +1 -0
- package/dist/plugins/builtin/threat-scorer.js +266 -0
- package/dist/plugins/builtin/threat-scorer.js.map +1 -0
- package/dist/plugins/builtin/token-optimizer.js +1 -1
- package/dist/plugins/builtin/tool-guard.d.ts.map +1 -1
- package/dist/plugins/builtin/tool-guard.js +18 -5
- package/dist/plugins/builtin/tool-guard.js.map +1 -1
- package/dist/plugins/loader.d.ts.map +1 -1
- package/dist/plugins/loader.js +22 -5
- package/dist/plugins/loader.js.map +1 -1
- package/dist/plugins/types.d.ts +3 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +43 -0
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/repositories/taint-marks.d.ts +26 -0
- package/dist/storage/repositories/taint-marks.d.ts.map +1 -0
- package/dist/storage/repositories/taint-marks.js +27 -0
- package/dist/storage/repositories/taint-marks.js.map +1 -0
- package/dist/storage/repositories/threat-score-events.d.ts +27 -0
- package/dist/storage/repositories/threat-score-events.d.ts.map +1 -0
- package/dist/storage/repositories/threat-score-events.js +24 -0
- package/dist/storage/repositories/threat-score-events.js.map +1 -0
- package/dist/storage/repositories/threat-scores.d.ts +26 -0
- package/dist/storage/repositories/threat-scores.d.ts.map +1 -0
- package/dist/storage/repositories/threat-scores.js +42 -0
- package/dist/storage/repositories/threat-scores.js.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts +24 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.js +27 -0
- package/dist/storage/repositories/tool-chain-detections.js.map +1 -0
- package/dist/tool-guard/chain-detector.d.ts +18 -0
- package/dist/tool-guard/chain-detector.d.ts.map +1 -0
- package/dist/tool-guard/chain-detector.js +55 -0
- package/dist/tool-guard/chain-detector.js.map +1 -0
- package/dist/tool-guard/chain-rules.d.ts +10 -0
- package/dist/tool-guard/chain-rules.d.ts.map +1 -0
- package/dist/tool-guard/chain-rules.js +30 -0
- package/dist/tool-guard/chain-rules.js.map +1 -0
- package/dist/tool-guard/taint-tracker.d.ts +24 -0
- package/dist/tool-guard/taint-tracker.d.ts.map +1 -0
- package/dist/tool-guard/taint-tracker.js +70 -0
- package/dist/tool-guard/taint-tracker.js.map +1 -0
- package/integration/openclaw-docker/fix-issues/not-install-brew/Dockerfile.patch +31 -0
- package/integration/openclaw-docker/fix-issues/not-install-brew/docker-setup.sh.patch +33 -0
- package/package.json +1 -1
- package/dist/license/verify.d.ts +0 -18
- package/dist/license/verify.d.ts.map +0 -1
- package/dist/license/verify.js +0 -71
- package/dist/license/verify.js.map +0 -1
package/README.md
CHANGED
|
@@ -30,14 +30,17 @@ You can't watch every request manually. Bastion does it for you.
|
|
|
30
30
|
## Install
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
#
|
|
33
|
+
# npm (recommended)
|
|
34
|
+
npm install -g @aion0/bastion
|
|
35
|
+
|
|
36
|
+
# macOS / Linux (from source)
|
|
34
37
|
curl -fsSL https://raw.githubusercontent.com/aiwatching/bastion/main/install.sh | bash
|
|
35
38
|
|
|
36
|
-
# Windows (PowerShell)
|
|
39
|
+
# Windows (PowerShell, from source)
|
|
37
40
|
irm https://raw.githubusercontent.com/aiwatching/bastion/main/install.ps1 -OutFile install.ps1; .\install.ps1
|
|
38
41
|
```
|
|
39
42
|
|
|
40
|
-
Requires Node.js 22 LTS (recommended). Node.js 18+ supported.
|
|
43
|
+
Requires Node.js 22 LTS (recommended). Node.js 18+ supported.
|
|
41
44
|
|
|
42
45
|
## Quick Start
|
|
43
46
|
|
|
@@ -101,6 +104,15 @@ Monitors and blocks dangerous tool calls made by AI agents in real-time. Interce
|
|
|
101
104
|
|
|
102
105
|
Action modes: `audit` (log and alert) or `block` (intercept in real-time, including streaming responses). Desktop notifications and webhook alerts (Slack, Discord) for high-severity matches.
|
|
103
106
|
|
|
107
|
+
### 🔍 Threat Intelligence
|
|
108
|
+
|
|
109
|
+
Session-level threat scoring with multi-signal correlation. Aggregates events from DLP, Tool Guard, and Prompt Injection detection into a unified threat score per session.
|
|
110
|
+
|
|
111
|
+
- **Chain detection** — detects multi-step attack patterns (e.g., credential access followed by network exfiltration)
|
|
112
|
+
- **Taint tracking** — tracks sensitive data fingerprints across tool calls to detect data flow violations
|
|
113
|
+
- **Threat levels** — normal / elevated / high / critical with exponential decay scoring
|
|
114
|
+
- **3 built-in chain rules** — credential→exfil, execution→destruction, credential→publish
|
|
115
|
+
|
|
104
116
|
### 📝 Audit Logger
|
|
105
117
|
|
|
106
118
|
Full request/response history for every AI interaction, encrypted at rest. Session-based timeline with DLP and Tool Guard tags. Any security event automatically creates an audit entry — even if the audit plugin is disabled.
|
|
@@ -113,11 +125,11 @@ Configurable retention with automatic purge. Formatted viewer in the dashboard f
|
|
|
113
125
|
|
|
114
126
|
Real-time security dashboard at `http://127.0.0.1:8420/dashboard`:
|
|
115
127
|
|
|
116
|
-
- **Overview** — Request metrics, cost, tokens, per-provider/model/session breakdown
|
|
128
|
+
- **Overview** — Request metrics, cost, tokens, per-provider/model/session breakdown, threat gauge
|
|
117
129
|
- **DLP** — Findings, config, signature management, standalone test scanner with trace log
|
|
118
|
-
- **Tool Guard** — Tool call history, severity, rule management (built-in + custom)
|
|
130
|
+
- **Tool Guard** — Tool call history, severity, rule management (built-in + custom), threat sessions, chain detections
|
|
119
131
|
- **Audit** — Session timeline, security-tagged entries, formatted request/response viewer
|
|
120
|
-
- **Settings** — Toggle plugins,
|
|
132
|
+
- **Settings** — Toggle plugins, optional features management — all changes apply without restart
|
|
121
133
|
|
|
122
134
|
## How It Works
|
|
123
135
|
|
|
@@ -149,6 +161,36 @@ bastion openclaw docker attach <container-name> # Existing container
|
|
|
149
161
|
|
|
150
162
|
See [OpenClaw Docker Guide](docs/openclaw-docker.md) | [Local Guide](docs/openclaw-local.md)
|
|
151
163
|
|
|
164
|
+
#### OpenClaw Skills
|
|
165
|
+
|
|
166
|
+
Install [`@aion0/bastion-skills`](https://www.npmjs.com/package/@aion0/bastion-skills) to manage Bastion from within OpenClaw — start/stop the gateway, view DLP findings, tool guard alerts, and usage stats through natural language.
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
openclaw skill install @aion0/bastion-skills
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
For Docker environments, the skill includes a setup script that automatically patches `docker-compose.yml` to route all LLM traffic through Bastion via `HTTPS_PROXY`:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
bash ~/.openclaw/skills/bastion/scripts/docker-setup.sh
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
See [@aion0/bastion-skills on GitHub](https://github.com/aiwatching/bastion-skills)
|
|
179
|
+
|
|
180
|
+
## Optional Plugins
|
|
181
|
+
|
|
182
|
+
Bastion's core detection is fully free. For ML-based detection with heavier dependencies (ONNX Runtime, ~436 MB models), install the optional plugin pack:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
bastion plugins install # auto-detects sibling bastion-plugin-api
|
|
186
|
+
bastion plugins list # show installed plugins
|
|
187
|
+
bastion plugins uninstall # remove (prompts to also delete models)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Or via the Dashboard → Settings → Optional Features.
|
|
191
|
+
|
|
192
|
+
See [@aiwatching/bastion-pro](https://github.com/aiwatching/bastion-plugin-api) for details.
|
|
193
|
+
|
|
152
194
|
## Documentation
|
|
153
195
|
|
|
154
196
|
| Doc | Description |
|
|
@@ -172,6 +214,7 @@ Everything stays on your machine in `~/.bastion/`:
|
|
|
172
214
|
config.yaml # Your config overrides
|
|
173
215
|
ca.key / ca.crt / certs/ # Local CA & certificates
|
|
174
216
|
.key # AES encryption key for audit data
|
|
217
|
+
models/ # ML models (optional, ~436 MB if plugins installed)
|
|
175
218
|
```
|
|
176
219
|
|
|
177
220
|
## Contributing
|
package/README.zh.md
CHANGED
|
@@ -13,31 +13,18 @@
|
|
|
13
13
|
|
|
14
14
|
## 安装
|
|
15
15
|
|
|
16
|
-
### macOS / Linux
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
curl -fsSL https://raw.githubusercontent.com/aiwatching/bastion/main/install.sh | bash
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
或从本地源码安装:
|
|
23
|
-
|
|
24
16
|
```bash
|
|
25
|
-
|
|
26
|
-
|
|
17
|
+
# npm(推荐)
|
|
18
|
+
npm install -g @aion0/bastion
|
|
27
19
|
|
|
28
|
-
|
|
20
|
+
# macOS / Linux(从源码安装)
|
|
21
|
+
curl -fsSL https://raw.githubusercontent.com/aiwatching/bastion/main/install.sh | bash
|
|
29
22
|
|
|
30
|
-
|
|
23
|
+
# Windows (PowerShell,从源码安装)
|
|
31
24
|
irm https://raw.githubusercontent.com/aiwatching/bastion/main/install.ps1 -OutFile install.ps1; .\install.ps1
|
|
32
25
|
```
|
|
33
26
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```powershell
|
|
37
|
-
cd bastion; .\install.ps1
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
需要 **Node.js 22 LTS**(推荐)。Node.js 18+ 可用,但非 LTS 版本可能需要[额外配置](docs/windows-troubleshooting.zh.md#1-better-sqlite3-编译失败非-lts-nodejs)。安装至 `~/.bastion/app/`。
|
|
27
|
+
需要 **Node.js 22 LTS**(推荐)。Node.js 18+ 可用,但非 LTS 版本可能需要[额外配置](docs/windows-troubleshooting.zh.md#1-better-sqlite3-编译失败非-lts-nodejs)。
|
|
41
28
|
|
|
42
29
|
## 快速开始
|
|
43
30
|
|
|
@@ -96,6 +83,22 @@ bastion openclaw local stop mywork
|
|
|
96
83
|
bastion openclaw docker attach <container-name>
|
|
97
84
|
```
|
|
98
85
|
|
|
86
|
+
### OpenClaw Skills
|
|
87
|
+
|
|
88
|
+
安装 [`@aion0/bastion-skills`](https://www.npmjs.com/package/@aion0/bastion-skills) 后,可通过自然语言在 OpenClaw 中管理 Bastion——启停网关、查看 DLP 发现、工具调用告警和用量统计。
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
openclaw skill install @aion0/bastion-skills
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Docker 环境下,skill 内置的 setup 脚本会自动 patch `docker-compose.yml`,通过 `HTTPS_PROXY` 将所有 LLM 流量路由经 Bastion:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
bash ~/.openclaw/skills/bastion/scripts/docker-setup.sh
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
详见 [@aion0/bastion-skills (GitHub)](https://github.com/aiwatching/bastion-skills)
|
|
101
|
+
|
|
99
102
|
## 使用方法
|
|
100
103
|
|
|
101
104
|
### `bastion start`
|
|
@@ -204,12 +207,12 @@ bastion trust-ca
|
|
|
204
207
|
网关运行时,在浏览器中打开 `http://127.0.0.1:8420/dashboard`。
|
|
205
208
|
|
|
206
209
|
6 个标签页:
|
|
207
|
-
- **Overview** — 请求指标、费用、token
|
|
210
|
+
- **Overview** — 请求指标、费用、token 数、按提供商/模型/会话分类的统计、威胁仪表盘
|
|
208
211
|
- **DLP** — 子标签:Findings(方向、片段、钻取至审计记录)、Config(引擎开关、动作模式、AI 验证、语义规则)、Signatures(远程同步状态、版本追踪、变更日志、模式管理)、Test(独立扫描器,含预设、trace 日志)
|
|
209
|
-
- **Tool Guard** — 子标签:Calls(最近工具调用历史,含严重级别、规则匹配、执行动作)、Rules(26 条内置规则 +
|
|
212
|
+
- **Tool Guard** — 子标签:Calls(最近工具调用历史,含严重级别、规则匹配、执行动作)、Rules(26 条内置规则 + 自定义规则管理,可逐条启用/禁用)、威胁会话、链式检测
|
|
210
213
|
- **Optimizer** — 缓存命中率、节省的 token 数
|
|
211
214
|
- **Audit** — 基于会话的时间线、DLP/Tool Guard 标记条目、摘要预览、格式化请求/响应查看器
|
|
212
|
-
- **Settings** — 切换 plugin
|
|
215
|
+
- **Settings** — 切换 plugin、可选功能管理,运行时修改无需重启
|
|
213
216
|
|
|
214
217
|
## 工作原理
|
|
215
218
|
|
|
@@ -326,6 +329,14 @@ plugins:
|
|
|
326
329
|
- **响应缓存** — 对相同请求进行精确匹配缓存(AES-256-GCM 加密)
|
|
327
330
|
- **空白压缩** — 折叠多余空白以节省 token
|
|
328
331
|
|
|
332
|
+
### 威胁情报
|
|
333
|
+
会话级威胁评分,多信号关联分析。聚合 DLP、Tool Guard、Prompt Injection 检测事件,为每个会话生成统一威胁分数。
|
|
334
|
+
|
|
335
|
+
- **链式检测** — 检测多步攻击模式(如凭证访问后跟网络外泄)
|
|
336
|
+
- **污点追踪** — 跟踪敏感数据指纹在工具调用间的流动,检测数据流违规
|
|
337
|
+
- **威胁等级** — normal / elevated / high / critical,指数衰减评分
|
|
338
|
+
- **3 条内置链式规则** — 凭证→外泄、执行→破坏、凭证→发布
|
|
339
|
+
|
|
329
340
|
### Audit Logger
|
|
330
341
|
存储请求/响应内容(静态加密)以供在 Dashboard 中查看。可配置保留期限,自动清理。即使此 plugin 未启用,DLP 命中也会自动记录审计日志。
|
|
331
342
|
|
|
@@ -440,6 +451,20 @@ BASTION_LOG_LEVEL=debug bastion start
|
|
|
440
451
|
| `GET` | `/api/config` | Current configuration + plugin status |
|
|
441
452
|
| `PUT` | `/api/config` | Update configuration at runtime |
|
|
442
453
|
|
|
454
|
+
## 可选插件
|
|
455
|
+
|
|
456
|
+
Bastion 核心检测能力完全免费。如需基于 ML 的检测(ONNX Runtime,~436 MB 模型),可安装可选插件包:
|
|
457
|
+
|
|
458
|
+
```bash
|
|
459
|
+
bastion plugins install # 自动检测同级 bastion-plugin-api 目录
|
|
460
|
+
bastion plugins list # 查看已安装插件
|
|
461
|
+
bastion plugins uninstall # 卸载(会提示是否同时删除模型文件)
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
也可通过 Dashboard → Settings → Optional Features 管理。
|
|
465
|
+
|
|
466
|
+
详见 [@aiwatching/bastion-pro](https://github.com/aiwatching/bastion-plugin-api)。
|
|
467
|
+
|
|
443
468
|
## 文档
|
|
444
469
|
|
|
445
470
|
- [DLP 引擎架构](docs/dlp.zh.md) — 5 层检测管线详解
|
|
@@ -465,4 +490,5 @@ BASTION_LOG_LEVEL=debug bastion start
|
|
|
465
490
|
.key # AES encryption key for cache & audit
|
|
466
491
|
bastion.pid # Daemon PID file
|
|
467
492
|
bastion.log # Daemon log file
|
|
493
|
+
models/ # ML 模型(可选,安装插件后 ~436 MB)
|
|
468
494
|
```
|
package/config/default.yaml
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0J7D"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.registerPluginsCommand = registerPluginsCommand;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const node_os_1 = require("node:os");
|
|
10
|
+
const node_child_process_1 = require("node:child_process");
|
|
11
|
+
const node_readline_1 = require("node:readline");
|
|
12
|
+
const js_yaml_1 = __importDefault(require("js-yaml"));
|
|
13
|
+
const BASTION_DIR = (0, node_path_1.join)((0, node_os_1.homedir)(), '.bastion');
|
|
14
|
+
const CONFIG_PATH = (0, node_path_1.join)(BASTION_DIR, 'config.yaml');
|
|
15
|
+
const MODELS_DIR = (0, node_path_1.join)(BASTION_DIR, 'models');
|
|
16
|
+
function ask(question) {
|
|
17
|
+
const rl = (0, node_readline_1.createInterface)({ input: process.stdin, output: process.stdout });
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
rl.question(question, (answer) => { rl.close(); resolve(answer.trim().toLowerCase()); });
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
function dirSize(dir) {
|
|
23
|
+
let total = 0;
|
|
24
|
+
try {
|
|
25
|
+
for (const entry of (0, node_fs_1.readdirSync)(dir, { recursive: true })) {
|
|
26
|
+
try {
|
|
27
|
+
const st = (0, node_fs_1.statSync)((0, node_path_1.join)(dir, entry));
|
|
28
|
+
if (st.isFile())
|
|
29
|
+
total += st.size;
|
|
30
|
+
}
|
|
31
|
+
catch { /* skip */ }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return '0 MB';
|
|
36
|
+
}
|
|
37
|
+
if (total > 1024 * 1024 * 1024)
|
|
38
|
+
return `${(total / 1024 / 1024 / 1024).toFixed(1)} GB`;
|
|
39
|
+
return `${(total / 1024 / 1024).toFixed(0)} MB`;
|
|
40
|
+
}
|
|
41
|
+
function loadConfig() {
|
|
42
|
+
try {
|
|
43
|
+
const raw = (0, node_fs_1.readFileSync)(CONFIG_PATH, 'utf-8');
|
|
44
|
+
return js_yaml_1.default.load(raw) ?? {};
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function saveConfig(config) {
|
|
51
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(CONFIG_PATH), { recursive: true });
|
|
52
|
+
(0, node_fs_1.writeFileSync)(CONFIG_PATH, js_yaml_1.default.dump(config), 'utf-8');
|
|
53
|
+
}
|
|
54
|
+
function getExternalPlugins(config) {
|
|
55
|
+
const plugins = config.plugins;
|
|
56
|
+
return plugins?.external ?? [];
|
|
57
|
+
}
|
|
58
|
+
function registerPluginsCommand(program) {
|
|
59
|
+
const cmd = program
|
|
60
|
+
.command('plugins')
|
|
61
|
+
.description('Manage optional plugins');
|
|
62
|
+
cmd
|
|
63
|
+
.command('list')
|
|
64
|
+
.description('List installed external plugins')
|
|
65
|
+
.action(() => {
|
|
66
|
+
const config = loadConfig();
|
|
67
|
+
const entries = getExternalPlugins(config);
|
|
68
|
+
if (entries.length === 0) {
|
|
69
|
+
console.log('No external plugins installed.');
|
|
70
|
+
console.log('\nInstall optional plugins:');
|
|
71
|
+
console.log(' bastion plugins install (from sibling bastion-plugin-api directory)');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
console.log('External plugins:\n');
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
const status = entry.enabled ? '\x1b[32mENABLED\x1b[0m' : '\x1b[33mDISABLED\x1b[0m';
|
|
77
|
+
const exists = (0, node_fs_1.existsSync)(entry.package);
|
|
78
|
+
const dir = exists ? '' : ' \x1b[31m(directory missing)\x1b[0m';
|
|
79
|
+
console.log(` ${entry.package} [${status}]${dir}`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
cmd
|
|
83
|
+
.command('install')
|
|
84
|
+
.description('Install optional plugin pack')
|
|
85
|
+
.argument('[path]', 'Path to plugin source directory')
|
|
86
|
+
.action((sourcePath) => {
|
|
87
|
+
// Resolve plugin source directory
|
|
88
|
+
let pluginSource = sourcePath;
|
|
89
|
+
if (!pluginSource) {
|
|
90
|
+
// Try ../bastion-plugin-api relative to CWD
|
|
91
|
+
const candidate = (0, node_path_1.join)(process.cwd(), '..', 'bastion-plugin-api');
|
|
92
|
+
if ((0, node_fs_1.existsSync)((0, node_path_1.join)(candidate, 'package.json'))) {
|
|
93
|
+
pluginSource = candidate;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!pluginSource || !(0, node_fs_1.existsSync)((0, node_path_1.join)(pluginSource, 'package.json'))) {
|
|
97
|
+
console.error('Cannot find plugin source directory.');
|
|
98
|
+
console.error('Usage: bastion plugins install [path-to-bastion-plugin-api]');
|
|
99
|
+
console.error(' Or run from the bastion directory (auto-detects sibling bastion-plugin-api)');
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
// Determine install dir (where bastion is installed)
|
|
103
|
+
const appDir = (0, node_path_1.join)(BASTION_DIR, 'app');
|
|
104
|
+
if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(appDir, 'package.json'))) {
|
|
105
|
+
console.error(`Bastion app not found at ${appDir}. Run install.sh first.`);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
const pluginsDest = (0, node_path_1.join)(appDir, 'plugins', 'bastion-pro');
|
|
109
|
+
const pluginApiDir = (0, node_path_1.join)(appDir, 'packages', 'bastion-plugin-api');
|
|
110
|
+
console.log(`Installing optional plugins from: ${pluginSource}`);
|
|
111
|
+
// Copy source (exclude node_modules, .git, dist)
|
|
112
|
+
(0, node_fs_1.mkdirSync)(pluginsDest, { recursive: true });
|
|
113
|
+
// Use rsync if available, fallback to cpSync
|
|
114
|
+
try {
|
|
115
|
+
(0, node_child_process_1.execSync)(`rsync -a --exclude node_modules --exclude .git --exclude dist "${pluginSource}/" "${pluginsDest}/"`, { stdio: 'pipe' });
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
// Fallback: remove and copy
|
|
119
|
+
(0, node_fs_1.rmSync)(pluginsDest, { recursive: true, force: true });
|
|
120
|
+
(0, node_fs_1.cpSync)(pluginSource, pluginsDest, { recursive: true, filter: (src) => !src.includes('node_modules') && !src.includes('.git') });
|
|
121
|
+
}
|
|
122
|
+
// Rewrite @aiwatching/bastion-plugin-api to file: path
|
|
123
|
+
const pkgPath = (0, node_path_1.join)(pluginsDest, 'package.json');
|
|
124
|
+
const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf-8'));
|
|
125
|
+
if (pkg.dependencies?.['@aiwatching/bastion-plugin-api']) {
|
|
126
|
+
const relPath = (0, node_path_1.relative)(pluginsDest, pluginApiDir);
|
|
127
|
+
pkg.dependencies['@aiwatching/bastion-plugin-api'] = `file:${relPath}`;
|
|
128
|
+
(0, node_fs_1.writeFileSync)(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
|
|
129
|
+
console.log(`Rewrote plugin-api path to: file:${relPath}`);
|
|
130
|
+
}
|
|
131
|
+
// npm install + build
|
|
132
|
+
console.log('Installing dependencies...');
|
|
133
|
+
(0, node_child_process_1.execSync)('npm install', { cwd: pluginsDest, stdio: 'pipe' });
|
|
134
|
+
console.log('Building...');
|
|
135
|
+
(0, node_child_process_1.execSync)('npm run build', { cwd: pluginsDest, stdio: 'pipe' });
|
|
136
|
+
// Update config.yaml
|
|
137
|
+
const config = loadConfig();
|
|
138
|
+
const plugins = (config.plugins ?? {});
|
|
139
|
+
const entries = plugins.external ?? [];
|
|
140
|
+
const alreadyConfigured = entries.some(e => e.package.includes('bastion-pro'));
|
|
141
|
+
if (!alreadyConfigured) {
|
|
142
|
+
entries.push({ package: pluginsDest, enabled: true });
|
|
143
|
+
plugins.external = entries;
|
|
144
|
+
config.plugins = plugins;
|
|
145
|
+
saveConfig(config);
|
|
146
|
+
console.log('Added to config.yaml');
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
console.log('Plugin already configured in config.yaml');
|
|
150
|
+
}
|
|
151
|
+
console.log('\nOptional plugins installed. Restart Bastion to apply.');
|
|
152
|
+
});
|
|
153
|
+
cmd
|
|
154
|
+
.command('uninstall')
|
|
155
|
+
.description('Uninstall an optional plugin')
|
|
156
|
+
.argument('[name]', 'Plugin directory name (default: bastion-pro)', 'bastion-pro')
|
|
157
|
+
.option('--all', 'Remove everything including downloaded models')
|
|
158
|
+
.action(async (name, opts) => {
|
|
159
|
+
const config = loadConfig();
|
|
160
|
+
const entries = getExternalPlugins(config);
|
|
161
|
+
// Find matching entry
|
|
162
|
+
const match = entries.find(e => e.package.includes(name));
|
|
163
|
+
if (!match) {
|
|
164
|
+
console.error(`No external plugin matching "${name}" found in config.`);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
// Remove plugin directory
|
|
168
|
+
const pluginDir = match.package;
|
|
169
|
+
if ((0, node_fs_1.existsSync)(pluginDir)) {
|
|
170
|
+
(0, node_fs_1.rmSync)(pluginDir, { recursive: true, force: true });
|
|
171
|
+
console.log(`Removed: ${pluginDir}`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.log(`Directory not found (already removed): ${pluginDir}`);
|
|
175
|
+
}
|
|
176
|
+
// Update config
|
|
177
|
+
const plugins = config.plugins;
|
|
178
|
+
plugins.external = entries.filter(e => e !== match);
|
|
179
|
+
saveConfig(config);
|
|
180
|
+
console.log('Updated config.yaml');
|
|
181
|
+
// Handle models cleanup
|
|
182
|
+
const hasModels = (0, node_fs_1.existsSync)(MODELS_DIR) && (0, node_fs_1.readdirSync)(MODELS_DIR).filter(f => !f.startsWith('.')).length > 0;
|
|
183
|
+
if (hasModels) {
|
|
184
|
+
let removeModels = opts.all ?? false;
|
|
185
|
+
if (!removeModels) {
|
|
186
|
+
const size = dirSize(MODELS_DIR);
|
|
187
|
+
const answer = await ask(`\nAlso remove downloaded models (~${size} in ${MODELS_DIR})? [y/N] `);
|
|
188
|
+
removeModels = answer === 'y' || answer === 'yes';
|
|
189
|
+
}
|
|
190
|
+
if (removeModels) {
|
|
191
|
+
(0, node_fs_1.rmSync)(MODELS_DIR, { recursive: true, force: true });
|
|
192
|
+
console.log(`Removed: ${MODELS_DIR}`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
console.log(`Models kept at: ${MODELS_DIR}`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
console.log('\nPlugin uninstalled. Restart Bastion to apply.');
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/cli/commands/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC3D"}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.registerStartCommand = registerStartCommand;
|
|
7
|
-
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
8
|
-
const commander_1 = require("commander");
|
|
9
4
|
const daemon_js_1 = require("../daemon.js");
|
|
10
5
|
const version_js_1 = require("../../version.js");
|
|
11
6
|
function registerStartCommand(program) {
|
|
@@ -14,23 +9,10 @@ function registerStartCommand(program) {
|
|
|
14
9
|
.description('Start the Bastion AI Gateway')
|
|
15
10
|
.option('--foreground', 'Run in foreground (no daemon)')
|
|
16
11
|
.option('-p, --port <port>', 'Override port')
|
|
17
|
-
.addOption(new commander_1.Option('--dev').default(false).hideHelp())
|
|
18
12
|
.action(async (options) => {
|
|
19
13
|
if (options.port) {
|
|
20
14
|
process.env.BASTION_PORT = options.port;
|
|
21
15
|
}
|
|
22
|
-
// --dev only works with --foreground
|
|
23
|
-
if (options.dev && !options.foreground) {
|
|
24
|
-
console.error('--dev requires --foreground');
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
if (options.dev) {
|
|
28
|
-
process.env.BASTION_DEV = '1';
|
|
29
|
-
const devToken = node_crypto_1.default.randomBytes(16).toString('hex');
|
|
30
|
-
process.env.BASTION_DEV_TOKEN = devToken;
|
|
31
|
-
console.log(`\n Dev token: ${devToken}`);
|
|
32
|
-
console.log(' Enter this token in Dashboard → Settings → Pro Features to unlock all features\n');
|
|
33
|
-
}
|
|
34
16
|
if (options.foreground) {
|
|
35
17
|
// Import and run server directly
|
|
36
18
|
const { startGateway } = await import('../../index.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":";;AAIA,oDAwCC;AA3CD,4CAA4D;AAC5D,iDAA8C;AAE9C,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,cAAc,EAAE,+BAA+B,CAAC;SACvD,MAAM,CAAC,mBAAmB,EAAE,eAAe,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,iCAAiC;YACjC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACxD,MAAM,YAAY,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,2BAA2B;QAC3B,MAAM,MAAM,GAAG,IAAA,2BAAe,GAAE,CAAC;QACjC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAA,uBAAW,GAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,kBAAkB,GAAG,GAAG,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -13,6 +13,7 @@ const trust_ca_js_1 = require("./commands/trust-ca.js");
|
|
|
13
13
|
const proxy_js_1 = require("./commands/proxy.js");
|
|
14
14
|
const openclaw_js_1 = require("./commands/openclaw.js");
|
|
15
15
|
const token_js_1 = require("./commands/token.js");
|
|
16
|
+
const plugins_js_1 = require("./commands/plugins.js");
|
|
16
17
|
const version_js_1 = require("../version.js");
|
|
17
18
|
const program = new commander_1.Command();
|
|
18
19
|
program
|
|
@@ -31,5 +32,6 @@ program
|
|
|
31
32
|
(0, proxy_js_1.registerProxyCommand)(program);
|
|
32
33
|
(0, openclaw_js_1.registerOpenclawCommand)(program);
|
|
33
34
|
(0, token_js_1.registerTokenCommand)(program);
|
|
35
|
+
(0, plugins_js_1.registerPluginsCommand)(program);
|
|
34
36
|
program.parse();
|
|
35
37
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,kDAA2D;AAC3D,gDAAyD;AACzD,kDAA2D;AAC3D,oDAA6D;AAC7D,oDAA6D;AAC7D,8CAAuD;AACvD,gDAAyD;AACzD,wDAAgE;AAChE,kDAA2D;AAC3D,wDAAiE;AACjE,kDAA2D;AAC3D,8CAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,IAAA,uBAAU,GAAE,CAAC;KACrB,uBAAuB,EAAE,CAAC;AAE7B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,iCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,oCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,qCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAEA,yCAAoC;AACpC,kDAA2D;AAC3D,gDAAyD;AACzD,kDAA2D;AAC3D,oDAA6D;AAC7D,oDAA6D;AAC7D,8CAAuD;AACvD,gDAAyD;AACzD,wDAAgE;AAChE,kDAA2D;AAC3D,wDAAiE;AACjE,kDAA2D;AAC3D,sDAA+D;AAC/D,8CAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,IAAA,uBAAU,GAAE,CAAC;KACrB,uBAAuB,EAAE,CAAC;AAE7B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,iCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,iCAAqB,EAAC,OAAO,CAAC,CAAC;AAC/B,IAAA,2BAAkB,EAAC,OAAO,CAAC,CAAC;AAC5B,IAAA,6BAAmB,EAAC,OAAO,CAAC,CAAC;AAC7B,IAAA,oCAAsB,EAAC,OAAO,CAAC,CAAC;AAChC,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,qCAAuB,EAAC,OAAO,CAAC,CAAC;AACjC,IAAA,+BAAoB,EAAC,OAAO,CAAC,CAAC;AAC9B,IAAA,mCAAsB,EAAC,OAAO,CAAC,CAAC;AAEhC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/config/paths.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC"}
|
package/dist/config/paths.js
CHANGED
|
@@ -12,5 +12,7 @@ exports.paths = {
|
|
|
12
12
|
pidFile: (0, node_path_1.join)(BASTION_DIR, 'bastion.pid'),
|
|
13
13
|
logFile: (0, node_path_1.join)(BASTION_DIR, 'bastion.log'),
|
|
14
14
|
signaturesDir: (0, node_path_1.join)(BASTION_DIR, 'signatures'),
|
|
15
|
+
pluginsDir: (0, node_path_1.join)(BASTION_DIR, 'plugins'),
|
|
16
|
+
modelsDir: (0, node_path_1.join)(BASTION_DIR, 'models'),
|
|
15
17
|
};
|
|
16
18
|
//# sourceMappingURL=paths.js.map
|
package/dist/config/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AACjC,qCAAkC;AAElC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,UAAU,CAAC,CAAC;AAEnC,QAAA,KAAK,GAAG;IACnB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IAC5C,YAAY,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,YAAY,CAAC;IAC7C,iBAAiB,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,MAAM,CAAC;IAC5C,OAAO,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IACzC,OAAO,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IACzC,aAAa,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/config/paths.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AACjC,qCAAkC;AAElC,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,UAAU,CAAC,CAAC;AAEnC,QAAA,KAAK,GAAG;IACnB,UAAU,EAAE,WAAW;IACvB,UAAU,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IAC5C,YAAY,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,YAAY,CAAC;IAC7C,iBAAiB,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,MAAM,CAAC;IAC5C,OAAO,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IACzC,OAAO,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,aAAa,CAAC;IACzC,aAAa,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,YAAY,CAAC;IAC9C,UAAU,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,SAAS,CAAC;IACxC,SAAS,EAAE,IAAA,gBAAI,EAAC,WAAW,EAAE,QAAQ,CAAC;CACvC,CAAC"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface BastionConfig {
|
|
|
29
29
|
};
|
|
30
30
|
aiValidation: {
|
|
31
31
|
enabled: boolean;
|
|
32
|
-
provider: 'anthropic' | 'openai';
|
|
32
|
+
provider: 'anthropic' | 'openai' | 'local';
|
|
33
33
|
model: string;
|
|
34
34
|
apiKey: string;
|
|
35
35
|
timeoutMs: number;
|
|
@@ -62,6 +62,34 @@ export interface BastionConfig {
|
|
|
62
62
|
alertDesktop: boolean;
|
|
63
63
|
alertWebhookUrl: string;
|
|
64
64
|
};
|
|
65
|
+
threatIntelligence?: {
|
|
66
|
+
enabled: boolean;
|
|
67
|
+
scoring?: {
|
|
68
|
+
piWeight?: number;
|
|
69
|
+
dlpWeight?: number;
|
|
70
|
+
toolGuardWeights?: {
|
|
71
|
+
critical?: number;
|
|
72
|
+
high?: number;
|
|
73
|
+
medium?: number;
|
|
74
|
+
low?: number;
|
|
75
|
+
};
|
|
76
|
+
toolChainWeight?: number;
|
|
77
|
+
decayPerMinute?: number;
|
|
78
|
+
};
|
|
79
|
+
thresholds?: {
|
|
80
|
+
elevated?: number;
|
|
81
|
+
high?: number;
|
|
82
|
+
critical?: number;
|
|
83
|
+
};
|
|
84
|
+
toolChain?: {
|
|
85
|
+
enabled?: boolean;
|
|
86
|
+
maxWindowSize?: number;
|
|
87
|
+
};
|
|
88
|
+
taintTracking?: {
|
|
89
|
+
enabled?: boolean;
|
|
90
|
+
ttlMinutes?: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
65
93
|
external?: Array<{
|
|
66
94
|
package: string;
|
|
67
95
|
enabled: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAC;QAC5B,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,EAAE,MAAM,CAAC;YACd,YAAY,EAAE,MAAM,EAAE,CAAC;SACxB,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;KAC5C,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE;YACP,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;QACF,GAAG,EAAE;YACH,OAAO,EAAE,OAAO,CAAC;YACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;YAC7C,QAAQ,EAAE,CAAC,iBAAiB,GAAG,WAAW,GAAG,eAAe,GAAG,kBAAkB,CAAC,EAAE,CAAC;YACrF,cAAc,EAAE;gBACd,GAAG,EAAE,MAAM,CAAC;gBACZ,MAAM,EAAE,MAAM,CAAC;gBACf,WAAW,EAAE,OAAO,CAAC;gBACrB,mBAAmB,EAAE,MAAM,CAAC;aAC7B,CAAC;YACF,YAAY,EAAE;gBACZ,OAAO,EAAE,OAAO,CAAC;gBACjB,QAAQ,EAAE,WAAW,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/core/bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AA0BzD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,aAAa,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2LpF"}
|