@beyondwork/docx-react-component 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/README.md +44 -104
  2. package/package.json +66 -15
  3. package/src/api/public-types.ts +1 -1
  4. package/src/compare/diff-engine.ts +530 -0
  5. package/src/compare/export-redlines.ts +162 -0
  6. package/src/compare/snapshot.ts +37 -0
  7. package/src/core/commands/index.ts +1 -1
  8. package/src/core/state/editor-state.ts +2 -2
  9. package/src/index.ts +45 -0
  10. package/src/legal/bookmarks.ts +196 -0
  11. package/src/legal/cross-references.ts +356 -0
  12. package/src/legal/defined-terms.ts +203 -0
  13. package/src/runtime/document-runtime.ts +3 -5
  14. package/src/runtime/table-commands.ts +4 -1
  15. package/src/runtime/table-schema.ts +17 -2
  16. package/src/runtime/virtualized-rendering.ts +258 -0
  17. package/src/ui/WordReviewEditor.tsx +256 -35
  18. package/src/ui-tailwind/editor-surface/tw-editor-surface.tsx +2 -2
  19. package/src/ui-tailwind/editor-surface/tw-table-node-view.tsx +16 -2
  20. package/.codex/config.toml +0 -5
  21. package/.corepack/v1/pnpm/10.30.3/.corepack +0 -1
  22. package/.corepack/v1/pnpm/10.30.3/LICENSE +0 -22
  23. package/.corepack/v1/pnpm/10.30.3/README.md +0 -240
  24. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp +0 -6
  25. package/.corepack/v1/pnpm/10.30.3/dist/node-gyp-bin/node-gyp.cmd +0 -5
  26. package/.corepack/v1/pnpm/10.30.3/dist/pnpm.cjs +0 -195400
  27. package/.corepack/v1/pnpm/10.30.3/dist/pnpmrc +0 -2
  28. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-arm64-2HJ4WGO6.node +0 -0
  29. package/.corepack/v1/pnpm/10.30.3/dist/reflink.darwin-x64-3G3H6IW4.node +0 -0
  30. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-arm64-msvc-Q6BARPPB.node +0 -0
  31. package/.corepack/v1/pnpm/10.30.3/dist/reflink.win32-x64-msvc-J2TZHRQI.node +0 -0
  32. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.bash +0 -31
  33. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.fish +0 -22
  34. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.ps1 +0 -193
  35. package/.corepack/v1/pnpm/10.30.3/dist/templates/completion.zsh +0 -27
  36. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
  37. package/.corepack/v1/pnpm/10.30.3/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
  38. package/.corepack/v1/pnpm/10.30.3/dist/worker.js +0 -10119
  39. package/.corepack/v1/pnpm/10.30.3/package.json +0 -192
  40. package/.cursor/mcp.json +0 -7
  41. package/.github/workflows/ci.yml +0 -35
  42. package/.mcp.json +0 -7
  43. package/.openclaw/workspace-state.json +0 -4
  44. package/.pnpmrc.json +0 -1
  45. package/.wave-launch.sh +0 -7
  46. package/.workspace-marker +0 -1
  47. package/AGENTS.md +0 -78
  48. package/CHANGELOG.md +0 -177
  49. package/DESIGN.md +0 -929
  50. package/HEARTBEAT.md +0 -7
  51. package/IDENTITY.md +0 -23
  52. package/SOUL.md +0 -36
  53. package/TOOLS.md +0 -40
  54. package/USER.md +0 -17
  55. package/docs/README.md +0 -107
  56. package/docs/agents/wave-cont-eval-role.md +0 -36
  57. package/docs/agents/wave-cont-qa-role.md +0 -52
  58. package/docs/agents/wave-deploy-verifier-role.md +0 -34
  59. package/docs/agents/wave-design-role.md +0 -47
  60. package/docs/agents/wave-documentation-role.md +0 -34
  61. package/docs/agents/wave-infra-role.md +0 -34
  62. package/docs/agents/wave-integration-role.md +0 -37
  63. package/docs/agents/wave-launcher-role.md +0 -41
  64. package/docs/agents/wave-orchestrator-role.md +0 -52
  65. package/docs/agents/wave-planner-role.md +0 -39
  66. package/docs/agents/wave-security-role.md +0 -40
  67. package/docs/architecture/docx/README.md +0 -10
  68. package/docs/architecture/future/README.md +0 -8
  69. package/docs/architecture/ooxml-upgrade-analysis.md +0 -134
  70. package/docs/architecture/platform/shared-openxml-editor-platform.md +0 -153
  71. package/docs/architecture/xlsx/canonical-workbook-model-and-commands.md +0 -187
  72. package/docs/architecture/xlsx/spreadsheet-editor-frontend-architecture.md +0 -150
  73. package/docs/comment-redline-overview.md +0 -350
  74. package/docs/concepts/context7-vs-skills.md +0 -118
  75. package/docs/concepts/operating-modes.md +0 -91
  76. package/docs/concepts/runtime-agnostic-orchestration.md +0 -111
  77. package/docs/concepts/what-is-a-wave.md +0 -217
  78. package/docs/context7/bundles.json +0 -222
  79. package/docs/context7/planner-agent/README.md +0 -28
  80. package/docs/context7/planner-agent/manifest.json +0 -83
  81. package/docs/context7/planner-agent/papers/cooperbench-why-coding-agents-cannot-be-your-teammates-yet.md +0 -3283
  82. package/docs/context7/planner-agent/papers/dova-deliberation-first-multi-agent-orchestration-for-autonomous-research-automation.md +0 -1699
  83. package/docs/context7/planner-agent/papers/dpbench-large-language-models-struggle-with-simultaneous-coordination.md +0 -2251
  84. package/docs/context7/planner-agent/papers/incremental-planning-to-control-a-blackboard-based-problem-solver.md +0 -1729
  85. package/docs/context7/planner-agent/papers/silo-bench-a-scalable-environment-for-evaluating-distributed-coordination-in-multi-agent-llm-systems.md +0 -3747
  86. package/docs/context7/planner-agent/papers/todoevolve-learning-to-architect-agent-planning-systems.md +0 -1675
  87. package/docs/context7/planner-agent/papers/verified-multi-agent-orchestration-a-plan-execute-verify-replan-framework-for-complex-query-resolution.md +0 -1173
  88. package/docs/context7/planner-agent/papers/why-do-multi-agent-llm-systems-fail.md +0 -5211
  89. package/docs/context7/planner-agent/topics/planning-and-orchestration.md +0 -24
  90. package/docs/evals/arm-templates/README.md +0 -13
  91. package/docs/evals/arm-templates/full-wave.json +0 -15
  92. package/docs/evals/arm-templates/single-agent.json +0 -15
  93. package/docs/evals/benchmark-catalog.json +0 -670
  94. package/docs/evals/cases/README.md +0 -47
  95. package/docs/evals/cases/wave-blackboard-inbox-targeting.json +0 -73
  96. package/docs/evals/cases/wave-contradiction-conflict.json +0 -104
  97. package/docs/evals/cases/wave-expert-routing-preservation.json +0 -69
  98. package/docs/evals/cases/wave-hidden-profile-private-evidence.json +0 -81
  99. package/docs/evals/cases/wave-premature-closure-guard.json +0 -71
  100. package/docs/evals/cases/wave-silo-cross-agent-state.json +0 -77
  101. package/docs/evals/cases/wave-simultaneous-lockstep.json +0 -92
  102. package/docs/evals/external-benchmarks.json +0 -85
  103. package/docs/evals/external-command-config.sample.json +0 -9
  104. package/docs/evals/external-command-config.swe-bench-pro.json +0 -8
  105. package/docs/evals/pilots/README.md +0 -47
  106. package/docs/evals/pilots/swe-bench-pro-public-full-wave-review-10.json +0 -64
  107. package/docs/evals/pilots/swe-bench-pro-public-pilot.json +0 -111
  108. package/docs/evals/wave-benchmark-program.md +0 -302
  109. package/docs/guides/planner.md +0 -220
  110. package/docs/guides/recommendations-0.8.9.md +0 -133
  111. package/docs/guides/signal-wrappers.md +0 -165
  112. package/docs/guides/terminal-surfaces.md +0 -96
  113. package/docs/image copy.png +0 -0
  114. package/docs/image.png +0 -0
  115. package/docs/images/image.png +0 -0
  116. package/docs/legal-feedback-architecture.md +0 -498
  117. package/docs/plans/component-cutover-matrix.json +0 -1072
  118. package/docs/plans/component-cutover-matrix.md +0 -307
  119. package/docs/plans/context7-wave-orchestrator.md +0 -155
  120. package/docs/plans/current-state.md +0 -198
  121. package/docs/plans/docx/README.md +0 -9
  122. package/docs/plans/examples/wave-benchmark-improvement.md +0 -108
  123. package/docs/plans/examples/wave-example-live-proof.md +0 -435
  124. package/docs/plans/master-plan.md +0 -224
  125. package/docs/plans/migration.md +0 -538
  126. package/docs/plans/operations/README.md +0 -7
  127. package/docs/plans/operations/wave-10-word-certification.md +0 -87
  128. package/docs/plans/operations/wave-8-railway-staging.md +0 -153
  129. package/docs/plans/operations/wave-9-manual-certification.md +0 -73
  130. package/docs/plans/platform/README.md +0 -9
  131. package/docs/plans/reference/legal-checklist-coverage.md +0 -258
  132. package/docs/plans/wave-orchestrator.md +0 -423
  133. package/docs/plans/waves/README.md +0 -75
  134. package/docs/plans/waves/completed/wave-0.md +0 -195
  135. package/docs/plans/waves/completed/wave-1.md +0 -379
  136. package/docs/plans/waves/completed/wave-10.md +0 -670
  137. package/docs/plans/waves/completed/wave-11.md +0 -335
  138. package/docs/plans/waves/completed/wave-12.md +0 -417
  139. package/docs/plans/waves/completed/wave-13.md +0 -316
  140. package/docs/plans/waves/completed/wave-14.md +0 -319
  141. package/docs/plans/waves/completed/wave-15.md +0 -321
  142. package/docs/plans/waves/completed/wave-16.md +0 -316
  143. package/docs/plans/waves/completed/wave-17.md +0 -331
  144. package/docs/plans/waves/completed/wave-18.md +0 -328
  145. package/docs/plans/waves/completed/wave-2.md +0 -438
  146. package/docs/plans/waves/completed/wave-3.md +0 -435
  147. package/docs/plans/waves/completed/wave-4.md +0 -430
  148. package/docs/plans/waves/completed/wave-5.md +0 -430
  149. package/docs/plans/waves/completed/wave-6.md +0 -430
  150. package/docs/plans/waves/completed/wave-7.md +0 -526
  151. package/docs/plans/waves/completed/wave-8.md +0 -596
  152. package/docs/plans/waves/completed/wave-9.md +0 -552
  153. package/docs/plans/waves/deferred/README.md +0 -14
  154. package/docs/plans/waves/deferred/encrypted-intake-contracts.md +0 -282
  155. package/docs/plans/waves/deferred/legal-feedback-wave-expansion.md +0 -308
  156. package/docs/plans/waves/deferred/wave-encrypted-intake.md +0 -451
  157. package/docs/plans/waves/design/README.md +0 -5
  158. package/docs/plans/waves/design/wave-1-a1.md +0 -309
  159. package/docs/plans/waves/reviews/README.md +0 -5
  160. package/docs/plans/waves/reviews/wave-0-cont-qa.md +0 -151
  161. package/docs/plans/waves/reviews/wave-1-cont-qa.md +0 -46
  162. package/docs/plans/waves/reviews/wave-10-accessibility-and-design.md +0 -51
  163. package/docs/plans/waves/reviews/wave-10-cont-qa.md +0 -24
  164. package/docs/plans/waves/reviews/wave-10-dashboard-proof.md +0 -46
  165. package/docs/plans/waves/reviews/wave-10-performance-signoff.md +0 -55
  166. package/docs/plans/waves/reviews/wave-10-regression-proof.md +0 -23
  167. package/docs/plans/waves/reviews/wave-10-release-audit.md +0 -31
  168. package/docs/plans/waves/reviews/wave-10-service-proof.md +0 -83
  169. package/docs/plans/waves/reviews/wave-10-word-certification.md +0 -31
  170. package/docs/plans/waves/reviews/wave-18-ai-contract-closure.md +0 -277
  171. package/docs/plans/waves/reviews/wave-18-cont-qa.md +0 -255
  172. package/docs/plans/waves/reviews/wave-18-parity-proof.md +0 -271
  173. package/docs/plans/waves/reviews/wave-19-cont-qa.md +0 -59
  174. package/docs/plans/waves/reviews/wave-2-cont-qa.md +0 -72
  175. package/docs/plans/waves/reviews/wave-20-cont-qa.md +0 -60
  176. package/docs/plans/waves/reviews/wave-25-cont-qa.md +0 -48
  177. package/docs/plans/waves/reviews/wave-28-cont-qa.md +0 -46
  178. package/docs/plans/waves/reviews/wave-29-cont-qa.md +0 -53
  179. package/docs/plans/waves/reviews/wave-3-cont-qa.md +0 -53
  180. package/docs/plans/waves/reviews/wave-3-core-proof.md +0 -77
  181. package/docs/plans/waves/reviews/wave-3-validator-proof.md +0 -73
  182. package/docs/plans/waves/reviews/wave-32-cont-qa.md +0 -43
  183. package/docs/plans/waves/reviews/wave-33-cont-qa.md +0 -526
  184. package/docs/plans/waves/reviews/wave-34-cont-qa.md +0 -100
  185. package/docs/plans/waves/reviews/wave-35-cont-qa.md +0 -145
  186. package/docs/plans/waves/reviews/wave-4-cont-qa.md +0 -47
  187. package/docs/plans/waves/reviews/wave-4-structure-proof.md +0 -69
  188. package/docs/plans/waves/reviews/wave-5-comment-proof.md +0 -158
  189. package/docs/plans/waves/reviews/wave-5-cont-qa.md +0 -68
  190. package/docs/plans/waves/reviews/wave-6-cont-qa.md +0 -416
  191. package/docs/plans/waves/reviews/wave-6-redline-proof.md +0 -130
  192. package/docs/plans/waves/reviews/wave-7-cont-qa.md +0 -82
  193. package/docs/plans/waves/reviews/wave-7-ooxml-compliance.md +0 -85
  194. package/docs/plans/waves/reviews/wave-7-preservation-proof.md +0 -119
  195. package/docs/plans/waves/reviews/wave-7-trust-ux.md +0 -87
  196. package/docs/plans/waves/reviews/wave-8-accessibility-and-design.md +0 -128
  197. package/docs/plans/waves/reviews/wave-8-cont-qa.md +0 -92
  198. package/docs/plans/waves/reviews/wave-8-live-proof.md +0 -140
  199. package/docs/plans/waves/reviews/wave-8-security.md +0 -47
  200. package/docs/plans/waves/reviews/wave-9-editor-embedding.md +0 -39
  201. package/docs/plans/waves/reviews/wave-9-fixture-runner.md +0 -56
  202. package/docs/plans/waves/reviews/wave-9-live-proof.md +0 -105
  203. package/docs/plans/waves/reviews/wave-9-usability-and-performance.md +0 -152
  204. package/docs/plans/waves/specs/README.md +0 -5
  205. package/docs/plans/waves/specs/wave-1-component-boundaries.md +0 -322
  206. package/docs/plans/waves/specs/wave-1-ooxml-contracts.md +0 -323
  207. package/docs/plans/waves/specs/wave-1-review-and-ui-contracts.md +0 -339
  208. package/docs/plans/waves/specs/wave-1-runtime-contracts.md +0 -509
  209. package/docs/plans/waves/wave-19.md +0 -341
  210. package/docs/plans/waves/wave-20.md +0 -308
  211. package/docs/plans/waves/wave-21.md +0 -289
  212. package/docs/plans/waves/wave-22.md +0 -221
  213. package/docs/plans/waves/wave-23.md +0 -295
  214. package/docs/plans/waves/wave-24.md +0 -286
  215. package/docs/plans/waves/wave-25.md +0 -313
  216. package/docs/plans/waves/wave-26.md +0 -300
  217. package/docs/plans/waves/wave-27.md +0 -299
  218. package/docs/plans/waves/wave-28.md +0 -368
  219. package/docs/plans/waves/wave-29.md +0 -303
  220. package/docs/plans/waves/wave-30.md +0 -307
  221. package/docs/plans/waves/wave-31.md +0 -231
  222. package/docs/plans/waves/wave-32.md +0 -152
  223. package/docs/plans/waves/wave-33.md +0 -147
  224. package/docs/plans/waves/wave-34.md +0 -148
  225. package/docs/plans/waves/wave-35.md +0 -141
  226. package/docs/plans/waves/wave-36.md +0 -146
  227. package/docs/plans/xlsx/README.md +0 -14
  228. package/docs/plans/xlsx/xlsx-fixture-corpus-and-certification-plan.md +0 -126
  229. package/docs/reference/cli-reference.md +0 -600
  230. package/docs/reference/coordination-and-closure.md +0 -487
  231. package/docs/reference/deep-research-report (15).md +0 -25
  232. package/docs/reference/docx/README.md +0 -10
  233. package/docs/reference/legal-checklist.md +0 -445
  234. package/docs/reference/live-proof-waves.md +0 -199
  235. package/docs/reference/ooxml-compliance.md +0 -129
  236. package/docs/reference/ooxml-feature-parity-matrix.md +0 -172
  237. package/docs/reference/platform/shared-ooxml-platform-guidance.md +0 -77
  238. package/docs/reference/prototype-agent-prompt-legal-fidelity.md +0 -155
  239. package/docs/reference/public-api.md +0 -456
  240. package/docs/reference/repository-guidance.md +0 -58
  241. package/docs/reference/runtime-config/README.md +0 -182
  242. package/docs/reference/runtime-config/claude.md +0 -110
  243. package/docs/reference/runtime-config/codex.md +0 -82
  244. package/docs/reference/runtime-config/opencode.md +0 -93
  245. package/docs/reference/sample-waves.md +0 -105
  246. package/docs/reference/skills.md +0 -237
  247. package/docs/reference/templates/AGENTS.md +0 -78
  248. package/docs/reference/templates/HEARTBEAT.md +0 -7
  249. package/docs/reference/templates/IDENTITY.md +0 -23
  250. package/docs/reference/templates/SOUL.md +0 -36
  251. package/docs/reference/templates/TOOLS.md +0 -40
  252. package/docs/reference/templates/USER.md +0 -17
  253. package/docs/reference/wave-control.md +0 -184
  254. package/docs/reference/wave-planning-lessons.md +0 -167
  255. package/docs/reference/word-review-editor-frontend-architecture.md +0 -479
  256. package/docs/reference/word-review-editor-ux-guide.md +0 -253
  257. package/docs/reference/xlsx/xlsx-ooxml-compliance.md +0 -137
  258. package/docs/research/agent-context-sources.md +0 -178
  259. package/docs/research/coordination-failure-review.md +0 -290
  260. package/docs/research/docx-react-component/Canonical Document Schema Specification for a React-based Word-compatible Editor.md +0 -2317
  261. package/docs/research/docx-react-component/Feature Compatibility Matrix for a React Word Compatible Legal Editor v1.md +0 -219
  262. package/docs/research/docx-react-component/React Component Architecture and Front-End Structure Specification for a Word-Compatible Legal Review Editor.md +0 -1112
  263. package/docs/research/docx-react-component/document_compatibility_and_testing_spec.md +0 -751
  264. package/docs/research/xlsx/raw/README.md +0 -13
  265. package/docs/roadmap.md +0 -174
  266. package/docs/superpowers/plans/2026-03-28-harness-control-bar.md +0 -677
  267. package/docs/superpowers/specs/2026-03-28-harness-control-bar-design.md +0 -274
  268. package/docs/xlsx-react/README.md +0 -38
  269. package/docs/xlsx-react/agent-llm-interaction-layer-docx-xlsx.md +0 -621
  270. package/docs/xlsx-react/canonical-workbook-model-and-commands.md +0 -948
  271. package/docs/xlsx-react/shared-openxml-editor-platform-docx-xlsx.md +0 -228
  272. package/docs/xlsx-react/spreadsheet-editor-component-architecture.md +0 -809
  273. package/docs/xlsx-react/spreadsheet-editor-frontend-architecture.md +0 -537
  274. package/docs/xlsx-react/spreadsheet-editor-ux-guide.md +0 -520
  275. package/docs/xlsx-react/xlsx-editor-research-pack.md +0 -871
  276. package/docs/xlsx-react/xlsx-fixture-corpus-and-certification-plan.md +0 -436
  277. package/docs/xlsx-react/xlsx-ooxml-compliance.md +0 -320
  278. package/examples/README.md +0 -16
  279. package/memory/MEMORY.md +0 -24
  280. package/pnpm-workspace.yaml +0 -4
  281. package/scripts/check-no-authored-js.sh +0 -13
  282. package/scripts/context7-api-check.sh +0 -65
  283. package/scripts/context7-export-env.sh +0 -42
  284. package/scripts/run-context7-mcp.sh +0 -8
  285. package/scripts/run-workspace-tests.sh +0 -15
  286. package/scripts/start-wave-10-local.sh +0 -189
  287. package/scripts/wave-agent-attach.sh +0 -47
  288. package/scripts/wave-auto-answer.sh +0 -118
  289. package/scripts/wave-dashboard-attach.sh +0 -13
  290. package/scripts/wave-launch.sh +0 -273
  291. package/scripts/wave-overnight-supervisor.sh +0 -145
  292. package/scripts/wave-status.sh +0 -379
  293. package/scripts/wave-watch.sh +0 -231
  294. package/services/README.md +0 -17
  295. package/services/openxml-validator/Dockerfile +0 -29
  296. package/services/openxml-validator/OpenXmlValidator.Api.csproj +0 -12
  297. package/services/openxml-validator/Program.cs +0 -436
  298. package/services/openxml-validator/README.md +0 -152
  299. package/services/openxml-validator/railway.json +0 -16
  300. package/services/react-word-editor/.tmp-a4/src/api/public-types.ts +0 -318
  301. package/services/react-word-editor/.tmp-a4/src/ui/WordReviewEditor.tsx +0 -1302
  302. package/services/react-word-editor/.tmp-a4/src/ui/editor-surface/editor-surface.tsx +0 -546
  303. package/services/react-word-editor/.tmp-a4/test/ui/word-review-editor.test.tsx +0 -146
  304. package/services/react-word-editor/.tmp-a4-build/src/api/public-types.js +0 -2
  305. package/services/react-word-editor/.tmp-a4-build/src/ui/WordReviewEditor.js +0 -818
  306. package/services/react-word-editor/.tmp-a4-build/src/ui/editor-surface/editor-surface.js +0 -229
  307. package/services/react-word-editor/.tmp-a4-build/test/ui/word-review-editor.test.js +0 -121
  308. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.json +0 -21
  309. package/services/react-word-editor/.tmp-wave-4-a3-tsconfig.tsbuildinfo +0 -1
  310. package/services/react-word-editor/Dockerfile +0 -26
  311. package/services/react-word-editor/README.md +0 -254
  312. package/services/react-word-editor/app/api/certification/route.ts +0 -79
  313. package/services/react-word-editor/app/api/demo-sessions/route.ts +0 -109
  314. package/services/react-word-editor/app/api/deploy-health/route.ts +0 -23
  315. package/services/react-word-editor/app/api/exports/[exportId]/route.ts +0 -34
  316. package/services/react-word-editor/app/api/exports/route.ts +0 -81
  317. package/services/react-word-editor/app/api/fixtures/[fixtureId]/run/route.ts +0 -100
  318. package/services/react-word-editor/app/api/health/route.ts +0 -70
  319. package/services/react-word-editor/app/api/runs/[runId]/route.ts +0 -36
  320. package/services/react-word-editor/app/api/scenarios/[scenarioId]/run/route.ts +0 -85
  321. package/services/react-word-editor/app/api/sessions/[sessionId]/route.ts +0 -199
  322. package/services/react-word-editor/app/api/sessions/[sessionId]/source/route.ts +0 -45
  323. package/services/react-word-editor/app/api/uploads/route.ts +0 -70
  324. package/services/react-word-editor/app/api/validate/route.ts +0 -310
  325. package/services/react-word-editor/app/certification/[runId]/page.tsx +0 -14
  326. package/services/react-word-editor/app/certification/page.tsx +0 -32
  327. package/services/react-word-editor/app/dashboard/page.tsx +0 -7
  328. package/services/react-word-editor/app/demo/page.tsx +0 -30
  329. package/services/react-word-editor/app/demo/prototype-client.tsx +0 -1080
  330. package/services/react-word-editor/app/editor/[sessionId]/page.tsx +0 -33
  331. package/services/react-word-editor/app/fixtures/page.tsx +0 -7
  332. package/services/react-word-editor/app/globals.css +0 -121
  333. package/services/react-word-editor/app/layout.tsx +0 -32
  334. package/services/react-word-editor/app/page.tsx +0 -30
  335. package/services/react-word-editor/app/runs/[runId]/page.tsx +0 -34
  336. package/services/react-word-editor/app/wave-10-word-review/page.tsx +0 -7
  337. package/services/react-word-editor/components/harness-control-bar.tsx +0 -289
  338. package/services/react-word-editor/components/harness-editor-session-client.tsx +0 -1214
  339. package/services/react-word-editor/components/harness-workspace-page.tsx +0 -715
  340. package/services/react-word-editor/components/reduced-motion-toggle.tsx +0 -79
  341. package/services/react-word-editor/components/workspace-certification-panel.tsx +0 -307
  342. package/services/react-word-editor/lib/certification-bundle.ts +0 -796
  343. package/services/react-word-editor/lib/certification-store.ts +0 -661
  344. package/services/react-word-editor/lib/demo-fixtures.test.mjs +0 -195
  345. package/services/react-word-editor/lib/demo-fixtures.ts +0 -1519
  346. package/services/react-word-editor/lib/editor-session-summary.test.mjs +0 -68
  347. package/services/react-word-editor/lib/editor-session-summary.ts +0 -14
  348. package/services/react-word-editor/lib/editor-session.ts +0 -228
  349. package/services/react-word-editor/lib/exports-route.test.mjs +0 -32
  350. package/services/react-word-editor/lib/harness-client.ts +0 -347
  351. package/services/react-word-editor/lib/harness-config.json +0 -30
  352. package/services/react-word-editor/lib/harness-config.test.mjs +0 -31
  353. package/services/react-word-editor/lib/harness-config.ts +0 -21
  354. package/services/react-word-editor/lib/harness-editor-datastore.test.mjs +0 -220
  355. package/services/react-word-editor/lib/harness-editor-datastore.ts +0 -161
  356. package/services/react-word-editor/lib/private-mode.test.mjs +0 -42
  357. package/services/react-word-editor/lib/private-mode.ts +0 -61
  358. package/services/react-word-editor/lib/regression-report.test.mjs +0 -352
  359. package/services/react-word-editor/lib/regression-report.ts +0 -896
  360. package/services/react-word-editor/lib/run-artifacts.ts +0 -934
  361. package/services/react-word-editor/lib/run-history.ts +0 -755
  362. package/services/react-word-editor/lib/scenario-artifacts.test.mjs +0 -41
  363. package/services/react-word-editor/lib/scenario-artifacts.ts +0 -44
  364. package/services/react-word-editor/lib/storage.ts +0 -953
  365. package/services/react-word-editor/lib/validator-client.test.mjs +0 -54
  366. package/services/react-word-editor/lib/validator-client.ts +0 -95
  367. package/services/react-word-editor/lib/workspace-navigation.ts +0 -79
  368. package/services/react-word-editor/middleware.ts +0 -35
  369. package/services/react-word-editor/next-env.d.ts +0 -6
  370. package/services/react-word-editor/next.config.mjs +0 -15
  371. package/services/react-word-editor/package.json +0 -38
  372. package/services/react-word-editor/postcss.config.mjs +0 -8
  373. package/services/react-word-editor/railway.json +0 -21
  374. package/services/react-word-editor/scripts/wave-10-certification.mjs +0 -101
  375. package/services/react-word-editor/scripts/wave-9-live-usability-pilot.mjs +0 -911
  376. package/services/react-word-editor/tsconfig.json +0 -39
  377. package/services/react-word-editor/tsconfig.tsbuildinfo +0 -1
  378. package/skills/README.md +0 -48
  379. package/skills/domain-docx-compatibility/SKILL.md +0 -44
  380. package/skills/domain-docx-compatibility/skill.json +0 -19
  381. package/skills/domain-editor-architecture/SKILL.md +0 -49
  382. package/skills/domain-editor-architecture/skill.json +0 -19
  383. package/skills/domain-legal-review/SKILL.md +0 -39
  384. package/skills/domain-legal-review/skill.json +0 -19
  385. package/skills/provider-aws/SKILL.md +0 -117
  386. package/skills/provider-aws/adapters/claude.md +0 -1
  387. package/skills/provider-aws/adapters/codex.md +0 -1
  388. package/skills/provider-aws/references/service-verification.md +0 -39
  389. package/skills/provider-aws/skill.json +0 -54
  390. package/skills/provider-custom-deploy/SKILL.md +0 -64
  391. package/skills/provider-custom-deploy/skill.json +0 -50
  392. package/skills/provider-docker-compose/SKILL.md +0 -96
  393. package/skills/provider-docker-compose/adapters/local.md +0 -1
  394. package/skills/provider-docker-compose/skill.json +0 -53
  395. package/skills/provider-github-release/SKILL.md +0 -121
  396. package/skills/provider-github-release/adapters/claude.md +0 -1
  397. package/skills/provider-github-release/adapters/codex.md +0 -1
  398. package/skills/provider-github-release/skill.json +0 -55
  399. package/skills/provider-kubernetes/SKILL.md +0 -143
  400. package/skills/provider-kubernetes/adapters/claude.md +0 -1
  401. package/skills/provider-kubernetes/adapters/codex.md +0 -1
  402. package/skills/provider-kubernetes/references/kubectl-patterns.md +0 -58
  403. package/skills/provider-kubernetes/skill.json +0 -52
  404. package/skills/provider-railway/SKILL.md +0 -123
  405. package/skills/provider-railway/adapters/claude.md +0 -1
  406. package/skills/provider-railway/adapters/codex.md +0 -1
  407. package/skills/provider-railway/adapters/local.md +0 -1
  408. package/skills/provider-railway/adapters/opencode.md +0 -1
  409. package/skills/provider-railway/references/verification-commands.md +0 -39
  410. package/skills/provider-railway/skill.json +0 -71
  411. package/skills/provider-ssh-manual/SKILL.md +0 -97
  412. package/skills/provider-ssh-manual/skill.json +0 -54
  413. package/skills/repo-coding-rules/SKILL.md +0 -55
  414. package/skills/repo-coding-rules/skill.json +0 -34
  415. package/skills/role-cont-eval/SKILL.md +0 -91
  416. package/skills/role-cont-eval/adapters/codex.md +0 -1
  417. package/skills/role-cont-eval/skill.json +0 -36
  418. package/skills/role-cont-qa/SKILL.md +0 -100
  419. package/skills/role-cont-qa/adapters/claude.md +0 -1
  420. package/skills/role-cont-qa/skill.json +0 -36
  421. package/skills/role-deploy/SKILL.md +0 -97
  422. package/skills/role-deploy/skill.json +0 -36
  423. package/skills/role-design/SKILL.md +0 -50
  424. package/skills/role-design/skill.json +0 -36
  425. package/skills/role-documentation/SKILL.md +0 -76
  426. package/skills/role-documentation/skill.json +0 -36
  427. package/skills/role-implementation/SKILL.md +0 -45
  428. package/skills/role-implementation/skill.json +0 -36
  429. package/skills/role-infra/SKILL.md +0 -81
  430. package/skills/role-infra/skill.json +0 -36
  431. package/skills/role-integration/SKILL.md +0 -91
  432. package/skills/role-integration/skill.json +0 -36
  433. package/skills/role-planner/SKILL.md +0 -39
  434. package/skills/role-planner/skill.json +0 -21
  435. package/skills/role-research/SKILL.md +0 -65
  436. package/skills/role-research/skill.json +0 -36
  437. package/skills/role-security/SKILL.md +0 -60
  438. package/skills/role-security/skill.json +0 -36
  439. package/skills/runtime-claude/SKILL.md +0 -66
  440. package/skills/runtime-claude/skill.json +0 -36
  441. package/skills/runtime-codex/SKILL.md +0 -58
  442. package/skills/runtime-codex/skill.json +0 -36
  443. package/skills/runtime-local/SKILL.md +0 -46
  444. package/skills/runtime-local/skill.json +0 -36
  445. package/skills/runtime-opencode/SKILL.md +0 -58
  446. package/skills/runtime-opencode/skill.json +0 -36
  447. package/skills/signal-hygiene/SKILL.md +0 -51
  448. package/skills/signal-hygiene/skill.json +0 -20
  449. package/skills/tui-design/SKILL.md +0 -77
  450. package/skills/tui-design/references/tui-design.md +0 -259
  451. package/skills/tui-design/skill.json +0 -36
  452. package/skills/wave-core/SKILL.md +0 -141
  453. package/skills/wave-core/references/marker-syntax.md +0 -70
  454. package/skills/wave-core/skill.json +0 -35
  455. package/test/README.md +0 -16
  456. package/test/core/formatting-commands.test.ts +0 -285
  457. package/test/core/image-commands.test.ts +0 -298
  458. package/test/core/mapping.test.ts +0 -186
  459. package/test/core/text-commands.test.ts +0 -176
  460. package/test/fixtures/docx/F01-basic-contract.docx +0 -0
  461. package/test/fixtures/docx/F01-basic-contract.md +0 -33
  462. package/test/fixtures/docx/F02-headings-styles.docx +0 -0
  463. package/test/fixtures/docx/F02-headings-styles.md +0 -33
  464. package/test/fixtures/docx/F03-legal-outline-numbering.docx +0 -0
  465. package/test/fixtures/docx/F03-legal-outline-numbering.md +0 -34
  466. package/test/fixtures/docx/F04-restart-numbering-schedules.docx +0 -0
  467. package/test/fixtures/docx/F04-restart-numbering-schedules.md +0 -33
  468. package/test/fixtures/docx/F05-table-heavy-agreement.docx +0 -0
  469. package/test/fixtures/docx/F05-table-heavy-agreement.md +0 -34
  470. package/test/fixtures/docx/F06-merged-cells-signature-table.docx +0 -0
  471. package/test/fixtures/docx/F06-merged-cells-signature-table.md +0 -34
  472. package/test/fixtures/docx/F07-inline-images-exhibit.docx +0 -0
  473. package/test/fixtures/docx/F07-inline-images-exhibit.md +0 -34
  474. package/test/fixtures/docx/F08-hyperlinks.docx +0 -0
  475. package/test/fixtures/docx/F08-hyperlinks.md +0 -33
  476. package/test/fixtures/docx/F09-comments-single-paragraph.docx +0 -0
  477. package/test/fixtures/docx/F09-comments-single-paragraph.md +0 -33
  478. package/test/fixtures/docx/F10-threaded-comments-resolve.docx +0 -0
  479. package/test/fixtures/docx/F10-threaded-comments-resolve.md +0 -33
  480. package/test/fixtures/docx/F11-redlines-basic.docx +0 -0
  481. package/test/fixtures/docx/F11-redlines-basic.md +0 -33
  482. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.docx +0 -0
  483. package/test/fixtures/docx/F12-redlines-paragraph-joins-splits.md +0 -33
  484. package/test/fixtures/docx/F13-comments-on-deleted-text.docx +0 -0
  485. package/test/fixtures/docx/F13-comments-on-deleted-text.md +0 -33
  486. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.docx +0 -0
  487. package/test/fixtures/docx/F14-revisions-in-tables-and-lists.md +0 -33
  488. package/test/fixtures/docx/F15-sections-headers-footers.docx +0 -0
  489. package/test/fixtures/docx/F15-sections-headers-footers.md +0 -33
  490. package/test/fixtures/docx/F16-footnotes-endnotes.docx +0 -0
  491. package/test/fixtures/docx/F16-footnotes-endnotes.md +0 -33
  492. package/test/fixtures/docx/F17-fields-and-toc.docx +0 -0
  493. package/test/fixtures/docx/F17-fields-and-toc.md +0 -33
  494. package/test/fixtures/docx/F18-content-controls-template.docx +0 -0
  495. package/test/fixtures/docx/F18-content-controls-template.md +0 -33
  496. package/test/fixtures/docx/F19-custom-xml-doc-assembly.docx +0 -0
  497. package/test/fixtures/docx/F19-custom-xml-doc-assembly.md +0 -35
  498. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.docx +0 -0
  499. package/test/fixtures/docx/F20-unknown-ooxml-and-alternatecontent.md +0 -33
  500. package/test/fixtures/docx/F21-malformed-broken-docx.docx +0 -0
  501. package/test/fixtures/docx/F21-malformed-broken-docx.md +0 -33
  502. package/test/fixtures/docx/README.md +0 -74
  503. package/test/fixtures/docx/certification-manifest.json +0 -104
  504. package/test/fixtures/docx/fixtures.manifest.json +0 -196
  505. package/test/fixtures/encrypted-docx/README.md +0 -27
  506. package/test/fixtures/encrypted-docx/certification-manifest.json +0 -9
  507. package/test/fixtures/encrypted-docx/fixtures.manifest.json +0 -47
  508. package/test/fixtures/scenarios/docx/README.md +0 -25
  509. package/test/fixtures/scenarios/docx/S01-sow-template.docx +0 -0
  510. package/test/fixtures/scenarios/docx/S01-sow-template.md +0 -30
  511. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.docx +0 -0
  512. package/test/fixtures/scenarios/docx/S02-bw-partner-user-licence-agreement-redlines.md +0 -32
  513. package/test/fixtures/scenarios/docx/scenario-manifest.json +0 -53
  514. package/test/formats/xlsx/io/xlsx-import.test.ts +0 -766
  515. package/test/formats/xlsx/model/workbook.test.ts +0 -669
  516. package/test/helpers/dom-setup.ts +0 -124
  517. package/test/io/comment-roundtrip.test.ts +0 -272
  518. package/test/io/complex-content-roundtrip.test.ts +0 -632
  519. package/test/io/docx-compatibility-regression.test.ts +0 -199
  520. package/test/io/docx-session.test.ts +0 -1495
  521. package/test/io/footnotes-roundtrip.test.ts +0 -318
  522. package/test/io/headers-footers-roundtrip.test.ts +0 -547
  523. package/test/io/numbering-roundtrip.test.ts +0 -234
  524. package/test/io/package-reader.test.ts +0 -199
  525. package/test/io/paragraph-properties-roundtrip.test.ts +0 -129
  526. package/test/io/preserved-package-roundtrip.test.ts +0 -365
  527. package/test/io/property-completeness.test.ts +0 -292
  528. package/test/io/revision-roundtrip.test.ts +0 -347
  529. package/test/io/structural-blocks.test.ts +0 -202
  530. package/test/io/table-media-roundtrip.test.ts +0 -448
  531. package/test/io/table-properties-roundtrip.test.ts +0 -569
  532. package/test/io/table-roundtrip.test.ts +0 -302
  533. package/test/io/text-roundtrip.test.ts +0 -344
  534. package/test/model/canonical-document.test.ts +0 -285
  535. package/test/preservation/opaque-fragment-store.test.ts +0 -121
  536. package/test/preservation/package-preservation.test.ts +0 -395
  537. package/test/preservation/store.test.ts +0 -84
  538. package/test/review/comment-remapping.test.ts +0 -220
  539. package/test/review/comment-store.test.ts +0 -180
  540. package/test/review/move-revisions.test.ts +0 -143
  541. package/test/review/property-change-revisions.test.ts +0 -225
  542. package/test/review/revision-actions.test.ts +0 -330
  543. package/test/review/revision-store.test.ts +0 -193
  544. package/test/runtime/session-capabilities.test.ts +0 -260
  545. package/test/runtime/table-commands.test.ts +0 -356
  546. package/test/runtime/table-schema.test.ts +0 -221
  547. package/test/runtime/tracked-changes-toggle.test.ts +0 -107
  548. package/test/ui/comment-review-surface.test.tsx +0 -114
  549. package/test/ui/reduced-motion-toggle.test.tsx +0 -137
  550. package/test/ui/word-review-editor.imported-scenarios.test.tsx +0 -169
  551. package/test/ui/word-review-editor.interaction.test.tsx +0 -1198
  552. package/test/ui/word-review-editor.test.js +0 -188
  553. package/test/ui/word-review-editor.test.tsx +0 -280
  554. package/test/ui-tailwind/search-plugin.test.ts +0 -286
  555. package/test/validation/compatibility-engine.test.ts +0 -336
  556. package/test/validation/compatibility-report.test.ts +0 -189
  557. package/test/validation/low-priority-word-surfaces.test.ts +0 -282
  558. package/test/validation/malformed-doc.test.ts +0 -113
  559. package/test-results/.last-run.json +0 -4
  560. package/wave.config.json +0 -406
@@ -1,621 +0,0 @@
1
- # Agent / LLM Interaction Layer for DOCX and XLSX Editors
2
-
3
- ## Interpretation of the problem
4
-
5
- You’re building a **shared agent/LLM interaction layer** that can sit on top of two editors: a shipped React-based **Word review editor** and a planned React-based **Excel-compatible spreadsheet editor**. The goal is not “chat next to a document,” but a **deterministic, auditable, compatibility-honest** system that can: (a) answer questions, (b) propose edits, and (c) execute edits *only* via typed runtime commands—while preserving OpenXML fidelity and never silently dropping unsupported content.
6
-
7
- The key constraint is architectural: **React is a projection layer**. Canonical truth lives in the runtime; all editor mutations must flow through **commands → transactions → commit**, and rendering must consume snapshots from an external store subscription boundary.
8
-
9
- The key product constraint is fidelity: treat `.docx` and `.xlsx` as **OPC packages**—with parts, relationships, content types, and markup-compatibility rules—not as a handful of XML files. This implies that “unsupported but preservable” content must survive import → runtime edit → export, and exported artifacts must reopen in modern host apps without repair prompts.
10
-
11
- So the interaction layer must provide a shared mental model across DOCX (linear text + anchors + review artifacts) and XLSX (grid + formulas + ranges + sheet/workbook objects), **without collapsing both into the least-common-denominator**. It must also explicitly surface capability boundaries using the existing taxonomy (**supported-roundtrip / preserve-only / unsupported-fatal**) and the preserve/lock/warn/block/fail response model.
12
-
13
- ## Research plan
14
-
15
- The research focus is “implementation-ready,” so the plan prioritizes **existing runtime contracts** and **primary packaging semantics** before UI or prompting tactics.
16
-
17
- First, I grounded the shared agent design in the shipped Word editor’s frozen v1 contract: the runtime boundary, snapshot boundary, command execution model, warnings/errors/compatibility envelopes, and the UX/architecture constraints that govern how truth flows through the system.
18
-
19
- Second, I reviewed packaging and markup-compatibility fundamentals that matter directly for “preserve-only must not be dropped” and “host reopening is the final standard”: OPC relationships, conformance constraints on parts/relationships, plus Markup Compatibility and Extensibility (MCE) constructs like `mc:Ignorable` and `mc:AlternateContent` that affect how unknown namespaces and alternates must be handled.
20
-
21
- Third, I targeted strong implementation references for spreadsheet abstractions and review-like constructs (ranges, tables, named items, comments, pivot tables), using official **Office JavaScript API** documentation as a proxy for what “feels native” and what abstractions users expect when they say “this range,” “this table,” or “the comment on D12.”
22
-
23
- Finally, I derived a shared tool/command contract for agent ↔ runtime integration that (a) never allows direct mutation, (b) supports simulation/proposal/approval, (c) stays honest under preserve-only and blocked states, and (d) is testable with a fixture matrix and release gates consistent with the existing DOCX repo’s compliance stance (SDK validation is necessary but not sufficient; host behavior is authoritative).
24
-
25
- ## Findings
26
-
27
- The findings below separate (a) what your platform already commits to for DOCX and (b) what packaging/Excel-like object models imply for a shared agent layer.
28
-
29
- Your shipped DOCX editor runtime already defines the right shape for an agent layer
30
-
31
- The Word editor’s frozen contract is already architected like a “tool-execution runtime,” which is exactly what an agent layer needs.
32
-
33
- * **Single mutation authority:** one mounted editor session owns one runtime instance, and `DocumentRuntime` is the only mutation authority.
34
- * **External-store snapshots:** React renders from `RuntimeRenderSnapshot` via an external-store boundary; snapshots are projections and not persistence artifacts.
35
- * **Deterministic mutation pipeline:** “every mutating entry point routes through command → transaction → mapping → remap → commit → notify,” and subscriptions fire only after atomic commits.
36
- * **Typed command surface:** edits are expressed through a discriminated union `EditorCommand`, executed into an `EditorTransaction` with mapping and effects.
37
- * **Stable address model (anchors):** selections are integer positions mapped through edits; detached anchors remain inspectable instead of disappearing.
38
- * **Explicit trust surfaces:** warnings and errors are structured envelopes; compatibility is a separate report with the fixed feature taxonomy `supported-roundtrip / preserve-only / unsupported-fatal`, plus an explicit `blockExport` gate.
39
- * **Preserve/lock/warn/block/fail is a product stance, not a slogan:** unsupported but preservable content must be preserved; preserve-only regions are locked; warnings/blocks are explicit; malformed packages can fail-closed into diagnostics.
40
-
41
- This matters because an agent layer can treat the runtime as the executable substrate: “propose typed commands, simulate them, then commit them,” without ever touching DOM or OOXML directly.
42
-
43
- OPC and MCE are not optional if “preserve-only survives” is real
44
-
45
- Your internal compliance doc explicitly frames `.docx` as an OPC package and requires export to preserve ZIP integrity, required parts/relationships, content types, semantics, and preservable unsupported content. This aligns with foundational OPC norms: packages are sets of parts linked by relationships, intended to make links discoverable independent of content markup.
46
-
47
- Two packaging points are directly relevant to the agent layer’s “don’t silently break fidelity” contract:
48
-
49
- 1) **Relationships are first-class, not incidental.** OPC relationships exist precisely to allow discovery and linking “without looking at the part contents,” and to attach relationships without modifying signed/encrypted parts.
50
- 2) **Conformance constraints exist at the package layer.** OPC conformance rules include requirements on part names, relationship parts, relationship IDs, and targets. Violating these is how you end up with repairs or unreadable files.
51
-
52
- On markup compatibility: MCE defines how producers mark namespaces as ignorable and how consumers should behave in the presence of unknown namespaces. The `@Ignorable` attribute explicitly governs when unknown namespaces can be ignored without error. The `mc:AlternateContent` model is an explicit mechanism for forward compatibility—consumers choose the first matching `Choice` based on required namespaces, otherwise fallback.
53
-
54
- Why this matters for the agent layer: the agent must not propose edits that imply rewriting content across preserve-only boundaries, because those boundaries often exist specifically due to unknown namespaces/parts where safe semantics are not guaranteed. Your DOCX compliance stance makes this explicit: if you can’t support import → runtime edit → export → reopen without loss, the correct classification is preserve-only or unsupported-fatal, not “supported but flaky.”
55
-
56
- Spreadsheet interactions need native spreadsheet abstractions, not “text edits in cells”
57
-
58
- Microsoft’s official Excel JavaScript API docs are a strong reference for mental-model alignment: there is no “Cell” object; the core abstraction is `Range`, which can represent a single cell or a contiguous grid. This matters for agent design: “selection-aware” in spreadsheets is almost always “range-aware,” including things like “used range,” “table range,” “spill ranges,” etc.
59
-
60
- Key spreadsheet-level abstractions that show up repeatedly in official APIs and should be first-class in the agent model:
61
-
62
- * **Range**: values vs text vs formulas are different surfaces (`values`, `text`, `formulas`), and users talk about them distinctly.
63
- * **Tables**: tables have stable identity and provide distinct ranges (header, body, totals) and operations like convert-to-range.
64
- * **Named items (names / named ranges / named formulas)**: names are first-class objects at workbook/sheet scope and can point at a range or value; users refer to names naturally (“update the range called ExpensesHeader”).
65
- * **Comments as threads tied to a cell**: Excel comments are threaded discussions tied to an individual cell and tracked at workbook level.
66
- * **PivotTables exist as objects with refresh semantics**: even if preserve-only in v1, the agent model should “see” them as objects rather than opaque XML.
67
-
68
- So the shared agent model must include spreadsheet-native object handles (workbook/sheet/range/table/name/comment-thread), and it must treat formulas as a distinct semantic surface—not just strings in cells—because of cross-cell dependencies and calculation behavior.
69
-
70
- ## Recommended design / decisions
71
-
72
- This section is the concrete spec. It answers the ten required questions explicitly and calls out tradeoffs and failure modes.
73
-
74
- Shared mental model for agent interaction across both editors
75
-
76
- The shared mental model should be:
77
-
78
- **“The runtime is the only editor. The agent is a deterministic command author and explainer, operating on stable editor abstractions, producing explicit outcomes.”**
79
-
80
- More concretely:
81
-
82
- 1) The user speaks in natural language (“rewrite this paragraph,” “make this table consistent,” “explain this formula”).
83
- 2) The agent layer translates that into one of three intents: **Explain**, **Propose**, or **Execute**.
84
- 3) Any mutation intent becomes **typed commands** submitted to a runtime **transaction boundary**, never direct state mutation.
85
- 4) The system always returns an explicit action state: **explanation-only**, **simulated**, **proposed**, **applied**, plus **export-risk classification** derived from runtime compatibility/warnings.
86
- 5) Preserve-only and unsupported-fatal content are never rewritten silently; attempts to cross those boundaries produce explicit **lock/warn/block/fail** behavior.
87
-
88
- This mirrors the Word editor contract’s central principles (runtime authority, snapshot rendering, command-backed edits) while leaving room for spreadsheet-native objects.
89
-
90
- Editor abstractions the agent should target
91
-
92
- The agent should target a small set of **shared primitives** plus editor-specific specializations.
93
-
94
- Shared primitives (apply to both DOCX and XLSX):
95
-
96
- * **DocumentHandle**: `{ editorKind, documentId, sessionId, revisionToken }` (revisionToken is already a first-class runtime concept).
97
- * **SelectionHandle**: a discriminated union so “selection-aware” stays explicit:
98
- * DOCX: `{ kind: "docx-range", anchor: number, head: number, activeRange: EditorAnchorProjection }`
99
- * XLSX: `{ kind: "xlsx-range", sheetId, a1: "Sheet!A1:D10", areas?: [...] }` (support disjoint selections as `areas`, analogous to Excel’s RangeAreas).
100
- * **CompatibilitySurface**: `{ report: CompatibilityReport, warnings: EditorWarning[], fatalError?: EditorError }` using the existing taxonomy and export gate.
101
-
102
- Editor-specific abstractions (must be first-class, not “strings with tags”):
103
-
104
- For DOCX:
105
-
106
- * **StoryRange** / **AnchorProjection** (already defined).
107
- * **CommentThread** (Word comment threads) and **TrackedChangeEntry** (review actions accept/reject).
108
- * **OpaqueFragmentHandle** for preserve-only inline/block placeholders (already represented in surface segments/blocks as `opaque_inline` / `opaque_block`).
109
-
110
- For XLSX:
111
-
112
- * **Workbook**, **Worksheet**, **Range**, **Table**, **NamedItem**, **CommentThread**, **PivotTable** as addressable objects.
113
- * **FormulaRegion**: a derived abstraction grouping a range of formula cells that share structure (same R1C1 pattern, shared dependencies, spill parent, etc.). The Excel Range docs explicitly distinguish multiple formula representations (`formulas`, `formulasR1C1`, `hasSpill`).
114
- * **CellDataSurface**: values/text/formulas are distinct. The “set/get values vs formulas” documentation makes that explicit (values show computed values even when formulas exist; formulas show formula strings).
115
-
116
- Action classes and their execution constraints
117
-
118
- Instead of a vague “allowed/not allowed,” define action classes as **policy-driven** based on: (a) mutation vs read-only, (b) scope size, (c) crossing preserve-only boundaries, (d) export risk, and (e) whether the runtime can deterministically validate.
119
-
120
- The interaction layer should implement four execution classes:
121
-
122
- **Synchronous (auto-execute, no approval)**
123
- Read-only transforms and queries that do not mutate runtime state.
124
- * Examples: explain selection, summarize doc/sheet, list named ranges, enumerate comments, explain formula logic, locate dependencies, generate a checklist.
125
- * Failure mode: context insufficiency → request more structured context rather than guessing.
126
-
127
- **Proposal-only (must simulate; user must accept to apply)**
128
- Deterministic, bounded edits where simulation can produce a clear diff and compatibility impact.
129
- * DOCX: rewrite selected text, insert comment, propose tracked change acceptance/rejection suggestions (but don’t auto-accept), style normalization within supported features.
130
- * XLSX: set cell values/formulas in a bounded range, fill-down formulas, normalize number formats, create/update named items, add cell comments.
131
- * Failure mode: if simulation produces preserve-only boundary crossings or export-risk warnings, the proposal remains but is labeled export-risky or blocked depending on policy.
132
-
133
- **Approval-required (proposal + explicit “risk acknowledgement” even if supported)**
134
- Edits that are supported in principle but have known high-impact or non-local consequences.
135
- * Examples:
136
- * DOCX: accept-all / reject-all changes, large-scale transformations, anything touching many anchors.
137
- * XLSX: bulk refactors across sheets, mass formula rewrites, changes that modify table structure, pivot refresh/changes (even if later supported), operations that materially change calculation outcomes.
138
- * Failure mode: user must explicitly approve after seeing a diff summary + “what changed” + “what might break.”
139
-
140
- **Blocked in preserve-only or fatal states**
141
- Any action requiring semantic rewriting inside preserve-only regions or any session with unsupported-fatal states that prevent trustworthy preservation.
142
- * DOCX: opaque fragments are locked; attempts to rewrite inside must block or require a destructive “convert/downgrade” flow with explicit warning.
143
- * XLSX: treat preserve-only package parts (unknown extensions, pivot caches, macros, external connections, charts you can’t roundtrip, etc.) as locked boundaries; edits that require rewriting them are blocked. This is the direct spreadsheet analogue of the DOCX stance.
144
- * Unsupported-fatal: fail closed into read-only diagnostics (still allow explanation, but no mutation and usually no export).
145
-
146
- Common tool/command contract between the LLM layer and the editor runtime
147
-
148
- The contract must be explicit, typed, and deterministic. You already have strong precedent: `EditorCommand` is a discriminated union, executed into transactions, then committed.
149
-
150
- Build a *shared* agent contract in three layers:
151
-
152
- **Layer A: Agent intents (LLM-level)**
153
- High-level actions the model returns (or calls) that always map to deterministic runtime commands.
154
-
155
- **Layer B: Tool calls (agent orchestrator-level)**
156
- Fetching context slices, running simulations, applying transactions, creating audit artifacts.
157
-
158
- **Layer C: Runtime commands (editor-level)**
159
- The real mutation boundary: DOCX `EditorCommand` and XLSX `SpreadsheetCommand` (to be designed similarly).
160
-
161
- A minimal shared TypeScript-like contract (conceptual, repo-ready) looks like:
162
-
163
- ```ts
164
- // Shared: always included in every agent -> runtime request
165
- type AgentEnvelope = {
166
- agentSessionId: string;
167
- editorKind: "docx" | "xlsx";
168
- documentId: string;
169
- baseRevisionToken: string; // optimistic concurrency check
170
- mode: "explain" | "propose" | "execute";
171
- user: { userId: string; displayName: string };
172
- trace: { requestId: string; timestamp: string };
173
- };
174
-
175
- // Shared selection union
176
- type AgentSelection =
177
- | { kind: "docx"; anchor: number; head: number }
178
- | { kind: "xlsx"; sheetId: string; a1: string; areas?: Array<{ sheetId: string; a1: string }> };
179
-
180
- // Shared response state model (explicit trust surface)
181
- type AgentActionState =
182
- | "explanation_only"
183
- | "simulated"
184
- | "proposed_not_applied"
185
- | "applied"
186
- | "blocked"
187
- | "failed";
188
-
189
- // Shared compatibility posture (imports existing taxonomy)
190
- type AgentExportPosture =
191
- | { level: "safe"; blockExport: false }
192
- | { level: "risky"; blockExport: false; reasons: string[] } // warnings, preserve-only touched
193
- | { level: "blocked"; blockExport: true; reasons: string[] }; // unsupported-fatal or fatal errors
194
-
195
- // Shared "tool result" envelope
196
- type AgentToolResult<T> = {
197
- state: AgentActionState;
198
- exportPosture: AgentExportPosture;
199
- compatibility: CompatibilityReport; // existing shape
200
- warnings: EditorWarning[];
201
- error?: EditorError;
202
- payload?: T;
203
- };
204
- ```
205
-
206
- The key decision is that the LLM does **not** emit arbitrary patches; it emits either:
207
-
208
- * a request for more context slices, or
209
- * a set of **typed commands** (or a higher-level “action” that deterministically compiles to commands inside the runtime).
210
-
211
- This matches your repo’s non-negotiable: “All edits must flow through commands and transactions.”
212
-
213
- How editors should expose structured context without leaking raw OOXML into prompts
214
-
215
- The agent should never receive “the OOXML package.” Instead, create a **context slicing API** that serves *semantic projections* with strict size limits and explicit redaction.
216
-
217
- Design principle: **Context is pull-based, scoped, and typed.** The model gets an initial “index card” summary, then can request specific slices.
218
-
219
- Baseline context (always available):
220
-
221
- * **Runtime snapshot summary:** doc/workbook id, revision token, ready/dirty/readOnly, selection.
222
- * **Compatibility/report summary:** `blockExport`, preserve-only count, unsupported-fatal count, top warnings/errors.
223
- * **Selection neighborhood:**
224
- * DOCX: selected plain text + a small surrounding window; plus surface segments and any `opaque_*` tokens inside the selection.
225
- * XLSX: a rectangular grid sample with values/text/formulas for the selection (`values`, `text`, `formulas` are distinct surfaces).
226
-
227
- Optional context slices (agent can request explicitly):
228
-
229
- * **DOCX slices:** comments in selection, tracked changes in selection, document stats, headings outline, hyperlink list.
230
- * **XLSX slices:** named items, table definition metadata, table header/body ranges, comment threads for cells, pivot table metadata (even if preserve-only), dependency summary for a formula region.
231
- * **OOXML boundary descriptions (not raw XML):** a “preservation map” that describes which parts/regions are opaque and why (featureKey + message + affected anchor or range), matching the existing compatibility entry pattern.
232
-
233
- Critical security and product honesty point: for any slice that the agent did not fetch, the UI must not imply the agent “reviewed everything.” The trust surface should show “what the agent looked at” as a first-class artifact (see below).
234
-
235
- Handling “change this” when the target crosses supported and preserve-only boundaries
236
-
237
- This is the fidelity trap where products get dishonest. Implement an explicit boundary algorithm:
238
-
239
- 1) **Resolve target surface**: map “this” to a concrete selection handle (DOCX anchor range or XLSX range).
240
- 2) **Intersect with compatibility/preservation map**: identify whether the target intersects any preserve-only or unsupported-fatal feature entries or locked opaque fragments/cells.
241
- 3) **Compute required semantic operations**: does the requested change require rewriting preserve-only content or only supported surfaces around it? This must be conservative: if uncertain, treat as preserve-only.
242
- 4) **Return explicit response model** (never silent):
243
- * **preserve**: keep content untouched but proceed around it
244
- * **lock**: prevent direct edits inside
245
- * **warn**: require user acknowledgement for destructive boundary crossing
246
- * **block**: refuse operation if it would require unsupported semantic rewrite
247
- * **fail**: session-level failure for malformed/unpreservable states
248
-
249
- In agent UX terms, if the user says “change this” over a mixed region, the default behavior should be:
250
-
251
- * produce an explanation of what is editable vs locked,
252
- * propose a safe alternative that edits supported content only, and
253
- * if the user explicitly asks for destructive conversion, gate it behind a “warn + explicit approval + export-risky labeling” flow.
254
-
255
- What good UX looks like across both editors
256
-
257
- Your Word editor UX guide and frontend architecture already codify strong patterns: the editor surface is central; review rails are distinct; health surfaces explain preserve-only and fatal states; “trust” is not hidden.
258
-
259
- Build the agent UX as a **four-pane mental structure** that works in both editors:
260
-
261
- 1) **Conversation pane** (left rail or right rail section): user prompt + agent response + “what I used” citations (context slices).
262
- 2) **Explanation pane** (inline in conversation): reasoning and interpretation of the selection/range and constraints.
263
- 3) **Proposed changes pane** (diff view): deterministic, command-backed change list + preview.
264
- 4) **Trust/health pane** (always visible when needed): compatibility report deltas, preserve-only touched, export-risk posture. This maps to your existing “Health” tab concept.
265
-
266
- Specific UX patterns by feature:
267
-
268
- * **Inline suggestions (DOCX):** show suggestion chips anchored to ranges (existing anchor model), with accept/reject actions that call runtime commands.
269
- * **Inline suggestions (XLSX):** highlight affected cells/ranges; show a “diff table” with old/new values/formulas; allow accept/reject per change group. This aligns with range-centric Excel semantics.
270
- * **Rewrite proposals (DOCX):** show “before/after” text blocks plus a command list; never apply automatically by default.
271
- * **Formula explanations (XLSX):** show formula text, referenced ranges, and computed interpretation using `formulas` vs `values` distinction; present as explanation-only unless user explicitly asks to edit.
272
- * **Workbook summaries:** show sheet list, used-range summaries, table list, named item list, pivot table list (even if preserve-only), comment counts; keep it structured and navigable.
273
- * **Comments generated by the agent:** treat comments as first-class threads (DOCX and XLSX). Word already has explicit add/open/resolve flows. Excel comments are threads tied to a cell.
274
-
275
- Trust surface and explicit state labeling
276
-
277
- The trust surface must make it impossible for the user to confuse:
278
-
279
- * explanation-only,
280
- * simulated,
281
- * proposed-but-not-applied,
282
- * applied-to-canonical-state,
283
- * export-risky.
284
-
285
- The agent layer should present a standard “action badge” for every agent response, derived from `AgentActionState` + `AgentExportPosture`.
286
-
287
- Mapping to your existing system:
288
-
289
- * Export risk and blocks should be derived from the runtime’s compatibility report (including `blockExport` and `unsupported-fatal` entries).
290
- * Warning-backed risk should be derived from runtime warnings and preserve-only touches, not from model “confidence.”
291
- * For OOXML forward-compat concerns, surface MCE-related semantics as “preserve-only reason” rather than dumping XML. MCE explicitly defines ignorable namespaces and alternate content selection mechanics.
292
-
293
- Telemetry, audit trail, and replay model
294
-
295
- You already have a host-level datastore adapter that can log events (`logEvent?`) and persist snapshots/exports.
296
-
297
- The agent layer needs an **append-only audit log** with replay capability. The minimum viable audit record per agent action:
298
-
299
- * agentSessionId, requestId, timestamp
300
- * editorKind, documentId, baseRevisionToken
301
- * requested mode (explain/propose/execute)
302
- * context slices used (IDs + hashes + size)
303
- * model output (structured tool calls, not raw chain-of-thought)
304
- * simulation result (diff summary + compatibility delta + warnings)
305
- * user decision (accepted/rejected/edited)
306
- * applied commands (exact typed commands, in order)
307
- * resulting revisionToken + export posture
308
-
309
- Replay model:
310
-
311
- * Since canonical truth is stored as a `PersistedEditorSnapshot` and restored from canonical state without rerunning OOXML import, replay should be “load snapshot → apply recorded commands → verify revisionToken deltas.”
312
- * For DOCX, the runtime already produces deterministic commit boundaries and revision tokens.
313
- * For XLSX, the workbook runtime must adopt the same pattern (revisionToken increments per commit).
314
-
315
- Minimum viable shared architecture across both editors
316
-
317
- Make the agent layer a **shared platform module** with editor adapters. Do not bury agent behavior inside React components.
318
-
319
- A minimal architecture:
320
-
321
- * `agent-core/` (shared):
322
- * schemas: `AgentEnvelope`, `AgentSelection`, `AgentActionState`, `AgentExportPosture`
323
- * tool contract: context slice requests, proposal packaging, simulation/apply pipeline
324
- * policy engine: action class resolution + preserve/lock/warn/block/fail rules
325
- * audit/telemetry: event record builder, hashing, replay harness
326
-
327
- * `agent-docx-adapter/` (DOCX-specific):
328
- * context extraction from `RuntimeRenderSnapshot.surface`, comments, trackedChanges
329
- * command mapping to existing `EditorCommand` union
330
- * sandbox simulation via snapshot-clone runtime instantiation (see deliverables)
331
-
332
- * `agent-xlsx-adapter/` (XLSX-specific):
333
- * context extraction: selected range values/text/formulas; tables; named items; comments; pivot metadata
334
- * command mapping to `SpreadsheetCommand` union (new, DOCX-inspired)
335
- * sandbox simulation: workbook runtime clone from persisted snapshot (design requirement)
336
-
337
- * `agent-ui/` (shared React components):
338
- * conversation pane + context citation chips
339
- * proposal diff viewer (pluggable doc/range renderer)
340
- * trust badge + compatibility delta panel (reuses “Health” concept)
341
-
342
- This matches your repo guidance: keep content model, review model, preservation, UI state, import/export boundaries separate, and don’t use the Open XML SDK in the shipped runtime.
343
-
344
- ## Risks and open questions
345
-
346
- The honest risks here aren’t “LLMs make mistakes” (they do), but the product integrity traps where a system *appears* to work while quietly corrupting fidelity or trust.
347
-
348
- Determinism vs. model creativity
349
-
350
- If the LLM can emit arbitrary patches (text diffs, cell diffs) without a typed command contract, the system becomes untestable and non-deterministic. The contract must force the model into a small space of structured actions, even if that feels “less magical.”
351
-
352
- Simulation fidelity and performance
353
-
354
- Simulation by “clone runtime from snapshot, apply commands” is clean and keeps the live runtime pure, but it may be expensive for large documents/workbooks. Your Word editor currently runs in the main thread with no Web Workers. If XLSX follows that constraint, simulation must be bounded and possibly incremental.
355
-
356
- Spreadsheet scope creep
357
-
358
- Excel-compatible isn’t just cells: tables, named items, pivot tables, comments, charts, external connections, macros, conditional formatting, data validation, etc. Many of these will be preserve-only early. The agent design must be brutally honest: if an operation can’t be proven safe for import → edit → export → reopen, it stays preserve-only or unsupported-fatal.
359
-
360
- Crossing preserve-only boundaries
361
-
362
- The hardest UX is not blocking; it’s explaining clearly *why* something is locked and what alternatives exist without implying the system can “just handle it.” This must be standardized: a preserve-only boundary always yields explicit lock/warn/block behavior.
363
-
364
- Validation vs. real host behavior
365
-
366
- Open XML SDK validation is necessary but not sufficient; your repo says Word behavior is final, and SDK validation is not an authorization to “repair heuristics.” Even at the package level, conformant relationships/parts matter, but host apps still have quirks.
367
-
368
- Open questions to resolve before locking the spec into v1
369
-
370
- * Should the agent layer be allowed to “execute” by default in any mode, or should v1 be proposal-first with an opt-in “direct execution” switch per host? This affects trust posture and audit requirements.
371
- * How do you want to represent XLSX “detached anchors” analogues (e.g., a comment tied to a cell that gets deleted, or a named range whose target moves)? The Word model has explicit detached anchors; XLSX needs an equivalent if you want honest review trails.
372
- * What is the minimum spreadsheet command set that can be certified against “reopen in Excel without repair prompts” early? This dictates what the agent can safely do.
373
- * How will you surface MCE/unknown namespace issues in XLSX packages without showing XML? The compatibility report pattern can carry “featureKey + message + affected range,” but the importer must generate those consistently.
374
-
375
- ## Concrete deliverable in the requested format
376
-
377
- This section is a repo-ready deliverable: interaction model, command/tool interfaces, UX patterns, safety/trust rules, approval flows, implementation phases, open questions, and test/release gates.
378
-
379
- Interaction model
380
-
381
- Define a strict interaction loop with explicit runtime boundaries:
382
-
383
- 1) **Context hydration** (read-only): agent layer requests baseline context + selection slice.
384
- 2) **Classification**: agent decides whether the user asked for explain/propose/execute (default: propose for mutations).
385
- 3) **Plan output**: agent emits a structured `AgentPlan` and either requests more slices or emits commands.
386
- 4) **Simulation transaction**: run commands in sandbox runtime clone; generate diff + compatibility delta.
387
- 5) **Present**: show explanation + proposed changes + trust badge + risk posture.
388
- 6) **User decision**: accept/reject/edit the plan.
389
- 7) **Commit**: apply commands via live runtime dispatch in a single host-visible transaction group; emit audit log entry.
390
-
391
- Command/tool interface examples
392
-
393
- Define a minimal tool surface that the LLM can call (or that the orchestrator can call on its behalf). Keep it small.
394
-
395
- **Tool: `context.get`**
396
- Fetch structured context slices; must be explicit in scope.
397
-
398
- ```ts
399
- type ContextGetRequest =
400
- & AgentEnvelope
401
- & {
402
- selection?: AgentSelection;
403
- slices: Array<
404
- | { kind: "docx.selection_text"; maxChars: number; includeSurrounding?: number }
405
- | { kind: "docx.comments_in_selection" }
406
- | { kind: "docx.tracked_changes_in_selection" }
407
- | { kind: "xlsx.range_grid"; sheetId: string; a1: string; include: ("values"|"text"|"formulas")[]; maxCells: number }
408
- | { kind: "xlsx.tables_overlapping_range"; sheetId: string; a1: string }
409
- | { kind: "xlsx.named_items"; scope: "workbook"|"sheet"; sheetId?: string; maxItems: number }
410
- | { kind: "xlsx.comments_in_range"; sheetId: string; a1: string }
411
- | { kind: "compatibility.summary" }
412
- >;
413
- };
414
-
415
- type ContextGetResponse = AgentToolResult<{
416
- slices: Record<string, unknown>; // keyed by slice request ids
417
- redactions: Array<{ sliceId: string; reason: string }>;
418
- }>;
419
- ```
420
-
421
- Why this structure: it enforces “don’t leak the full package,” and it gives you a UI-native “what the agent saw” artifact for trust.
422
-
423
- **Tool: `changes.simulate`**
424
- Run a command batch against a sandbox runtime.
425
-
426
- ```ts
427
- type SimulateRequest =
428
- & AgentEnvelope
429
- & {
430
- selection?: AgentSelection;
431
- commands: Array<DocxEditorCommand | XlsxEditorCommand>;
432
- expectedEffects?: Array<"text_change"|"formula_change"|"format_change"|"comment_change">;
433
- limits: { maxChangedAtoms: number; maxRuntimeMs: number };
434
- };
435
-
436
- type SimulateResponse = AgentToolResult<{
437
- diff: {
438
- kind: "docx" | "xlsx";
439
- summary: string;
440
- atomsChanged: number;
441
- docx?: { before: string; after: string; affectedAnchors: Array<{ from: number; to: number }> };
442
- xlsx?: { cells: Array<{ a1: string; before: { value?: any; formula?: string }; after: { value?: any; formula?: string } }> };
443
- };
444
- commandDigest: string; // hash of normalized commands
445
- compatibilityDelta: {
446
- blockExportChanged: boolean;
447
- newWarnings: EditorWarning[];
448
- newFeatureEntries: CompatibilityFeatureEntry[];
449
- };
450
- }>;
451
- ```
452
-
453
- This bakes in two “honesty” properties: (a) simulation is distinct from apply, and (b) export posture is always computed from compatibility/warnings, not inferred.
454
-
455
- **Tool: `changes.apply`**
456
- Apply the exact simulated command batch to the live runtime, guarded by `baseRevisionToken`.
457
-
458
- ```ts
459
- type ApplyRequest =
460
- & AgentEnvelope
461
- & {
462
- commands: Array<DocxEditorCommand | XlsxEditorCommand>;
463
- commandDigest: string; // must match simulation
464
- approval: { approvedByUserId: string; approvedAt: string; rationale?: string };
465
- };
466
-
467
- type ApplyResponse = AgentToolResult<{
468
- committedRevisionToken: string;
469
- committedAt: string;
470
- undoBoundaryId?: string;
471
- }>;
472
- ```
473
-
474
- This enforces “what you apply must match what you showed.” It also supports optimistic concurrency: if the revision token changed, block and require re-simulation.
475
-
476
- DOCX command subset (existing)
477
-
478
- For DOCX, reuse `EditorCommand` and a constrained subset for agent use in v1; your runtime already supports dispatching these commands and producing deterministic commit boundaries.
479
-
480
- Examples the agent can output:
481
-
482
- ```ts
483
- // Replace selected text with new text (via the runtime's text command sequence)
484
- { type: "text.insert", text: "…" }
485
- { type: "text.delete-backward" }
486
-
487
- // Add a comment anchored to current selection
488
- { type: "comment.add", comment: { … } }
489
-
490
- // Open/resolve/reopen comment threads
491
- { type: "comment.open", commentId: "…" }
492
- { type: "comment.resolve", commentId: "…" }
493
- ```
494
-
495
- Note: the agent layer should prefer high-level “replace selection” compound actions that compile to a deterministic sequence of primitive commands, rather than letting the model freestyle multi-step editing. This is a product honesty measure: fewer degrees of freedom means fewer unexpected diffs.
496
-
497
- XLSX command subset (new; must mirror DOCX rigor)
498
-
499
- Design `XlsxEditorCommand` as a discriminated union parallel to `EditorCommand`, with explicit range semantics.
500
-
501
- Minimum v1 command surface (agent-safe):
502
-
503
- ```ts
504
- type XlsxEditorCommand =
505
- | { type: "selection.set"; selection: { sheetId: string; a1: string; areas?: Array<{sheetId:string;a1:string}> } }
506
- | { type: "range.setValues"; sheetId: string; a1: string; values: any[][] }
507
- | { type: "range.setFormulas"; sheetId: string; a1: string; formulas: string[][] }
508
- | { type: "range.clear"; sheetId: string; a1: string; mode: "values"|"formats"|"all" }
509
- | { type: "comment.add"; sheetId: string; cellA1: string; body: string }
510
- | { type: "comment.reply"; commentId: string; body: string }
511
- | { type: "namedItem.add"; scope: "workbook"|"sheet"; name: string; referenceA1: string; sheetId?: string }
512
- | { type: "table.convertToRange"; tableId: string }; // if/when supported
513
- ```
514
-
515
- This mirrors Excel’s own object model emphasis on ranges and avoids inventing a “cell mutation API” that doesn’t match user expectations.
516
-
517
- Safety/trust rules (non-negotiable)
518
-
519
- These rules are the spec-level guardrails that make the system honest:
520
-
521
- * The agent must never mutate state directly; it must propose or invoke typed runtime commands.
522
- * Any mutation must be simulatable; if you can’t simulate it deterministically, it cannot be auto-applied in v1.
523
- * Preserve-only regions are locked; agent edits inside them are blocked unless the user explicitly enters a destructive conversion flow (warn + risk acknowledgement).
524
- * Unsupported-fatal states fail closed: explanation-only allowed; mutation and export blocked.
525
- * Export posture must be derived from compatibility report + warnings + errors. Never infer from model confidence.
526
- * Open XML SDK is for CI/service validation, not shipped runtime transformations.
527
-
528
- Approval flows
529
-
530
- Implement two layers of approval:
531
-
532
- * **Proposal approval**: user accepts a proposed change set (single-step accept or per-change accept).
533
- * **Risk acknowledgement approval**: required when the simulation indicates any of:
534
- * preserve-only content touched,
535
- * new warnings of `export_roundtrip_risk` class,
536
- * any newly introduced compatibility feature entries that are not supported-roundtrip, or
537
- * operation crosses a policy threshold (too many atoms, too many sheets).
538
-
539
- The apply step must re-check `baseRevisionToken` and command digest to prevent stale approvals and “apply something different than what was shown.”
540
-
541
- Implementation phases
542
-
543
- Phase boundaries are defined by what can be certified safely.
544
-
545
- **Phase Alpha: shared agent scaffolding (DOCX only, explain-only)**
546
- Ship `agent-core` + DOCX adapter for context slices and explanations; no mutation. Use this to validate context slicing, trust UI, and audit logging.
547
-
548
- **Phase Beta: DOCX proposal mode (bounded text + comments)**
549
- Enable proposal + simulation + approval for: rewrite selected text, add comment, small formatting normalizations that are already supported-roundtrip. Gate apply behind simulation.
550
-
551
- **Phase Gamma: XLSX runtime + schema of commands + proposal mode for ranges**
552
- As soon as XLSX runtime exists, implement range context slices and a minimal `XlsxEditorCommand` set: set values/formulas, add comments, add named items. This matches Microsoft’s range-centric model and gives agent “real” spreadsheet capabilities early.
553
-
554
- **Phase Delta: cross-editor parity + shared trust UI + replay harness**
555
- Unify UI components, finalize audit schema, build replay runner that replays agent-applied commands from snapshots for both editors.
556
-
557
- Test matrix, fixture plan, and release gates
558
-
559
- Reuse the DOCX repo’s stance: fixtures + package integrity checks + Open XML SDK validation + preserve-only survival checks + host certification; SDK validation is necessary but not sufficient.
560
-
561
- For the agent layer, add two new fixture dimensions:
562
-
563
- * **A-dimension (agent action scripts):** deterministic sequences of tool calls and expected normalized command outputs.
564
- * **R-dimension (roundtrip evidence):** import → simulate → apply → export → reopen checks, including “no repair prompts” in real host environments.
565
-
566
- DOCX fixtures already have a defined corpus and gate. The agent layer should add scripted interactions per fixture (e.g., “summarize,” “rewrite paragraph 2,” “add comment,” “accept a change”), ensuring that in preserve-only fixtures, the agent correctly locks/blocks instead of attempting edits.
567
-
568
- For XLSX, define an analogous minimal v1 fixture corpus (example keys, not requirements):
569
-
570
- * X01: values + basic formatting (supported-roundtrip target)
571
- * X02: basic formulas + relative references (supported-roundtrip target)
572
- * X03: named ranges + named formulas (supported-roundtrip target)
573
- * X04: comments as threads (supported-roundtrip target)
574
- * X05: tables (likely preserve-only initially; still must survive)
575
- * X06: pivot tables (preserve-only early; must survive; edits blocked)
576
- * X07: unknown extensions / extLst / MCE content (preserve-only survival)
577
- * X08: malformed package states (unsupported-fatal; fail closed)
578
-
579
- Release gate for agent-enabled edits (both editors):
580
-
581
- * “Simulated diff matches applied diff” (command digest enforcement).
582
- * “No silent drops” (preserve-only survival check).
583
- * “Open XML SDK validation passes” as a necessary check (CI/service only).
584
- * “Host reopen without repair prompts” as the final gate.
585
-
586
- Open questions (deliverable reminders)
587
-
588
- * Do you want agent-generated spreadsheet “comments” to map to Excel threaded comments exclusively, or do you also support legacy notes? Microsoft’s docs focus on threaded comments as the comment object model.
589
- * Should the agent be allowed to propose pivot table mutations at all in v1, or must pivots be preserve-only with explanation-only? The official API treats pivots as objects with refresh semantics, but roundtrip fidelity is non-trivial.
590
- * For formulas, will the runtime provide an internal evaluator, or will it treat formulas as strings and rely on Excel recalculation on open? The Range docs distinguish formulas vs values; correctness expectations differ.
591
-
592
- ## Sources
593
-
594
- Repository primary sources (runtime, contracts, UX, compliance):
595
-
596
- * Runtime/host contract lock (WordReviewEditor): snapshot boundaries, command dispatch, compatibility report, events.
597
- * Document runtime implementation: command dispatch → transaction → commit, revision tokens, event emission.
598
- * Command model (`EditorCommand`, `EditorTransaction`, mapping/effects): typed mutation surface.
599
- * Public API types (`RuntimeRenderSnapshot`, warnings/errors, compatibility taxonomy, surface projections): shared data contracts.
600
- * Frontend architecture + UX guide: snapshot-driven UI, health/trust surfaces, review workflow patterns.
601
- * Repo guidance for agents and compliance stance: commands-only edits, preservation requirements, Open XML SDK policy.
602
-
603
- Primary/strong external references (packaging, MCE, spreadsheet abstractions):
604
-
605
- * OPC overview and mandatory structures described in a preservation-oriented reference (mandatory `[Content_Types].xml`, `_rels/`, etc.).
606
- * Markup Compatibility and Extensibility (MCE) overview and constructs (ignorable namespaces, process-content, must-understand).
607
- * ECMA/OOXML spec mirrors for OPC relationships and conformance constraints (relationships; package conformance requirements; MCE `Ignorable` + `AlternateContent` rules).
608
-
609
- Open XML SDK documentation (validation and packaging surfaces; CI/service only per your policy):
610
-
611
- * `OpenXmlValidator` documentation (validation surface; doesn’t replace host behavior).
612
- * Spreadsheet packaging type: `SpreadsheetDocument` as an `OpenXmlPackage`.
613
- * Markup compatibility processing settings in the SDK (`MarkupCompatibilityProcessSettings`, OpenSettings).
614
-
615
- Excel object model references (official Microsoft docs; informs spreadsheet-native abstractions):
616
-
617
- * Range-centric model (no Cell object; values/text/formulas distinction; getting ranges).
618
- * Excel comments as threaded discussions tied to a cell.
619
- * Excel tables as objects with ranges and identity.
620
- * Named items (defined names) and collections at workbook/sheet scope.
621
- * Pivot tables as first-class objects (useful even if preserve-only initially).