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 +30 -7
- package/lib/client.js +15 -2
- package/package.json +1 -1
- package/src/client.js +15 -2
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
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', [
|