@p-dsh-market/conversation-knowledge-map 0.1.19 → 0.2.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 +1 -1
- package/lib/client.js +6 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ DSH 的“知识视图”插件,把同一工作路径下用户明确选择的
|
|
|
13
13
|
|
|
14
14
|
摘要阶段按对话并行处理,并发上限固定为 3;每个对话按约 5000 字、优先在完整段落边界分段,只有单段本身超长时才按句末或硬边界拆分。同一对话的分段保持顺序处理。思维导图使用合并后的会话摘要;知识图谱直接使用保留来源的分段摘要,避免长对话在二次压缩后丢失实体。知识图谱按证据分段多次生成,最多 2 批并行;单批限制在 10–18 个实体、最多 24 条关系,若达到输出 Token 上限则只降低并重试当前批次。所有成功批次由 Host 按实体类型与名称、关系起点/终点/类型确定性去重并合并来源,最终结果再根据已读取文本量和有效分段数裁剪为 30–100 个实体、最多 200 条关系。单个批次连续失败只跳过该批,不会推翻其他成功批次。结构化输出失败时会完全重置并最多重试 3 次;单个对话摘要连续失败后只跳过该对话,不阻断其他对话和最终报告。“同时生成”模式下,一个最终视图失败也不会阻断另一个视图保存。进度区域和最终知识视图都会按时间线显示读取、摘要、具体失败原因、重试、跳过、合并、生成及保存过程;知识图谱时间线还会显示批次数、模型返回数量和合并去重后的保留数量。模型可以保留 thinking,但结果提取只读取最终文本并过滤 reasoning 内容;摘要和每次图谱调用分别预留 12000 与 24000 个输出 Token。最终模型若返回未选择的 Session 引用,会过滤该引用;严格模式下无有效来源的内容项会被跳过,最终页面列出实际总结的对话、失败对话和过滤数量。
|
|
15
15
|
|
|
16
|
-
生成过程时间线支持折叠和展开:进行中的任务默认展开,已完成结果中的历史时间线默认折叠。仅生成一种视图时会保留工作区中已有的另一种视图,不再用 `null` 覆盖其存储。思维导图使用递归树形布局并绘制父子连接线;严格来源过滤后少于 2
|
|
16
|
+
生成过程时间线支持折叠和展开:进行中的任务默认展开,已完成结果中的历史时间线默认折叠。仅生成一种视图时会保留工作区中已有的另一种视图,不再用 `null` 覆盖其存储。思维导图使用递归树形布局并绘制父子连接线;严格来源过滤后少于 2 个有效节点的退化结果不会再作为成功视图保存,而会进入重试。知识图谱按关联度使用中心节点与自动扩展的多层环形布局,节点卡片内显示类型和最多两行名称,关系以带方向箭头的弱化曲线呈现,并通过描边区分推测或冲突内容;画布首次打开自动居中,隐藏原生滚动条,可在整个图谱视口的空白区域按住自由拖动,并提供 50%–200% 缩放、独立的 80%–220% 节点间距以及选中实体的一跳局部视图。
|
|
17
17
|
|
|
18
18
|
节点“继续对话”只形成一个可编辑的后续问题。确认导航后,插件使用公开的 Session 导航入口;如果当前 Runtime 没有向该槽位暴露草稿镜像,则提供“打开并复制问题”的安全降级,不自动发送消息。
|
|
19
19
|
|
package/lib/client.js
CHANGED
|
@@ -549,8 +549,8 @@ window.__ModuleLoader__.load({
|
|
|
549
549
|
})
|
|
550
550
|
}
|
|
551
551
|
function beginPan(event) {
|
|
552
|
-
if (event.button !== 0 || (event.target.closest && event.target.closest('.ckm-graph-node'))) return
|
|
553
|
-
var viewport = event.currentTarget
|
|
552
|
+
if (event.button !== 0 || (event.target.closest && event.target.closest('.ckm-graph-node,.ckm-graph-toolbar,button,input,select'))) return
|
|
553
|
+
var viewport = event.currentTarget
|
|
554
554
|
panRef.current = { pointerId: event.pointerId, x: event.clientX, y: event.clientY, left: viewport.scrollLeft, top: viewport.scrollTop }
|
|
555
555
|
event.currentTarget.setPointerCapture(event.pointerId)
|
|
556
556
|
event.currentTarget.dataset.dragging = 'true'
|
|
@@ -559,7 +559,7 @@ window.__ModuleLoader__.load({
|
|
|
559
559
|
function movePan(event) {
|
|
560
560
|
var pan = panRef.current
|
|
561
561
|
if (!pan || pan.pointerId !== event.pointerId) return
|
|
562
|
-
var viewport = event.currentTarget
|
|
562
|
+
var viewport = event.currentTarget
|
|
563
563
|
viewport.scrollLeft = pan.left - (event.clientX - pan.x)
|
|
564
564
|
viewport.scrollTop = pan.top - (event.clientY - pan.y)
|
|
565
565
|
}
|
|
@@ -571,7 +571,7 @@ window.__ModuleLoader__.load({
|
|
|
571
571
|
if (event.currentTarget.hasPointerCapture(event.pointerId)) event.currentTarget.releasePointerCapture(event.pointerId)
|
|
572
572
|
}
|
|
573
573
|
return React.createElement('div', { className: 'ckm-workspace ckm-graph-layout' }, [
|
|
574
|
-
React.createElement('section', { key: 'graph', className: 'ckm-graph-canvas' }, [
|
|
574
|
+
React.createElement('section', { key: 'graph', className: 'ckm-graph-canvas', onPointerDown: beginPan, onPointerMove: movePan, onPointerUp: endPan, onPointerCancel: endPan }, [
|
|
575
575
|
React.createElement('div', { key: 'toolbar', className: 'ckm-graph-toolbar' }, [
|
|
576
576
|
React.createElement('input', { key: 'search', value: query, placeholder: '搜索实体…', onChange: function (event) { setQuery(event.target.value) } }),
|
|
577
577
|
React.createElement('select', { key: 'confidence', value: confidence, onChange: function (event) { setConfidence(event.target.value) } }, [React.createElement('option', { key: 'all', value: 'all' }, '全部置信度'), React.createElement('option', { key: 'confirmed', value: 'confirmed' }, '已确认'), React.createElement('option', { key: 'inferred', value: 'inferred' }, '推测'), React.createElement('option', { key: 'conflicted', value: 'conflicted' }, '有冲突')]),
|
|
@@ -588,7 +588,7 @@ window.__ModuleLoader__.load({
|
|
|
588
588
|
])
|
|
589
589
|
]),
|
|
590
590
|
React.createElement('p', { key: 'static', className: 'ckm-panel-hint' }, '知识图谱是静态结果;可按住空白区域拖动画布,画布缩放与节点间距可分别调整,选择实体后可查看一跳局部子图。只能通过菜单栏完整重新生成,不支持直接编辑或节点发散。'),
|
|
591
|
-
React.createElement('svg', { key: 'svg', ref: centerCanvas, className: 'ckm-graph-svg', viewBox: viewBox, width: layout.width * zoom, height: layout.height * zoom, style: { width: layout.width * zoom + 'px', height: layout.height * zoom + 'px' }, role: 'img', 'aria-label': '知识图谱'
|
|
591
|
+
React.createElement('svg', { key: 'svg', ref: centerCanvas, className: 'ckm-graph-svg', viewBox: viewBox, width: layout.width * zoom, height: layout.height * zoom, style: { width: layout.width * zoom + 'px', height: layout.height * zoom + 'px' }, role: 'img', 'aria-label': '知识图谱' }, [
|
|
592
592
|
React.createElement('defs', { key: 'defs' }, React.createElement('marker', { id: 'ckm-arrow', markerWidth: 7, markerHeight: 7, refX: 6, refY: 3.5, orient: 'auto', markerUnits: 'strokeWidth' }, React.createElement('path', { d: 'M0,0 L7,3.5 L0,7 Z', className: 'ckm-arrow-head' }))),
|
|
593
593
|
React.createElement('g', { key: 'edges', className: 'ckm-graph-edges' }, relations.map(function (relation) {
|
|
594
594
|
var from = byId[relation.from]
|
|
@@ -784,7 +784,7 @@ window.__ModuleLoader__.load({
|
|
|
784
784
|
'.ckm-modal-backdrop{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(0,0,0,.46)}.ckm-modal{width:min(680px,calc(100vw - 40px));max-height:min(760px,calc(100vh - 40px));overflow:auto;padding:22px;border:1px solid var(--dsw-alias-border-l2);border-radius:14px;box-shadow:0 18px 56px #0008}.ckm-modal h3{margin:0;font-size:17px}.ckm-modal p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.65}.ckm-modal-head{display:flex;align-items:center;justify-content:space-between}.ckm-icon-close{border:0;background:transparent;color:var(--dsw-alias-label-secondary);font-size:20px;cursor:pointer}.ckm-workspace-label{padding:9px;border-radius:8px;background:var(--dsw-alias-bg-layer-1);word-break:break-all}.ckm-field{display:flex;flex-direction:column;gap:7px;margin:14px 0;color:var(--dsw-alias-label-secondary);font-size:12px}.ckm-field textarea{resize:vertical}.ckm-session-list{display:flex;max-height:220px;flex-direction:column;gap:5px;overflow:auto}.ckm-session-option{display:flex;align-items:flex-start;gap:8px;padding:8px;border:1px solid transparent;border-radius:8px;background:var(--dsw-alias-bg-layer-1);cursor:pointer}.ckm-session-option:hover{border-color:var(--dsw-alias-border-l2)}.ckm-session-option input,.ckm-inline-field input{margin-top:3px}.ckm-session-option span{display:flex;flex-direction:column;gap:3px}.ckm-session-option small{color:var(--dsw-alias-label-secondary);font-size:10px}.ckm-inline-field{display:flex;align-items:flex-start;gap:7px;margin:10px 0;color:var(--dsw-alias-label-secondary);font-size:11px;line-height:1.5}.ckm-confirm-summary{display:grid;grid-template-columns:100px 1fr;gap:7px 12px;margin:18px 0;font-size:12px}.ckm-confirm-summary dt{color:var(--dsw-alias-label-secondary)}.ckm-confirm-summary dd{margin:0;word-break:break-all}.ckm-warning{padding:10px;border-radius:8px;background:#d29c2518;color:var(--dsw-alias-label-secondary)}.ckm-error{color:#ff9898!important}.ckm-modal-actions{justify-content:flex-end;margin-top:18px}.ckm-header-pending{border-color:var(--dsw-alias-state-business-primary);background:var(--dsw-alias-state-business-tertiary)}' +
|
|
785
785
|
'@media(max-width:800px){.ckm-workspace,.ckm-graph-layout{display:flex;flex-direction:column}.ckm-detail{border-top:1px solid var(--dsw-alias-border-l2);border-left:0}.ckm-page-header{align-items:flex-start;flex-direction:column}.ckm-page-actions{width:100%;flex-wrap:wrap}}'
|
|
786
786
|
|
|
787
|
-
CSS += '.ckm-graph-canvas{overflow:auto}.ckm-graph-toolbar{position:sticky;left:0;z-index:2;max-width:calc(100vw - 410px);padding-bottom:4px;background:var(--dsw-alias-bg-base)}.ckm-graph-zoom{margin-left:0}.ckm-graph-zoom:last-child{margin-left:auto}.ckm-graph-svg{width:auto;max-width:none;height:auto;min-width:620px;min-height:620px
|
|
787
|
+
CSS += '.ckm-graph-canvas{overflow:auto;cursor:grab;touch-action:none;scrollbar-width:none;-ms-overflow-style:none}.ckm-graph-canvas::-webkit-scrollbar{display:none}.ckm-graph-canvas[data-dragging="true"]{cursor:grabbing;user-select:none}.ckm-graph-toolbar{position:sticky;left:0;z-index:2;max-width:calc(100vw - 410px);padding-bottom:4px;background:var(--dsw-alias-bg-base);cursor:default}.ckm-graph-zoom{margin-left:0}.ckm-graph-zoom:last-child{margin-left:auto}.ckm-graph-svg{width:auto;max-width:none;height:auto;min-width:620px;min-height:620px}'
|
|
788
788
|
|
|
789
789
|
function apply(ctx) {
|
|
790
790
|
var sessions = ctx.sessions || (ctx.get && ctx.get('sessions'))
|