feat: export core Hermes skills

This commit is contained in:
2026-07-15 02:45:56 +00:00
parent a028b63eda
commit 54711fee2a
308 changed files with 41310 additions and 1 deletions
@@ -0,0 +1,70 @@
# Pre-Modified File Detection (v1.x with Existing Tracked Changes)
## Problem
Files arriving as "v1.x" or similar versions may already contain tracked changes from other parties (e.g., the counterparty's legal team). The review-rules state: "已有他人的修订模式保持原样不动,不接受也不拒绝,只叠加我们自己的审查修改."
## Technical Impact
1. **python-docx `paragraph.text`** only shows non-tracked-change text (skips content inside `w:ins` elements), so it does NOT reflect the "accepted state" of the document
2. **ContractEditor.tracked_replace** searches through ALL text including `w:ins` content — search strings must match the accepted state
3. **ContractEditor.tracked_replace may fail** when the target text spans across or is inside an existing `w:ins` from another author (lxml parent-child mismatch)
## Detection Procedure
```python
from lxml import etree
ns = {'w': 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'}
# 1. Detect existing tracked changes and identify authors
ins_els = editor.body.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}ins')
authors = set()
for ins in ins_els:
author = ins.get('{http://schemas.openxmlformats.org/wordprocessingml/2006/main}author', '')
if author:
authors.add(author)
# If authors contains names other than 'WB', the file is pre-modified
```
## Reading the Accepted State
```python
def get_para_accepted_text(p):
"""Get paragraph text as it would appear with all changes accepted."""
text = ''
W = 'http://schemas.openxmlformats.org/wordprocessingml/2006/main'
for t in p.iter(f'{{{W}}}t'):
if t.text:
parent = t.getparent()
in_del = False
while parent is not None:
if parent.tag == f'{{{W}}}del':
in_del = True
break
parent = parent.getparent()
if not in_del:
text += t.text
return text
```
## Workflow When Pre-Modified File Detected
1. **First pass**: Read accepted state of all key paragraphs to understand current document content
2. **Compare** accepted state vs what python-docx `.paragraphs[].text` shows to identify what's been changed
3. **Assess** which of our review issues have already been addressed by the existing modifications
4. **Only add** our own changes for issues NOT already covered
5. **If tracked_replace fails** on text inside another author's `w:ins`: the text is already part of someone else's tracked change. Options:
- Skip if the existing change already addresses our concern
- Use direct XML manipulation to add our `w:del` + `w:ins` around the problematic text (complex, error-prone)
- Note it as "already addressed by [author]" in review notes
## 2026-07-06 Case Study (健康云服务费-赵巷v1.2)
- File arrived with tracked changes from authors: 祺帆, 社区, 俊玮 吴
- python-docx showed P59 as "2026年1月20日" but accepted state was "2026年11月20日" (already fixed by 祺帆)
- P26 (1.4 侵权条款) already had robust language added by 祺帆
- P109 (7.4) already had comprehensive损失赔偿 language added by existing changes
- P115 (8.2) had double period due to 祺帆's ins adding "向甲方所在地法院提起诉讼。" after original "则。" — required manual XML w:del to fix the trailing original period
- P118 (9.1) already had 转包连带责任 language added
**Key lesson**: Without reading accepted state first, we would have duplicated 5+ modifications already made by other parties.