dsh-redteam-memory 0.4.0 → 0.4.1

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 CHANGED
@@ -107,7 +107,7 @@ remember this…」,面板可改)时,那条用户消息会被自动收进
107
107
  ```
108
108
  红队记忆(侧栏面板,只用不管配)
109
109
  ┌ 顶栏:本地 N 条 · 索引 M 条(待同步 k)· 向量模型是否配好 + 指路「设置 → 红队设置」
110
- ├ 知识库:同步索引(待同步 k);不再展示查询框或内置知识包按钮
110
+ ├ 知识库:同步索引(待同步 k)· 导入内置知识包;不含查询框(查询在独立检索页)
111
111
  │ 导入文件:[绝对路径] [导入] ← 支持 pdf / word(.docx) / md / txt
112
112
  │ 对话捕获:默认折叠成一行(开关 · 触发词 N 个 · 最近捕获 N 条),展开才配置
113
113
  │ 列表:勾选 / 标题(点开看全文)/ 类型 / 标签 / 索引(已索引 · 仅本地)/ 更新时间
@@ -123,10 +123,11 @@ remember this…」,面板可改)时,那条用户消息会被自动收进
123
123
 
124
124
  **导入方式**
125
125
 
126
- 知识库界面只保留**文件导入**,不再提供「导入内置知识包」按钮,也不会自动灌入种子知识。
127
- 后端 `seed` RPC 为兼容旧调用保留,但没有对应界面入口。
128
-
129
- **文件**:**只认四类** —— `pdf` / `word(.docx)` / `md` / `txt`。别的格式会被直接拒绝并说明原因
126
+ 1. **内置知识包**:知识库操作栏上的「导入内置知识包」,16 条 AI 安全知识与进攻技巧
127
+ (OWASP LLM Top 10 全十条 + 间接注入链路、工具枚举、RAG 索引收集、未授权与默认口令、
128
+ 模型管理接口滥用面、证据与合规清单)。**先落本地库(一定成功)**,索引同步失败也不影响内容;
129
+ 配好后点「同步索引」补齐。
130
+ 2. **文件**:**只认四类** —— `pdf` / `word(.docx)` / `md` / `txt`。别的格式会被直接拒绝并说明原因
130
131
  (不猜、也不静默失败)。解析都不引依赖:md 与 txt 直接读;word 用 `unzip -p … word/document.xml`
131
132
  抽正文并反转义;pdf 用 `pdftotext -layout`(poppler)。md 按 `##` 分节,word / pdf 按段落
132
133
  归拢成约 2000 字一条;长文入库时再自动切块(每块 1200 字符、重叠 120)。
@@ -152,12 +153,34 @@ remember this…」,面板可改)时,那条用户消息会被自动收进
152
153
  - **pdf / word 导入依赖机器上的命令**:`pdftotext`(poppler-utils)与 `unzip`。缺了会明确报错
153
154
  并说明装什么,而不是抽出一堆乱码。老式 `.doc` 不支持(请先另存为 `.docx`)。
154
155
  - S3 只做了**关联**层面的能力(测连通、列举、整库导出),不负责 Milvus 自身的备份调度。
156
+ - **自建 / 兼容实现的 Milvus,REST v2 建集合接口可能不认标准 schema**:字段的 `maxLength`、
157
+ `max_length`、`params` 数组与对象四种写法都会被拒(`code=1101 type param(max_length) should be
158
+ specified for the field(id)`),而「快速建表」(只给 `collectionName` / `dimension` / `metricType`)
159
+ 能通过 —— 但它建出的是 Int64 主键 + 动态字段,与本插件的行结构不一致。
160
+ **绕行办法**:用官方 SDK(`pymilvus`,gRPC 19530)按本插件的 schema 把集合与索引建好,
161
+ 插件检测到集合已存在会**直接复用**,无需改代码。schema 见 `src/host.js` 的 `buildSchema()`:
162
+ `id` VarChar(64) 主键非自增、`vector` FloatVector(dim)、`title`/`text`/`tags`/`kind`/`source`
163
+ VarChar、`created_at`/`updated_at` Int64,索引 `vector_idx`(AUTOINDEX / COSINE)。
164
+ 注意:这种情况下**不要点面板上的「删除向量索引」** —— 删掉后插件会用它自己的 REST 建表再建一次,
165
+ 又会撞上同一个坑。
166
+ 排查顺序:先 `describe` 看服务端自己返回的字段格式,不要靠猜。
155
167
 
156
168
  ## 版本
157
169
 
158
170
  当前包版本以 `package.json` 为准。`src/` 是权威源码,`lib/` 由构建脚本生成;
159
- 发布前必须运行构建和同步检查。当前源码已正式包含统一设置页、MinIO 展示名称、知识库操作栏精简、
160
- 连接测试业务错误响应,以及静态 Host 的 `tools` 硬依赖声明。以下保留历史版本说明。
171
+ 发布前必须运行构建和同步检查。
172
+
173
+ `0.4.0` 起:
174
+
175
+ - **统一红队设置页**:记忆与报告的配置都在「设置 → 红队设置」。本插件在 `settings.section`
176
+ 注册「红队设置」,并通过 `ctx.provide('redteamSettingsUI', hub)` 对外提供一个极小的注册契约,
177
+ 报告插件据此把自己的设置组件挂到同一页;记忆自身保留「记忆与向量存储」与「保存记忆设置」。
178
+ - **对象存储展示名改为 MinIO**。存储字段仍是 `s3`,RPC 仍是 `testS3` / `s3List` / `s3Backup`,
179
+ 已有配置无需迁移。
180
+ - **知识库操作栏**:保留「同步索引」与「导入内置知识包」,查询框移除(查询在独立检索页)。
181
+ - **连接测试返回业务错误**:Milvus / 向量模型 / 重排 / MinIO 四个测试缺配置或传输失败时,
182
+ HTTP 仍是 200,返回 `{ok:false,error}` 并给出下一步,不再抛成失败的 RPC 处理器。
183
+ - **静态 Host 声明 `tools` 硬依赖**:工具注册走 `ctx.tools`,不声明会被 Cordis 拒绝。
161
184
 
162
185
  `0.3.0` 把架构改成**本地优先**、加上对话捕获,并按「只用 / 只配」拆开了界面:
163
186
 
package/lib/client.js CHANGED
@@ -376,6 +376,18 @@ function applyClient(ctx) {
376
376
  })
377
377
  }
378
378
 
379
+ // 内置知识包:16 条 AI 安全知识与进攻技巧。先落本地库(一定成功),
380
+ // 索引同步失败也不影响内容 —— 配好后点「同步索引」补齐。
381
+ function doSeed() {
382
+ call('seed', {}, '导入内置知识包').then(function (r) {
383
+ if (r && r.ok === true) {
384
+ const pending = (r.snapshot && r.snapshot.status && r.snapshot.status.pending) || 0
385
+ setToast('已导入内置知识包 ' + (r.added || 0) + ' 条' + (pending ? '|待同步 ' + pending + ' 条' : '|已进索引'))
386
+ loadList(0)
387
+ }
388
+ })
389
+ }
390
+
379
391
  function doRemove() {
380
392
  if (!selected.length) { setError('先勾选要删除的条目'); return }
381
393
  call('removeKnowledge', { ids: selected }, '删除 ' + selected.length + ' 条').then(function (r) {
@@ -458,12 +470,13 @@ function applyClient(ctx) {
458
470
 
459
471
  function kbTab() {
460
472
  return el('div', { className: 'rtm-body' },
461
- // 知识库只保留同步入口;查询在独立检索页,导入走文件入口。
473
+ // 知识库只保留两个入口:同步索引与内置知识包;查询在独立检索页,导入走文件入口。
462
474
  el('div', { className: 'rtm-tools' },
463
475
  btn('同步索引' + (st && st.pending ? '(' + st.pending + ')' : ''), {
464
476
  disabled: !!busy || !(st && st.pending > 0),
465
477
  title: st && st.pending > 0 ? '把本地还没进索引的 ' + st.pending + ' 条同步到 Milvus' : '本地条目都已进索引',
466
- }, function () { doSyncIndex(false) })),
478
+ }, function () { doSyncIndex(false) }),
479
+ btn('导入内置知识包', { disabled: !!busy, title: '16 条 AI 安全知识与进攻技巧;先落本地库,不依赖向量模型' }, doSeed)),
467
480
 
468
481
  // 导入:只有一条路、四种格式
469
482
  card('导入文件', snap.importLabel || 'pdf / word(.docx) / md / txt', [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-redteam-memory",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "DSH 红队记忆:本地知识库、Milvus 向量检索与 MinIO,提供统一红队设置页",
5
5
  "license": "MIT",
6
6
  "author": "fasthei",
package/src/client.js CHANGED
@@ -317,6 +317,18 @@ function applyClient(ctx) {
317
317
  })
318
318
  }
319
319
 
320
+ // 内置知识包:16 条 AI 安全知识与进攻技巧。先落本地库(一定成功),
321
+ // 索引同步失败也不影响内容 —— 配好后点「同步索引」补齐。
322
+ function doSeed() {
323
+ call('seed', {}, '导入内置知识包').then(function (r) {
324
+ if (r && r.ok === true) {
325
+ const pending = (r.snapshot && r.snapshot.status && r.snapshot.status.pending) || 0
326
+ setToast('已导入内置知识包 ' + (r.added || 0) + ' 条' + (pending ? '|待同步 ' + pending + ' 条' : '|已进索引'))
327
+ loadList(0)
328
+ }
329
+ })
330
+ }
331
+
320
332
  function doRemove() {
321
333
  if (!selected.length) { setError('先勾选要删除的条目'); return }
322
334
  call('removeKnowledge', { ids: selected }, '删除 ' + selected.length + ' 条').then(function (r) {
@@ -399,12 +411,13 @@ function applyClient(ctx) {
399
411
 
400
412
  function kbTab() {
401
413
  return el('div', { className: 'rtm-body' },
402
- // 知识库只保留同步入口;查询在独立检索页,导入走文件入口。
414
+ // 知识库只保留两个入口:同步索引与内置知识包;查询在独立检索页,导入走文件入口。
403
415
  el('div', { className: 'rtm-tools' },
404
416
  btn('同步索引' + (st && st.pending ? '(' + st.pending + ')' : ''), {
405
417
  disabled: !!busy || !(st && st.pending > 0),
406
418
  title: st && st.pending > 0 ? '把本地还没进索引的 ' + st.pending + ' 条同步到 Milvus' : '本地条目都已进索引',
407
- }, function () { doSyncIndex(false) })),
419
+ }, function () { doSyncIndex(false) }),
420
+ btn('导入内置知识包', { disabled: !!busy, title: '16 条 AI 安全知识与进攻技巧;先落本地库,不依赖向量模型' }, doSeed)),
408
421
 
409
422
  // 导入:只有一条路、四种格式
410
423
  card('导入文件', snap.importLabel || 'pdf / word(.docx) / md / txt', [