@aion0/bastion 0.1.12 → 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.
Files changed (89) hide show
  1. package/README.md +27 -3
  2. package/README.zh.md +26 -3
  3. package/dist/cli/commands/plugins.d.ts +3 -0
  4. package/dist/cli/commands/plugins.d.ts.map +1 -0
  5. package/dist/cli/commands/plugins.js +201 -0
  6. package/dist/cli/commands/plugins.js.map +1 -0
  7. package/dist/cli/commands/start.d.ts.map +1 -1
  8. package/dist/cli/commands/start.js +0 -18
  9. package/dist/cli/commands/start.js.map +1 -1
  10. package/dist/cli/index.js +2 -2
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/config/paths.d.ts +0 -1
  13. package/dist/config/paths.d.ts.map +1 -1
  14. package/dist/config/paths.js +0 -1
  15. package/dist/config/paths.js.map +1 -1
  16. package/dist/config/schema.d.ts +28 -0
  17. package/dist/config/schema.d.ts.map +1 -1
  18. package/dist/core/bootstrap.d.ts.map +1 -1
  19. package/dist/core/bootstrap.js +5 -0
  20. package/dist/core/bootstrap.js.map +1 -1
  21. package/dist/dashboard/api-routes.d.ts.map +1 -1
  22. package/dist/dashboard/api-routes.js +91 -50
  23. package/dist/dashboard/api-routes.js.map +1 -1
  24. package/dist/dashboard/page.d.ts.map +1 -1
  25. package/dist/dashboard/page.js +122 -67
  26. package/dist/dashboard/page.js.map +1 -1
  27. package/dist/dlp/ai-validator.d.ts.map +1 -1
  28. package/dist/dlp/ai-validator.js +11 -13
  29. package/dist/dlp/ai-validator.js.map +1 -1
  30. package/dist/dlp/heuristic-validator.d.ts +24 -0
  31. package/dist/dlp/heuristic-validator.d.ts.map +1 -0
  32. package/dist/dlp/heuristic-validator.js +97 -0
  33. package/dist/dlp/heuristic-validator.js.map +1 -0
  34. package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -1
  35. package/dist/plugins/builtin/dlp-scanner.js +3 -0
  36. package/dist/plugins/builtin/dlp-scanner.js.map +1 -1
  37. package/dist/plugins/builtin/threat-scorer.d.ts +6 -0
  38. package/dist/plugins/builtin/threat-scorer.d.ts.map +1 -0
  39. package/dist/plugins/builtin/threat-scorer.js +266 -0
  40. package/dist/plugins/builtin/threat-scorer.js.map +1 -0
  41. package/dist/plugins/builtin/tool-guard.d.ts.map +1 -1
  42. package/dist/plugins/builtin/tool-guard.js +14 -43
  43. package/dist/plugins/builtin/tool-guard.js.map +1 -1
  44. package/dist/plugins/types.d.ts +3 -0
  45. package/dist/plugins/types.d.ts.map +1 -1
  46. package/dist/storage/migrations.d.ts.map +1 -1
  47. package/dist/storage/migrations.js +43 -0
  48. package/dist/storage/migrations.js.map +1 -1
  49. package/dist/storage/repositories/taint-marks.d.ts +26 -0
  50. package/dist/storage/repositories/taint-marks.d.ts.map +1 -0
  51. package/dist/storage/repositories/taint-marks.js +27 -0
  52. package/dist/storage/repositories/taint-marks.js.map +1 -0
  53. package/dist/storage/repositories/threat-score-events.d.ts +27 -0
  54. package/dist/storage/repositories/threat-score-events.d.ts.map +1 -0
  55. package/dist/storage/repositories/threat-score-events.js +24 -0
  56. package/dist/storage/repositories/threat-score-events.js.map +1 -0
  57. package/dist/storage/repositories/threat-scores.d.ts +26 -0
  58. package/dist/storage/repositories/threat-scores.d.ts.map +1 -0
  59. package/dist/storage/repositories/threat-scores.js +42 -0
  60. package/dist/storage/repositories/threat-scores.js.map +1 -0
  61. package/dist/storage/repositories/tool-chain-detections.d.ts +24 -0
  62. package/dist/storage/repositories/tool-chain-detections.d.ts.map +1 -0
  63. package/dist/storage/repositories/tool-chain-detections.js +27 -0
  64. package/dist/storage/repositories/tool-chain-detections.js.map +1 -0
  65. package/dist/tool-guard/chain-detector.d.ts +18 -0
  66. package/dist/tool-guard/chain-detector.d.ts.map +1 -0
  67. package/dist/tool-guard/chain-detector.js +55 -0
  68. package/dist/tool-guard/chain-detector.js.map +1 -0
  69. package/dist/tool-guard/chain-rules.d.ts +10 -0
  70. package/dist/tool-guard/chain-rules.d.ts.map +1 -0
  71. package/dist/tool-guard/chain-rules.js +30 -0
  72. package/dist/tool-guard/chain-rules.js.map +1 -0
  73. package/dist/tool-guard/taint-tracker.d.ts +24 -0
  74. package/dist/tool-guard/taint-tracker.d.ts.map +1 -0
  75. package/dist/tool-guard/taint-tracker.js +70 -0
  76. package/dist/tool-guard/taint-tracker.js.map +1 -0
  77. package/package.json +1 -1
  78. package/dist/cli/commands/pro.d.ts +0 -3
  79. package/dist/cli/commands/pro.d.ts.map +0 -1
  80. package/dist/cli/commands/pro.js +0 -261
  81. package/dist/cli/commands/pro.js.map +0 -1
  82. package/dist/license/pro-license.d.ts +0 -11
  83. package/dist/license/pro-license.d.ts.map +0 -1
  84. package/dist/license/pro-license.js +0 -88
  85. package/dist/license/pro-license.js.map +0 -1
  86. package/dist/license/verify.d.ts +0 -18
  87. package/dist/license/verify.d.ts.map +0 -1
  88. package/dist/license/verify.js +0 -71
  89. package/dist/license/verify.js.map +0 -1
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createApiRouter = createApiRouter;
4
+ const node_fs_1 = require("node:fs");
5
+ const paths_js_1 = require("../config/paths.js");
4
6
  const requests_js_1 = require("../storage/repositories/requests.js");
5
7
  const dlp_events_js_1 = require("../storage/repositories/dlp-events.js");
6
8
  const optimizer_events_js_1 = require("../storage/repositories/optimizer-events.js");
@@ -13,11 +15,14 @@ const tool_calls_js_1 = require("../storage/repositories/tool-calls.js");
13
15
  const tool_guard_rules_js_1 = require("../storage/repositories/tool-guard-rules.js");
14
16
  const plugin_events_js_1 = require("../storage/repositories/plugin-events.js");
15
17
  const alert_js_1 = require("../tool-guard/alert.js");
18
+ const threat_scores_js_1 = require("../storage/repositories/threat-scores.js");
19
+ const threat_score_events_js_1 = require("../storage/repositories/threat-score-events.js");
20
+ const tool_chain_detections_js_1 = require("../storage/repositories/tool-chain-detections.js");
21
+ const chain_rules_js_1 = require("../tool-guard/chain-rules.js");
16
22
  const engine_js_1 = require("../dlp/engine.js");
17
23
  const semantics_js_1 = require("../dlp/semantics.js");
18
24
  const remote_sync_js_1 = require("../dlp/remote-sync.js");
19
25
  const version_js_1 = require("../version.js");
20
- const verify_js_1 = require("../license/verify.js");
21
26
  const logger_js_1 = require("../utils/logger.js");
22
27
  const log = (0, logger_js_1.createLogger)('api-routes');
23
28
  function parseUrl(req) {
@@ -47,39 +52,12 @@ function createApiRouter(db, configManager, pluginManager, getPluginState) {
47
52
  const toolCallsRepo = new tool_calls_js_1.ToolCallsRepository(db);
48
53
  const toolGuardRulesRepo = new tool_guard_rules_js_1.ToolGuardRulesRepository(db);
49
54
  const pluginEventsRepo = new plugin_events_js_1.PluginEventsRepository(db);
50
- let devUnlocked = false;
55
+ const threatScoresRepo = new threat_scores_js_1.ThreatScoresRepository(db);
56
+ const threatScoreEventsRepo = new threat_score_events_js_1.ThreatScoreEventsRepository(db);
57
+ const chainDetectionsRepo = new tool_chain_detections_js_1.ToolChainDetectionsRepository(db);
51
58
  return (req, res) => {
52
59
  const url = parseUrl(req);
53
60
  const path = url.pathname;
54
- // GET /api/dev — dev mode check (only true when started with --dev)
55
- if (req.method === 'GET' && path === '/api/dev') {
56
- sendJson(res, { dev: process.env.BASTION_DEV === '1' });
57
- return true;
58
- }
59
- // POST /api/dev/activate — activate dev unlock with token
60
- if (req.method === 'POST' && path === '/api/dev/activate') {
61
- const expected = process.env.BASTION_DEV_TOKEN;
62
- if (!expected) {
63
- sendJson(res, { error: 'Dev mode not enabled' }, 403);
64
- return true;
65
- }
66
- bufferBody(req).then((body) => {
67
- try {
68
- const data = JSON.parse(body);
69
- if (data.token === expected) {
70
- devUnlocked = true;
71
- sendJson(res, { ok: true });
72
- }
73
- else {
74
- sendJson(res, { error: 'Invalid token' }, 403);
75
- }
76
- }
77
- catch {
78
- sendJson(res, { error: 'Invalid request' }, 400);
79
- }
80
- }).catch(() => sendJson(res, { error: 'Internal error' }, 500));
81
- return true;
82
- }
83
61
  // GET /api/stats — Enhanced with filters
84
62
  if (req.method === 'GET' && path === '/api/stats') {
85
63
  const sessionId = url.searchParams.get('session_id') ?? undefined;
@@ -663,29 +641,92 @@ function createApiRouter(db, configManager, pluginManager, getPluginState) {
663
641
  sendJson(res, pluginEventsRepo.getStats());
664
642
  return true;
665
643
  }
666
- // GET /api/licensePro license status
667
- if (req.method === 'GET' && path === '/api/license') {
668
- // Dev token unlock — all features available for debugging
669
- if (devUnlocked) {
670
- sendJson(res, { pro: true, plan: 'dev', expiresAt: '', features: ['ai-injection', 'budget', 'ratelimit'] });
644
+ // POST /api/plugins/uninstalluninstall an external plugin
645
+ if (req.method === 'POST' && path === '/api/plugins/uninstall') {
646
+ bufferBody(req).then((body) => {
647
+ try {
648
+ const data = JSON.parse(body);
649
+ const name = data.name;
650
+ if (!name) {
651
+ sendJson(res, { error: 'name is required' }, 400);
652
+ return;
653
+ }
654
+ const config = configManager.get();
655
+ const external = config.plugins.external ?? [];
656
+ const match = external.find(e => e.package.includes(name));
657
+ if (!match) {
658
+ sendJson(res, { error: `No external plugin matching "${name}"` }, 404);
659
+ return;
660
+ }
661
+ // Remove plugin directory
662
+ if ((0, node_fs_1.existsSync)(match.package)) {
663
+ (0, node_fs_1.rmSync)(match.package, { recursive: true, force: true });
664
+ }
665
+ // Remove models if requested
666
+ const removeModels = data.removeModels === true;
667
+ const modelsDir = paths_js_1.paths.modelsDir;
668
+ let modelsRemoved = false;
669
+ if (removeModels && (0, node_fs_1.existsSync)(modelsDir)) {
670
+ (0, node_fs_1.rmSync)(modelsDir, { recursive: true, force: true });
671
+ modelsRemoved = true;
672
+ }
673
+ // Update config — remove the entry
674
+ const updated = external.filter(e => e !== match);
675
+ configManager.update({ plugins: { external: updated } });
676
+ // Disable the plugin in the running manager
677
+ for (const p of pluginManager.getPlugins()) {
678
+ if (p.source === 'external' && p.packageName?.includes(name)) {
679
+ pluginManager.disable(p.name);
680
+ }
681
+ }
682
+ log.info('Plugin uninstalled', { name, package: match.package, modelsRemoved });
683
+ sendJson(res, { ok: true, removed: match.package, modelsRemoved });
684
+ }
685
+ catch (err) {
686
+ sendJson(res, { error: err.message }, 400);
687
+ }
688
+ }).catch((err) => sendJson(res, { error: err.message }, 500));
689
+ return true;
690
+ }
691
+ // ── Threat Intelligence API ──
692
+ // GET /api/threat/sessions — all elevated+ sessions
693
+ if (req.method === 'GET' && path === '/api/threat/sessions') {
694
+ sendJson(res, threatScoresRepo.getElevated());
695
+ return true;
696
+ }
697
+ // GET /api/threat/sessions/:id — single session threat details + event history
698
+ if (req.method === 'GET' && path.startsWith('/api/threat/sessions/')) {
699
+ const sessionId = decodeURIComponent(path.slice('/api/threat/sessions/'.length));
700
+ if (!sessionId) {
701
+ sendJson(res, { error: 'Missing session ID' }, 400);
671
702
  return true;
672
703
  }
673
- const proPlugin = pluginManager.getPlugins().find(p => p.source === 'external' && p.packageName?.match(/bastion-pro|@bastion\/pro/));
674
- if (!proPlugin || pluginManager.isDisabled(proPlugin.name)) {
675
- sendJson(res, { pro: false });
704
+ const score = threatScoresRepo.get(sessionId);
705
+ const events = threatScoreEventsRepo.getBySession(sessionId);
706
+ const chainDetections = chainDetectionsRepo.getBySession(sessionId);
707
+ sendJson(res, { score, events, chainDetections });
708
+ return true;
709
+ }
710
+ // POST /api/threat/sessions/:id/reset — manually reset threat score
711
+ if (req.method === 'POST' && path.match(/^\/api\/threat\/sessions\/[^/]+\/reset$/)) {
712
+ const sessionId = decodeURIComponent(path.slice('/api/threat/sessions/'.length, path.lastIndexOf('/reset')));
713
+ if (!sessionId) {
714
+ sendJson(res, { error: 'Missing session ID' }, 400);
676
715
  return true;
677
716
  }
678
- // The Pro plugin stores a signed token — we verify the signature
679
- // so a forged plugin cannot simply claim valid: true.
680
- const licenseState = getPluginState ? getPluginState(proPlugin.name, 'license') : undefined;
681
- const token = licenseState?.token;
682
- const result = (0, verify_js_1.verifyLicenseToken)(token);
683
- if (result.valid && result.payload) {
684
- sendJson(res, { pro: true, plan: result.payload.plan, expiresAt: result.payload.expiresAt, features: result.payload.features });
685
- }
686
- else {
687
- sendJson(res, { pro: false, installed: true, reason: result.reason });
688
- }
717
+ threatScoresRepo.reset(sessionId);
718
+ sendJson(res, { ok: true });
719
+ return true;
720
+ }
721
+ // GET /api/threat/chain-detections recent tool chain detections
722
+ if (req.method === 'GET' && path === '/api/threat/chain-detections') {
723
+ const limit = parseInt(url.searchParams.get('limit') ?? '50', 10);
724
+ sendJson(res, chainDetectionsRepo.getRecent(limit));
725
+ return true;
726
+ }
727
+ // GET /api/threat/chain-rules — tool chain rules list
728
+ if (req.method === 'GET' && path === '/api/threat/chain-rules') {
729
+ sendJson(res, chain_rules_js_1.BUILTIN_CHAIN_RULES);
689
730
  return true;
690
731
  }
691
732
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-routes.js","sourceRoot":"","sources":["../../src/dashboard/api-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA8lDhD,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAOxD"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/dashboard/page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqpDhD,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAOxD"}
@@ -97,11 +97,13 @@ tr:hover td{background:var(--border)}
97
97
  .audit-kv .v{color:var(--bright)}
98
98
  .timeline-card{margin-bottom:4px;cursor:pointer;transition:border-color .15s;padding:10px 12px}
99
99
  .timeline-card:hover{border-color:var(--cyan)}
100
- .pro-feature-row{cursor:pointer;transition:border-color .15s}
101
- .pro-feature-row:hover{border-color:var(--cyan)}
102
- .pro-feature-row.unlocked .toggle-label{color:var(--green)}
103
100
  .filter-input{background:var(--bg);border:1px solid var(--border);color:var(--bright);padding:4px 10px;font-family:inherit;font-size:11px;width:280px}
104
101
  @keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}}
102
+ .row-tag.elevated{background:#1a1a00;color:var(--yellow)}
103
+ .row-tag.high-threat{background:#1a0a00;color:#ff6600}
104
+ .row-tag.critical-threat{background:#330000;color:var(--red)}
105
+ .ti-reset-btn{padding:2px 8px;font-size:10px;cursor:pointer;font-family:inherit;color:var(--red);background:none;border:1px solid #330000;border-radius:2px}
106
+ .ti-reset-btn:hover{background:#1a0000}
105
107
  </style>
106
108
  </head>`;
107
109
  // ── TITLEBAR ──────────────────────────────────────────────────────
@@ -181,6 +183,20 @@ const PAGE_GUARD = `
181
183
  <div class="section-body" id="gd-rules"><div class="empty">No rules</div></div>
182
184
  </div>
183
185
  </div>
186
+ <div class="section" style="margin-top:8px">
187
+ <div class="section-head"><span class="section-title">Threat Sessions</span><span style="color:var(--muted);font-size:10px;margin-left:4px">(elevated+)</span></div>
188
+ <div class="section-body">
189
+ <table><thead><tr><th>Session</th><th>Score</th><th>Level</th><th>Events</th><th>Last Event</th><th></th></tr></thead><tbody id="ti-sessions-list"></tbody></table>
190
+ <p class="empty" id="ti-no-sessions">No elevated sessions</p>
191
+ </div>
192
+ </div>
193
+ <div class="section" style="margin-top:2px">
194
+ <div class="section-head"><span class="section-title">Chain Detections</span></div>
195
+ <div class="section-body">
196
+ <table><thead><tr><th>Time</th><th>Session</th><th>Rule</th><th>Sequence</th><th>Action</th></tr></thead><tbody id="ti-chains-list"></tbody></table>
197
+ <p class="empty" id="ti-no-chains">No chain detections</p>
198
+ </div>
199
+ </div>
184
200
  </div>`;
185
201
  // ── PAGE: LOG ─────────────────────────────────────────────────────
186
202
  const PAGE_LOG = `
@@ -254,25 +270,20 @@ const PAGE_SETTINGS = `
254
270
  <div class="section"><div class="section-head setting-toggle" data-target="set-plugins"><span class="section-title"><span class="sect-arrow">&#9662;</span> PLUGINS</span></div>
255
271
  <div class="section-body" id="set-plugins" style="padding:12px"><div id="plugin-toggles"></div></div></div>
256
272
 
257
- <!-- 2. Pro Features (dev-only) -->
258
- <div class="section" id="sec-pro" style="display:none"><div class="section-head setting-toggle" data-target="set-pro"><span class="section-title"><span class="sect-arrow">&#9656;</span> PRO FEATURES</span></div>
259
- <div class="section-body" id="set-pro" style="display:none;padding:12px">
260
- <div id="pro-features">
261
- <div class="toggle-row pro-feature-row" data-pro-feature="ai-injection"><div><div class="toggle-label">AI Injection Detection</div><div class="toggle-desc">Multi-layer AI-driven prompt injection detection</div></div><span class="row-tag" style="background:#1a1a1a;color:var(--dim)">PRO</span></div>
262
- <div class="toggle-row pro-feature-row" data-pro-feature="budget"><div><div class="toggle-label">Budget Control</div><div class="toggle-desc">Per-session/user/project usage and cost budgets</div></div><span class="row-tag" style="background:#1a1a1a;color:var(--dim)">PRO</span></div>
263
- <div class="toggle-row pro-feature-row" data-pro-feature="ratelimit"><div><div class="toggle-label">Rate Limiting</div><div class="toggle-desc">Configurable rate limiting by API key, session, or global</div></div><span class="row-tag" style="background:#1a1a1a;color:var(--dim)">PRO</span></div>
273
+ <!-- 2. Optional Features -->
274
+ <div class="section"><div class="section-head setting-toggle" data-target="set-optional"><span class="section-title"><span class="sect-arrow">&#9656;</span> OPTIONAL FEATURES</span></div>
275
+ <div class="section-body" id="set-optional" style="display:none;padding:12px">
276
+ <div id="optional-features">
277
+ <div class="toggle-row" data-opt="pi-classifier"><div><div class="toggle-label">AI Injection Detection</div><div class="toggle-desc">ML-based prompt injection detection (ONNX Runtime)</div></div><span class="row-tag" id="opt-tag-pi-classifier" style="background:#1a1a1a;color:var(--dim)">NOT INSTALLED</span></div>
278
+ <div class="toggle-row" data-opt="content-extractor"><div><div class="toggle-label">Content Extractor</div><div class="toggle-desc">PDF text extraction and image OCR for DLP scanning</div></div><span class="row-tag" id="opt-tag-content-extractor" style="background:#1a1a1a;color:var(--dim)">NOT INSTALLED</span></div>
264
279
  </div>
265
- <div id="pro-detail" style="display:none;margin-top:12px;padding:16px;background:var(--bg);border:1px solid var(--border);text-align:center">
266
- <div id="pro-detail-title" style="color:var(--bright);font-size:13px;font-weight:700;margin-bottom:6px"></div>
267
- <div id="pro-detail-desc" style="color:var(--dim);font-size:12px;max-width:480px;margin:0 auto 12px"></div>
268
- <div id="pro-detail-unlocked" style="display:none;color:var(--green);font-size:12px">Feature enabled.</div>
269
- <div id="pro-detail-locked">
270
- <a style="display:inline-block;padding:6px 20px;background:#0a3d0a;color:var(--green);border:1px solid var(--green);font-size:12px;text-decoration:none;font-family:inherit" href="https://bastion.dev/pro" target="_blank">Upgrade to Pro</a>
271
- <div class="pro-license-input" id="pro-detail-license" style="display:none;margin-top:12px">
272
- <input type="text" class="cfg-input" style="width:240px;display:inline-block" placeholder="License key" id="pro-license-key">
273
- <button class="cfg-btn primary" onclick="activateLicense('pro-license-key')">Activate</button>
274
- </div>
275
- </div>
280
+ <div id="opt-install-hint" style="margin-top:12px;padding:12px;background:var(--bg);border:1px solid var(--border);font-size:11px;color:var(--dim)">
281
+ <div style="margin-bottom:4px;color:var(--bright)">Install optional plugins:</div>
282
+ <code style="color:var(--green);font-size:12px">bastion plugins install</code> or <code style="color:var(--green);font-size:12px">./install.sh -local -plugins</code>
283
+ <div style="margin-top:4px">Adds ML-based detection, PDF/OCR content extraction, and more.</div>
284
+ </div>
285
+ <div id="opt-uninstall-row" style="display:none;margin-top:12px;text-align:right">
286
+ <button id="opt-uninstall-btn" class="cfg-btn secondary" style="color:var(--red);border-color:#330000">Uninstall Optional Plugins</button>
276
287
  </div>
277
288
  </div></div>
278
289
 
@@ -547,29 +558,39 @@ function actionTag(a){
547
558
  if(a==='flag')return '<span class="row-tag warn">flag</span>';
548
559
  return '<span class="row-tag">'+esc(a)+'</span>';
549
560
  }
561
+ function threatLevelTag(level){
562
+ if(level==='critical')return '<span class="row-tag critical-threat">critical</span>';
563
+ if(level==='high')return '<span class="row-tag high-threat">high</span>';
564
+ if(level==='elevated')return '<span class="row-tag elevated">elevated</span>';
565
+ return '<span class="row-tag">'+esc(level||'normal')+'</span>';
566
+ }
550
567
 
551
568
  // ══ 4. PAGE: OVERVIEW ═════════════════════════════════════════════
552
569
  async function refreshOverview(){
553
570
  try{
554
571
  var sp=sinceParam();
555
572
  var qp=sp?'?'+sp:'';
556
- var [statsR,alertsR,dlpRecentR,piRecentR]=await Promise.all([
573
+ var [statsR,alertsR,dlpRecentR,piRecentR,threatOvR]=await Promise.all([
557
574
  apiFetch('/api/stats'+qp),
558
575
  apiFetch('/api/tool-guard/alerts'),
559
576
  apiFetch('/api/dlp/recent?limit=5'+(sp?'&'+sp:'')),
560
- apiFetch('/api/plugin-events/recent?limit=5&plugin=pi-classifier'+(sp?'&'+sp:''))
577
+ apiFetch('/api/plugin-events/recent?limit=5&plugin=pi-classifier'+(sp?'&'+sp:'')),
578
+ apiFetch('/api/threat/sessions').catch(function(){return{json:function(){return[]}}})
561
579
  ]);
562
580
  var statsData=await statsR.json();
563
581
  var alertsData=await alertsR.json();
564
582
  var dlpRecent=await dlpRecentR.json();
565
583
  var piRecent=await piRecentR.json();
584
+ var threatOvData=await threatOvR.json();
585
+ var threatSessions=Array.isArray(threatOvData)?threatOvData:threatOvData.sessions||[];
586
+ var threatCount=threatSessions.length;
566
587
  var s=statsData.stats;
567
588
  var dlp=statsData.dlp||{};
568
589
  var ba=dlp.by_action||{};
569
590
  var piStats=statsData.pluginEvents||{};
570
591
 
571
592
  // Gauges
572
- if(!skipIfSame('ov-gauges',{s:s,dlp:dlp,pi:piStats})){
593
+ if(!skipIfSame('ov-gauges',{s:s,dlp:dlp,pi:piStats,tc:threatCount})){
573
594
  var dlpTotal=dlp.total_events||0;
574
595
  var piTotal=piStats.total_events||0;
575
596
  var latAvg=s.avg_latency_ms||0;
@@ -579,6 +600,7 @@ async function refreshOverview(){
579
600
  gauge('Tokens',fmt(s.total_input_tokens+s.total_output_tokens),fmt(s.total_input_tokens)+' in / '+fmt(s.total_output_tokens)+' out','')+
580
601
  gauge('DLP Hits',fmt(dlpTotal),(ba.redact||0)+' redact, '+(ba.block||0)+' block',dlpTotal>0?'red':'')+
581
602
  gauge('PI Detections',fmt(piTotal),'ML injection','red')+
603
+ gauge('Threats',fmt(threatCount),'elevated+ sessions',threatCount>0?'red':'green')+
582
604
  gauge('Avg Latency',Math.round(latAvg)+'ms','','cyan');
583
605
  }
584
606
 
@@ -783,12 +805,58 @@ async function refreshGuard(){
783
805
  '<span class="row-tag '+(r.enabled?'audit':'')+'">'+((r.enabled?'ON':'OFF'))+'</span></div>';
784
806
  }).join(''):'<div class="empty">No rules</div>';
785
807
  }
808
+
809
+ // Threat Intelligence sections
810
+ try{
811
+ var [threatR,chainR]=await Promise.all([
812
+ apiFetch('/api/threat/sessions'),
813
+ apiFetch('/api/threat/chain-detections?limit=20')
814
+ ]);
815
+ var sessions=await threatR.json();
816
+ var chains=await chainR.json();
817
+
818
+ // Threat sessions table
819
+ if(!skipIfSame('ti-sessions',sessions)){
820
+ var tsList=Array.isArray(sessions)?sessions:sessions.sessions||[];
821
+ document.getElementById('ti-no-sessions').style.display=tsList.length?'none':'';
822
+ document.getElementById('ti-sessions-list').innerHTML=tsList.map(function(s){
823
+ return '<tr><td class="mono" style="font-size:11px;color:#555">'+esc((s.session_id||s.sessionId||'').slice(0,12))+'</td>'+
824
+ '<td style="font-weight:700;color:var(--bright)">'+Math.round(s.score||0)+'</td>'+
825
+ '<td>'+threatLevelTag(s.level||s.threatLevel)+'</td>'+
826
+ '<td>'+fmt(s.events||s.eventCount||0)+'</td>'+
827
+ '<td>'+ago(s.last_event||s.lastEvent||s.updated_at||'')+'</td>'+
828
+ '<td><button class="ti-reset-btn" data-sid="'+esc(s.session_id||s.sessionId||'')+'">Reset</button></td></tr>';
829
+ }).join('');
830
+ }
831
+
832
+ // Chain detections table
833
+ if(!skipIfSame('ti-chains',chains)){
834
+ var chList=Array.isArray(chains)?chains:chains.detections||[];
835
+ document.getElementById('ti-no-chains').style.display=chList.length?'none':'';
836
+ document.getElementById('ti-chains-list').innerHTML=chList.map(function(c){
837
+ var seq=(c.sequence||c.tools||[]).map(function(t){return esc(t)}).join(' \\u2192 ');
838
+ var actionCls=(c.action==='block')?'block':'warn';
839
+ return '<tr><td>'+ago(c.created_at||c.timestamp||'')+'</td>'+
840
+ '<td class="mono" style="font-size:11px;color:#555">'+esc((c.session_id||c.sessionId||'').slice(0,12))+'</td>'+
841
+ '<td class="mono">'+esc(c.rule||c.ruleName||'')+'</td>'+
842
+ '<td style="font-size:11px">'+seq+'</td>'+
843
+ '<td><span class="row-tag '+actionCls+'">'+esc((c.action||'warn').toUpperCase())+'</span></td></tr>';
844
+ }).join('');
845
+ }
846
+ }catch(te){/* threat API may not be available */}
786
847
  }catch(e){console.error('Guard refresh error',e)}
787
848
  }
788
849
  document.getElementById('gd-ack-btn').addEventListener('click',async function(){
789
850
  await apiFetch('/api/tool-guard/alerts/ack',{method:'POST'});
790
851
  refreshGuard();pollAlerts();
791
852
  });
853
+ document.getElementById('ti-sessions-list').addEventListener('click',async function(e){
854
+ var btn=e.target.closest('.ti-reset-btn');if(!btn)return;
855
+ var sid=btn.dataset.sid;if(!sid)return;
856
+ btn.textContent='...';btn.disabled=true;
857
+ try{await apiFetch('/api/threat/sessions/'+encodeURIComponent(sid)+'/reset',{method:'POST'});_lastJson={};refreshGuard()}
858
+ catch(ex){btn.textContent='Reset';btn.disabled=false}
859
+ });
792
860
  // Click guard event → go to Log detail
793
861
  document.getElementById('gd-events').addEventListener('click',function(e){
794
862
  var row=e.target.closest('.row[data-rid]');
@@ -1146,19 +1214,10 @@ document.querySelectorAll('.setting-toggle[data-target]').forEach(function(h){
1146
1214
  });
1147
1215
  });
1148
1216
 
1149
- var _devMode=false;var _proLicense={pro:false};
1150
- var _proFeatures={
1151
- 'ai-injection':{title:'AI Injection Detection',desc:'Multi-layer AI-driven prompt injection detection with semantic analysis.'},
1152
- 'budget':{title:'Budget Control',desc:'Per-session/user/project cost budgets with auto-blocking.'},
1153
- 'ratelimit':{title:'Rate Limiting',desc:'Configurable rate limiting by API key, session, or global scope.'}
1154
- };
1155
-
1156
1217
  async function refreshSettings(){
1157
1218
  try{
1158
- var [cfgR,licR,devR]=await Promise.all([apiFetch('/api/config'),apiFetch('/api/license'),apiFetch('/api/dev')]);
1159
- var cfgData=await cfgR.json();_proLicense=await licR.json();var devData=await devR.json();
1160
- _devMode=!!devData.dev;
1161
- document.getElementById('sec-pro').style.display=_devMode?'':'none';
1219
+ var cfgR=await apiFetch('/api/config');
1220
+ var cfgData=await cfgR.json();
1162
1221
 
1163
1222
  // 1. Plugins
1164
1223
  var info=cfgData.pluginInfo||[];
@@ -1184,8 +1243,25 @@ async function refreshSettings(){
1184
1243
  });
1185
1244
  });
1186
1245
 
1187
- // 2. Pro Features
1188
- updateProFeatures();
1246
+ // 2. Optional Features
1247
+ var extNames=external.map(function(p){return p.name});
1248
+ var optMap={'pi-classifier':'pi-classifier','content-extractor':'content-extractor'};
1249
+ var hasAnyOpt=false;
1250
+ Object.keys(optMap).forEach(function(key){
1251
+ var tag=document.getElementById('opt-tag-'+key);if(!tag)return;
1252
+ var installed=extNames.indexOf(optMap[key])>=0;
1253
+ if(installed){
1254
+ hasAnyOpt=true;
1255
+ var p=external.find(function(x){return x.name===optMap[key]});
1256
+ tag.style.background=p&&p.enabled?'#0a1a0a':'#1a1a00';
1257
+ tag.style.color=p&&p.enabled?'#00ff88':'var(--yellow)';
1258
+ tag.textContent=p&&p.enabled?'ACTIVE':'DISABLED';
1259
+ }else{
1260
+ tag.style.background='#1a1a1a';tag.style.color='var(--dim)';tag.textContent='NOT INSTALLED';
1261
+ }
1262
+ });
1263
+ document.getElementById('opt-install-hint').style.display=hasAnyOpt?'none':'';
1264
+ document.getElementById('opt-uninstall-row').style.display=hasAnyOpt?'':'none';
1189
1265
 
1190
1266
  // 3. DLP Config
1191
1267
  await loadDlpConfig(cfgData);
@@ -1216,37 +1292,16 @@ async function refreshSettings(){
1216
1292
  }catch(e){console.error('Settings refresh error',e)}
1217
1293
  }
1218
1294
 
1219
- // Pro features
1220
- function updateProFeatures(){
1221
- document.querySelectorAll('.pro-feature-row').forEach(function(row){
1222
- if(_proLicense.pro){
1223
- row.classList.add('unlocked');
1224
- var badge=row.querySelector('.row-tag');
1225
- if(badge){badge.style.background='#0a1a0a';badge.style.color='#00ff88';badge.textContent='ACTIVE'}
1226
- }
1227
- });
1228
- }
1229
- function showProDetail(feature){
1230
- var info=_proFeatures[feature];if(!info)return;
1231
- document.getElementById('pro-detail-title').textContent=info.title;
1232
- document.getElementById('pro-detail-desc').textContent=info.desc;
1233
- document.getElementById('pro-detail').style.display='block';
1234
- if(_proLicense.pro){document.getElementById('pro-detail-unlocked').style.display='block';document.getElementById('pro-detail-locked').style.display='none'}
1235
- else{document.getElementById('pro-detail-unlocked').style.display='none';document.getElementById('pro-detail-locked').style.display='block';
1236
- document.getElementById('pro-detail-license').style.display=(_devMode||_proLicense.installed)?'block':'none'}
1237
- }
1238
- document.querySelectorAll('.pro-feature-row').forEach(function(row){
1239
- row.addEventListener('click',function(){showProDetail(row.dataset.proFeature)});
1295
+ // Optional plugins uninstall
1296
+ document.getElementById('opt-uninstall-btn').addEventListener('click',async function(){
1297
+ if(!confirm('Uninstall optional plugins (bastion-pro)?'))return;
1298
+ var removeModels=confirm('Also remove downloaded models? This frees disk space but models will need to be re-downloaded on next install.');
1299
+ try{
1300
+ var r=await apiFetch('/api/plugins/uninstall',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({name:'bastion-pro',removeModels:removeModels})});
1301
+ var d=await r.json();
1302
+ if(d.ok){refreshSettings()}else{alert(d.error||'Uninstall failed')}
1303
+ }catch(e){alert('Uninstall failed: '+e.message)}
1240
1304
  });
1241
- async function activateLicense(inputId){
1242
- var key=document.getElementById(inputId).value.trim();if(!key)return;
1243
- if(_devMode){
1244
- try{var r=await apiFetch('/api/dev/activate',{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({token:key})});
1245
- var d=await r.json();if(d.ok){refreshSettings();return}alert(d.error||'Invalid token');
1246
- }catch(e){alert('Activation failed')}
1247
- }else{alert('License activation requires the Bastion Pro plugin.')}
1248
- }
1249
- window.activateLicense=activateLicense;
1250
1305
 
1251
1306
  // DLP Config
1252
1307
  var dlpServerState=null;var dlpBuiltinsLoaded=false;var dlpCleanSnapshot='';