dsh-decision-split
Advanced tools
+45
-3
@@ -109,2 +109,39 @@ window.__ModuleLoader__.load({ | ||
| function hasTable(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; | ||
| } | ||
| return false; | ||
| } | ||
| function headingCount(text) { | ||
| var m = text.match(/^#{1,6}\s+\S/gm); | ||
| return m === null ? 0 : m.length; | ||
| } | ||
| function isPlanLike(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; | ||
| } | ||
| function tocOf(text) { | ||
| text = text.replace(/\r\n?/g, "\n"); | ||
| var lines = text.split("\n"); | ||
| var toc = []; | ||
| for (var i = 0; i < lines.length; i++) { | ||
| var m = lines[i].match(/^(#{1,6})\s+(.*)$/); | ||
| if (m && m[2].trim() !== "") toc.push(m[2].trim()); | ||
| } | ||
| return toc; | ||
| } | ||
| function tocMarkdown(text) { | ||
| var toc = tocOf(text); | ||
| if (toc.length === 0) return ""; | ||
| return toc.map(function (t) { return "- " + t; }).join("\n"); | ||
| } | ||
| function escapeHtml(s) { | ||
@@ -230,3 +267,8 @@ return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"); | ||
| var setDraft = st[1]; | ||
| if (summary === null) return null; | ||
| var isFallback = false; | ||
| if (summary === null) { | ||
| if (!isPlanLike(text)) return null; | ||
| summary = tocMarkdown(text); | ||
| isFallback = true; | ||
| } | ||
@@ -249,7 +291,7 @@ function send() { | ||
| React.createElement("div", { className: "ddec-card-head" }, | ||
| React.createElement("span", { className: "ddec-card-title" }, "决策摘要"), | ||
| React.createElement("span", { className: "ddec-card-title" }, isFallback ? "决策分屏" : "决策摘要"), | ||
| React.createElement("button", { type: "button", className: "ddec-btn ddec-btn-ghost", onClick: openSide }, "侧栏查看全文") | ||
| ), | ||
| summary === "" | ||
| ? React.createElement("div", { className: "ddec-md ddec-summary ddec-empty-text" }, "(该段暂未填写具体决策点)") | ||
| ? React.createElement("div", { className: "ddec-md ddec-summary ddec-empty-text" }, isFallback ? "(完整方案见侧栏:点右上角「侧栏查看全文」)" : "(该段暂未填写具体决策点)") | ||
| : React.createElement("div", { className: "ddec-md ddec-summary", dangerouslySetInnerHTML: { __html: renderMarkdown(summary) } }), | ||
@@ -256,0 +298,0 @@ React.createElement("textarea", { |
+9
-1
@@ -1,1 +0,9 @@ | ||
| export function apply() {} | ||
| export const inject = ["systemPrompt"]; | ||
| export function apply(ctx) { | ||
| ctx.systemPrompt.section({ | ||
| name: "dsh-decision-split:decision-format", | ||
| order: 190, | ||
| text: '当你的回复包含需要用户拍板的决策点,或给出多个方案让用户选择时,请在回复末尾追加一个「## 决策摘要」段,用「**决策 N:**」逐条列出需要用户决定的点(N 从 1 开始)。界面会自动据此弹出决策卡片,用户可在卡片里直接输入决策并回传给你。仅在确实需要用户决策时才添加。', | ||
| }); | ||
| } |
+1
-1
| { | ||
| "name": "dsh-decision-split", | ||
| "version": "0.1.7", | ||
| "version": "0.1.8", | ||
| "description": "决策分屏:agent 输出含「决策摘要」段的方案时,主窗口显示摘要与决策编辑框,右侧详情栏独立展示完整 markdown,决策一键发回 agent。", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+6
-6
@@ -37,13 +37,13 @@ # dsh-decision-split | ||
| ## 使用约定 | ||
| ## 使用方式 | ||
| 在对话开始时给 agent 一条指令(或写进你的 agent 预设),让它输出方案时固定带决策段: | ||
| 装上即用,无需额外配置: | ||
| > 输出方案时,如果包含需要我决策的事项或多种方案对比(如 A/B/C 选一),请在方案最后用 `## 决策摘要` 段列出所有需要我拍板的决策点,每个决策点用 `**决策 N:**` 开头。 | ||
| - **自动触发(host 注入提示词)**:插件会在系统提示中告知 agent——当回复包含需要你拍板的决策点、或给出多个方案让你选择时,自动在回复末尾追加 `## 决策摘要` 段。agent 据此按需输出决策段,决策卡随之出现。 | ||
| - **长方案兜底(客户端自动识别)**:即使 agent 没写决策标题,只要回复含 markdown 表格、或较长且含多个标题(≥800 字且 ≥2 个标题),决策分屏卡片也会自动出现——摘要区显示方案目录、右侧栏展示全文。 | ||
| - **标题触发**:回复中出现以下任一标题(任意层级 `#`–`######`、忽略大小写、允许结尾冒号)即触发: | ||
| 插件识别的标记标题(任意标题层级 `#`–`######`、忽略大小写、允许结尾冒号): | ||
| `决策摘要` · `决策要点` · `待决策清单` · `决策清单` · `决策事项` · `方案对比` · `方案选择` · `需要决策` · `待决策` · `待确认` · `待拍板` · `请你决定` · `请拍板` · `决策项` · `决策点` · `Decision Summary` · `Decision Points` · `Decision Required` · `Decision Needed` · `Please Decide` · `Please Choose` · `Need Your Decision` · `Options` · `Choices` | ||
| > 只要方案中出现以上任一标题(如 `## 方案对比` 或 `## 待确认`),决策卡就会自动出现——即使 agent 没写 `决策摘要` 段。 | ||
| > 也可在对话里给 agent 补一句「输出方案时若需我拍板,请在最后用 `## 决策摘要` 段列出决策点」——手动约定与自动注入效果相同,属可选的加强。 | ||
@@ -50,0 +50,0 @@ ## License |
25046
9.93%345
15%