New:Socket for Asana Is Now Available.Learn more
Get Started

dsh-decision-split

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

dsh-decision-split - npm Package Compare versions

Comparing version
0.1.8
to
0.1.9
+54
-10
lib/client.js

@@ -109,6 +109,17 @@ window.__ModuleLoader__.load({

function hasTable(text) {
// 语义判定:只有内容确实呈现「多个决策点」或「多个可选方案」时才触发,
// 而不是看标题存在与否,也不是看内容长短。判定只依赖内容本身。
function hasCompareTable(text) {
var lines = text.split("\n");
for (var i = 0; i < lines.length - 1; i++) {
if (/^\s*\|[^\n]+\|\s*$/.test(lines[i]) && /^\s*\|?[\s:\-|]+\|?\s*$/.test(lines[i + 1]) && lines[i + 1].indexOf("-") !== -1) return true;
if (/^\s*\|[^\n]+\|\s*$/.test(lines[i]) && /^\s*\|?[\s:\-|]+\|?\s*$/.test(lines[i + 1]) && lines[i + 1].indexOf("-") !== -1) {
if (!/方案|选项|备选|对比|选择/.test(lines[i])) continue;
var rows = 0;
for (var j = i + 2; j < lines.length; j++) {
var row = lines[j].trim();
if (row === "" || row.charAt(0) !== "|") break;
rows++;
}
if (rows >= 2) return true;
}
}

@@ -118,14 +129,45 @@ return false;

function headingCount(text) {
var m = text.match(/^#{1,6}\s+\S/gm);
function decisionPointCount(text) {
var m = text.match(/\*{0,2}\s*(?:决策|决策点|待决策|需决策|待确认)[^::]{0,6}[::]/g);
return m === null ? 0 : m.length;
}
function isPlanLike(text) {
function alternatives(text) {
var seen = {};
var re = /(?:方案|选项|备选)\s*([A-Za-z一二三四五六七八九十0-9]+)/g;
var m;
while ((m = re.exec(text)) !== null) {
if (seen[m[0]] === undefined) seen[m[0]] = true;
}
return Object.keys(seen).length;
}
function needsDecision(text) {
if (typeof text !== "string") return false;
text = text.replace(/\r\n?/g, "\n");
if (hasTable(text)) return true;
return text.length >= 800 && headingCount(text) >= 2;
if (decisionPointCount(text) >= 2) return true;
if (alternatives(text) >= 2) return true;
if (hasCompareTable(text)) return true;
return false;
}
// 无决策段标题时,把命中的决策点/方案条目抽取成列表,便于逐个阅读拍板。
function decisionSummary(text) {
text = text.replace(/\r\n?/g, "\n");
var lines = text.split("\n");
var out = [];
var seen = {};
var re = /(?:方案|选项|备选|决策|决策点|待决策|待确认)\s*[A-Za-z一二三四五六七八九十0-9]+\s*[::]|(?:方案|选项|备选)\s*[A-Za-z一二三四五六七八九十0-9]+/;
for (var i = 0; i < lines.length; i++) {
var t = lines[i].replace(/\r$/, "").trim();
if (t === "" || /^#{1,6}\s/.test(t) || /^```/.test(t) || t.charAt(0) === "|") continue;
var ln = t.replace(/^[-*+]?\s*/, "");
if (re.test(ln) && seen[ln] === undefined) {
seen[ln] = true;
out.push("- " + ln);
}
}
return out.join("\n");
}
function tocOf(text) {

@@ -268,6 +310,8 @@ text = text.replace(/\r\n?/g, "\n");

var setDraft = st[1];
var hasSection = summary !== null && summary.trim() !== "";
var isFallback = false;
if (summary === null) {
if (!isPlanLike(text)) return null;
summary = tocMarkdown(text);
// 触发条件:要么有 agent 主动写的决策段(内容非空),要么内容语义上呈现多个决策点/多个方案。
if (!hasSection && !needsDecision(text)) return null;
if (!hasSection) {
summary = decisionSummary(text) || tocMarkdown(text);
isFallback = true;

@@ -274,0 +318,0 @@ }

+1
-1

@@ -7,4 +7,4 @@ export const inject = ["systemPrompt"];

order: 190,
text: '当你的回复包含需要用户拍板的决策点,或给出多个方案让用户选择时,请在回复末尾追加一个「## 决策摘要」段,用「**决策 N:**」逐条列出需要用户决定的点(N 从 1 开始)。界面会自动据此弹出决策卡片,用户可在卡片里直接输入决策并回传给你。仅在确实需要用户决策时才添加。',
text: '当你的回复需要用户就「多个决策点」或「多个可选方案」逐一作出选择时,请在回复末尾追加一个「## 决策摘要」段,用「**决策 N:**」(或「**方案 N:**」,N 从 1 开始)逐条列出每个待决定的点或方案。界面会自动据此弹出决策卡片,用户可在卡片里直接输入决策并回传给你。仅当确实存在需要用户拍板的多个决策点或多个备选方案时才添加;普通说明、无需用户决策的回复不要添加。',
});
}
{
"name": "dsh-decision-split",
"version": "0.1.8",
"version": "0.1.9",
"description": "决策分屏:agent 输出含「决策摘要」段的方案时,主窗口显示摘要与决策编辑框,右侧详情栏独立展示完整 markdown,决策一键发回 agent。",

@@ -5,0 +5,0 @@ "type": "module",

@@ -39,10 +39,14 @@ # dsh-decision-split

装上即用,无需额外配置:
装上即用,无需额外配置。触发遵循一个核心原则:**只有当回复确实呈现「多个决策点」或「多个可选方案」、需要你逐个阅读逐个拍板时才出卡**,而不是看标题存不存在、也不是看内容长短。
- **自动触发(host 注入提示词)**:插件会在系统提示中告知 agent——当回复包含需要你拍板的决策点、或给出多个方案让你选择时,自动在回复末尾追加 `## 决策摘要` 段。agent 据此按需输出决策段,决策卡随之出现。
- **长方案兜底(客户端自动识别)**:即使 agent 没写决策标题,只要回复含 markdown 表格、或较长且含多个标题(≥800 字且 ≥2 个标题),决策分屏卡片也会自动出现——摘要区显示方案目录、右侧栏展示全文。
- **标题触发**:回复中出现以下任一标题(任意层级 `#`–`######`、忽略大小写、允许结尾冒号)即触发:
- **语义触发(客户端识别)**:回复内容满足以下任一条件即触发(纯说明性长文、普通问答不会误触发):
- **≥2 个决策点**:如 `**决策 1:**`、`**决策 2:**`、`决策点二:`、`待确认:` 等;
- **≥2 个方案/选项**:如 `方案 A`、`方案 一`、`选项 1`、`备选 2` 等;
- **对比类表格**:表头含 `方案/选项/备选/对比/选择` 且有 ≥2 行对比数据。
- **决策段触发**:回复中出现 agent 主动写的非空决策段标题(任意层级 `#`–`######`、忽略大小写、允许结尾冒号)也触发,摘要区展示该段内容:
`决策摘要` · `决策要点` · `待决策清单` · `决策清单` · `决策事项` · `方案对比` · `方案选择` · `需要决策` · `待决策` · `待确认` · `待拍板` · `请你决定` · `请拍板` · `决策项` · `决策点` · `Decision Summary` · `Decision Points` · `Decision Required` · `Decision Needed` · `Please Decide` · `Please Choose` · `Need Your Decision` · `Options` · `Choices`
- **host 注入提示词**:插件会在系统提示中告知 agent——当回复包含需要你拍板的决策点、或给出多个方案让你选择时,用 `**决策 N:**` 逐条列出,以便即便 agent 不写标题、客户端也能按上面的语义规则识别出来。
> 也可在对话里给 agent 补一句「输出方案时若需我拍板,请在最后用 `## 决策摘要` 段列出决策点」——手动约定与自动注入效果相同,属可选的加强。

@@ -49,0 +53,0 @@