{"_id":"@ansonlai/docx-redline-js","_rev":"23-cc86a37a71bfe84ea5cdd4b0f4c7fda2","name":"@ansonlai/docx-redline-js","dist-tags":{"latest":"0.8.4"},"versions":{"0.1.0":{"name":"@ansonlai/docx-redline-js","version":"0.1.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.1.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/YOUR_ORG/docx-redline-js#readme","bugs":{"url":"https://github.com/YOUR_ORG/docx-redline-js/issues"},"dist":{"shasum":"6026fa5e0d4fc9b69e57dd4803cdb7425921794b","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.1.0.tgz","fileCount":64,"integrity":"sha512-ztJWUBKYJ63FyYuwoit6/zy2upSh7mDGA4pfkC8/a2hpVL6H4BJ2kOKV52XcGBDxNZpXEv9gJ1gY/Vf+vGyDlQ==","signatures":[{"sig":"MEUCIH5Ih77+zqtczCl9Wdvq8MA9cybDkn11YfbhteyTn56pAiEAuOuqkf6k/r/ZA4RzFH7yEfchMfAYo1Kq2Twf9j0MWGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2489872},"main":"./index.js","type":"module","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./standalone":"./standalone.js","./orchestration/*":"./orchestration/*"},"gitHead":"01cf8300cd18f0178bb2c91c8e816e1d7370c19b","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_standalone_check.mjs && node tests/core_dependency_graph_check.mjs"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/YOUR_ORG/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.24.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.1.0_1771834156065_0.9392837558998193","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ansonlai/docx-redline-js","version":"0.1.3","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.1.3","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"ebeeb70ea76168c36281d5ff1c57040753674a7a","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.1.3.tgz","fileCount":63,"integrity":"sha512-ojNFY/oCsEsvD1Q//Q0oqPKVrOUjyWrF0qlDBdzr6sN3XnsoRsE4CF2uYZLvjoVh889bdsTkPXA0S5SuzxqLRA==","signatures":[{"sig":"MEUCIQDBXlSH7wXmi0akh2w8oInPh6hPKYvVIk9Z5JXsTJIvkgIgAu4fhWjwXbyLPQDW8J02L+eeeImTgialUGN2tgby1fE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2489532},"main":"./index.js","type":"module","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"547c43e3eda0a1cbed3301b1e6fa18376589b89c","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.24.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.1.3_1771905587202_0.1293886760417131","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@ansonlai/docx-redline-js","version":"0.1.4","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.1.4","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"e66d541063e63fce5a9205a09e0258091f8f2a1b","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.1.4.tgz","fileCount":64,"integrity":"sha512-ZdFuSYmMTI6N6V8BWVn5+ZrH6QKduy8+RL1M7LPS2KI6aKdApvsbBvzB3lKlpc6q/L5ESAdAheFADHq9/1sJkA==","signatures":[{"sig":"MEUCIAKirVC6AC8tgfvkK1NaD5+ZL5/0ZHPGDG/Qyj46PL8DAiEA7dly4mJHiksxb784uCCubOAfWjDwK1KOWsxoN8kfMHA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2567605},"main":"./index.js","type":"module","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"a152bf8bb25dbba8f6dda83cd97720ddef3e83b1","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.24.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.1.4_1772353645724_0.5470545010899663","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@ansonlai/docx-redline-js","version":"0.1.6","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.1.6","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"a1b5a8c0c6a58ce1471ca5618601af392da711a6","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.1.6.tgz","fileCount":77,"integrity":"sha512-cxBf7Lsm219L+jvKqUrAl5tWO4FRfHpfl1OVq8ZOMwwNA0fHNKDkInrac3Y0X9LvNZyCl/A/GoPNxiPr//jlgQ==","signatures":[{"sig":"MEYCIQCr9sVM+Uh6sCUKPh2+IiZsZ5Bspa/N7ZZH9pvBB6du6QIhANhnU8Br8AE/nQaE2nu9NJIj21sszVV3TQmTsH6zbTk3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2711155},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"794ff07b542bf3fe6a5b5b2aeeb6270b9fb5b48c","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"node scripts/check-types.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.24.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.1.6_1781327636529_0.39840086626267524","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ansonlai/docx-redline-js","version":"0.2.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.2.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"3a17e4b96d5eca3ff7096eb948ae76ba4353716b","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.2.0.tgz","fileCount":82,"integrity":"sha512-yqgBe/hvpvuzbRL73p2idLIAX/ufwE0ovtpbqU9pFybm7BKxVBt7nImDYDK5xc8iDRJJd2kIlcaKwFMev82UlQ==","signatures":[{"sig":"MEUCIQDxN6rg7J7zeeBrZM+cg+0/xb8remOvcADDlVpHp2FTkgIgIav8obZIbJf3Cg9HfF/8MO2GZeC4XOhat2Mq1xQKJ44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2796075},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"4c06a89c8c1862f1c07ec61fc928e567777a0dbd","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"node scripts/check-types.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.24.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.2.0_1783237399144_0.10369857162074458","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ansonlai/docx-redline-js","version":"0.2.1","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.2.1","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"f087a1274151e8ff14c0588b78a528cb17f9024b","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.2.1.tgz","fileCount":82,"integrity":"sha512-jZ2qG9cikVLDtoWjjeBckftYPOpDrQwww9/4Ff6W+KP0T8hSWAJ6AE0H1eI4zig+tUzhHE726UpXYgoU9Lwr+A==","signatures":[{"sig":"MEYCIQDzEBLfwiSkr0IA3E5zf5ytXk8C7OBa1gqhLkYYIrD0bgIhAIdcp69/rcZx1B+AMU97AZitd3ExCtjpvXMVEVvffztj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2795781},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"1352e5441f05646f98809a1fa87176c7287aff8a","scripts":{"test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"node scripts/check-types.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.2.1_1784179976895_0.31439897770222114","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ansonlai/docx-redline-js","version":"0.4.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.4.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"a7dfcdb8ceaffb039e9c85a85cc34ab517149039","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.4.0.tgz","fileCount":120,"integrity":"sha512-Fxul/DGGnsNnq2+gDDZSCzimq0oy7ULDvf14JTifZ0rOKeaQ0Hx/OZ2xL5raDNl1mv7mIagvWZZP7pNAxYODkg==","signatures":[{"sig":"MEUCIQCFFimcGqG++0O9pu1QXPWTth6gCTZhE2PBktuihRGsNQIgLkgaxmQC+mk1T4ZjCnAaXHOi2phLAcOL2IRH/1D7+pU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15814546},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":"./services/standalone-operation-runner.js","./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"6c353949b6dc14607cb65f7f8c2e28f3c6cd6fb2","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.4.0_1788405309018_0.5161799124545732","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ansonlai/docx-redline-js","version":"0.5.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.5.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"1bbe723ba71feb00bf9d9c936543936367cf2662","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.5.0.tgz","fileCount":158,"integrity":"sha512-gBew+anZbmwNk22DpkhwI6ZqCewHEKuDOwqwHyjjhLCBWLOuM46G38JZIvox7SqMGngQeR/F3rQg7miGS2vrJQ==","signatures":[{"sig":"MEQCIFJ20lcipDIGA65a+RMd3pFvsJRhzRzsyVgfxv3g7FGfAiA0Pr9Yd+/2rvNz1GsQcHq6J98EYxNI+B1jNDQnzGZtrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17965129},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"d8297999b4a0dd69a7e5cc03eb70b23ce9abf6dc","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.5.0_1788762481357_0.5675270264005305","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@ansonlai/docx-redline-js","version":"0.5.1","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.5.1","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"8a38bb065782e076b8f8e7146e354fe527f2abf0","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.5.1.tgz","fileCount":160,"integrity":"sha512-VIU52UNEit2IZZjur3eQDxl6xbCKXvLEM3ZHSz75AJ73a3tDLrCPtieoSiVVfXirhGjhBUOKM0KvscYfww9+NA==","signatures":[{"sig":"MEYCIQCYw6Kzw77ubwvx91AKHRsQ87tYXEiG1LoB8Lkllcor1gIhAJKqZ3L4LaIYYbf+DjSjZ12230c/G1LKgVdtrLwdhblV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18104704},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"b8b9f3232846d32ae2de95471c95bbc24c26de09","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.5.1_1788889738708_0.012628691770254497","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@ansonlai/docx-redline-js","version":"0.5.2","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.5.2","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"fc254a41f33c66c2d2d6050bda58ab560f3f32fe","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.5.2.tgz","fileCount":160,"integrity":"sha512-s6txvykMwOXPiJ2DtqbrTTefgC2XQxWAYHGHEcgRxSYvZPP4gtJ0eLi2GlBxQKdL9X1iuObnBUe2Hxv6i0mivw==","signatures":[{"sig":"MEUCIQCtj3+MOyJprahknwPfEwInCFfGfddCohgbDwVtiir5ZwIgId7OpkE2iSiVQaH+JqZ3TVtX/9XHOnzmTDTInhBDVng=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18139923},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"c5d60e605a1fd6085101ae6a324cef9bb5f74213","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.5.2_1788916030212_0.8235589420100631","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@ansonlai/docx-redline-js","version":"0.5.3","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.5.3","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"520469a39ef91948061dd2ce5ff1bb4582448093","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.5.3.tgz","fileCount":161,"integrity":"sha512-vopK86gfasm1LgV0QXREoblT8vViSr2xTPViNa3JVnzrDzJV4N1DW4V75lca4OSAyKePOMLSMDwDvDfnKILzvQ==","signatures":[{"sig":"MEQCIGOIYWhk8W8nwVAOGdUCGPTMTWkQYlYfDSghXsrOgIc5AiBy903TZllyr8jXdUxIFi3WvaL0qlj0nTjBusdlJAIMhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18267989},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"9753bb2171f670bacd1321c88f7190b860570e6c","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.5.3_1788930835931_0.8052141317543133","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@ansonlai/docx-redline-js","version":"0.5.4","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.5.4","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"d13eda7e1e41694c82edda6cf9b37cfc1255c563","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.5.4.tgz","fileCount":162,"integrity":"sha512-9NCvri+46Vds/vOmqxXKXfvv7MlDSiHX6Wd7hNenmQQMlJCfUf0fQAddRzbj2/tUiq6d0N55VpbMnvwjeLBs9A==","signatures":[{"sig":"MEUCIQDez4si6dSe0gHgN1TJrsEMfgMnx0wPdD6BNIpaS1SVOgIgYlf/W0mrFt63Ii+dZXCQe3hkn9znd0wP2PS08BHPQK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18400143},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"2871bca73d590bd626518d9c419aff81254a4219","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.5.4_1788940336598_0.7102779130445722","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ansonlai/docx-redline-js","version":"0.6.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.6.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"4b26240882ffb59a8dfc139a51ce5537ec714e84","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.6.0.tgz","fileCount":148,"integrity":"sha512-Kt6TMBvgJRNDNkN2+jIoxuOJLtsY9mD+JzkX0SgXZ2GdXCjLEXrXSIqxRTGKd3qU9LM17OQhfHcp3KYPkMXJ2g==","signatures":[{"sig":"MEUCIFK1eZz1fmzhDHIPR9SiOBiGpGvk1sFuM5emXXVXrK/YAiEA+PDpbxIMJLa6vx7/9zyMejPLzK102BxfdgYtmb3L2Gc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4673514},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"1e143e9d927c7a6ec8019b1a85ed69c8e1fa1325","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.6.0_1789278479106_0.12829246505374914","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@ansonlai/docx-redline-js","version":"0.6.1","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.6.1","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"bb2fcb50dd2294c9913b52cec9e689f1a4960cc9","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.6.1.tgz","fileCount":152,"integrity":"sha512-GmTRGniYjbDLutWOmzzhNGPg0a9MxrR+oMdL2RviEoGrkFnEu1oIYLK3sVxweD6+bmqwY2dcPEYKc3/3+6+QuA==","signatures":[{"sig":"MEUCICqSMBfIBDD4PQm3CFIZAwmr1YCIEeFMYJdHPpTi6DWhAiEAxrzyJZOF6DjezQMEje5PR4WhCPbEnIuCONT1GAiZqiw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4728275},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"447ef2d8acb84945876e79ffad182ff486eccc30","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.6.1_1789284553862_0.9767224443379838","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@ansonlai/docx-redline-js","version":"0.6.2","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.6.2","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"ede21da1c0832c3d80a7e945abfa877821eadf4f","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.6.2.tgz","fileCount":152,"integrity":"sha512-WLdf7CQl3YSLMfzsh9NGc0G2d80LF9MxM8U60lsW0nrdDvLuuBXX//srQJT6rSG2GSXh9YMY8X5RpAsLDIXm9g==","signatures":[{"sig":"MEUCIQDFp8rRm85JIuw8TIHcEyUiB5/tAsNiKJW1pHFeYkwWWAIgPCee6jLa6WYCf49Wersm1jyVDvpOAvDdhDdqULe0w1M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4739641},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"98bb6444832b45a7436be279aa8b737e9bd159b0","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.6.2_1789365645592_0.772315154452677","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@ansonlai/docx-redline-js","version":"0.7.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.7.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"4cfb3d43bf2067ddacb15bac51e6f343f1cf5e75","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.7.0.tgz","fileCount":155,"integrity":"sha512-zlefGU6x7PSc5IPxyFSPziQhHZc5acpKRMwgVzrY2sOVXXQz/jxOKFg9NGKdPbnBdRPS2JnT6Zqv8gWMppVEpw==","signatures":[{"sig":"MEUCIQCMvOGBG2sRAT4Q2GUZx4vd0PDqIhmp2NTNzrzjNUkABgIgQgGbmakZZH2+bUg46ksnDYm9rZufxXfQm8wOJtwaiCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4792040},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"a316a364f8e955e2e695e6ada787bcc56ead8ff6","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.7.0_1789413936713_0.6700847157937868","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@ansonlai/docx-redline-js","version":"0.7.1","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.7.1","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"438e6af2dd9b99699d3812ae507b4b809f3f478e","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.7.1.tgz","fileCount":155,"integrity":"sha512-QiLcQKvb54bNqC+kVINdrlEv2XBIXKmG8+wAnh+hLhpZZGjC9E+fYerM1zOI3XfwwF2KZlHGqnjfNwWlOcnbRg==","signatures":[{"sig":"MEUCIEZ7VovRQQhV3xyPT0/4fYRp8g7mMFsBy1QuRrrtLywPAiEA46jTK2WuAGI5RzUze4z2RmlkJGD1tQ1xtbJStHndiPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4802382},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"bafde6fd48b84911bba799e74e34260914d190a8","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.7.1_1789427009894_0.08221413664874233","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@ansonlai/docx-redline-js","version":"0.7.2","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.7.2","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"868be5fe7d852569e05255726e73119dde54c3e5","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.7.2.tgz","fileCount":156,"integrity":"sha512-kiSI+46wtTZAKJs2WQt8wRA//XgugSkfzLMjnS4BdznZOEPNxm2BPt/7K+R0FdKFVIm2/zhO/8T6r2+iXNQLAw==","signatures":[{"sig":"MEUCIQC5IcZ4G1qtM+5o9AICO5xKWlEqnQA/zin1u7qzJS8BywIgOcsa9DthTHDln5A6R2QUuINIO3+98Jpp2aM7qJ3Lxg8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4805897},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"616b7f515c44a417f3700b84847ad6be21aeea74","scripts":{"lint":"eslint index.js adapters core engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"peerDependencies":{"@xmldom/xmldom":">=0.8.0"},"peerDependenciesMeta":{"@xmldom/xmldom":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.7.2_1789442542170_0.199512285636942","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@ansonlai/docx-redline-js","version":"0.8.0","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.8.0","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"c02940f17bcc6d25887c05bf742109c671421b4a","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.8.0.tgz","fileCount":164,"integrity":"sha512-FYrVsWpF7zhxd+FxsfyzO5zil5vVtbW/BwK6DatfX4jetwoWm0ESOUb6eb8FIEXqJSajM1EhiQCghi8xcHaFDQ==","signatures":[{"sig":"MEYCIQDGnEPJpGMm1jKrAf18zj+/oJw7sASB7mDyQbBK2aQcfwIhALUVJk5esSPrkaEl5+lWsD4rOIk8uWZH3ERSp+jmJlFy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID/6XONBdBlcIzzw9IMfdugIp3Q0ffNpfNYtYw0qBi3IAiEAz3HYZuADze03XySPv/cUnlDpdPWyo6gM90CBiBTIGgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13014793},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./bundle":{"types":"./index.d.ts","import":"./dist/docx-redline.bundle.js","default":"./dist/docx-redline.bundle.js","require":"./dist/docx-redline.bundle.cjs"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./document/*":"./document/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"9c851dea1bd84f168138c8a57d634631c03b3dd6","scripts":{"lint":"eslint index.js adapters core document engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"fflate":"^0.8.3","@xmldom/xmldom":"^0.9.0","diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.8.0_1789856748615_0.44189057289312417","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@ansonlai/docx-redline-js","version":"0.8.1","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.8.1","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"fcd97a489a1fcd1d623fb0e216efc37fe7d67496","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.8.1.tgz","fileCount":174,"integrity":"sha512-nvQ1Q9gJ3G1GWcS/gE0Khxji0RuOK5EHpCH6moKb+UNWBOaLe3cnCZzQKNuJzSSCTBr9oJFA4gJvPr9bD8zxEQ==","signatures":[{"sig":"MEQCIEZn4cL/skKLmsWoG/y81d5vC+vvwViBQvrLJ+uF8Q0NAiAO44PMlIYzxIT6S1AFPUFo7Jc9dVThPJQlojlfzd3LMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIArMSKgtHLOsqSLIeVrMM3a1rG6FstjYC4NghCUNkv1AAiBS/ea9LII0Jv8rj1Uj5iISjDkMdV5fHtfLUFl7azsQ3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13707887},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./bundle":{"types":"./index.d.ts","import":"./dist/docx-redline.bundle.js","default":"./dist/docx-redline.bundle.js","require":"./dist/docx-redline.bundle.cjs"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./document/*":"./document/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"3e55a028810569019ffc18cfa37871966262ae79","scripts":{"lint":"eslint index.js adapters core document engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","test:word:package":"node scripts/generate-word-package-integrity-cases.mjs && powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-package-integrity.ps1","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"fflate":"^0.8.3","@xmldom/xmldom":"^0.9.0","diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.8.1_1790742468721_0.9433875869298229","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@ansonlai/docx-redline-js","version":"0.8.2","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.8.2","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"cab96286bb0c148977094fe2b564605c310e97b9","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.8.2.tgz","fileCount":174,"integrity":"sha512-0j/y9jko8G0F0jT5hCBNjVHH2xN0mbYxnnOEEZgS1ETWAmoeZgWFQB5Bt7cOrBzfWfRZuvniYeMJCnUeoLUkFA==","signatures":[{"sig":"MEUCIDjoR7J2uVOHSo7yFrIDRRC9QVbkX4fGqB8ZY9jnK65TAiEAqPR2bAtmdwljtkf7tPXPgrn1mT5o3ionpAC2w2GDut4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyYOvUoIQufji+eMNjNSZ1anJbZNx9S0MxzhfkcC5luAIhAOkpYz4pOIT61ezEQJ6KIjnVQBAGsjX1pAPd9mCuy5/Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13774415},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./bundle":{"types":"./index.d.ts","import":"./dist/docx-redline.bundle.js","default":"./dist/docx-redline.bundle.js","require":"./dist/docx-redline.bundle.cjs"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./document/*":"./document/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"01844283487e6bd645d4d0e5667b1b9c9936d664","scripts":{"lint":"eslint index.js adapters core document engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","test:word:package":"node scripts/generate-word-package-integrity-cases.mjs && powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-package-integrity.ps1","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"fflate":"^0.8.3","@xmldom/xmldom":"^0.9.0","diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.8.2_1790808126263_0.4321170253409996","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@ansonlai/docx-redline-js","version":"0.8.3","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"license":"MIT","_id":"@ansonlai/docx-redline-js@0.8.3","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"bin":{"docx-redline":"bin/docx-redline.js"},"dist":{"shasum":"497b75cf86a508b65f39267f780495addf2d14da","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.8.3.tgz","fileCount":174,"integrity":"sha512-4sSwB1ziXNWxpPox5/FaKNVp9M1s4UoZrDFj3HCaasiRCeEPPrdvJBlBXVhdIj8D99Fw4SIMpL31HEPLZZagMw==","signatures":[{"sig":"MEUCIBd3PnhYM4cSM+3Tdf+rbp/y85qNHPmnxsNayPOfdtwCAiEAo2jGv8120o8wzU8XO6Q3qOvuTizvMw1HNRbxnmvmkPM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDS6tyapyQ0/oeyKgc2JtuVR6RkIGuq2wPcoKTk62vZxwIgfLX094mfnI92XdCVjGx4DMIVSRiT+ntUT4X1mrJj3c8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13849242},"main":"./index.js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./bundle":{"types":"./index.d.ts","import":"./dist/docx-redline.bundle.js","default":"./dist/docx-redline.bundle.js","require":"./dist/docx-redline.bundle.cjs"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./document/*":"./document/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"5e67f4e5b1b8431e97bd33893af58506113bb3d2","scripts":{"lint":"eslint index.js adapters core document engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","test:word:package":"node scripts/generate-word-package-integrity-cases.mjs && powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-package-integrity.ps1","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"_nodeVersion":"24.11.1","dependencies":{"fflate":"^0.8.3","@xmldom/xmldom":"^0.9.0","diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"_npmOperationalInternal":{"tmp":"tmp/docx-redline-js_0.8.3_1790831909675_0.6496135108299346","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"_id":"@ansonlai/docx-redline-js@0.8.4","bin":{"docx-redline":"bin/docx-redline.js"},"bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"dist":{"shasum":"c61a818f66fd452560bbbf5a4e015adb2fe6acb1","tarball":"https://registry.npmjs.org/@ansonlai/docx-redline-js/-/docx-redline-js-0.8.4.tgz","fileCount":174,"integrity":"sha512-g6lH5Z+pTYNFK9FAmgRNue3Je7qaam7UhgvrPylULvcmpeRihiM5cAN6A9cTLGgJnyDL5JsiCPT1NbIXGrWuqQ==","signatures":[{"sig":"MEYCIQDLn9iRlS7pxbXU0p6FugmFcQSmPNq61YCDlV9BpD3LaAIhAJfiqm/qRFUXpYohzUCafEl90B93aefclCXclmcDyR1V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGA2icZJ3yEpAWc0nRgUXiON2QwxW6nOeYfE8dDWtOEyAiEA/R8o6ZjLJ+b3oE03Z0+qMyaf2ajsPsO9Kl/czQ/YwqQ="}],"unpackedSize":14028089},"main":"./index.js","name":"@ansonlai/docx-redline-js","type":"module","types":"./index.d.ts","module":"./index.js","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./index.d.ts","import":"./index.js","default":"./index.js"},"./node":{"types":"./node/index.d.ts","import":"./node/index.js","default":"./node/index.js"},"./bundle":{"types":"./index.d.ts","import":"./dist/docx-redline.bundle.js","default":"./dist/docx-redline.bundle.js","require":"./dist/docx-redline.bundle.cjs"},"./core/*":"./core/*","./engine/*":"./engine/*","./adapters/*":"./adapters/*","./document/*":"./document/*","./pipeline/*":"./pipeline/*","./services/*":"./services/*","./orchestration/*":"./orchestration/*","./standalone-runner":{"types":"./services/standalone-operation-runner.d.ts","import":"./services/standalone-operation-runner.js","default":"./services/standalone-operation-runner.js"},"./redline-operation-converter":"./orchestration/redline-operation-converter.js"},"gitHead":"683c30a318d3c980ff59c15ae0c619d82b770530","license":"MIT","scripts":{"lint":"eslint index.js adapters core document engine pipeline services orchestration scripts examples tests","test":"node scripts/run-tests.mjs","build":"node scripts/build.mjs","test:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-suite.ps1","smoke:word":"powershell -File scripts/word-com-smoke.ps1","check:types":"tsc -p tsconfig.types.json && node scripts/check-types.mjs","docx-redline":"node bin/docx-redline.js","coverage:gaps":"node scripts/report-coverage-gaps.mjs","test:coverage":"c8 --reporter=text --reporter=json --reporter=json-summary --reports-dir=coverage node scripts/run-tests.mjs","prepublishOnly":"npm run test:isolation && npm run build","profile:routes":"node scripts/profile-route-selection.mjs","test:isolation":"node tests/no_word_api_index_check.mjs && node tests/core_dependency_graph_check.mjs","benchmark:agent":"node scripts/benchmark-agent-workflow.mjs","benchmark:tests":"node scripts/benchmark-test-runner.mjs","smoke:word:diff":"powershell -File scripts/word-com-differential.ps1","test:corpus:word":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-suite.ps1","test:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-visual-suite.ps1","benchmark:session":"node scripts/benchmark-operation-session.mjs","test:word:package":"node scripts/generate-word-package-integrity-cases.mjs && powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-package-integrity.ps1","fixtures:reredline":"node scripts/export-reredline-stress-fixtures.mjs","test:visual:sample":"node scripts/sample-multimodal-visual-check.mjs","benchmark:agent-cli":"node scripts/benchmark-agent-cli-discovery.mjs","benchmark:localized":"node scripts/benchmark-localized-turn-reduction.mjs","benchmark:targeting":"node scripts/benchmark-targeting-hot-paths.mjs","review:word:prepare":"node scripts/prepare-word-review.mjs","test:visual:inspect":"node scripts/inspect-visual-evidence.mjs","report:word:coverage":"node scripts/report-word-coverage.mjs","corpus:fetch:superdoc":"node scripts/fetch-superdoc-corpus.mjs","report:test:dashboard":"node scripts/build-test-dashboard.mjs","benchmark:agent-surface":"node scripts/benchmark-agent-surface-simplification.mjs","test:corpus:word:visual":"powershell -NoProfile -ExecutionPolicy Bypass -File scripts/word-com-corpus-visual-suite.ps1"},"version":"0.8.4","_npmUser":{"name":"ansonlai","email":"ansonhwlai@gmail.com"},"homepage":"https://github.com/AnsonLai/docx-redline-js#readme","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"_npmVersion":"11.6.2","description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","directories":{},"maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"_nodeVersion":"24.11.1","dependencies":{"fflate":"^0.8.3","@xmldom/xmldom":"^0.9.0","diff-match-patch":"^1.0.5"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^12.0.0","jszip":"^3.10.1","eslint":"^10.9.1","esbuild":"^0.28.1","typescript":"^7.0.2","docx-preview":"^0.4.0","@xmldom/xmldom":"^0.9.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/docx-redline-js_0.8.4_1790919712650_0.5921447590235422"}}},"time":{"created":"2026-02-23T08:09:15.970Z","modified":"2026-10-02T05:41:52.969Z","0.1.0":"2026-02-23T08:09:16.329Z","0.1.3":"2026-02-24T03:59:47.432Z","0.1.4":"2026-03-01T08:27:25.936Z","0.1.6":"2026-06-13T05:13:56.800Z","0.2.0":"2026-07-05T07:43:19.293Z","0.2.1":"2026-07-16T05:32:57.075Z","0.4.0":"2026-09-03T03:15:09.331Z","0.5.0":"2026-09-07T06:28:01.705Z","0.5.1":"2026-09-08T17:48:59.047Z","0.5.2":"2026-09-09T01:07:10.513Z","0.5.3":"2026-09-09T05:13:56.224Z","0.5.4":"2026-09-09T07:52:16.887Z","0.6.0":"2026-09-13T05:47:59.269Z","0.6.1":"2026-09-13T07:29:14.098Z","0.6.2":"2026-09-14T06:00:45.734Z","0.7.0":"2026-09-14T19:25:36.889Z","0.7.1":"2026-09-14T23:03:30.069Z","0.7.2":"2026-09-15T03:22:22.336Z","0.8.0":"2026-09-19T22:25:48.786Z","0.8.1":"2026-09-30T04:27:48.880Z","0.8.2":"2026-09-30T22:42:06.434Z","0.8.3":"2026-10-01T05:18:29.833Z","0.8.4":"2026-10-02T05:41:52.815Z"},"bugs":{"url":"https://github.com/AnsonLai/docx-redline-js/issues"},"license":"MIT","homepage":"https://github.com/AnsonLai/docx-redline-js#readme","keywords":["docx","ooxml","reconciliation","track-changes","redlines","word","office","document","xml"],"repository":{"url":"git+https://github.com/AnsonLai/docx-redline-js.git","type":"git"},"description":"Host-independent OOXML reconciliation engine for .docx manipulation with track changes","maintainers":[{"name":"ansonlai","email":"ansonhwlai@gmail.com"}],"readme":"# @ansonlai/docx-redline-js\r\n\r\nHost-independent OOXML reconciliation engine for `.docx` manipulation with track changes (redlines).\r\n\r\nConverts AI-generated or programmatic text/markdown edits into valid Office Open XML (OOXML) with `w:ins`/`w:del` revision markup that Microsoft Word renders as native tracked changes.\r\n\r\n## Features\r\n\r\n- Text reconciliation with word-level diffing and native-looking redlines\r\n- Formatting updates (bold, italic, underline, strikethrough) via surgical `w:rPrChange`\r\n- Lists: generate and edit real Word lists (`w:numPr`) from markdown\r\n- Tables: virtual-grid diffing for cell-level edits with merge safety\r\n- Comments: inject OOXML comments anchored to text ranges\r\n- Revision management: detect existing revisions, consume move revisions, and accept/reject tracked changes by author or for all authors\r\n- Comment management: delete comments by author or for all authors\r\n- Highlights: apply highlight colors to runs\r\n- Markdown and OOXML conversion in both directions\r\n- Status/error result fields for parse, targeting, and existing-revision failures\r\n- Localized exact replacements against inspected targets, plus optional fail-closed speculative CLI edits\r\n- Package plumbing helpers for numbering.xml, comments.xml, content types, and relationships\r\n- Zero host dependencies: works in Node.js, browsers, Deno, and similar JS runtimes with DOM parsing support\r\n\r\n## What's New in 0.8.x\r\n\r\nThe current release is 0.8.4. The CLI contract remains version 8 throughout the 0.8 line.\r\n\r\n- **0.8.0, universal document facade:** `openDocx` and `DocxDocument` are exported from the primary entry point and work\r\n  on `Uint8Array` input in any JavaScript runtime. ZIP handling uses `fflate` and SHA-256 is pure JavaScript, so there are no\r\n  Node built-in dependencies. The XML provider falls back to `@xmldom/xmldom` automatically, and the\r\n  `@ansonlai/docx-redline-js/bundle` export provides zero-dependency single-file bundles for sandboxes such as n8n Code\r\n  nodes. The `/node` entry point keeps its existing API. See the [0.8.0 release notes](./docs/releases/0.8.0.md).\r\n- **0.8.1, headers, footers and comment threads:** an operation's `part` field edits headers and footers;\r\n  `inspect().headersFooters` lists them. Comment threads can be resolved or reopened with `doc.resolveComment` or the\r\n  `comment_resolve` operation, and comments can be deleted by id with `doc.deleteComments({ ids })` or\r\n  `docx-redline delete-comments --comment-id`. See the [0.8.1 release notes](./docs/releases/0.8.1.md).\r\n- **0.8.2, fixes:** a replacement beside a hyperlink no longer pulls adjacent plain text into the link, and Reject All no\r\n  longer reorders text around a manual line break. See the [0.8.2 release notes](./docs/releases/0.8.2.md).\r\n- **0.8.3, list fixes:** Reject All now restores list edits exactly (no extra empty paragraph after an inserted\r\n  paragraph, no merged source paragraphs after a list-range replacement, original list numbering kept through `openDocx`),\r\n  and inspection no longer reports tracked historical list, style or heading properties as current. See the\r\n  [0.8.3 release notes](./docs/releases/0.8.3.md).\r\n- **0.8.4, fixes:** localized replacements and list conversion work in paragraphs with soft line breaks, generated\r\n  bullets get their own numbering IDs, `format` accepts `textOccurrence` to format a later match, and tracked tables use\r\n  Word's row-level markup, so Word's Reject All removes them and an appended table keeps the paragraph's formatting. See\r\n  the [0.8.4 release notes](./docs/releases/0.8.4.md).\r\n\r\nVersion 0.7.0 introduced contract-8 localized edits: a small `find`/`replace` request against an inspected target instead\r\nof a complete paragraph, plus an optional speculative form that fails without writing when the anchor is missing or\r\nambiguous. They remain available unchanged; see the [0.7.0 release notes](./docs/releases/0.7.0.md).\r\n\r\n## Documentation Index\r\n\r\n| Document | Description |\r\n|---|---|\r\n| **[README.md](./README.md)** | Library overview, installation, quick start, and public API reference |\r\n| **[docs/AGENT_FAST_START.md](./docs/AGENT_FAST_START.md)** | Compact ordinary-edit protocol for structured tools and shell-only agents |\r\n| **[AGENTS.md](./AGENTS.md)** | Short repository launch card for task routing and contributor verification |\r\n| **[docs/AGENT_KNOWLEDGE_BASE.md](./docs/AGENT_KNOWLEDGE_BASE.md)** | Full agent reference, CLI workflow, operation examples, error recovery, options, and gotchas |\r\n| **[ARCHITECTURE.md](./ARCHITECTURE.md)** | Contributor architecture, module responsibilities, end-to-end data flow, and contracts |\r\n| **[docs/TESTING.md](./docs/TESTING.md)** | Complete testing guide, test lanes, independent oracle validation, and Word visual review checklist |\r\n| **[CHANGELOG.md](./CHANGELOG.md)** | Release history, breaking changes, and migration notes |\r\n\r\n## Repository Layout\r\n\r\nThe package exposes three levels of API:\r\n\r\n| Level | Entry point | Use it for |\r\n|---|---|---|\r\n| Host-independent OOXML API | `index.js` | Paragraph/range transforms and exported OOXML utilities in browsers, Node.js, or another DOM-capable runtime |\r\n| Standalone document XML runner | `services/standalone-operation-runner.js` | Applying operations to a complete `word/document.xml` string |\r\n| Node/DOCX API and CLI | `node/index.js`, `bin/docx-redline.js` | Reading, changing, validating, and writing complete `.docx` ZIP packages |\r\n\r\nImplementation folders have distinct roles: `core/` holds shared OOXML and\r\ntargeting primitives; `pipeline/` handles ingestion, diffing, markdown, lists,\r\nand serialization; `engine/` performs reconciliation; `services/` coordinates\r\ndocument operations and package artifacts; `node/` contains Node-only ZIP and\r\nwhole-document code. Tests are directly runnable `tests/*.mjs` files, while\r\n`tests/helpers/` and `tests/fixtures/` contain support code and data.\r\n\r\nContributors and coding agents should start with the routing table in\r\n[AGENTS.md](./AGENTS.md#pick-the-route) before exploring the tree. The full\r\ndependency and ownership map is in [ARCHITECTURE.md](./ARCHITECTURE.md).\r\n\r\nFor document-operation JSON, choose operations by the desired output structure,\r\nnot by the everyday meaning of the type name. `redline` and `replace` provide\r\nordinary text replacement; `list-change` and `table-reconciliation` provide\r\nstructural intent; and ordinary `insert` is a compatibility alias of the\r\nredline path unless it includes a rejected-view target and anchor. In every\r\nordinary text-bearing operation, `modified` is the complete desired content for\r\nthe target. See the [operation model](./docs/AGENT_KNOWLEDGE_BASE.md#operation-model-choose-by-output-shape)\r\nand the [JSON schema](./docs/schemas/document-operations.schema.json).\r\n\r\n## Install\r\n\r\n### npm / Node.js\r\n\r\n```bash\r\nnpm install @ansonlai/docx-redline-js\r\n```\r\n\r\n### CDN (browser `<script type=\"module\">`)\r\n\r\n```html\r\n<script type=\"module\">\r\n  import { applyRedlineToOxml } from 'https://esm.sh/@ansonlai/docx-redline-js';\r\n</script>\r\n```\r\n\r\nOr use the pre-bundled file (no import map needed, `diff-match-patch` is inlined):\r\n\r\n```html\r\n<script type=\"module\">\r\n  import { applyRedlineToOxml } from 'https://cdn.jsdelivr.net/npm/@ansonlai/docx-redline-js/dist/docx-redline-js.esm.min.js';\r\n</script>\r\n```\r\n\r\n### Local git clone\r\n\r\n```bash\r\ngit clone https://github.com/AnsonLai/docx-redline-js.git\r\n```\r\n\r\n```js\r\nimport { applyRedlineToOxml } from './docx-redline-js/index.js';\r\n```\r\n\r\n## Quick Start\r\n\r\n### Node.js\r\n\r\n```js\r\nimport { DOMParser, XMLSerializer } from '@xmldom/xmldom';\r\nimport {\r\n  configureXmlProvider,\r\n  setDefaultAuthor,\r\n  applyRedlineToOxml\r\n} from '@ansonlai/docx-redline-js';\r\n\r\nconfigureXmlProvider({ DOMParser, XMLSerializer });\r\nsetDefaultAuthor('My App');\r\n\r\nconst result = await applyRedlineToOxml(\r\n  paragraphOoxml,\r\n  'Original sentence.',\r\n  'Updated sentence.',\r\n  { generateRedlines: true, author: 'Editor' }\r\n);\r\n\r\nconsole.log(result.hasChanges);\r\nconsole.log(result.oxml);\r\n```\r\n\r\n### Browser\r\n\r\n```js\r\nimport {\r\n  setDefaultAuthor,\r\n  applyRedlineToOxml\r\n} from '@ansonlai/docx-redline-js';\r\n\r\nsetDefaultAuthor('Browser Editor');\r\n\r\nconst result = await applyRedlineToOxml(oxml, original, modified, {\r\n  generateRedlines: true\r\n});\r\n```\r\n\r\n## API Reference\r\n\r\n### Agent-friendly inspection and complete DOCX editing\r\n\r\n```js\r\nimport { inspectDocumentParts } from '@ansonlai/docx-redline-js';\r\nconst inventory = inspectDocumentParts({ documentXml, commentsXml, numberingXml });\r\n```\r\n\r\nInspection returns exact paragraph text, target IDs/fingerprints, headings,\r\ntable/list context, revision authors, and joined comment anchors. Filters such\r\nas `search`, `indexes`, `range`, `revisedOnly`, `inTable`, and `skipEmpty`\r\nlimit output. Search is a case-insensitive substring match; `around` adds nearby drafting\r\ncontext, while `limit` and `after` page direct hits. When a search yields 0\r\nmatches in the active view, `selection.hint` provides guidance if matches exist\r\nin the alternate revision view (such as searching for deleted text to restore).\r\nCompact `extract --revised` output retains revision authors and marks paragraphs\r\nwhose content is wholly hidden in the selected view as `deleted` or `inserted`.\r\nOne such paragraph can be restored without restating it:\r\n`docx-redline apply input.docx --restore --target-id ID --output reviewed.docx`.\r\nAdd one exact `--find`/`--replace` pair to make a localized correction while\r\nrestoring. The shortcut requires a strong rejected-view paragraph ID and does\r\nnot infer a range or adjacent content.\r\n`revisionView` accepts `accepted`, `rejected`, or `current`. Returned\r\nparagraphs identify matches versus context and include `humanReference` for\r\nuser-facing summaries.\r\n\r\nFor complete `.docx` buffers in Node:\r\n\r\n```js\r\nimport { openDocx } from '@ansonlai/docx-redline-js/node';\r\nconst document = openDocx(inputBuffer);\r\nconst result = await document.applyOperations(operations, {\r\n  author: 'Editor', atomic: true, validate: true\r\n});\r\nconst outputBuffer = result.toBuffer();\r\n```\r\n\r\nThe Node facade performs edits, artifact merges, package wiring, validation,\r\nand commit as one transaction. It defaults to strict targets and returns the\r\nuntouched input with `written: false` on atomic failure. It is isolated from\r\nthe root/browser dependency graph.\r\n\r\nInstall `@xmldom/xmldom` alongside the package when using the Node facade or\r\nCLI; it remains an optional peer so browser consumers do not install a DOM shim.\r\n\r\n#### Example agent session wrapper (development only)\r\n\r\n[`examples/agent-session-wrapper.mjs`](./examples/agent-session-wrapper.mjs)\r\ndemonstrates how a custom agent harness can keep one `DocxDocument` open, return\r\nshort revision-bound target handles, apply safe defaults once, and translate a\r\nnarrow edit request into canonical document operations:\r\n\r\n```js\r\nimport { readFile } from 'node:fs/promises';\r\nimport { createExampleAgentSession } from './examples/agent-session-wrapper.mjs';\r\n\r\nconst session = createExampleAgentSession(await readFile('contract.docx'), {\r\n  profile: { author: 'Editor' }\r\n});\r\nconst inspection = session.inspect({ search: 'termination', around: 2 });\r\nconst clause = inspection.targets.find(target => target.role === 'match');\r\nconst result = await session.applyEdits([{\r\n  target: clause.handle,\r\n  replacements: [{\r\n    find: 'The Company may terminate',\r\n    replace: 'Either party may terminate'\r\n  }]\r\n}]);\r\n```\r\n\r\nThis file is a testable sample, not a package export or supported alternate\r\nmutation engine. It delegates to `@ansonlai/docx-redline-js/node`, is excluded\r\nfrom the published package files, and is intended to help MCP servers, Claude\r\nskills, OpenCode tools, and other custom harnesses design thin integrations.\r\nThe sample binds each handle to the inspected package revision and view, returns\r\nnew handles after successful mutations, and expands localized exact replacements\r\ninto complete desired paragraph text before delegating to the canonical redline\r\noperation. Duplicate matches require an explicit `occurrence`; missing,\r\nambiguous, overlapping, and conflicting patches fail before document mutation.\r\nFrom a source checkout, run `npm run benchmark:agent` to compare its native\r\nexecution and serialized request size with a canonical stateless Node workflow.\r\nThe example and its benchmark are excluded from the published package. The\r\nbenchmark explicitly does not claim to measure LLM reasoning or provider/tool\r\nlatency. Checked comparative results are in the\r\n[agent protocol rollout audit](./docs/validation-reports/2026-09-12-agent-protocol-rollout.md).\r\n\r\n> **Pre-1.0 integration warning:** Agent skills, MCP servers, and harnesses\r\n> should pin the exact `@ansonlai/docx-redline-js` release they were tested\r\n> against and declare the CLI contract version/capabilities they require. Do\r\n> not treat a newly installed release or contract as verified until the\r\n> integration's compatibility tests pass. See the\r\n> [skill-authoring contract](./docs/SKILL_AUTHORING.md#runtime-negotiation).\r\n\r\n### Agent CLI\r\n\r\n```bash\r\n# Default agent workflow: inspect once, then apply once\r\ndocx-redline extract contract.docx --search \"termination\" --around 3\r\nnode emit-operations.mjs | docx-redline apply contract.docx --operations - --profile agent --compact --output reviewed.docx\r\n```\r\n\r\n```bash\r\n# Inline one-liner edit (no operations file needed)\r\ndocx-redline apply contract.docx --target \"Original clause text\" --modified \"New clause text\" --output reviewed.docx\r\n\r\n# Direct edit without tracked changes\r\ndocx-redline apply contract.docx --target \"Typo fix\" --modified \"Fixed typo\" --no-redlines --output clean.docx\r\n\r\n# Cross-author edit inside another reviewer's pending insertion\r\ndocx-redline apply contract.docx --target \"Another author's clause\" --modified \"Revised clause\" --existing-revisions slice-cross-author --output reviewed.docx\r\n\r\n# High-assurance atomic batch with nonzero exit on any incomplete result\r\ndocx-redline apply contract.docx --operations operations.json --atomic --require-complete --output reviewed.docx\r\n\r\n# Optional read-only audit before a deliberately staged batch\r\ndocx-redline preflight contract.docx --operations operations.json --author \"Editor\"\r\n```\r\n\r\nAll commands emit JSON on stdout. `apply` defaults:\r\n- **Author**: Defaults to `'AI Redliner'` (or `DOCX_REDLINE_AUTHOR` environment variable).\r\n- **Output overwrite**: Destination files provided via `--output` overwrite by default. Pass `--no-overwrite` or `--no-clobber` to safeguard existing destination files. The source input is never overwritten unless `--in-place` is specified.\r\n- **Existing revisions**: Defaults to `'merge-same-author'`. Pass `--existing-revisions slice-cross-author` to edit inside another reviewer's pending insertions with native carrier slicing.\r\n- **Transactionality**: Defaults to `atomic: false` (applies valid operations and reports any failures). Pass `--atomic` for all-or-nothing rollback on any operation error.\r\n- **Complete-success exit**: Pass `--require-complete` when a progressive `partial` result must exit with code `3`; errors exit with code `2`. Without the flag, partial results retain the legacy zero exit code, so always inspect `completion`.\r\n- **Agent profile**: `--profile agent` enables complete-success exit behavior while retaining the ordinary progressive transaction and existing-revision defaults. Compose it with `--atomic` or an explicit `--existing-revisions` policy when intended, and verify the resolved `effectiveOptions`.\r\n- **Operations from stdin**: `--operations -` reads the same array or `{ operations, expectedRevision }` envelope accepted from a file. Feed it from a JSON serializer or structured process API, not shell-interpolated legal text.\r\n- **Compact stdout**: `--compact` emits one-line mutation JSON. It changes serialization only, not operation semantics.\r\n- **Tracked changes**: Defaults to `generateRedlines: true`. Pass `--no-redlines` when clean direct text edits are desired.\r\n- **Inline edits**: Use `--target <text>` with `--modified <text>` or `--comment <text>` for quick one-liners without creating a JSON file.\r\n- **Localized edits**: After extraction, use `replacements` with the inspected `paragraphId` plus `fingerprint` to avoid restating a long paragraph. Retain `exactText` locally for drafting. Targetless `--find`/`--replace` is an optional speculative path described below.\r\n- **Invisible spaces**: Localized matching is case-sensitive and tries exact text first. If no exact span exists, ordinary spaces may match DOCX non-breaking spaces; ambiguous equivalent matches still fail closed, and `change.replacements[i].matchMode` reports `space_equivalent` when used.\r\n- **Compact mutation results**: `apply`, `accept`, `reject`, and `delete-comments` omit full OOXML/package payloads and inspection text from stdout. CLI operation results omit duplicate nested receipt bodies; the ordered top-level `receipts` array is authoritative. Successful exact target-match diagnostics are omitted and equivalent-whitespace matches retain only mode/count. Node and standalone-runner results remain unchanged. Use `validate` when full issue arrays are needed.\r\n\r\nInspection commands default to 20 direct matches and a 48 KiB soft response\r\nbudget when no explicit positional scope is supplied. When a search returns 0\r\nmatches in the requested view, `selection.hint` provides immediate guidance if\r\nmatches exist in the alternate view (such as searching for a deleted clause to\r\nrestore). Use `--limit` with `--after <paragraph-index>` to continue, `--around N`\r\n(aliases `--context` and `-C`) to include nearby paragraphs, and `--all` only\r\nfor deliberate unbounded inspection. Every retained target is complete; an\r\nindividually oversized paragraph is returned whole with an `oversizeItem`\r\nmarker. Machine `index` and `ref` fields are for targeting and pagination, not\r\nuser-facing Word locations; use `humanReference`, `provision`, or\r\n`nearestHeading` in reports.\r\n\r\n`docx-redline version` reports contract version 8 and the additive\r\n`command-help-v1`, `inspection-context-v1`, `bounded-inspection-v1`,\r\n`human-document-references-v1`, `batch-start-source-binding`,\r\n`recovery-envelope-v1`, `require-complete-exit`, `operations-stdin`,\r\n`agent-safety-profile-v2`, `deduplicated-cli-receipts`, and\r\n`compact-cli-json-v1`, `localized-replacements-v1`,\r\n`speculative-search-apply-v1`, `localized-change-summary-v1`, and\r\n`restore-shortcuts-v1`, plus `localized-space-equivalence-v1` capabilities. Header/footer\r\n`part` targeting, the `comment_resolve` operation and `delete-comments --comment-id` are advertised as\r\n`header-footer-parts-v1`, `comment-resolve-operation-v1` and `delete-comments-by-id-v1`.\r\nWrappers should negotiate only the\r\ncapabilities they use. Run `docx-redline <command> --help` for that command's\r\nmachine-readable options, behavior, exit codes, canonical GitHub documentation links, and compact examples.\r\n\r\n#### Optional speculative CLI path\r\n\r\nHarnesses with a measured confidence policy may attempt a targetless localized\r\nedit. This is not the default agent workflow:\r\n\r\n```bash\r\n# Globally unique literal\r\ndocx-redline apply contract.docx --find \"thirty (30) days\" --replace \"sixty (60) days\" --profile agent --output reviewed.docx\r\n\r\n# Optional directional scope using a longer, fairly unique nearby phrase\r\ndocx-redline apply contract.docx --search \"distinctive nearby heading or phrase\" --context-range 1:3 --find \"thirty (30) days\" --replace \"sixty (60) days\" --profile agent --output reviewed.docx\r\n```\r\n\r\nGeneric or repeated anchors can widen the unioned scope until multiple\r\nparagraphs contain `find`, causing a safe `AMBIGUOUS_TARGET` failure and a\r\nrecovery turn. `--around 3` is symmetric. On success,\r\n`change.context.anchorMatchCount > 1` signals a repeated anchor; confirm the\r\nreturned location and bounded evidence. Matching remains case-sensitive and\r\nexact-first, with a narrow ordinary-space/NBSP fallback that still refuses\r\nambiguity.\r\n\r\nSee the [compact agent fast start](./docs/AGENT_FAST_START.md), the\r\n[skill/harness authoring contract](./docs/SKILL_AUTHORING.md), and the\r\n[operation JSON Schema](docs/schemas/document-operations.schema.json).\r\n\r\n### Configuration (call once at startup)\r\n\r\n| Function | Purpose |\r\n|----------|---------|\r\n| `configureXmlProvider({ DOMParser, XMLSerializer })` | Inject XML parser. Required in Node.js; browsers usually provide native support. |\r\n| `configureLogger({ log, warn, error })` | Replace default console logger. |\r\n| `setDefaultAuthor(name)` | Set fallback track-change author (default: `'AI Redliner'`, configurable via `DOCX_REDLINE_AUTHOR` environment variable). |\r\n| `setPlatform(label)` | Set platform label for diagnostics (default: `'Unknown'`). |\r\n\r\n### Options and Defaults Reference\r\n\r\n| Option | Type | Default | Description |\r\n|--------|------|---------|-------------|\r\n| `generateRedlines` | `boolean` | `true` | When `true`, emit Word-native tracked changes (`w:ins`/`w:del`). When `false`, apply clean direct edits without revision markup. **Note: Redlines are not always the preferred method** — pass `generateRedlines: false` (or `--no-redlines` via CLI) when producing clean execution drafts, restructuring documents, or when revision clutter is unwanted. |\r\n| `author` | `string` | `'AI Redliner'` | Reviewer/author name stamped on generated tracked changes and comments. Overridable via `DOCX_REDLINE_AUTHOR` env variable. |\r\n| `atomic` | `boolean` | `false` | Batch transaction mode. By default (`false`), valid edits are applied and failing operations report errors. When `true`, any operation failure rolls back the entire batch to the original document state (`rolledBack: true`, `hasChanges: false`). Feature prominently in high-assurance workflows. |\r\n| `structuredContent` | `boolean` | `true` | Auto-detects Markdown tables, headings (`#`), and lists in replacement text and renders them as native Word elements (`w:tbl`, `w:pStyle`, `w:numPr`). Pass `false` to treat replacement text strictly as plain text. |\r\n| `pairReplacements` | `boolean` | `true` | Links adjacent `<w:del>` and `<w:ins>` revisions with matching timestamps so Word groups them as a single replacement in the Reviewing Pane. |\r\n| `strictTargets` | `boolean` | `true` (CLI/facade) | Requires exact target descriptors (`exactText`, `paragraphId`, `index`, `occurrence`, `fingerprint`) and forbids ambiguous matching. Defaults to `false` in low-level runner for backwards compatibility. |\r\n| `existingRevisions` | `string` | `'merge-same-author'` | How to handle paragraphs with existing tracked changes. `'merge-same-author'` merges revisions from the same author and protects other authors with `EXISTING_REVISIONS`. `'slice-cross-author'` keeps that same-author merge behavior while allowing Word-native edits inside another author's pending insertion. Pass `'accept-all-first'` to normalize prior revisions or `'reject-input'` to refuse editing revised paragraphs. |\r\n| `removeFormatting` | `boolean` | `false` | When `true` and the text is unchanged with no Markdown hints, strips existing bold/italic/underline/strikethrough formatting. |\r\n| `sanitizeInput` | `boolean` | `false` | Opt-in removal of standalone leading assistant-preface lines. Literal dollar signs and `\\n` sequences are always preserved. |\r\n\r\nSame-author revision merging refuses paragraphs containing comment anchors with\r\n`COMMENTED_CONTENT_MERGE`; resolve those comments first so the merge cannot\r\nremove or orphan their anchors.\r\n\r\nCommon result fields:\r\n\r\n| Field | Purpose |\r\n|-------|---------|\r\n| `status` | Operation status: `'ok'`, `'partial'`, `'no-op'`, or `'error'`. |\r\n| `error` | Present on failure; retains a stable `code` and adds recovery envelope version, stage, category, bounded context, and a machine-readable recovery action. |\r\n| `written` | CLI/facade boolean indicating whether the output file was successfully written to disk. |\r\n| `completion` | CLI-only boolean that is `true` only when a destination was written, top-level status is neither error nor partial, and no operation result failed. |\r\n| `rolledBack` | Present and `true` when an atomic batch encountered an error and rolled back all changes. |\r\n\r\nWord diffs are deterministic by default (no wall-clock timeout). Inputs above\r\nthe safe ceiling of 262,144 unique diff tokens return `DIFF_TOKEN_LIMIT` with\r\nthe original OOXML unchanged so callers can split the operation without risking\r\nsilent text loss.\r\n\r\n### Editing inside existing revisions (cross-author slicing)\r\n\r\nDuring multi-round legal negotiations, a reviewer often needs to edit text that was previously inserted by another reviewer whose revision is still pending. Pass `existingRevisions: 'slice-cross-author'` (or `--existing-revisions slice-cross-author` via CLI) to edit inside another author's pending insertion without erasing their attribution or requiring prior acceptance:\r\n\r\n```js\r\nconst result = await applyRedlineToOxml(paragraphOoxml, originalText, modifiedText, {\r\n  generateRedlines: true,\r\n  author: 'Reviewer B',\r\n  existingRevisions: 'slice-cross-author'\r\n});\r\n```\r\n\r\nThe engine applies Microsoft Word Desktop-native tracked change structures:\r\n- **Insertions inside pending insertions**: The carrier `<w:ins>` is split into sibling `<w:ins>` containers at the paragraph level (`[ins(Author A), ins(Author B), ins(Author A)]`), maintaining strict schema compliance without illegal `ins/ins` nesting.\r\n- **Deletions inside pending insertions**: The new `<w:del>` is nested directly inside the carrier `<w:ins>` (valid under ECMA-376 Part 1 `CT_RunTrackChange`), ensuring that if Author A's insertion is rejected, Author B's dependent deletion is cleanly removed with it.\r\n- **Straddle deletions**: Deletions spanning between baseline text and pending insertions cleanly partition across their respective container contexts without invalid coalescing.\r\n- **Lifecycle parity**: Accepting or rejecting either reviewer independently produces identical results to Microsoft Word Desktop's native review pane.\r\n\r\n### Replacing a heading with a tracked list\r\n\r\nThe list route treats a one-paragraph heading expanded into multiple markdown\r\nitems as a structural block replacement. The deleted heading stays in its own\r\ntracked paragraph, and every inserted item becomes a separate Word list\r\nparagraph. Accepting the revisions produces only the list items; rejecting them\r\nrestores the original heading exactly.\r\n\r\n```js\r\nconst result = await applyRedlineToOxml(\r\n  headingParagraphOoxml,\r\n  'A.\\tPURPOSE',\r\n  '* Article A. Purpose and Interagency Alignment\\n' +\r\n    '* Key Focus: Joint Street Outreach & Medical Triage',\r\n  { generateRedlines: true, author: 'Editor' }\r\n);\r\n```\r\n\r\n`w:numId w:val=\"0\"` means numbering is explicitly suppressed; it is not a list\r\ndefinition and is never reused for generated bullets. New list items receive a\r\npositive numbering ID. Font family, size, language, and related script\r\nproperties are inherited from the source paragraph, while heading emphasis\r\n(such as bold or underline) is not copied unless the replacement markdown asks\r\nfor it. For a complete `word/document.xml`, prefer\r\n`applyOperationToDocumentXml(...)` so replacement nodes and numbering artifacts\r\nare imported at the correct scope.\r\n\r\n### Planning large mixed-content insertions\r\n\r\nFor an attachment or schedule containing several kinds of content, use\r\n`planStructuredReplacement(...)` before applying the edit. It decomposes the\r\nMarkdown into typed heading, paragraph, list, and table blocks, normalizes the\r\nblock boundaries, and returns one atomic operation with\r\n`structuredContent: true`.\r\n\r\n```js\r\nimport { planStructuredReplacement } from '@ansonlai/docx-redline-js';\r\n\r\nconst plan = planStructuredReplacement(\r\n  { exactText: 'Date', index: 172 },\r\n  `# ATTACHMENT 4\r\n\r\nIntroductory paragraph.\r\n\r\n| Agency | Contact |\r\n| --- | --- |\r\n| BCHD | Dr. Jenkins |\r\n\r\n## Protocol\r\n\r\n1. Joint clearance\r\n2. Rapid escalation`,\r\n  { author: 'Editor' }\r\n);\r\n\r\nif (!plan.valid || !plan.operation) {\r\n  throw new Error(plan.issues.map(issue => issue.message).join(' '));\r\n}\r\n\r\nconst result = await document.applyOperations([plan.operation], {\r\n  author: 'Editor', atomic: true, validate: true\r\n});\r\n```\r\n\r\nEvery Markdown table must include a separator row immediately below its header.\r\nMissing separators, missing data rows, and inconsistent column counts are\r\nreported as structured errors instead of being inserted as visible pipe text.\r\nUse `#` through `#########` to request Word heading paragraphs; blank lines\r\nseparate paragraphs; adjacent list markers form a real Word list. Keep the\r\nplanned content in one operation so later blocks do not depend on an anchor that\r\nan earlier block has already replaced.\r\n\r\n### Pipeline (lower-level access)\r\n\r\n| Function | Purpose |\r\n|----------|---------|\r\n| `ReconciliationPipeline` | Direct pipeline access (ingest, diff, patch, serialize). |\r\n| `ingestWordOoxmlToPlainText(oxml)` | Extract plain text from OOXML. |\r\n| `ingestWordOoxmlToMarkdown(oxml)` | Convert OOXML to markdown. |\r\n| `ingestWordOoxmlToPlainTextResult(oxml)` | Extract text as `{ text, status, error?, warnings? }`, distinguishing malformed input from an empty document. |\r\n| `ingestWordOoxmlToMarkdownResult(oxml)` | Markdown counterpart to the result-returning plain-text helper. |\r\n| `ingestOoxml(oxml)` | Flatten OOXML into an internal run model with offsets. |\r\n| `preprocessMarkdown(text)` | Normalize markdown and extract format hints. |\r\n| `analyzeStructuredContent(markdown)` | Decompose mixed Markdown into typed blocks and report malformed table syntax without creating an operation. |\r\n| `planStructuredReplacement(target, markdown, options)` | Validate mixed content and return one atomic `structuredContent` replacement operation, or `operation: null` with issues. |\r\n| `containsTrackedChanges(xmlDoc)` | Detect `w:ins`, `w:del`, move revisions, property changes, and paragraph-mark revision markup in a parsed OOXML document/fragment. |\r\n| `validateRedlineOoxml(oxml)` | Validate generated redline OOXML against the package's structural invariants (no nested revisions, `w:delText` inside `w:del`, complete metadata, unique revision ids, preserved boundary whitespace). Returns `{ valid, issues }`; run it before writing output into a package. |\r\n\r\n### Services\r\n\r\n| Function | Purpose |\r\n|----------|---------|\r\n| `injectCommentsIntoOoxml(oxml, comments, options)` | Add comments anchored to text ranges. |\r\n| `applyCommentReplyToParts(options)` | Build a threaded reply in `comments.xml` and `commentsExtended.xml` without adding a document-body anchor. |\r\n| `acceptTrackedChangesInOoxml(oxml, { author?, allAuthors? })` | Accept `w:ins` / `w:del` / `w:moveFrom` / `w:moveTo` / `*PrChange` revisions for one author or all authors. |\r\n| `rejectTrackedChangesInOoxml(oxml, { author?, allAuthors? })` | Reject `w:ins` / `w:del` / `w:moveFrom` / `w:moveTo` / `*PrChange` revisions for one author or all authors. |\r\n| `deleteCommentsByAuthorInOoxml(oxml, { author?, allAuthors? })` | Delete matching comment definitions and anchors present in the supplied OOXML payload. Real `.docx` packages require updating both `word/comments.xml` and `word/document.xml`. |\r\n| `generateTableOoxml(headers, rows, options)` | Generate a `w:tbl` from tabular data. |\r\n| `createDynamicNumberingIdState(numberingXml)` | Allocate numbering IDs without collisions. |\r\n| `ensureNumberingArtifactsInZip(zip, numberingXml, options)` | Add numbering artifacts to a `.docx` package. Replacement of existing numbering without `mergeNumberingXmlBySchemaOrder` is deprecated and will throw in the next major version. |\r\n| `ensureCommentsArtifactsInZip(zip, commentsXml)` | Merge comments artifacts into a `.docx` package. |\r\n| `ensureCommentsExtendedArtifactsInZip(zip, commentsExtendedXml)` | Add or replace modern Word comment-thread metadata in a `.docx` package. |\r\n| `validateDocxPackage(zip)` | Validate `.docx` structural consistency. |\r\n\r\nMalformed OOXML never escapes these public transform APIs as a raw parser\r\nexception. Transforms return `status: 'error'` with `error.code === 'PARSE_ERROR'`;\r\nvalidators return a `PARSE_ERROR` issue. Recoverable XML parser\r\ndiagnostics are forwarded through the configured logger and included in\r\n`warnings` where the result shape supports them.\r\n\r\nCross-author slicing also verifies its exact accepted-view text before success.\r\nIf a structural boundary prevents exact reconstruction, the transform returns\r\n`status: 'error'` with `error.code === 'PATCH_ROUNDTRIP_MISMATCH'`,\r\n`hasChanges: false`, and the original OOXML unchanged.\r\nPure insertion-only slicing uses an exact character-local diff so repeated words\r\ncannot move an insertion to a different occurrence. Leading/trailing spaces,\r\ntabs, and non-breaking spaces are treated as real changes rather than no-ops.\r\nFor text-bearing replacements, the exact accepted-view text of the resolved\r\nparagraph—not a space-normalized caller target—defines mutation offsets. Word-level replacement\r\nhunks that differ only by ordinary spaces and NBSPs are refined to character\r\nedits so unchanged hyperlinks and their relationship attributes stay in place.\r\nRunner results expose bounded `resolvedTarget.targetTextMatch` code-point\r\ndiagnostics when equivalent whitespace was used to identify the target.\r\n\r\n### Deep Imports\r\n\r\nFor advanced usage, import specific submodules:\r\n\r\n```js\r\nimport {\r\n  applyOperationToDocumentXml,\r\n  applyOperationsToDocumentXml,\r\n  preflightOperations,\r\n  orderOperationsForStableTargets\r\n} from '@ansonlai/docx-redline-js/standalone-runner';\r\nimport { getParagraphText } from '@ansonlai/docx-redline-js/core/paragraph-targeting.js';\r\n```\r\n\r\nUse `applyOperationsToDocumentXml(...)` for mixed batches. It stably runs comments before text-changing operations so replacements cannot invalidate their original anchors. Other operation types retain their relative order. Batch results retain each operation's original 1-based index and expose the actual `executionOrder`.\r\n\r\nBefore mutation, the runner resolves strong source descriptors against the\r\nimmutable batch-start document and binds them to session-local source\r\nidentities. Independent edits therefore do not need to be manually sorted when\r\nan earlier structural rewrite changes later paragraph indexes or fingerprints.\r\nTargets that deliberately refer to uniquely created paragraph text are compiled\r\ninto an internal capture dependency. True overlap is not guessed: incompatible\r\nwrites to one source fail before mutation with `OVERLAPPING_SOURCE_TARGETS` or\r\n`REVISION_ORDER_CONFLICT`, and mutating capture fan-out without distinct\r\nselectors fails with `CAPTURE_FANOUT_CONFLICT`.\r\n\r\nThreaded replies use a comment operation with no body target:\r\n\r\n```js\r\n{ type: 'comment_reply', parentCommentId: 8, commentContent: 'Agreed; I revised this.', author: 'Editor' }\r\n```\r\n\r\nFor complete `.docx` files, use `openDocx(...).applyOperations(...)`; it reads\r\nthe existing comments parts, writes the required `commentsExtended.xml`\r\nrelationship and content type, adds the reply's own range/reference markers to the body\r\n(Word does not display a reply without them), and keeps `commentsIds.xml` and\r\n`commentsExtensible.xml` in step when they exist. Inspection reports `paraId`, `parentCommentId` and `done`\r\nso callers can discover and verify the thread hierarchy.\r\n\r\nResolve or reopen a thread with an operation (usable from the CLI through `apply --operations`) or the API:\r\n\r\n```js\r\n{ type: 'comment_resolve', commentId: 8 }                  // resolve\r\n{ type: 'comment_resolve', commentId: 8, resolved: false } // reopen\r\nawait doc.resolveComment(8, { resolved: true });\r\n```\r\n\r\nResolved is a thread-level state in Word, so any id in the thread updates the root and all replies. Delete\r\nspecific comments with `doc.deleteComments({ ids: [8] })` or `docx-redline delete-comments file.docx --comment-id 8`;\r\ndeleting a thread root also deletes its replies.\r\n\r\nHeaders and footers are edited by adding `part` to an operation: `{ type: 'replace', part: { kind: 'footer' }, target: { exactText: 'Draft v1' }, modified: 'Draft v2' }`.\r\n`openDocx(...).inspect().headersFooters` lists the parts (path, kind, type, sections, text, whether they contain\r\nfields). Fields such as `PAGE` are treated as atomic, comments are not allowed in headers or footers, and `accept`/`reject`\r\nalso resolve revisions inside them. Creating a header or footer that does not exist is not supported; see\r\n[Known limitations](docs/plans/KNOWN_BUGS.md#4-headers-and-footers).\r\n\r\nA whole-paragraph `delete` that targets existing comment markup fails with\r\n`COMMENTED_CONTENT_DELETE`. In the Node facade and CLI, the error also includes\r\nthe affected comment author and text. Resolve the feedback or explicitly remove\r\nthe comment first; the library will not silently discard reviewer context.\r\n\r\nThe batch runner keeps one live document DOM and performs one final full-document\r\nserialization. Accuracy remains the controlling constraint: each operation has\r\nan internal savepoint so an error or no-op cannot leak a partial edit or consumed\r\nrevision ID into later operations.\r\n\r\nBatches are progressive by default (`atomic: false`): valid operations commit\r\nwhile failed operations remain unapplied and are reported in `results`. Pass\r\n`{ atomic: true }` when any operation error must return the original\r\n`documentXml`, `hasChanges: false`, empty package artifacts, and\r\n`rolledBack: true`. The default `continueOnError: true` still attempts the full\r\nbatch so `results` describes every operation; use `{ continueOnError: false }`\r\nto stop after the first error.\r\n\r\nEvery failed or partial mutation includes `retryPlan`. Its `base` is `original`\r\nafter rollback/no commit and `output` after a progressive partial commit;\r\n`committedIndexes`, `failedIndexes`, and `unattemptedIndexes` identify the safe\r\nreplay scope. Errors use recovery envelope version 1 and always report\r\n`sameArgumentsSafe: false`. Follow `error.recovery.action`; do not infer a retry\r\nfrom prose. Authorization-sensitive actions, such as resolving comments, are\r\nmarked with `requiresUserAuthorization: true`. For `EXISTING_REVISIONS`, the\r\nnon-normalizing surgical recommendation is `slice-cross-author`; accepting or\r\nrejecting prior revisions still requires explicit authority.\r\n\r\nComment anchors use exact matching first, then a unique ASCII-space/NBSP\r\nequivalent match that preserves source offsets and text. Missing anchors return\r\n`ANCHOR_NOT_FOUND`; repeated matches return `AMBIGUOUS_ANCHOR`. Both are\r\noperation errors and therefore roll back atomic batches. When `textToComment`\r\nis omitted, the exact text of the resolved paragraph is used.\r\n\r\nOperations may override the batch author and may use a strict target descriptor:\r\n\r\n```js\r\nconst operations = [{\r\n  type: 'replace',\r\n  author: 'Contract Editor',\r\n  target: {\r\n    exactText: 'Either party may terminate on notice.',\r\n    paragraphId: '1A2B3C4D',\r\n    index: 12,\r\n    fingerprint: 'fnv1a32:...'\r\n  },\r\n  modified: 'Either party may terminate on 30 days written notice.'\r\n}];\r\n\r\nconst preflight = preflightOperations(documentXml, operations, 'Fallback Author');\r\nif (!preflight.valid) {\r\n  // Resolve missing/ambiguous targets, anchors, revision policies, or conflicts.\r\n}\r\n\r\nconst result = await applyOperationsToDocumentXml(\r\n  documentXml,\r\n  operations,\r\n  'Fallback Author',\r\n  null,\r\n  { strictTargets: true }\r\n);\r\n```\r\n\r\nPreflight is read-only and uses strict targeting by default. It reports\r\n`AMBIGUOUS_TARGET` with candidates instead of selecting the first duplicate,\r\ndoes not use fuzzy fallback, checks comment/highlight anchors and existing\r\nrevision policy, identifies same-paragraph operation conflicts, and reports\r\nauthors plus required comments/numbering artifacts.\r\n\r\nApplication currently defaults to permissive targeting for backward compatibility,\r\nbut will default to `strictTargets: true` in v1.0.0. When permissive resolution\r\nchooses among multiple candidate paragraphs heuristically, it emits an\r\n`AMBIGUOUS_TARGET_HEURISTIC_USED` warning containing candidate count and migration\r\nguidance. Callers should pass `{ strictTargets: true }` and use strict descriptors\r\n(`paragraphId`, `index`, `occurrence`, or `fingerprint`) to prepare for v1.0.0.\r\n\r\n### Mutation Receipts\r\n\r\nBoth single-operation (`applyOperationToDocumentXml`) and batch\r\n(`applyOperationsToDocumentXml`) results expose commit-aware **Mutation Receipts**\r\n(`result.receipt` on single results and per-item `results[i].receipt`, plus `result.receipts`\r\nfor the full batch).\r\n\r\nThis full receipt shape is retained by the Node facade and standalone runner.\r\nOnly compact CLI JSON removes duplicate `results[i].receipt` bodies and keeps\r\nthe ordered top-level `receipts` array.\r\n\r\n```js\r\nconst result = await applyOperationsToDocumentXml(documentXml, operations, 'Agent');\r\nfor (const receipt of result.receipts) {\r\n  console.log(receipt.operationIndex, receipt.finalDisposition, receipt.committed);\r\n  console.log('Revisions:', receipt.revisionItems);\r\n  console.log('Comments:', receipt.commentIds);\r\n}\r\n```\r\n\r\nReceipts report:\r\n- `operationIndex` (1-based), `operationId`, and `authorUsed`\r\n- `attemptedDisposition` and `finalDisposition` (`applied`, `refused`, `no_change`, `rolled_back`, or `not_attempted`)\r\n- `committed` (boolean: verified committed into serialized package output)\r\n- `revisionItems` (exact allocated revision IDs with kind and target part)\r\n- `commentIds`, `numberingIds`, and `relationshipIds`\r\n- `affectedTargets` (resolved target coordinates) and `warnings`\r\n\r\nBefore completing an operation or batch transaction, `reconcileReceiptsAgainstOutput`\r\nverifies every reported committed durable ID against a fresh parse of the output OOXML.\r\nAny discrepancy fails closed and triggers immediate rollback.\r\n\r\n### Output Shape Matrix\r\n\r\nDifferent APIs return different OOXML shapes. Use this as a packaging safety check.\r\n\r\n| API | Typical input scope | Output field | Possible root/output shape | Safe to write directly into `word/document.xml` |\r\n|-----|----------------------|--------------|----------------------------|--------------------------------------------------|\r\n| `applyRedlineToOxml(...)` | Paragraph, range, or table-scope OOXML | `result.oxml` | Fragment, `<w:document>`, or package payload (`<pkg:package>`) | No. Inspect first. |\r\n| `applyRedlineToOxmlWithListFallback(...)` | Paragraph or range-scope OOXML | `result.oxml` | Fragment, `<w:document>`, or package payload (`<pkg:package>`) | No. Inspect first. |\r\n| `reconcileMarkdownTableOoxml(...)` | Table or paragraph-scope OOXML | `result.oxml` | Same shapes as `applyRedlineToOxml(...)` for the supplied scope | No. Inspect first. |\r\n| `applyOperationToDocumentXml(...)` | Full `word/document.xml` string | `result.documentXml` | `<w:document>` | Yes. This is the document-safe helper. |\r\n| `applyOperationsToDocumentXml(...)` | Full `word/document.xml` plus an operation batch | `result.documentXml` | `<w:document>` | Yes. Atomic by default; comments are applied before text-changing operations. |\r\n| `extractReplacementNodesFromOoxml(...)` | Any OOXML payload | `{ replacementNodes, numberingXml, sourceType }` | Normalized to `fragment`, `document`, or `package` | Yes. Use this when consuming `result.oxml`. |\r\n\r\n### Do / Don't for Packaging\r\n\r\n- Do use `applyOperationToDocumentXml(...).documentXml` when your intent is to replace `word/document.xml`.\r\n- Do use `applyOperationsToDocumentXml(...)` rather than an unsorted loop for batches containing comments and replacements that target the same original paragraph.\r\n- Redline application strips proofing markers (`w:proofErr`) from the matched target paragraph before diffing, while preserving complex-field scaffolding (`w:fldChar`, `w:instrText`) and its cached visible result as inert structure. Adjacent edits do not revise or move an unchanged field result.\r\n- Hyperlinks, bookmarks, comment range markers, tabs/breaks, and footnote/endnote references are treated as structural OOXML that should survive adjacent redline edits instead of being orphaned or wrapped in deletions.\r\n- Treat `w:numId w:val=\"0\"` as numbering suppression, never as a reusable list\r\n  ID. Generated bullet and numbered paragraphs must reference a positive ID\r\n  whose definition is merged into `word/numbering.xml`.\r\n- Do use `extractReplacementNodesFromOoxml(...)` when you are consuming `result.oxml` from paragraph/range/table APIs.\r\n- Do merge numbering/comments artifacts with `ensureNumberingArtifactsInZip(...)` and `ensureCommentsArtifactsInZip(...)` when those parts are present. Supply `mergeNumberingXmlBySchemaOrder` when numbering already exists.\r\n- Don't write payloads that start with `<pkg:package` directly into `word/document.xml`.\r\n- Don't assume every `result.oxml` payload is a raw paragraph fragment.\r\n\r\n## Working With `.docx` Files\r\n\r\nThis package operates on OOXML strings (XML parts inside `.docx` zip archives), not raw `.docx` binaries.\r\n\r\nTypical flow:\r\n\r\n1. Extract the `.docx` zip (for example with JSZip, fflate, or similar)\r\n2. Read `word/document.xml`\r\n3. Apply reconciliation APIs to XML strings\r\n4. Merge numbering/comments artifacts when needed\r\n5. Write the archive back to a `.docx` file\r\n\r\n```js\r\nimport JSZip from 'jszip';\r\nimport {\r\n  applyRedlineToOxml,\r\n  extractReplacementNodesFromOoxml,\r\n  ensureNumberingArtifactsInZip,\r\n  mergeNumberingXmlBySchemaOrder,\r\n  validateDocxPackage\r\n} from '@ansonlai/docx-redline-js';\r\nimport { applyOperationToDocumentXml } from '@ansonlai/docx-redline-js/standalone-runner';\r\n\r\nconst zip = await JSZip.loadAsync(docxBuffer);\r\nconst documentXml = await zip.file('word/document.xml').async('string');\r\n\r\nconst opResult = await applyOperationToDocumentXml(\r\n  documentXml,\r\n  { type: 'redline', target: 'old text', modified: 'new text' },\r\n  'Editor'\r\n);\r\n\r\n// Restoring another reviewer's pending whole-paragraph deletion requires\r\n// explicit intent. The restored counterproposal becomes a separately tracked\r\n// sibling paragraph; a normal redline operation remains fail-closed.\r\nconst restoration = await applyOperationToDocumentXml(\r\n  documentXml,\r\n  {\r\n    type: 'restore',\r\n    // restore targets default to the rejected view, where deleted text exists\r\n    target: { paragraphId: '1A2B3C4D', exactText: 'Original deleted paragraph text.' },\r\n    modified: 'Restored or adjusted paragraph text.'\r\n  },\r\n  'Editor'\r\n);\r\n\r\n// A single restoration follows its deleted source paragraph. A range\r\n// restoration follows the complete deleted source block. Unchanged legacy\r\n// validation defects are retained as baseline issues; newly generated errors\r\n// fail closed before commit.\r\n// inspect/extract descriptors report their revisionView, and each fingerprint\r\n// is computed from the same view as exactText. Keep those fields together.\r\n\r\n// To insert run-level text at a location visible only in the rejected view,\r\n// provide explicit rejected-view intent and an exact anchor-relative offset.\r\nconst deletedTextInsertion = await applyOperationToDocumentXml(\r\n  documentXml,\r\n  {\r\n    type: 'insert',\r\n    target: { paragraphId: '1A2B3C4D', revisionView: 'rejected' },\r\n    anchor: { exactText: 'must pay', occurrence: 1, offset: 5 },\r\n    modified: '[clarification] ',\r\n    existingRevisions: 'slice-cross-author'\r\n  },\r\n  'Editor'\r\n);\r\n\r\n// applyOperationToDocumentXml(...) returns a full w:document payload.\r\nzip.file('word/document.xml', opResult.documentXml);\r\n\r\nconst fragmentResult = await applyRedlineToOxml(\r\n  paragraphOoxml,\r\n  'Item text',\r\n  '1. Item text',\r\n  { generateRedlines: true, author: 'Editor' }\r\n);\r\nconst normalized = extractReplacementNodesFromOoxml(fragmentResult.oxml);\r\n\r\n// If sourceType === 'package', merge extracted content/artifacts instead of\r\n// writing the raw pkg:package payload into word/document.xml.\r\nif (normalized.numberingXml) {\r\n  await ensureNumberingArtifactsInZip(zip, normalized.numberingXml, {\r\n    mergeNumberingXml: mergeNumberingXmlBySchemaOrder\r\n  });\r\n}\r\n\r\nawait validateDocxPackage(zip);\r\nconst output = await zip.generateAsync({ type: 'nodebuffer' });\r\n```\r\n\r\n## Validating Output\r\n\r\nFor the test-lane design and instructions for adding regression, synthetic\r\nWord, and real-corpus cases, see [docs/TESTING.md](./docs/TESTING.md).\r\n\r\nRun the automated package checks:\r\n\r\n```bash\r\nnpm test\r\nnpm run test:isolation\r\nnpm run check:types\r\nnpm run lint\r\nnpm run test:coverage\r\n```\r\n\r\nFor release-time fixture export:\r\n\r\n```bash\r\nnode scripts/export-validation-fixtures.mjs\r\n```\r\n\r\nOn Windows with desktop Word installed, you can smoke-test a completed `.docx`:\r\n\r\n```bash\r\nnpm run smoke:word -- path/to/file.docx\r\n```\r\n\r\nTo validate against Word as an independent oracle (Word itself accepts and\r\nrejects the generated revisions and the resulting text is compared to the\r\nexpected outcomes):\r\n\r\n```bash\r\nnpm run test:word\r\n```\r\n\r\nThis Windows-only test command generates an English legal/administrative task\r\nsuite under `tmp/word-validation/` and drives installed desktop Microsoft Word\r\nthrough COM. Its 33 cases include targeted reliability checks for literal\r\ncontent, multi-paragraph replacement, prior-revision no-op, atomic rollback,\r\nhostile revision IDs, bookmarks, internal hyperlinks, mixed formatted runs,\r\ncontent controls, table cells, structural tabs, locked complex fields,\r\ncomments, footnotes/endnotes, headers/footers, and external hyperlinks.\r\nStructure-focused cases also assert required\r\nOOXML elements before Word independently checks Accept All and Reject All. The\r\npublished library remains clean, host-independent JavaScript; Word automation\r\nexists only in development scripts.\r\n\r\nUse `npm run report:word:coverage` to print the validated task-by-structure\r\nmatrix across all 33 synthetic and 31 SuperDoc scenarios. Before a release,\r\n`npm run review:word:prepare -- --cycle=0` creates a pending human-review\r\nmanifest with changed cases, a rotating 20% synthetic sample, and legal plus\r\nadministrative corpus representatives. See the [Word visual review guide in docs/TESTING.md](./docs/TESTING.md#microsoft-word-visual-review-guide);\r\npreparation and AI preflight never count as human sign-off.\r\n\r\nA nightly GitHub Actions workflow additionally validates generated fixtures\r\nagainst the ECMA-376 transitional schemas (`xmllint`), opens them with\r\nLibreOffice, and runs an extended fuzz sweep of the accept/reject round-trip\r\ninvariant with a fresh seed. See [Release validation in docs/TESTING.md](./docs/TESTING.md#release-validation-and-independent-oracles).\r\n\r\n## Architecture & Contributing\r\n\r\n- **[ARCHITECTURE.md](./ARCHITECTURE.md)**: Detailed module layout, end-to-end reconciliation flow, and contributor fast orientation.\r\n- **[AGENTS.md](./AGENTS.md)**: Fast-start routing and operational guardrails for AI coding agents.\r\n- **[docs/AGENT_FAST_START.md](./docs/AGENT_FAST_START.md)**: Minimal ordinary-edit contract for agent integrations.\r\n- **[docs/AGENT_KNOWLEDGE_BASE.md](./docs/AGENT_KNOWLEDGE_BASE.md)**: Full agent reference for APIs, operations, CLI automation, recovery, and gotchas.\r\n- **[docs/TESTING.md](./docs/TESTING.md)**: Comprehensive testing model, test lanes, independent oracle checks, and visual review checklist.\r\n- **[CHANGELOG.md](./CHANGELOG.md)**: Version history, migration guides, and deprecation schedules.\r\n\r\n## Test Corpus Attribution\r\n\r\nReal-document reliability testing uses selected references from\r\n[docx-corpus](https://docxcorp.us/), built by\r\n[SuperDoc](https://superdoc.dev/). The dataset is licensed under the\r\n[Open Data Commons Attribution License (ODC-By) 1.0](https://opendatacommons.org/licenses/by/1-0/).\r\n\r\nOnly explicitly pinned English legal and administrative documents are eligible\r\nfor the initial corpus lane. References and provenance live in\r\n`tests/corpus/superdoc-english-legal-administrative.json`; downloaded documents\r\nare hash-verified and kept in ignored `tmp/` storage rather than committed. On\r\nWindows with desktop Word installed, run the reviewed 31-scenario/23-document lane with:\r\n\r\n```bash\r\nnpm run test:corpus:word\r\n```\r\n\r\nODC-By applies to the database; individual documents may carry additional\r\nrights, so each selected document must be reviewed before becoming a test case.\r\n","readmeFilename":"README.md"}