From 419c920fedfd38e1e6ba10a22fc5e7e0f9633919 Mon Sep 17 00:00:00 2001 From: che cheng Date: Tue, 4 Aug 2026 09:43:47 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20minutes=20prof?= =?UTF-8?q?ile=20=E8=88=87=20ensemble-minutes-review=20skill?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 會議記錄的審閱需求既有 profile 都不合:academic 的四個 lens 有三個空轉或 方向錯誤(methodology 不適用、reference-verifier 會去查 Zotero、number-verifier 設計成跑 R/Python 重算但記錄無計算 artifact);lecture 的 completeness (逐字稿覆蓋率)雖對得上,但 student-readability 不適用、content-accuracy 問的是知識正確性而非是否忠於逐字稿。 minutes profile 的四個 lens 互為補集:fidelity 問「記錄寫的逐字稿有嗎」、 completeness 問「逐字稿有的記錄漏了嗎」,兩者缺一不可;attribution 查發言與 責任歸屬的依據(語者分離常不可靠,未確認即具名是嚴重問題);cross-document 比對來函、開會通知、前次記錄,並檢查交叉參照是否指對位置。DA 盯三種安靜的 偏移:個別發言寫成全體共識、條件句寫成確定句、會後才知道的事寫得像會中已知。 skill 一併記入兩個實際踩到的坑:args 傳字串會使 profile 解析為 undefined、 0 個 agent 被派出而 workflow 仍「成功」結束;agentModel 不給會繼承 session model,高階 session 單輪曾燒 56-109 萬 token。並載明與 sinica-admin:meeting-minutes 的分工——機械檢查歸 compile.sh,事實核對歸本 skill。 --- .../references/builtin-lenses.csv | 4 + .../skills/ensemble-minutes-review/SKILL.md | 119 ++++++++++++++++++ .../workflows/ensemble-workflow.js | 67 ++++++++++ 3 files changed, 190 insertions(+) create mode 100644 plugins/parallel-ai-agents/skills/ensemble-minutes-review/SKILL.md diff --git a/plugins/parallel-ai-agents/references/builtin-lenses.csv b/plugins/parallel-ai-agents/references/builtin-lenses.csv index 90ae188..15a8cc1 100644 --- a/plugins/parallel-ai-agents/references/builtin-lenses.csv +++ b/plugins/parallel-ai-agents/references/builtin-lenses.csv @@ -1,5 +1,9 @@ profile,key,focus,needsSrt # 唯讀 catalog — 編輯本檔不會改變任何行為。真源是 workflows/ensemble-workflow.js 的 PROFILES。要新增/修改 lens 請走 lens pack 或 ~/.claude/pai-lenses/(見 references/lens-layers.md)。本檔由 references/regen-builtin-lenses.sh 產生。 +minutes,fidelity,"記錄對逐字稿的忠實性,這是會議記錄的第一要求。逐條比對,檢查:(1) 記錄中每一條討論事項、決議、待辦,是否都能在逐字稿找到依據?(2) 有無記錄者的推論、整理或補充,被寫成像是會中發生的事?(3) 有無誤讀原話——特別注意把「性質」誤讀成「物件」的一類(實例:發言者說本案屬 top-down 推動,記錄卻寫成「另備 top-down 計畫書」,把計畫的性質誤讀為另一份文件);(4) 討論中的傾向、某人的個別意見,有無被寫成全體共識或決議?(5) 數值是否與逐字稿一致?逐字稿字錯率高,若記錄已註明某數值另經查證,檢查該查證是否確實成立。判準是「拿掉逐字稿,這句話還站得住嗎」。找不到依據就是 finding,不要因為內容看起來合理就放過。",true +minutes,completeness,"記錄是否完整覆蓋會議內容。檢查:(1) 逐字稿有討論但記錄漏寫的重點,這是本 lens 最重要的產出;(2) 會中提到的風險、疑義、反對意見有無被略過(正面內容被保留而負面內容消失,是常見的偏移);(3) 有無提到但未列入待辦的承諾事項;(4) 決議是否齊備(會中作成的決定有無遺漏)。注意:記錄本就該摘要而非逐字,濾掉贅詞、離題、重複不算遺漏。判準是「與會者讀完記錄,會不會以為某件事沒發生過」。",true +minutes,attribution,"發言與責任的歸屬是否有依據。檢查:(1) 記錄具名到個人之處,該人身分是否真的可確認?(語者分離常不可靠,在未確認的情況下具名是嚴重問題)(2) 待辦事項的主辦方歸屬依據為何?以單位層級歸屬時,該推論是否成立?(3) 有無把某方的發言記成另一方的?(4) 敏感內容的歸屬是否恰當(自陳的利益衝突、內部策略、對第三方的評價,具名記錄可能造成困擾)。單位層級的歸屬若有機制性證據(例如發言者提到只有某單位才有的內部機制),可以成立;純粹憑語氣或立場推測則不成立。",true +minutes,cross-document,"記錄與佐證文件的一致性。context 會列出可查證的檔案路徑(來函、開會通知、議程、前次會議的記錄或溯源檔)。用 Read 逐一開啟比對,檢查:(1) 補充說明所述之來函內容、日期、發文單位,是否與實際郵件相符?(2) 會議資訊(時間、地點、主席、出席者)是否與開會通知一致?若不同文件互相矛盾,指出矛盾並說明何者較新、何者有旁證;(3) 跨會議引用的數值,是否與前次記錄或其溯源檔一致?(4) 記錄自述「已查證」之處,該查證是否確實成立?(5) 交叉參照(「詳見某節」)指向的位置是否存在且正確——結構調整後編號語意漂移是常見問題,且句子單獨讀完全正常。",false lecture,content-accuracy,"教學講義的知識正確性。檢查:(1) 統計概念定義是否正確(p-value、power、effect size、confidence interval);(2) 公式/數學符號有無寫錯(KaTeX 語法);(3) 心理學理論描述是否準確(如 Higgins, Regulatory Focus/Fit);(4) 因果推論有無把相關說成因果或過度推論;(5) 術語一致性(同概念是否同名);(6) 範例是否恰當支持概念。",false lecture,student-readability,"從「零程式基礎」學生角度的易懂程度。檢查:(1) 白話程度(專業術語有無解釋);(2) 邏輯銜接(段落跳躍是否太大);(3) 抽象概念有無搭配具體例子;(4) 表格/圖表是否幫助理解(還是增加混淆);(5) 篇幅平衡(重要概念是否足夠篇幅);(6) 結構導航(標題是否清楚、好找);(7)「重點整理」是否真涵蓋最重要內容。自問:「零基礎學生讀到這裡會卡住嗎?」",false lecture,completeness,"講義是否完整覆蓋上課內容。檢查:(1) 逐字稿覆蓋率(逐字稿有教但講義漏寫的重點,最重要);(2) 結構完整性(有無「重點整理」「課後作業」section;h2/h3 層級正確、無孤立 h3;h2 之間有 --- 分隔);(3) KaTeX/Mermaid(有數學符號處有無 KaTeX CDN、有路徑圖處有無 Mermaid 或 ASCII art);(4) 連結有效性(href 指向的檔案是否存在);(5) 缺少的教學元素(該有 blockquote 提醒、該用表格對比卻只用文字處)。",true diff --git a/plugins/parallel-ai-agents/skills/ensemble-minutes-review/SKILL.md b/plugins/parallel-ai-agents/skills/ensemble-minutes-review/SKILL.md new file mode 100644 index 0000000..f4cbea7 --- /dev/null +++ b/plugins/parallel-ai-agents/skills/ensemble-minutes-review/SKILL.md @@ -0,0 +1,119 @@ +--- +name: ensemble-minutes-review +description: | + 會議記錄 ensemble 審閱:fidelity(忠實性)、completeness(完整性)、attribution(歸屬)、 + cross-document(佐證文件對照)、devils-advocate。以會議錄音逐字稿為唯一權威來源, + 逐條檢查記錄的每一項陳述是否站得住,並比對來函、開會通知、前次記錄等佐證文件。 + Use when: 會議記錄定稿前的事實核對、對外行文前的查核、記錄與逐字稿的一致性驗證。 +argument-hint: "MINUTES_FILE --srt TRANSCRIPT [--docs 'path1,path2'] [--replicas N] [--model sonnet|opus]" +allowed-tools: + - Read + - Bash + - Grep + - Glob + - Agent + - TaskCreate + - TaskUpdate + - TaskList + - AskUserQuestion + - Workflow +--- + +# /ensemble-minutes-review — 會議記錄 Ensemble 審閱 + +會議記錄的品質關卡不是文筆,是**每一條陳述是否站得住**。這份 skill 派出四個角度互不重疊的 +審閱者,加一個魔鬼代言人,全部以逐字稿為唯一權威來源。 + +## 為什麼不用 academic 或 lecture profile + +| profile | 用在會議記錄的問題 | +|---|---| +| `academic` | `methodology` 不適用(記錄沒有研究設計);`reference-verifier` 會去查 Zotero 空轉;`number-verifier` 設計成跑 R/Python 重算,但記錄沒有計算 artifact。四個 lens 有三個空轉或方向錯誤 | +| `lecture` | `completeness` 的「逐字稿覆蓋率」確實對得上,但 `student-readability` 不適用,`content-accuracy` 問的是知識正確性而非「是否忠於逐字稿」 | + +會議記錄要問的是**忠實性**(有沒有寫出逐字稿沒有的東西)與**完整性**(有沒有漏掉逐字稿有的 +東西),這兩者互為反面,缺一不可。`minutes` profile 為此而設。 + +## 審閱架構 + +| Lens | 需要逐字稿 | 問的問題 | +|---|:---:|---| +| `fidelity` | ✓ | 記錄寫的,逐字稿有嗎?推論有沒有被寫成會中決定? | +| `completeness` | ✓ | 逐字稿有的,記錄漏了嗎?不利內容有沒有消失? | +| `attribution` | ✓ | 誰說的、誰要辦,依據何在?未確認者有無被具名? | +| `cross-document` | | 來函、開會通知、前次記錄,對得上嗎?交叉參照指對地方了嗎? | +| `devils-advocate` | ✓ | 上面四位判定「沒問題」的地方,真的沒問題嗎? | + +DA 專門盯三種安靜的偏移:把個別發言寫成全體共識、把條件句寫成確定句、把會後才知道的事寫得 +像會中已知。這三種在文本上都讀起來很正常。 + +## 執行流程 + +### Phase 0:解析輸入 + +- `MINUTES_FILE`:會議記錄(`.tex` / `.md` / `.docx`) +- `--srt`:**必要**。逐字稿路徑。沒有逐字稿就沒有權威來源,此時應拒絕執行而非降級—— + 無來源的「審閱」只會產生看起來合理的臆測 +- `--docs`:佐證文件路徑,逗號分隔(來函、開會通知、議程、前次會議的記錄或溯源檔) + +### Phase 1:組 contextBlock + +把下列資訊寫進 `contextBlock` 交給 agent: + +1. **任務定性**:這是行政文件的事實查核,不是論文審查;重點不在文筆,在每條陳述是否站得住 +2. **佐證文件清單**:逐一列出絕對路徑並說明各是什麼,agent 才知道要 Read 什麼 +3. **已知限制**(避免回饋都在講這些):逐字稿字錯率、語者分離是否可靠、哪些專名已知為誤聽、 + 哪些內容是刻意不記錄的(如製作說明移入註解、敏感內容依指示略去) +4. **已知曾犯的錯**(如果有):給具體實例比給抽象原則有效。例如「曾把『本案屬 top-down 推動』 + 誤寫為『另備 top-down 計畫書』,把性質誤讀成文件」,agent 會據此找同類錯誤 + +### Phase 2:派發 + +```javascript +Workflow({ name: "parallel-ai-agents:pai-ensemble", args: { + profile: "minutes", + file: "<會議記錄絕對路徑>", + srtFile: "<逐字稿絕對路徑>", + contextBlock: "", + agentModel: "sonnet", + replicas: 1, + codexEnabled: false +}}) +``` + +> ⚠️ **`args` 是物件,不是字串。** 傳字串時 `profile` 解析為 `undefined`,harness 回 +> `unknown ensemble profile` 且 **0 個 agent 被派出**——workflow 會「成功」結束, +> 只在 findings 裡留一條 harness 層級的 HIGH。看到 `agents: 0` 就是踩到這個。 +> +> ⚠️ **`agentModel` 一定要給。** 不給時 agent 繼承 session 的 main-loop model, +> 高階 session 單輪 ensemble 曾燒掉 56–109 萬 token 並在 session limit 撞死 lens agent。 +> 事實核對用 `sonnet` 即可;記錄爭議大或篇幅長再考慮 `opus`。 + +### Phase 3:讀結果 + +回傳 `{ findings, verdict, stats }`。`stats.agents` 應等於 lens 數 × replicas + DA; +**明顯偏少就是有 agent 死掉或 profile 沒吃到**,先查 `journal.jsonl` 再解讀 findings。 + +### Phase 4:處置 + +findings 逐條回原文核對後才改。**不要照單全收**——審閱者同樣可能誤讀逐字稿, +特別是逐字稿本身字錯率高的時候。改與不改都要能說出理由。 + +## 與 `sinica-admin:meeting-minutes` 的分工 + +| | 管什麼 | +|---|---| +| `meeting-minutes` | 產出記錄;`compile.sh` 的機械 gate(破折號、markdown 殘留、寡行、缺字、檔名) | +| 本 skill | 內容是否忠於會議;機械檢查看不出來的東西 | + +兩者互補,順序是先產出、機械 gate 過關,再跑 ensemble 查事實。**不要用本 skill 檢查標點或 +排版**——那些有確定性的機械檢查,派 LLM 去做既慢又不可靠。 + +## 反模式 + +| 想做的 | 為什麼不行 | +|---|---| +| 沒有逐字稿也跑 | 沒有權威來源,審閱者只能憑常識猜「這樣寫合不合理」,產出的是臆測 | +| 用本 skill 抓錯字、標點 | 那是 `compile.sh` 的工作,機械檢查更快更準 | +| findings 直接照改 | 審閱者也會誤讀。每條回原文核對 | +| 把已知限制留給 agent 自己發現 | 會得到一堆「語者未確認」「字錯率高」的重複回饋,淹掉真正的問題 | diff --git a/plugins/parallel-ai-agents/workflows/ensemble-workflow.js b/plugins/parallel-ai-agents/workflows/ensemble-workflow.js index bc6d770..3cf9435 100644 --- a/plugins/parallel-ai-agents/workflows/ensemble-workflow.js +++ b/plugins/parallel-ai-agents/workflows/ensemble-workflow.js @@ -126,6 +126,73 @@ const MAX_AGENTS = 16 // slot in here without touching the orchestration below. Each lens.focus ports the role's // current checklist verbatim so the workflow report matches the legacy fan-out report. ── const PROFILES = { + minutes: { + title: '會議記錄', + codexDefault: false, + lenses: [ + { + key: 'fidelity', + needsSrt: true, + focus: + '記錄對逐字稿的忠實性,這是會議記錄的第一要求。逐條比對,檢查:' + + '(1) 記錄中每一條討論事項、決議、待辦,是否都能在逐字稿找到依據?' + + '(2) 有無記錄者的推論、整理或補充,被寫成像是會中發生的事?' + + '(3) 有無誤讀原話——特別注意把「性質」誤讀成「物件」的一類(實例:發言者說本案屬 top-down 推動,' + + '記錄卻寫成「另備 top-down 計畫書」,把計畫的性質誤讀為另一份文件);' + + '(4) 討論中的傾向、某人的個別意見,有無被寫成全體共識或決議?' + + '(5) 數值是否與逐字稿一致?逐字稿字錯率高,若記錄已註明某數值另經查證,檢查該查證是否確實成立。' + + '判準是「拿掉逐字稿,這句話還站得住嗎」。找不到依據就是 finding,不要因為內容看起來合理就放過。', + }, + { + key: 'completeness', + needsSrt: true, + focus: + '記錄是否完整覆蓋會議內容。檢查:' + + '(1) 逐字稿有討論但記錄漏寫的重點,這是本 lens 最重要的產出;' + + '(2) 會中提到的風險、疑義、反對意見有無被略過(正面內容被保留而負面內容消失,是常見的偏移);' + + '(3) 有無提到但未列入待辦的承諾事項;' + + '(4) 決議是否齊備(會中作成的決定有無遺漏)。' + + '注意:記錄本就該摘要而非逐字,濾掉贅詞、離題、重複不算遺漏。' + + '判準是「與會者讀完記錄,會不會以為某件事沒發生過」。', + }, + { + key: 'attribution', + needsSrt: true, + focus: + '發言與責任的歸屬是否有依據。檢查:' + + '(1) 記錄具名到個人之處,該人身分是否真的可確認?(語者分離常不可靠,' + + '在未確認的情況下具名是嚴重問題)' + + '(2) 待辦事項的主辦方歸屬依據為何?以單位層級歸屬時,該推論是否成立?' + + '(3) 有無把某方的發言記成另一方的?' + + '(4) 敏感內容的歸屬是否恰當(自陳的利益衝突、內部策略、對第三方的評價,' + + '具名記錄可能造成困擾)。' + + '單位層級的歸屬若有機制性證據(例如發言者提到只有某單位才有的內部機制),可以成立;' + + '純粹憑語氣或立場推測則不成立。', + }, + { + key: 'cross-document', + focus: + '記錄與佐證文件的一致性。context 會列出可查證的檔案路徑(來函、開會通知、議程、' + + '前次會議的記錄或溯源檔)。用 Read 逐一開啟比對,檢查:' + + '(1) 補充說明所述之來函內容、日期、發文單位,是否與實際郵件相符?' + + '(2) 會議資訊(時間、地點、主席、出席者)是否與開會通知一致?' + + '若不同文件互相矛盾,指出矛盾並說明何者較新、何者有旁證;' + + '(3) 跨會議引用的數值,是否與前次記錄或其溯源檔一致?' + + '(4) 記錄自述「已查證」之處,該查證是否確實成立?' + + '(5) 交叉參照(「詳見某節」)指向的位置是否存在且正確——' + + '結構調整後編號語意漂移是常見問題,且句子單獨讀完全正常。', + }, + ], + daFocus: + '你是會議記錄的魔鬼代言人。其他審閱者判定「有依據」的地方,你要回頭質疑:' + + '所謂的依據是否只是語氣相近而非真的說了那件事?記錄的措辭是否比逐字稿更肯定、' + + '更完整、更有條理,以致把「討論過」升級成「決定了」?' + + '特別留意三種安靜的偏移:(a) 把個別發言寫成全體共識;' + + '(b) 把條件句寫成確定句(「如果可行就做」變成「將辦理」);' + + '(c) 把會後才知道的事寫得像會中已知。' + + '也要質疑其他審閱者判定「無問題」的漏寫——記錄摘要合理與刻意略過不利內容,' + + '在文本上看起來相同。', + }, lecture: { title: '教學講義', codexDefault: false, From 8008564ac9dffacabf9b13ea222617c313a9ddc7 Mon Sep 17 00:00:00 2001 From: che cheng Date: Tue, 4 Aug 2026 09:45:39 +0800 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20bump=202.22.0=EF=BC=88minutes=20pr?= =?UTF-8?q?ofile=20=E8=88=87=E6=9C=83=E8=AD=B0=E8=A8=98=E9=8C=84=20ensembl?= =?UTF-8?q?e=20=E5=AF=A9=E9=96=B1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude-plugin/marketplace.json | 2 +- .../.claude-plugin/plugin.json | 4 ++-- plugins/parallel-ai-agents/CHANGELOG.md | 20 +++++++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index fa468fc..be3f392 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "parallel-ai-agents", "source": "./plugins/parallel-ai-agents", "description": "v2.21.0: 三層 lens 疊加 built-in → lens pack → user (#29) — lens 可由外部 pai-lenses plugin 與 ~/.claude/pai-lenses/ 疊加,新增一條 lens 從「改 JS + bump plugin」降為「改 CSV」;撞名需顯式 override,報表附 provenance 行。v2.20.1: codex-call 補上 SSE error 事件的 message 提取路徑 (#25)。v2.20.0: first-party codex-pro governance deep-integration (#23). v2.19.0: codexModel/codexEffort contract args (#22, caller-governed cross-model leg). 平行派發任務給多個 AI agent(Claude + Codex),獨立執行後交叉比對結果。Codex 改走直接 HTTP wrapper(bin/codex-call,Swift script)取代 codex exec subprocess,解決 hang 問題且避開 Python 版本飄移", - "version": "2.21.0", + "version": "2.22.0", "author": { "name": "Che Cheng" }, diff --git a/plugins/parallel-ai-agents/.claude-plugin/plugin.json b/plugins/parallel-ai-agents/.claude-plugin/plugin.json index 3fac0ab..0ee63a0 100644 --- a/plugins/parallel-ai-agents/.claude-plugin/plugin.json +++ b/plugins/parallel-ai-agents/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "parallel-ai-agents", - "description": "v2.20.1: codex-call 補上 SSE error 事件的 message 提取路徑 (#25) — 直接呼叫 codex-call 時,HTTP 200 stream 內帶 message 的後端錯誤(如 server_is_overloaded)會顯示真實原因而非籠統的 \"Codex error\";經 ensemble 使用時仍受 #27 限制(消費端硬編碼失敗訊息)。v2.20.0: first-party skills deep-integrate codex-pro governance (#23, mirroring issue-driven-dev#264) — new references/codex-governance.md (canonical resolution: MIN_CODEX_PRO 0.7.0 gate, defaults.json base + two profile.yaml layers, fail-fast with install instruction when codexEnabled and codex-pro absent); ensemble-code-review / ensemble-academic-review / ensemble-compose(--codex) resolve and pass codexModel/codexEffort explicitly; engine + bin/codex-call baked defaults become release-time governance SNAPSHOTS (bumped to gpt-5.6-sol) — authoritative source is codex-pro's defaults.json; all first-party prose generation-neutral. v2.19.0: codexModel / codexEffort engine args (#22) — the cross-model codex leg's model and effort become caller-governed contract args (defaults gpt-5.5 / xhigh preserve pre-#22 behavior byte-identically). First consumer: issue-driven-dev passing codex-pro-resolved governance. 平行派發任務給多個 AI agent(Claude + Codex),獨立執行後交叉比對結果。Codex 改走直接 HTTP wrapper(bin/codex-call,Swift script)取代 codex exec subprocess,解決 hang 問題且避開 Python 版本飄移", - "version": "2.21.0", + "description": "v2.22.0: minutes profile + ensemble-minutes-review skill — 會議記錄的 ensemble 審閱。四個 lens 互為補集:fidelity(記錄寫的逐字稿有嗎)、completeness(逐字稿有的記錄漏了嗎)、attribution(發言與責任歸屬的依據)、cross-document(來函/開會通知/前次記錄與交叉參照)。既有 profile 都不合用:academic 四個 lens 有三個空轉(methodology 不適用、reference-verifier 查 Zotero、number-verifier 需計算 artifact),lecture 的 student-readability 不適用。skill 並記入 args 須傳物件(傳字串會 0 agent 空跑)與 agentModel 須顯式指定兩個實測陷阱。 v2.20.1: codex-call 補上 SSE error 事件的 message 提取路徑 (#25) — 直接呼叫 codex-call 時,HTTP 200 stream 內帶 message 的後端錯誤(如 server_is_overloaded)會顯示真實原因而非籠統的 \"Codex error\";經 ensemble 使用時仍受 #27 限制(消費端硬編碼失敗訊息)。v2.20.0: first-party skills deep-integrate codex-pro governance (#23, mirroring issue-driven-dev#264) — new references/codex-governance.md (canonical resolution: MIN_CODEX_PRO 0.7.0 gate, defaults.json base + two profile.yaml layers, fail-fast with install instruction when codexEnabled and codex-pro absent); ensemble-code-review / ensemble-academic-review / ensemble-compose(--codex) resolve and pass codexModel/codexEffort explicitly; engine + bin/codex-call baked defaults become release-time governance SNAPSHOTS (bumped to gpt-5.6-sol) — authoritative source is codex-pro's defaults.json; all first-party prose generation-neutral. v2.19.0: codexModel / codexEffort engine args (#22) — the cross-model codex leg's model and effort become caller-governed contract args (defaults gpt-5.5 / xhigh preserve pre-#22 behavior byte-identically). First consumer: issue-driven-dev passing codex-pro-resolved governance. 平行派發任務給多個 AI agent(Claude + Codex),獨立執行後交叉比對結果。Codex 改走直接 HTTP wrapper(bin/codex-call,Swift script)取代 codex exec subprocess,解決 hang 問題且避開 Python 版本飄移", + "version": "2.22.0", "author": { "name": "Che Cheng" } diff --git a/plugins/parallel-ai-agents/CHANGELOG.md b/plugins/parallel-ai-agents/CHANGELOG.md index 56baeed..8f463c5 100644 --- a/plugins/parallel-ai-agents/CHANGELOG.md +++ b/plugins/parallel-ai-agents/CHANGELOG.md @@ -11,6 +11,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.22.0] - 2026-08-04 + +### Added + +- `minutes` profile:會議記錄的 ensemble 審閱,四個 lens 互為補集。 + `fidelity`(記錄寫的逐字稿有嗎、推論有無被寫成會中決定、有無誤讀原話)與 + `completeness`(逐字稿有的記錄漏了嗎、不利內容有無消失)一正一反,缺一不可; + `attribution` 查發言與責任歸屬的依據(語者分離常不可靠,未確認即具名是嚴重問題); + `cross-document` 比對來函、開會通知、前次記錄,並檢查交叉參照是否指對位置。 + DA 盯三種安靜的偏移:個別發言寫成全體共識、條件句寫成確定句、會後才知道的事寫得像會中已知。 +- `ensemble-minutes-review` skill:載明與 `sinica-admin:meeting-minutes` 的分工 + (機械檢查歸 compile.sh、事實核對歸本 skill),以及無逐字稿時應拒絕執行而非降級。 + +### Fixed + +- 文件補上兩個實測陷阱:`args` 傳字串時 `profile` 解析為 `undefined`、0 個 agent 被派出 + 而 workflow 仍「成功」結束(僅在 findings 留一條 harness HIGH);`agentModel` 不指定時 + agent 繼承 session main-loop model,高階 session 單輪曾燒 56-109 萬 token 並撞死 lens agent。 + + ## [2.21.0] - 2026-08-01 ### Added