agents/researcher: row 154 (#1648) packet through the d88613bac rebase round (manifest 3a4bc21c), without the five superseded 2 MB candidate.patch files (root, r2, r3, rebase-7bd2a348c, rebase-850484a7d), which stay untracked on disk

This commit is contained in:
2026-10-18 16:42:44 -05:00
parent 5e2a1bc118
commit 81b0041e36
233 changed files with 105586 additions and 0 deletions
+570
View File
@@ -0,0 +1,570 @@
# Row 154 (#1648, Q168), phase 2 build note
Written 2026-10-18 by the Researcher seat. Brief: `docs/plans/2026-10-16_q168-wysiwyg-editor.md`, blob `4dd89bb60b04`.
Mos's decision 123 go for phase 2 is mos-0716 (conditions 1-4, answered below).
The candidate is a patch against `0f715a054` in the detached worktree `/mnt/storage/scratch/researcher/r154-wt`
(rebased from `5e0437659` after row 124 landed on `bus.js` and `serve.mjs`; both patches applied clean).
**Status, 2026-10-18 16:52Z: built and tested.** Results are in "Results" below (webui suite 162/162 with
`MOSAIC_REQUIRE_EDITOR_BUILD=1`). The text below was written before the first slot run; where it says "checked outside the
suites", the suites have since checked it too. Sections "First slot run" and "Results" supersede anything older here.
**Updated 2026-10-18 after sage-0751 and sage-0757** (still no suite run; Sage's row 149 gate holds the slot, then me):
the esbuild install and binary check, the `MOSAIC_REQUIRE_EDITOR_BUILD` switch and its tests, a separate paste-path test
for the pasted-image change, the lock contents, and the corrections to Mos's text are below. **The candidate is held as
it is until Mos answers whether `editor.js` stays committed** (Sage asked, sage-0751 call 2); a "no" moves the build into
`stack-copy.sh` and changes the candidate.
## First slot run, 2026-10-18 (16:40Z) and what it changed
The first run of `editor-browser.test.mjs` failed 3 of 4. Stopped there as Sage directed (sage-0759). Causes, and fixes
approved in sage-0762:
1. **Load-path test expected `view.links` to be `[]`; that was wrong.** markdown-it never makes a link token of a
`javascript:` or a non-image `data:` target; it leaves them as text. The paragraph is therefore not flagged `refused`
(that flag is set only when markdown-it yields a `link_open` whose href `linkTarget` rejects, e.g. `//evil.example/x`),
so the good `https://example.com/a` in the same paragraph is a real link. The page is safe either way. The test now
expects that one link, and keeps the safety assertions: no anchor with a `javascript:` or `data:` href, the
`javascript:` and `data:` text shows as text, nothing ran, nothing was fetched. `hostile.md` gained a
`[evil](//evil.example/x)` paragraph (must be a source block) and a `[sp](https://a b.example/)` paragraph (must stay text).
2. **Paste/link-bar test reopened the same URL and hash.** A hash-only navigation does not reload, so the pasted links
were still on the page ("2 links, expected 0"). It now loads `about:blank` first and asserts the pasted links and text
are gone before the link bar is used, so a stale page cannot pass again.
3. **Edit test.** I first reported that the save might send the old bytes. That was a misreading of the log. A diagnostic
showed the save sent the edited text (`First para. More \*\*not bold\*\*.`), and the editor DOM held it throughout.
The failing assert was the Source view after the save: it showed the old file. Cause, in the product: a switch between
Visual and Source called `render(false)`, and `docView` re-reads any clean draft from the project (a saved draft is clean).
In the test the project still served the pre-save file. In real use it would serve the saved commit, but the read is
still a bug of this row: a view toggle costs a project read and can replace the draft with a newer commit.
Row 148's `docs-browser.test.mjs` caught the same thing (it expects one `project-file` read; the Source click made a second).
**Fix, in `src/public/bus.js`:** an explicit argument, no stored flag (a first version kept a one-shot flag on the
draft state; Sage, sage-0771, pointed out it could leak into the next navigation). `render(navigated, opts)` passes
`opts` to `view(get, path, q, opts)` and on to `docView(get, project, file, { reuseDraft })`. Only the mode-click handler
passes `{ reuseDraft: true }`; hashchange, Refresh, Reload, the `/api/config` re-render and the 10 s refresh pass nothing.
**Tests, `editor-browser.test.mjs`:** the fixture counts `project-file` reads. Test 3: none across Visual to Source and
back, and the Source textarea equals the saved bytes. New test: two Visual/Source round trips read nothing; Reload reads
exactly once; a switch after Reload reads nothing; going to `#/docs` and back reads exactly once. Counts are taken from
what opening cost, because a cold load of a docs URL reads twice (the page draws again when `/api/config` answers;
`bus.js` near the end). That predates this row and is left alone.
4. **`browser.test.mjs` pins the page's script count** (`querySelectorAll("script").length` was 4). `index.html` now loads
`/editor.js`, so the page has 5. I missed it because the first runs covered only the editor files; the suite found it.
The assertion now lists the scripts (`/editor.js`, `/brand.js`, `/app.js`, `/markdown-preview.js`, `/bus.js`), so another
added script still fails it. This is a change to a test row 154 did not list; Dewey and Filbert should look at it.
## Candidate files (2026-10-18 16:54Z)
In this packet: `candidate.patch` (`git diff --binary` against `0f715a054`, new files included; sha256
`7ebc125f6edf94dd7efe5bb28af8b30926cdc88d916648998f930bc40f990ca1`; `git apply --check` passes on a fresh detached
checkout of `0f715a054`), `changed-paths.txt` (195 paths: 9 modified, 186 new) and `candidate-manifest.sha256` (sha256 of
each path as it sits in `/mnt/storage/scratch/researcher/r154-wt`). Nothing is committed or pushed. The tests were run on
exactly these bytes; no edit followed the 16:50:56Z suite run except this packet.
| Path | Change |
|---|---|
| `packages/webui/third_party/editor/` | New. 19 packages of upstream TypeScript source, byte for byte, each with its license file and `package.json`; `NOTICE`; `PROVENANCE.json`. 171 files. |
| `packages/webui/editor/` | New. `model.mjs`, `view.mjs`, `entry.mjs`, `editor.css`, `build.mjs`, `toolchain.mjs` (the esbuild version, binary sha256 and `MOSAIC_REQUIRE_EDITOR_BUILD` check; never imports esbuild), `BUILD.json`. |
| `packages/webui/src/public/editor.js`, `editor.css` | New. Built output (757137 and 4462 bytes). |
| `packages/webui/src/public/index.html` | One line: the stylesheet link and `<script src="/editor.js" defer>`, before the page scripts. |
| `packages/webui/src/public/bus.js` | Visual/Source mode, `mountEditor`, `unmountEditor`, the visual layout. Read, save, stale-base and read-only paths untouched. |
| `packages/webui/src/serve.mjs` | The two static entries `/editor.js`, `/editor.css`. Nothing else. |
| `packages/webui/package.json`, `package-lock.json` | `esbuild` `0.28.2` exact devDependency, `build:editor` script; new lock (27 packages). |
| `packages/webui/tests/` | New: `editor.test.mjs`, `editor-provenance.test.mjs`, `editor-browser.test.mjs`, `helpers/editor-bundle.mjs`, `helpers/every-element.mjs`. Changed: `docs-browser.test.mjs` (see below), `serve.test.mjs` (two paths in a list). |
| `packages/webui/README.md`, `docs/TOOLS.md` | "Visual editor" section; one paragraph. |
Not touched: the save route, bus verbs, the human writer, the CSP, `markdown-preview.js`, `project-file.test.mjs`.
## Mos's conditions
1. **A license file per package, plus NOTICE.** Every imported package has its own license file next to its source
and `NOTICE` lists all of them; `editor-provenance.test.mjs` checks both. *Count:* Mos wrote 20; the build reads
**19**. The 20th was `prosemirror-schema-basic`, which phase 1 listed but nothing imports (the schema is
`model.mjs`'s own). It is not in the tree. `entities` is BSD-2-Clause; the other 18 are MIT (SPDX from each
`package.json`).
2. **Link mark through `window.MosaicMarkdown.linkTarget`; image becomes text.** `model.mjs` has no other target
test. The image node is an inline atom drawn as `[image: alt] src`, never an `<img>`. The browser test covers
`<script>`, `onerror`, `javascript:` and `data:` on the load path (a hostile file, plus the every-element doc) and
the paste path (HTML and plain text, then the link bar). *Change made after phase 1's text:* the image node's
`parseDOM` accepted any `data-src` on paste; it now requires `linkTarget(data-src) !== null`. See "Corrections to
Mos's text" for why this is a change to the condition's wording, and its own test.
3. **OSV re-run, positive control saved, added to osv.sh.** `repro/osv.sh` now runs the control first (dompurify
2.3.3 -> 20 advisories, markdown-it 12.2.0 -> 3) and exits 3 if OSV returns fewer. It also reads
`PROVENANCE.json`, because the imported source is in no lockfile. Run 2026-10-18T16:28Z: control 20 and 3; the
lock (27 packages) 0 advisories, `results/osv-phase2-lock.json`; the 19 imported versions 0 advisories,
`results/osv-phase2-imported.json`.
4. **esbuild binary sha.** `@esbuild/linux-x64` 0.28.2, sha256
`e1698a3d5c6c0798fee4fd3b5cc816651f460c63d390a7a26ea4beb0b1884100`. Lock integrity: esbuild
`sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==`,
`@esbuild/linux-x64` `sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==`
(identical to the phase 1 scratch lock). Builds: `results/build-hashes.txt` (editor.js `c601f6c3…6565`, editor.css
`8654ac57…ee61f`, two absolute paths, `BUILD.json` identical).
## Corrections to Mos's text
1. **19 packages, not 20.** Mos's condition 1 counts 20. `prosemirror-schema-basic` was in phase 1's list but has no
importer (the schema is `model.mjs`'s own), so it is not imported and the build does not read it. 19 packages, 133
build inputs, 171 files in `third_party/editor/`: 170 in the tree hash (the 19 packages plus `NOTICE`) and
`PROVENANCE.json`, which records them.
2. **The pasted-image rule changed.** Mos's text said the image node becomes text, drawn never as an `<img>`. That held
for the load path. On the paste path the node accepted any `data-src` from a `span.md-image`, the editor's own copy
format, so a pasted `javascript:` or `data:` target became an image node and a save wrote `![](javascript:…)`. Now
`model.mjs` accepts that span only when `window.MosaicMarkdown.linkTarget` accepts its `data-src`; a refused span
is dropped to its text. Test: `editor-browser.test.mjs`, "a pasted image span is kept only for a target the link gate
accepts, and a save writes only those". It pastes two accepted targets (`https://ok.example/a.png`,
`../img/r.png`) and seven refused ones (`data:`, `DATA:`, `javascript:`, ` javascript:`, `vbscript:`, `//host`, a
target with a space) and checks the editor DOM (image nodes for the two, drawn as `[image: alt] src`, none for the
rest), that nothing is fetched or injected, and the saved file (`![a](https://ok.example/a.png)` and
`![r](../img/r.png)` in order, no refused target anywhere, the surrounding text kept). The older paste test
still covers the span, HTML and plain-text cases together.
## esbuild lock contents
`packages/webui/package-lock.json`, lockfileVersion 3, sha256 `eb60a494…f63f`
(`eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f`). Root entry: `@mosaic/webui` 0.1.0,
devDependencies `esbuild` `0.28.2`. **27 packages, not 2:** esbuild lists every `@esbuild/*` platform package as an
optional dependency, so the lock holds all 26 of them plus `esbuild`. `npm ci` installs only the one that matches the
host's `os` and `cpu`, so a linux-x64 install holds two (`esbuild`, `@esbuild/linux-x64`). All 27 are version 0.28.2,
`dev`, and (except `esbuild` itself) `optional`. Integrity values are the lock's, verbatim.
| Package | os / cpu | Integrity |
|---|---|---|
| `node_modules/esbuild` | | `sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==` |
| `node_modules/@esbuild/aix-ppc64` | aix / ppc64 | `sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==` |
| `node_modules/@esbuild/android-arm` | android / arm | `sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==` |
| `node_modules/@esbuild/android-arm64` | android / arm64 | `sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==` |
| `node_modules/@esbuild/android-x64` | android / x64 | `sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==` |
| `node_modules/@esbuild/darwin-arm64` | darwin / arm64 | `sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==` |
| `node_modules/@esbuild/darwin-x64` | darwin / x64 | `sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==` |
| `node_modules/@esbuild/freebsd-arm64` | freebsd / arm64 | `sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==` |
| `node_modules/@esbuild/freebsd-x64` | freebsd / x64 | `sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==` |
| `node_modules/@esbuild/linux-arm` | linux / arm | `sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==` |
| `node_modules/@esbuild/linux-arm64` | linux / arm64 | `sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==` |
| `node_modules/@esbuild/linux-ia32` | linux / ia32 | `sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==` |
| `node_modules/@esbuild/linux-loong64` | linux / loong64 | `sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==` |
| `node_modules/@esbuild/linux-mips64el` | linux / mips64el | `sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==` |
| `node_modules/@esbuild/linux-ppc64` | linux / ppc64 | `sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==` |
| `node_modules/@esbuild/linux-riscv64` | linux / riscv64 | `sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==` |
| `node_modules/@esbuild/linux-s390x` | linux / s390x | `sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==` |
| `node_modules/@esbuild/linux-x64` (**the binary this build uses**) | linux / x64 | `sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==` |
| `node_modules/@esbuild/netbsd-arm64` | netbsd / arm64 | `sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==` |
| `node_modules/@esbuild/netbsd-x64` | netbsd / x64 | `sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==` |
| `node_modules/@esbuild/openbsd-arm64` | openbsd / arm64 | `sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==` |
| `node_modules/@esbuild/openbsd-x64` | openbsd / x64 | `sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==` |
| `node_modules/@esbuild/openharmony-arm64` | openharmony / arm64 | `sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==` |
| `node_modules/@esbuild/sunos-x64` | sunos / x64 | `sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==` |
| `node_modules/@esbuild/win32-arm64` | win32 / arm64 | `sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==` |
| `node_modules/@esbuild/win32-ia32` | win32 / ia32 | `sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==` |
| `node_modules/@esbuild/win32-x64` | win32 / x64 | `sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==` |
Packet findings: **F1** the imported `punycode.js/package.json` is the one in tag `v2.3.1` (git blob `b8b76fc7…`);
that file says `"name": "punycode"`, the npm tarball says `"punycode.js"`. It is metadata only: the build aliases
`punycode.js` to `third_party/editor/punycode.js/punycode.js` by path and reads no name. **F2** done. **F3** done (condition 3). **F4** done
(19 license files in `licenses/`, and in the tree).
## Things a reviewer should know
- **Dependency install for the gate (Sage's call 1, sage-0751).** `packages/webui/package.json` has a devDependency,
`esbuild` `0.28.2` exact, and `packages/webui/package-lock.json` is new. The repo root has no workspaces and root
`node_modules/esbuild` is 0.28.1 (it comes in through pi-coding-agent); the editor never uses it. The install is
`npm ci --ignore-scripts --no-audit --no-fund` run inside `packages/webui`, into `packages/webui/node_modules`
(gitignored). On linux-x64 it installs two packages, `esbuild` and `@esbuild/linux-x64`; the lock lists all 27
(see "esbuild lock contents").
- **Binary check, refused on a mismatch.** `editor/toolchain.mjs` holds the sha256 of the 0.28.2 linux-x64 binary
(`e1698a3d…4100`, condition 4) and hashes `node_modules/@esbuild/linux-x64/bin/esbuild` before any build. It refuses
when the hash differs, when no hash is recorded for the platform, when the platform package is missing, or when
`ESBUILD_BINARY_PATH` is set (that variable swaps the binary esbuild runs). `build.mjs` calls it before it imports
esbuild, so the check holds for `npm run build:editor` and for the rebuild test. `node editor/toolchain.mjs` runs it
alone: it prints the binary path and hash, exit 0; `skip: <reason>`, exit 0; `missing:` exit 3; `refused:` exit 4.
The gate runs it after the install and before the rebuild test. Checked now, outside the suites, against my scratch
install: exit 0, hash `e1698a3d…4100`.
- **`MOSAIC_REQUIRE_EDITOR_BUILD=1` (Sage's call 3).** Without it, a missing esbuild, or another version, skips the
rebuild test and prints the reason; with it, that is a failure. A wrong binary fails either way. `1` requires;
unset, empty and `0` do not; any other value throws, so `true` cannot quietly turn the requirement off. The landing
gate sets it after the install. Tests, all in `editor-provenance.test.mjs`: (a) over four fake installs (no esbuild,
0.28.1, 0.28.2 with a wrong binary, 0.28.2 with no binary) the verdict is skip, skip, fail, fail without the switch
and fail in all four with it, plus the switch's own values and `ESBUILD_BINARY_PATH`; (b) a copy of `toolchain.mjs`
in a temp directory with no esbuild above it, run as a program: exit 0 and `skip:` on stdout without the switch and
with `0`, exit 3 and `missing:` on stderr with `1`, non-zero with `true`; (c) the rebuild test itself, which uses the
same verdict. So "fails without esbuild" is tested without needing esbuild to be absent from the machine running it.
A gate run that sets the switch on a machine with the install runs the rebuild; one without the install fails.
- **The built bundle is committed. Held for Mos.** That is the tension with Q167 D3 (no vendored prebuilt bundles). What
is vendored here is *source*; the bundle is a build output whose inputs, options and hashes are recorded and
re-checkable, and a test proves the bytes. Sage's reading: D3 bans unreviewable bundles; this is our own build.
`stack-copy.sh` runs `npm ci` at the root only, so a live copy cannot build the editor; building at deploy would put
the install into stack-copy. Sage asked Mos (sage-0751 call 2). I changed nothing for it.
- **`docs-browser.test.mjs` has one change.** The page now opens in Visual, row 148's tests drive the textarea, so the
test file has a `source()` helper that clicks Source when `#doc-text` is absent, called at the four places that open
a file. Assertions are unchanged. `project-file.test.mjs` is untouched.
- **esbuild warning.** `[ignored-bare-import]` for `import "./mark"` in `prosemirror-transform/src/index.ts`
(the package is `sideEffects: false`; `mark.ts` only exports functions). Benign; the build does not fail on it.
- **The bundle is not scanned for string-to-markup sinks.** The row 148 sink scan applies to `editor/*.mjs`. The
upstream code uses DOM APIs. The bundle is checked for `eval` and `new Function` only. The browser test checks the
live DOM instead (no script, frame, object, style, form, `on*` attribute or fetched URL after load and paste).
- **Open risk, checked at test time.** Whether a ProseMirror paste of `<img src=…>` HTML makes the browser fetch it
(prosemirror-view parses pasted HTML in a detached document). The browser test asserts `performance` resource
entries hold no tracker URL after the paste. `view.mjs` sets no `transformPastedHTML`; an `<img>` is dropped because the schema has no rule for it. If the test fails, the fix is a `transformPastedHTML` that removes `img` before parsing.
## Normalisations and limits (stated, not hidden)
- Open and save with no edit writes the same bytes. Checked (bare `vm`, not the suite) on `goals-review.md`; the
suites check it for every `.md` under `docs/` and `spec/` and for the every-element doc.
- CRLF saves as LF, as in row 148. An unedited file keeps Save off.
- A block you edit is rewritten in the editor's form: `-` bullets, soft breaks as newlines, reference links inline,
`<` and `&` escaped. Untouched blocks are written back as they were.
- Kept as source blocks, not edited visually: tables, HTML blocks, front matter, indented code, setext headings,
strikethrough, link reference definitions, non-blank gap lines, and any block with a link target the gate refuses.
- Empty paragraphs vanish when saved with an edit. Two adjacent lists may merge on reparse. Copy/paste of an image
atom inside the editor is lost. A redraw or a Visual/Source switch starts a new undo history.
- The visual editor opens only when `roundTrip(text) === text`; otherwise the file opens in Source with a note.
## Row 129 overlap
Row 129 also edits `index.html` and `serve.mjs`. My hunks are one line and two lines. Whichever lands second rebases.
**`tests/browser.test.mjs` line 22 (sage-0775).** Row 129 (Rocko, in review) edits the same assertion: it adds `/chat.js`,
a fifth script on its side. This row's list is `['/editor.js', '/brand.js', '/app.js', '/markdown-preview.js', '/bus.js']`.
Whichever row lands second rebases that line and pins all six scripts, in page order. Neither row pins a bare count.
Dewey and Filbert: expect a conflict on that line, and on `index.html` and `serve.test.mjs`'s path list, not a semantic one.
## Results (slot run 2026-10-18, 16:48:49Z to 16:51:57Z)
All with `MOSAIC_REQUIRE_EDITOR_BUILD=1`, from the package-local esbuild 0.28.2, worktree at `0f715a054` plus the candidate.
Counts are awk sums over the spec logs in `/mnt/storage/scratch/researcher/r154-logs4/` and `r154-logs5/`, not typed by hand.
| Run | Start-end (UTC) | Tests | Pass | Fail | Skipped |
|---|---|---|---|---|---|
| `editor-browser.test.mjs` | 16:48:49Z, in the file-by-file run | 5 | 5 | 0 | 0 |
| `editor.test.mjs` | same run | 5 | 5 | 0 | 0 |
| `editor-provenance.test.mjs` | same run | 6 | 6 | 0 | 0 |
| `docs-browser.test.mjs` (row 148, assertion unchanged: `reads.file` is 1) | same run | 1 | 1 | 0 | 0 |
| `project-file.test.mjs` | same run | 10 | 10 | 0 | 0 |
| `serve.test.mjs` | same run | 4 | 4 | 0 | 0 |
| `markdown-preview.test.mjs` | same run | 19 | 19 | 0 | 0 |
| `browser.test.mjs` (script list pin) | 16:50:55Z-16:50:56Z | 1 | 1 | 0 | 0 |
| webui suite, `node --test tests/` | 16:50:56Z-16:51:52Z | 162 | 162 | 0 | 0 (0 cancelled) |
The suite in the 16:48:49Z run failed once (162 tests, 161 pass, 1 fail: `browser.test.mjs:21`, the script count; item 4
above). The pin was fixed and the suite rerun at 16:50:56Z as Sage directed (sage-0775); that is the 162/162 line.
Process sweep at 16:51:57Z: nothing of mine left (node, chrome, by `/proc` cwd link). The slot was held with the busy check
gated with `&&`. The mandatory rebuild test ("a missing or wrong esbuild skips without it and fails with it; ...") ran and
passed in the suite (suite.log line 32); it was not skipped.
Not run: the root `test-*.sh` scripts (the Docker gate), the rest of the repository's suites, and any live step.
### Build record (Mos's sage-0751 conditions via mos-0765)
- esbuild: `0.28.2`, exact, from `packages/webui/package-lock.json` (sha256 `eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f`, 27 packages: esbuild and 26 `@esbuild/*`), installed with `npm ci --ignore-scripts --no-audit --no-fund` in `packages/webui`. Never the root install's esbuild.
- Binary: `node_modules/@esbuild/linux-x64/bin/esbuild`, sha256 `e1698a3d5c6c0798fee4fd3b5cc816651f460c63d390a7a26ea4beb0b1884100`. `editor/toolchain.mjs` checks it before the byte compare; a wrong or unlisted binary is refused (exit 4), a missing one fails (exit 3) when the switch is on. Re-checked 16:52Z: `esbuild --version` prints `0.28.2` and the binary sha matches.
- Command: from `packages/webui`, `node editor/build.mjs` (same as `npm run build:editor`). It bundles the entry `editor/entry.mjs` with the aliases in `editor/build.mjs`, which point at the TypeScript `src/` of the 19 trees under `third_party/editor/`. Options: bundle, iife, es2022, browser, legal-comments inline, unminified. Input list: the 133 files in `editor/BUILD.json`.
- Outputs (sha256, bytes): `src/public/editor.js` `c601f6c3f75b7cf9898a9a52abfdab3e50badbcb5f66e57e6df57641878e6565`, 757137; `src/public/editor.css` `8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f`, 4462. Both re-hashed 16:52Z from the worktree and equal to `editor/BUILD.json`. A rebuild from the tree is byte-identical (esbuild prints a benign `[ignored-bare-import]` warning).
- Tree: 171 files under `third_party/editor/` (170 in the tree hash, plus `PROVENANCE.json`).
### Tests that pin `index.html` or `public/` structure (sage-0775)
Grepped `packages/webui/tests/*.mjs` and `tests/helpers/*.mjs` for `index.html`, `<script`, `querySelectorAll("script`,
`stylesheet`, `querySelectorAll("link`, `public/`, `readdirSync`, `.js'`/`.css'`, and for `#sections a`, `nav` and count
patterns. What I found:
- `browser.test.mjs:22` pins the script list. **Changed** (see above).
- `serve.test.mjs:36` lists the static paths served. **Changed** earlier: `/editor.js` and `/editor.css` added.
- `shell.test.mjs:40` joins `app.js`, `bus.js` and `index.html` and searches for strings; it counts nothing, and no string it looks for is in the added link or script tag. `shell.test.mjs:22-33` compares `tokens.css`, `icons.svg` and the font files; none changed. `shell.test.mjs:266` expects 9 `#sections svg use`, `:274-276` the strip layout: the nav is unchanged, and the suite passes.
- `bus.test.mjs:215` fetches `/bus.js` and `/bus.css` for status 200. Unaffected.
- `markdown-preview.test.mjs:10` reads `markdown-preview.js` by path. Unaffected. `helpers/editor-bundle.mjs` (new) reads `markdown-preview.js` and `editor.js` into a `vm`.
- `pinned-copy.test.mjs` and `service.test.mjs` call `readdirSync`, but on temp copies and unit directories, not on `src/public/`.
- `#sections a` selectors in `bus-browser`, `send-browser`, `messages`, `docs-browser` and `shell` tests select nav links, not page `<link>` or `<script>` tags.
- Other `<script` hits (`bus-browser`, `conversation`, `send-browser`, `docs-browser`, `markdown-preview`, `browser-edge`) are hostile test strings, not structure.
Nothing else pins the number or order of scripts, links or stylesheets. The whole suite passing (162/162) is the check; the grep
is the list of where I looked, and it is a grep, so a pin written some other way would show only in the suite.
### Cold-load double read (not fixed; for a P19 follow-up)
`packages/webui/src/public/bus.js:1062-1067`: on load, `fetch('/api/config')` resolves and its `.then` calls `render(false)`
for `/inbox`, `/settings` and any `/docs/` path (line 1067). The initial `render(false)` at line 1072 has already started,
so opening a docs URL cold reads the file twice (`project-file` is called twice). I saw it as the test "opening reads once"
getting 2. It predates this row. `docs-browser.test.mjs` (row 148) opens files by setting `location.hash` on a loaded page, not cold, though it does `b.navigate` to a docs URL for the `?noedit` and `?throwrender` pages (lines 240 and 248 on r1), which are cold loads. I left it alone and the new
read-count test counts from what opening cost (`opened`), so it passes whether or not that is later fixed. A fix would be
to skip the config re-render for `/docs/` when the first render has not yet drawn a doc, which is a change to row 148's
flow, so it is not mine to make here.
## Rebase onto 850484a7d (row 129 landed first), prepared 2026-10-18, nothing run
Sage (sage-0795): row 129 landed as `850484a7d`, so this row is the second lander. The r1 candidate (base `0f715a054`,
manifest `ecaec329…`) is untouched; Filbert is reviewing it. The rebase is a separate tree and a separate directory:
`rebase-850484a7d/` in this packet (`candidate.patch` sha256 `2b8ccdfbbf0b991cc3b05eb1ecc1958fa41fec96c44a7eb5bce092cb1187f6b1`,
`changed-paths.txt`, `candidate-manifest.sha256`, 195 paths, same set as r1), worktree `/mnt/storage/scratch/researcher/r154-wt2`
(detached at `850484a7d`, the patch applied with `git apply --3way`, staged). **No test, build or server has run on it.**
It is a preview for review of the conflicts, not a candidate. The tests, the rebuild check and a new manifest follow
Filbert's r1 verdict, the slot, and r2.
### Conflicts and how each was resolved
Three files conflicted. Everything else applied or merged without a conflict.
1. `packages/webui/src/public/index.html` (head, lines 4-6). Row 129 added `/chat.css` before `/shell.css` and `/chat.js`
before `/bus.js`; this row adds one line holding `/editor.css` and `/editor.js`. Resolved by keeping row 129's two lines
as they are and inserting my line between them, as in r1. Page script order is now `editor, brand, app, markdown-preview, chat, bus`.
2. `packages/webui/src/serve.mjs` (static map, lines 25-33). Row 129 added `chat.js` to the script list and `chat.css`
to the stylesheet list; this row adds two explicit entries. Resolved by keeping row 129's lists and adding my
`/editor.js` and `/editor.css` entries after them. No entry of either row changed.
3. `packages/webui/tests/browser.test.mjs` (line 21). Row 129 changed the count from 4 to 5 and added a
`script[src="/chat.js"]` count of 1; r1 replaced the count with a list. Resolved with the list of all six, in page
order: `['/editor.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/bus.js']`, and kept row 129's
`/chat.js` count line unchanged under it. The count of 5 is gone (a pinned list says more).
### Merges that applied without a conflict, and what I looked at
- `packages/webui/src/public/bus.js`. Row 129 changed it (the Chat section, `forget()`, the `/chat` branch in `render`, the
palette views, the config re-render condition). Mine are in `docView`, `view` and `render`'s signature and the mode-click
handler. The merge is textual with no overlap. Checked by reading, not by running: `render(navigated, opts = {})` still
takes `opts` (line 866), the chat branch returns before `view(...)` so `opts` is never needed there, `view(get, path, q, opts)`
is at 821, and `docView(..., { reuseDraft })` at 683. **The behaviour of the combined file is untested until r2.**
- `packages/webui/tests/serve.test.mjs`. Row 129 did not touch it on this path list; my one-line change (two editor paths) applied as in r1.
- `docs/TOOLS.md`, `packages/webui/README.md`. Row 129 appended its own sections at the end of both; mine are separate
paragraphs and sections. No overlap.
- `packages/webui/package.json`, `tests/docs-browser.test.mjs`. Unchanged by row 129; applied as in r1.
### The grep for structure pins, repeated on the new base
Grepped `tests/chat*.mjs`, `views.test.mjs`, `shell.test.mjs`, `serve.test.mjs`, `browser*.mjs`, `bus*.mjs` for
`index.html`, script and link selectors, `stylesheet`, `/editor`, `/chat.js`, `/chat.css` and `src/public`. Row 129 changed
`shell.test.mjs` (the `#sections svg use` count is 10 now, with a Chat link check): this row adds no nav item, so it does
not affect it. Nothing new pins the number or order of scripts or links beyond `browser.test.mjs:22-23`. Again a grep: the suite is the check.
### Files that differ from the r1 candidate
By sha256 against r1's manifest, six files differ: `docs/TOOLS.md`, `packages/webui/README.md`, `packages/webui/src/public/bus.js`,
`packages/webui/src/public/index.html`, `packages/webui/src/serve.mjs`, `packages/webui/tests/browser.test.mjs`. The other 189 are
byte-identical to r1, including `editor.js` and `editor.css`, so the rebuild check does not change: `editor.js` is
`c601f6c3…`, `editor.css` is `8654ac57…` (to be re-verified by running the rebuild test on the new base).
### Still needed
Filbert's r1 verdict and any changes; the slot; the touched tests singly and the webui suite on the rebased tree, with
`MOSAIC_REQUIRE_EDITOR_BUILD=1`; a new manifest; Mos's fresh decision 123 go on the rebased `public/` diff; r2.
## r2 changes from Filbert's r1 verdict (CHANGES, #1648 comment 28954, rev 1794), written 2026-10-18T17:22Z (clock), nothing run
Made on the rebased tree only (`/mnt/storage/scratch/researcher/r154-wt2`, staged). The r1 candidate is untouched. **No test has
run on any of this.** The rebase packet in `rebase-850484a7d/` (patch `2b8ccdfb…`, manifest `971da9a4…`) predates these edits and is
superseded when the slot run is done and the r2 manifest is cut.
1. **Blocking, the round-trip gate had no test** (`bus.js` gate `window.MosaicEditor.roundTrip(s.text) === s.text`, Filbert's m3 forced
it true and survived). New test in `tests/editor-browser.test.mjs`, "a file the editor cannot write back byte for byte opens as
Source…": it swaps `window.MosaicEditor` for `{ mount: real.mount, roundTrip: t => t + ' ' }`, reloads the file, and asserts `#doc-text` holds
the file, the note "The visual editor is not available for this file, so it is open as source." shows, there is no `.ProseMirror`,
`#doc-save` is disabled, and Source is the pressed button. Same test, second half: `window.MosaicEditor = undefined` (the
`!window.MosaicEditor` branch of the gate) gives the same five facts. Expected killer for m3 (gate forced true): the first
`deepEqual` (`pm: false` fails because the editor mounts). **Not yet run; the mutant run belongs to the slot and its result goes here.**
2. **Mode follows the screen.** r1 compared a click with `docMode` (the view asked for). On a fallback `docMode` stays `'visual'`
while Source is on screen, so Visual was ignored: a user who made the text round-trip in Source (it re-renders only on a
switch) could not get back to the editor without clicking Source first. Now `docShown` is set in `docView` to what was drawn
(`'visual'` only when `visualOk`), and the click handler compares with it; `docMode` stays the preference. I did **not** set
`docMode = 'source'` on fallback, because docMode is shared across files and one unwritable file would then open every later file as Source.
The same test covers it: after a fallback, with the stub's `roundTrip` fixed, one click on Visual opens the editor with
no new read; the next fallback is a fallback again (preference kept); with no editor, a click on Visual leaves Source and the note.
Expected killer for reverting to `mode === docMode`: the Visual-click `h.pm()` wait times out.
3. **docs-browser wait restored.** r1's `source()` helper dropped `#doc-commit` `textContent !== ""` that row 148's `?throwrender` wait
had (the assertion `text('#doc-commit') === C1.slice(0, 12)` follows it). It is back in both waits in `source()`
(`tests/docs-browser.test.mjs`), so every use of the helper has it, not only the one line.
Files changed since the rebase packet: `packages/webui/src/public/bus.js`, `tests/editor-browser.test.mjs`, `tests/docs-browser.test.mjs`.
Path set is still the same 195. `editor.js` and `editor.css` are not touched, so the rebuild shas stay as in the build record.
Design choice for review (Sage accepted `docShown` in sage-0799, sent about 17:22:30Z; its own stamp said 17:24Z, corrected by sage-0800): a fallback does not set `docMode = 'source'`. `docMode` is one variable
shared across every file in the page, so one file the editor cannot write back would force every later file into Source, including files that
round-trip. `docShown` is the view drawn by the last `docView` and is what a click compares with; `docMode` stays the user's preference.
The "expected killer" wording above is a prediction. The killers are named from the slot run below, once it has happened.
## Dewey's r1 finding: line breaks in link titles, image alt/title and fence info (sage-0802; written, first slot run 2026-10-18T17:57Z)
Dewey's verdict comment is the source of record; this records what `editor/model.mjs` does and where I went past sage-0802.
The four sinks: a link mark's `title`, an image's `alt` and `title`, and a code block's `params`. Each is written into one line of Markdown, a paste can set any of them, and a line break in one let a following `<img …>` start an HTML block in the saved file.
- Link title, image alt, image title: `oneLine` replaces each run of CR/LF with one space on the way out.
- Code block info: `fenceInfo` keeps the first line only, and drops the info if it holds a backtick (a backtick info is not legal on a backtick fence).
- Load side: a `fence` token whose info holds a backtick (legal only on a tilde fence) sets `refused`, so that one block loads as a raw source block (`pre.md-raw` inside the visual editor, from `nodeOf`, model.mjs:265); the rest of the file stays visual. Without that, the first edit would have written the block back without its info.
Deviations from sage-0802: (i) the info is cut at the first line break, not the first whitespace, so `js {1,3}` keeps its attributes; (ii) the tilde-fence backtick case loads as a raw source block (that block only, not the whole file as Source), as above; (iii) a single newline in a title or alt that came from a file is collapsed only when its block is edited (an untouched block is written back from the source bytes).
Can the editor's own reading of a file produce these values? markdown-it cannot give a blank line in a title, alt or info string (a blank line ends the paragraph). It can give one newline in a title or alt, spaces in an info string, and a backtick in a tilde-fence info. So the `T\n\n<img …>\n\n` payload is reachable by paste only.
Not fixed, noted: a title ending in a backslash is written without escaping the backslash (`"a\\"`); it needs a separate look and is outside the finding.
Tests added in `tests/editor-browser.test.mjs`: one per sink on the paste path (assert the written string, no line starts `<img`, no blank line then a tag, `h.quiet()`), plus the tilde-fence test.
## r2 slot run 1, 2026-10-18T17:57Z (clock) — stopped at the first failure
Slot from sage-0803. Busy check CLEAR 17:56:43Z. `npm ci --ignore-scripts` exit 0 (lock sha eb60a494… and esbuild binary sha e1698a3d… both matched). Build twice, exit 0, byte-identical. New `src/public/editor.js` sha256 32fcaa18eaee2ff426c3c7e06038ee190f9fd7a332c9f3db349aa74df22c9fb5, 758277 B (r1: c601f6c3…, 757137 B); `editor.css` unchanged, 8654ac57…, 4462 B.
| test file | exit | tests | pass | fail |
|---|---|---|---|---|
| editor | 0 | 5 | 5 | 0 |
| editor-provenance | 0 | 6 | 6 | 0 |
| editor-browser | 1 | 11 | 10 | 1 |
(sums by awk over `r154-r2-logs1/*.log`: 22 / 21 / 1). Stopped there; docs-browser, browser, project-file, serve, markdown-preview, shell, the suite and the mutants did not run. Failure: "a code block info string pasted with line breaks…" — the saved file was the original text, no code block and no `<img`; the `written` assertion at line 445 failed. Cause not yet known. Slot released 17:57:30Z.
## Test fix after run 1 (sage-0806), written 2026-10-18T18:01Z (clock), not run
Why the fourth paste test saw no code block: not isolated. What the code says: `parseFromClipboard` (third_party/editor/prosemirror-view/src/clipboard.ts:98) runs `Slice.maxOpen` over HTML that is not ProseMirror's own, so the first and last node of a pasted slice are open and join the text at the cursor. A lone `<pre>` at the end of a paragraph is such a case; the `code_block` `parseDOM` rule (model.mjs:44) does read `data-params`, so params are settable by paste when the block stays whole. What does not fit that reading: the first run's Save sent the original text with no `code` in it, where a join would have added the text to the paragraph. I did not run an experiment to settle it.
Changes to all four paste tests (editor-browser.test.mjs): each now waits for the pasted node to appear in the editor's DOM (`a[title]`, `span.md-image[data-alt]`, `span.md-image[data-title]`, `pre[data-params]`), asserts its attribute equals the hostile value (line breaks and tag included), and only then waits for Save, saves and checks the written text. The `<pre>` is pasted between two paragraphs (`<p>x</p><pre …>code</pre><p>y</p>`), so it is a whole middle node and does not depend on the unexplained case. The expected fence is ```T\ncode\n``` (info cut at the first line break).
## Deviations from sage-0802: Dewey accepts or refuses each one separately
1. Fence info is cut at the first line break, not at the first whitespace. Reason: an info string of one line cannot open an HTML block, and cutting at whitespace would drop attributes such as `js {1,3}` that a file may rely on. **Dewey: accept / refuse.**
2. A tilde fence whose info holds a backtick loads as a raw source block (`refused`, model.mjs:150; `nodeOf` makes that block a raw_block, shown as `pre.md-raw`, editor-browser.test.mjs:499-500). Only that block is source; the file stays in the visual editor. Reason: the serialiser must drop a backtick info on a backtick fence, so editing that block would silently lose the info; as a raw block the bytes are kept. **Dewey: accept / refuse.**
3. A single newline in a loaded title or alt is collapsed only when its block is edited. Reason: an unedited block is written from its source bytes, so a file opened and saved with no edit round-trips byte for byte. **Dewey: accept / refuse.**
For the reviewers: the first run's unchanged file is still unexplained. The new paste tests do not depend on an explanation; each fails at the node wait if its paste is dropped, so a dropped paste cannot pass as a clean save. If the second run shows the <pre> is dropped even between paragraphs, the params half of Dewey's finding is not reachable by paste in this editor and Dewey decides whether it stands.
## r2 slot run 2, 2026-10-18T18:11Z (clock): green, and the run-1 failure explained (this section corrects lines 408, 412 and 422 above)
**Correction.** I wrote that run 1's saved file was the original text and that the cause was unknown. That was a misreading: the saved text began `# codeTitle`, the fixture's heading being `# Title`. The paste did land, at the **start** of the document (`selectAllChildren` then `collapseToEnd` leaves the cursor in the first block, the heading, not the last), and `Slice.maxOpen` opened the lone `<pre>` so its text "code" joined the heading and no params were set. The mutant logs show the same landing point (`# x …`, `# [word](…)Title`). The "end of a paragraph" wording in lines 412 and in the test comment was wrong; the test comment is corrected in the final bytes (comment only, after the run). The new tests are unaffected: a `<pre>` between two paragraphs is a whole node wherever the cursor is.
Slot from sage-0812; busy check CLEAR 18:08:33Z; run 18:08:33Z to 18:10:36Z; cwd sweep clear 18:10:48Z. Lock sha eb60a494… and esbuild binary sha e1698a3d… checked; build twice, byte-identical. `src/public/editor.js` sha256 32fcaa18eaee2ff426c3c7e06038ee190f9fd7a332c9f3db349aa74df22c9fb5, 758277 B; `editor.css` 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f, 4462 B.
Singles (awk-summed over `r154-r2-logs2/*.log`): 62 tests, 62 pass, 0 fail, 0 skipped — editor 5, editor-provenance 6, editor-browser 11, docs-browser 1, browser 1, project-file 10, serve 4, markdown-preview 19, shell 5. Webui suite with `MOSAIC_REQUIRE_EDITOR_BUILD=1`: 201 tests, 201 pass, 0 fail.
Mutants, killers from the logs (editor-browser, 11 tests each; files restored and cmp'd byte-identical afterwards):
| mutant | result | killed by |
|---|---|---|
| round-trip gate forced true (`roundTrip(s.text) === s.text` → `true`) | 1 fail, 10 pass | "a file the editor cannot write back byte for byte opens as Source…", assertion "a failed round trip shows the source, the note and a Save that is off" (test line 397) |
| docShown revert (`mode === docShown` → `mode === docMode`) | 1 fail, 10 pass | the same test, "Condition timed out: #doc-visual .ProseMirror" (the Visual click did nothing) |
| serialiser verbatim (`oneLine` identity, `fenceInfo` returns the value) | 4 fail, 7 pass | the four paste tests: link title, image alt, image title, code block info string, each "the value is on one line" |
So the params half of Dewey's finding is reachable by paste when the `<pre>` is whole, and the tests show the clamp working.
## r2 candidate files (2026-10-18T18:12Z, clock)
`r2/` in this packet: `candidate.patch` (`git diff --cached --binary` against `850484a7d`, sha256 `3c7c0114410d8194d10d3b3c1c7b7dbdee3db17099813f95f793451e8ada41eb`; `git apply --check` passes on a clean export of `850484a7d`), `changed-paths.txt` (195 paths, the same set as r1 and the rebase preview) and `candidate-manifest.sha256` (sha256 `1db8d410ca4d706a355ce3d1dec3e985ae058093a4a56f5a31521079a4cce017`; each path as it sits in `/mnt/storage/scratch/researcher/r154-wt2`). Nothing is committed or pushed. The base moved from `0f715a054` (r1) to `850484a7d`, so the patch is not r1's patch plus a delta; the r1 packet stays as it was.
Every byte was in the run-2 tree except one edit after it: the comment above the four paste tests in `tests/editor-browser.test.mjs` (now sha256 5b050de8…), from "…a lone <pre> pasted at the end of a paragraph left the file unchanged in the first r2 run; the cause was not isolated, so this paste does not depend on it." to "…so a lone <pre> joins the block the cursor is in as plain text and sets no params; the paste here lands in the first block, the heading." Comments only; `node --check` passes. The rebuilt `editor.js` and `editor.css` are the run-2 files (shas above); `editor/BUILD.json` is the one the build wrote.
## r2 correction: editor/BUILD.json in the candidate is the mutant's (found after sage-0831, 2026-10-18T18:35:34Z)
Run 2 did set `MOSAIC_REQUIRE_EDITOR_BUILD=1` (run2 script line 8, exported before anything ran), and editor-provenance passed 6/6 in it (`r154-r2-logs2/editor-provenance.log`). That result was true when it ran. The candidate was cut from a tree that was no longer what that run measured.
Cause: the serialiser-verbatim mutant edits `editor/model.mjs` and runs `node editor/build.mjs`. The build rewrites `editor/BUILD.json` with the mutant's editor.js (73975eb2…, 758168 B; `serialiser-verbatim.build.log`). The mutant function restored model.mjs and editor.js but never BUILD.json, and the closing "files restored byte-identical" check covered only bus.js, model.mjs and editor.js. So BUILD.json stayed at the mutant's values, the patch and manifest (BUILD.json 317e8d78…) carried them, and the shipped editor.js (32fcaa18…, 758277 B) no longer matched its record.
My restore check was incomplete and my "restored byte-identical" line overstated what it verified. For round 3: rebuild so BUILD.json records 32fcaa18…/758277, and the mutant script must back up and restore BUILD.json and include it in the closing check (or the check must cover every path in the manifest).
## Round 3 changes, written 2026-10-18T18:54:19Z (nothing run yet; results go in a section below after the slot run)
Answers to the r2 verdicts (Dewey 28979, Filbert 28977):
1. **Backslash in a link or image title (Dewey, blocking).** `editor/model.mjs`: new `titleBackslash` doubles every backslash in a link title (after `oneLine`) before the vendored link writer, which escapes only `"`; the link `close` override now uses it. The image writer escapes `[\\"]` with `'\\$&'`, so backslash and quote both get a backslash. A pasted title `x\") <img src=x onerror=alert(1)> ` is now written `"x\\\") <img src=x onerror=alert(1)> "`, which reads back as that same title; a title ending in `\` is written `"end\\"`. Unedited blocks are still written from their source bytes, so the round trip of a file is unchanged.
2. **Tests (editor-browser.test.mjs).** The four line-break paste tests now share one helper (`pasteTest`); same assertions as r2. Added, for a link title and an image title each: a title holding a quote after a backslash then a tag, and a title ending in a backslash (four tests). Each waits for the pasted node to hold the value in the document, saves, and asserts the exact written string, so each fails on r2 (r2 writes `"x\\") <img…> "` and `"end\"`). (Superseded after sage-0844, before the run: the four tests also re-read the saved text, see "Round 3 results".)
3. **g5 (Filbert).** New test: `<pre data-params="a`b">` pasted between two paragraphs and saved must write a bare fence (```\ncode\n```). Mutant g5-backtick-kept in the run script drops the backtick test in `fenceInfo`.
4. **docs-browser.test.mjs:67 (Filbert).** The second wait in `source()` has the explicit `document.querySelector("#doc-commit")` existence check back, as line 65 has.
5. **Tilde wording (Dewey ii, Filbert).** The three lines above that said "opens as Source" now say that block loads as a raw source block (`pre.md-raw`, `nodeOf` model.mjs:265) and the file stays in the visual editor. The behaviour is unchanged.
6. **BUILD.json (both, blocking).** The cause is in the r2 correction section above. Round 3 rebuilds it; the run script checks that BUILD.json records the shipped editor.js sha256 and byte count right after the rebuild.
7. **Dewey non-blocking: `<img>` in an image alt** stays in the alt for CommonMark renderers; I leave it as is and note it for him.
Run script `/mnt/storage/scratch/researcher/r154-r3-run.sh`, in the order of sage-0840: toolchain sha check, build twice (editor.js and BUILD.json byte-identical), every webui test file singly, the suite, a baseline manifest of all candidate paths, seven mutants (gate-true, docshown-revert, serialiser-verbatim, info-verbatim, g5-backtick-kept, link-backslash, image-backslash), each backing up and restoring the file, editor.js, editor.css and BUILD.json; then `sha256sum -c` over the whole manifest (stop on any failure), provenance under MOSAIC_REQUIRE_EDITOR_BUILD=1, `sha256sum -c` again, and only then the patch and manifest, with a clean-export apply check. Every mutant string was counted once in its file before the run.
## Round 3 results (slot run 2026-10-18T18:55:31Z to 19:01:13Z; logs in `r3/`)
Run script `/mnt/storage/scratch/researcher/r154-r3-run.sh`, exit 0, final line `done`; output `r3/run.out`.
- **Toolchain.** `package-lock.json` and the esbuild binary matched their pinned sha256 values. Two builds, editor.js and BUILD.json byte-identical. editor.js `9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee` (758420 B), editor.css `8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f` (4462 B). `editor/BUILD.json` records that editor.js sha256 and byte count (checked by the script right after the rebuild).
- **Singles.** All 32 webui test files singly (`r3/_singles.txt`): 206 tests, 206 pass, 0 fail, 0 skipped (awk sum over the 32 logs).
- **Suite.** `node --test tests/`: 206 tests, 206 pass, 0 fail, 0 skipped (`r3/suite.log`). Same total as the singles.
- **Baseline.** 195 changed paths, the same set as r2 (`cmp` against r2's list). `sha256sum -c` over all 195 passed before the mutants.
- **Mutants** (each run on `tests/editor-browser.test.mjs`, 16 tests; each backs up and restores the file, editor.js, editor.css and BUILD.json). All seven exited 1; 112 tests run, 101 pass, 11 fail (awk sum over the seven logs).
| mutant | fails | killing tests |
|---|---|---|
| gate-true (`roundTrip(s.text) === s.text` replaced by `true`) | 1 | "a file the editor cannot write back byte for byte opens as Source, says so, cannot save…" (Save not off) |
| docshown-revert (`mode === docShown` to `mode === docMode`) | 1 | the same test (timed out waiting for `#doc-visual .ProseMirror`) |
| serialiser-verbatim (`oneLine` identity) | 3 | link title, image alt and image title "pasted with line breaks in it is written on one line…" |
| info-verbatim (fence info not cut at the first line) | 1 | "a code block info string pasted with line breaks in it is written on one line…" |
| g5-backtick-kept (`fenceInfo` keeps a backtick) | 1 | "a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed" (the new g5 test) |
| link-backslash (link title no longer backslash-doubled) | 2 | "a link title holding a quote after a backslash then a tag is written with the backslash escaped…" and "a link title holding a trailing backslash is written…" |
| image-backslash (image title escapes `"` only) | 2 | the same two tests for an image title |
**What the re-read asserts do and do not show.** The four backslash tests assert the exact written string first, then (with `reread`) mount a read-only editor on the saved text and assert the parsed title equals the pasted value and no `<img` is in the document text. In the link-backslash and image-backslash mutants the first assertion throws, so the test stops there: the logs show the exact-string `AssertionError` for all four failures and never reach the re-read. sage-0844 expected both asserts to fail on those mutants; I can show only the first. The re-read asserts passed on the shipped code in all runs (singles, suite), and I have not run a mutant that gets past the exact-string check to see the re-read fail alone. Say so if a reviewer wants that run (a title-escape mutant that writes a different but still wrong string would do it); until then, the exact-string assert is the killer of record.
- **After the mutants.** `sha256sum -c` over the whole manifest against the tree: 195 OK of 195, no failure (`r3/post-mutant-check.txt`). editor-provenance under `MOSAIC_REQUIRE_EDITOR_BUILD=1` after the mutants: 6 tests, 6 pass (`r3/provenance-post-mutant.log`). `sha256sum -c` again before the cut: 195 OK (`r3/pre-cut-check.txt`).
- **Cut last.** `git add -A packages docs`, path list equal to the baseline, `git diff --cached --binary` to `r3/candidate.patch` (sha256 `d709b2dd390b7c01e6ef96aa7eced91287d1a48b7e003d74db3645f57a8c3db1`; `git apply --check` passes on a clean export of `850484a7d`). `r3/candidate-manifest.sha256` is identical to the checked baseline, and `sha256sum -c` over it passed 195 OK of 195 (`r3/cut-manifest-check.txt`). Manifest sha256 (the candidate digest): `cebca5145c899a362e938d36b26168070ad8cc01bfdc0c9f44a68eee07a005ca`. Nothing committed or pushed. `r2/` and `r1/` are unchanged.
Answers to the non-blocking notes:
- **g5 (Filbert).** New test and mutant g5-backtick-kept above; the mutant is killed by it.
- **Tilde wording (Filbert, Dewey ii).** Fixed at the three places; only that block is a raw source block.
- **docs-browser.test.mjs:67 (Filbert).** The existence check is back; the file passed singly and in the suite.
- **Trailing backslash in a title (Filbert).** Written escaped now; link and image tests, killed by their mutants.
- **`<img>` in an image alt (Dewey).** Left as is: the alt stays in the alt for a CommonMark renderer; the editor's tokenizer has `html: false`, so it makes no inline HTML node of it.
Line refs corrected after Dewey 28985 (r2 numbers were stale in r3): `nodeOf` is model.mjs:265, the raw-block asserts are editor-browser.test.mjs:499-500. Text only; the candidate is untouched.
## Rebase onto df4d5702f (row 125 landed first, sage-0884), prepared 2026-10-18, nothing run
Row 125 landed as `aa625565f`; `df4d5702f` is origin/refactor after Dewey's packet commit. The r3 candidate (base `850484a7d`, manifest `cebca514…05ca`, approved by Dewey 28985 and Filbert 28986) is untouched in `r3/`. The rebase is a separate tree, `/mnt/storage/scratch/researcher/r154-wt3` (detached at `df4d5702f`, `packages/webui/node_modules` copied from the r3 tree), and gets its own directory in this packet after the slot run. I applied `r3/candidate.patch` with `git apply --3way --index`: no conflicts, 0 unmerged paths, no conflict markers, the same 195 paths as r3 (`cmp` of the two path lists). **No test, build or server has run on it.**
What 125 changed in webui (`git diff 850484a7d df4d5702f`, nine files): `chat-http.mjs`, `chat.mjs`, `public/bus.js`, `serve.mjs`, `tests/channel-chat.test.mjs`, `chat.test.mjs`, `limits-browser.test.mjs` (new), `limits-route.test.mjs` (new), `shell.test.mjs`; and `docs/TOOLS.md`.
By sha256 against r3's manifest, three of my 195 files differ: `docs/TOOLS.md`, `packages/webui/src/public/bus.js`, `packages/webui/src/serve.mjs`. Everything else is byte-identical to r3, including `editor.js`, `editor.css`, `editor/BUILD.json` and every file under `editor/` and `third_party/editor/`.
- `serve.mjs`: 125 added the `limits` verb and `reset` to the settings keys; my hunk is the two static-map entries `/editor.js` and `/editor.css`. Different regions; the combined diff against the new base is only my two lines.
- `public/bus.js`: 125 changed 28 lines (settings and limits); my hunks are in `docView`, `view`, `render`'s signature, `paintDoc`, the mode-click handler and the `unmountEditor` calls. Read the combined diff against the new base: it is exactly my r3 hunks, `opts` still reaches `docView` through `view`. **The behaviour of the combined file is untested until the slot run.**
- `docs/TOOLS.md`: 125 added 11 lines elsewhere; my paragraph in the Console section applied as in r3.
- **All six scripts stay pinned.** `index.html` and `tests/browser.test.mjs` are not touched by 125, so the pin at `browser.test.mjs:22` is still `['/editor.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/bus.js']`, in page order, and `index.html` loads them in that order. Row 125 added no script. Neither row pins a bare count.
- Structure-pin grep on the new tests (`limits-browser`, `limits-route`, `channel-chat`, `chat`, `shell`): nothing selects scripts, stylesheets or `index.html`; `shell.test.mjs` reads `app.js`, `bus.js`, `index.html` as text for other checks. The suite is the check.
Run plan (`/mnt/storage/scratch/researcher/r154-rb-run.sh`, derived from the r3 script; the diff against it is the base, paths, the compare list and the public diff cut): toolchain sha check, two builds (byte-identical), BUILD.json record check, every one of the 35 webui test files singly, the suite, baseline manifest of the 195 paths, the same seven mutants (all seven anchors count once on the rebased files), `sha256sum -c` over the whole manifest, provenance under `MOSAIC_REQUIRE_EDITOR_BUILD=1`, `sha256sum -c` again, then the patch, manifest, and the `public/` diff Mos reads (`public.diff`: all of `packages/webui/src/public`, which includes the generated `editor.js` and `editor.css`; `public-handwritten.diff`: `bus.js` and `index.html` only) with sha256 values.
## Rebase round on 7bd2a348c (row 125 = aa625565f, row 162 = 7e7f8e208), run 2026-10-18T20:42Z–20:48Z
Supersedes the "Rebase onto df4d5702f … nothing run" section above: sage-0897 moved the base to `7bd2a348c` (row 162 landed on top of `df4d5702f`) before the run, so I rebuilt the tree there instead of using the df4d5702f tree. Nothing was run on df4d5702f.
**Tree.** Detached worktree at `7bd2a348c`, `git apply --3way --index r3/candidate.patch`: exit 0, 0 unmerged, the same 195 paths as r3 (`rebase-7bd2a348c/changed-paths.txt` is byte-equal to `r3/changed-paths.txt`). Against r3's manifest, three files differ: `docs/TOOLS.md`, `packages/webui/src/public/bus.js`, `packages/webui/src/serve.mjs`. The bus.js and serve.mjs results are byte-identical to the df4d5702f tree. Row 162 touched only one of my 195 paths, `docs/TOOLS.md` (its edits are around lines 342-384; my five-line row 154 paragraph is at line 441, a separate region). My TOOLS.md added lines are identical in the df4d5702f and 7bd2a348c trees. The editor sources, `editor.js`, `editor.css` and `editor/BUILD.json` are unchanged from r3.
**Run** (`rebase-7bd2a348c/run.sh`, `run.out`; the busy check ran first and printed CLEAR; one run, no rerun). Counts are awk sums over the logs, not the script's own line:
- Rebuild twice: both exit 0, byte-identical `editor.js` and `BUILD.json`; `BUILD.json` records `editor.js` `9c881b13…fee`, 758420 bytes, as in r3.
- Every webui test file singly: 35 of 35 files, 214 tests, 214 pass, 0 fail, 0 skipped; no file reports zero tests. The suite run: 214 / 214 / 0 / 0.
- `browser.test.mjs:22` still pins `['/editor.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/bus.js']`, and `index.html` loads them in that order. Neither 125 nor 162 touched either file. `single-browser.log`: 1 test, 1 pass.
- Seven mutants, each exit 1 with `BUILD.json` backed up and restored around it. Killers: gate-true and docshown-revert by "a file the editor cannot write back byte for byte opens as Source…" (1 fail each); serialiser-verbatim by the link-title, image-alt and image-title line-break tests (3); info-verbatim by the code-block info line-break test (1); g5-backtick-kept by the backtick info-string test (1); link-backslash by the two link-title backslash tests (2); image-backslash by the two image-title backslash tests (2). As in r3, the two backslash mutants fail on the exact-string assert; the re-read assert is not reached.
- After the mutants: `sha256sum -c` over the 195-entry baseline manifest, 195 OK, 0 failures (`post-mutant-check.txt`, `pre-cut-check.txt`); editor-provenance with `MOSAIC_REQUIRE_EDITOR_BUILD=1`: 6 tests, 6 pass.
- Cut last: path list equal to r3's, `candidate.patch` applies to a clean export of `7bd2a348c`, and `sha256sum -c` over the new manifest is 195 OK of 195 (`cut-manifest-check.txt`).
**Digests.**
- `candidate.patch` `a822401ac794252eaebc08510a89597d87ff254508baa3830f7360314cefffc9`
- `candidate-manifest.sha256` `41024ac5e2b118e5ff11a74b61ee82e5bc9f177d0622c5e5af0f284622985111`
- `public.diff` `3b67cf23b70f4e753cda610db0a24c4eaa3107713dd9e0eace9e49a08b78663b` (4 files: `bus.js`, `editor.css`, `editor.js`, `index.html`)
- `public-handwritten.diff` `2251d83b03d467333ca21ad7bbc463040701f4ead1e2b7d01fc289506a98476e` (`bus.js` and `index.html` only; for Mos's decision 123 go, `editor.js` and `editor.css` are generated and covered by the `BUILD.json` record plus the byte-identical double build)
**Not tested.** Nothing live: no pinned-copy re-pin, no Console restart. The run is in a scratch worktree only.
## Rebase round on d88613bac (row 155 landed as b2f57ca70), run 2026-10-18T21:24Z–21:36Z
Supersedes the `7bd2a348c` round above as the candidate to review; that round's directory `rebase-7bd2a348c/` stays as the record of what was run on the earlier base. Base moved because row 155 landed (sage-0909). The packet has two run directories for this base, kept apart:
- `rebase-d88613bac-stopped/` — first run, 21:24:11Z–21:28:08Z. Stopped at the full webui suite, exit 1: 221 tests, 220 pass, 1 fail. The failure is `tests/board-held.test.mjs:163` ("a redirect answer on a Board read…"), "Condition timed out: `!document.querySelector("#signed-out").hidden`" from `tests/browser.mjs:48`, at `board-held.test.mjs:220`, after 11.9 s. Singles in that run: 36 of 36 files, 221 pass, 0 fail. Left untouched.
- `rebase-d88613bac/` — second run, once, script unchanged, no test change (sage-0919). Passed end to end.
Sage's account of the failure (sage-0919): the row 155 r3 gate at 21:10Z failed on the same test at the same `:220` wait after 13.9 s, on d88613bac's webui without my patch, and passed on rerun; the helper at `board-held.test.mjs:76` polls 100 times at 50 ms (about 5 s) and the sign-out after the redirect answer runs slower than that under a parallel suite; filed as P19 366. I did not test that explanation myself: I ran no clean-base suite. What I observed is the failure once in the full suite, never in the singles, and a pass in the rerun.
**Tree.** Detached worktree at `d88613bac`, `git apply --3way --index rebase-7bd2a348c/candidate.patch`: exit 0, 0 unmerged, same 195 paths (`changed-paths.txt` byte-equal to the earlier round's). Four of my paths differ from the `7bd2a348c` tree: `docs/TOOLS.md`, `packages/webui/README.md`, `public/bus.js`, `serve.mjs`. For the first three the changed lines equal 155's own diff to that file; for `serve.mjs` I read the combined hunk by hand: my two static-map lines (`/editor.js`, `/editor.css`) sit above `/icons.svg`, none of 155's lines overlap. 155's changes to `webui/src/bus.mjs`, `cli.mjs`, `bus/src/broker.mjs` and tests are not in my paths. The mutant anchors in `bus.js` still occur once.
**Run** (second run; `rebase-d88613bac/run.sh`, `run.out`; busy check CLEAR first). Counts are awk sums over the logs:
- Rebuild twice: byte-identical `editor.js` and `BUILD.json`; `BUILD.json` records `editor.js` `9c881b13…fee`, 758420 bytes, as in r3.
- Singles: 36 of 36 files, 221 tests, 221 pass, 0 fail, 0 skipped, 0 cancelled (155 added `assistant.test.mjs`).
- Full suite: 221 tests, 221 pass, 0 fail.
- `packages/bus/tests/channel-proof.test.mjs`, whole file (sage-0909; 164's byte freeze pins `webui/src/bus.mjs`, `human.mjs`, `human-cli.mjs`, `cli/src/transport.mjs`): 2 tests, 2 pass.
- `browser.test.mjs:22` still pins `['/editor.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/bus.js']`; browser single 1 of 1.
- Seven mutants, each exit 1, `BUILD.json` restored around each. Failing counts: gate-true 1, docshown-revert 1, serialiser-verbatim 3, info-verbatim 1, g5-backtick-kept 1, link-backslash 2, image-backslash 2; killers are the same tests as in the earlier rounds.
- `sha256sum -c`: post-mutant 195 OK, pre-cut 195 OK, new manifest 195 OK, no failures. Editor-provenance with `MOSAIC_REQUIRE_EDITOR_BUILD=1` after the mutants: 6 tests, 6 pass.
- The patch applies to a clean export of `d88613bac`.
**Digests.**
- `candidate.patch` `bdd046abbeca2884581c43175b55ed367f454927f8271a75b32ae3cb20b3ac6b`
- `candidate-manifest.sha256` `3a4bc21c9a8170667b0b36503195bf631b735f5e728ab7e9c9cd8974ccce3b05`
- `public.diff` `902f02448ea7924524432f2b7431e064c3d6e69413ec277a27e883010305505b` (`bus.js`, `editor.css`, `editor.js`, `index.html`)
- `public-handwritten.diff` `ea59079ee44ddbc53af0534f7c261b9fd05c7f35ab715ba58a5db2ac9276ec75` (`bus.js`, `index.html`)
**Not tested.** Nothing live: no re-pin, no Console restart. The row's `in-review` record still names the `7bd2a348c` manifest `41024ac5…5111`; I made no queue move this round (sage-0905: leave the row in-review).
+119
View File
@@ -0,0 +1,119 @@
# Row 154 (#1648) phase 1: library search
Researcher, 2026-10-18. Brief: `docs/plans/2026-10-16_q168-wysiwyg-editor.md` (blob 9d01d989c187). Starts from row 148's
search (`agents/researcher/work/queue-148/LIBRARY.md`). Nothing was installed in the repository; every install was a
scratch directory with its own `package.json` under `/mnt/storage/scratch/researcher/q154/`, `--ignore-scripts`, and
the Node runs were under `bwrap --unshare-net`. The advisory queries used the OSV batch API
(`https://api.osv.dev/v1/querybatch`) on each candidate's lockfile, run 2026-10-18; the positive control (dompurify
2.3.3, markdown-it 12.2.0) returned 20 and 3 advisories the same day, so an empty answer means no advisory.
## Bar (row 148's, from the brief)
1. Permissive license.
2. `script-src 'self'`: no eval, no `new Function` that can run; nothing loaded at runtime; no CSP change.
3. A current sanitizer, or a design with no HTML sink that needs one.
4. A bundle that rebuilds from its tagged source (Q167 D3 bans vendoring prebuilt or minified bundles).
The Console CSP is `default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; font-src
'self'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; form-action 'self'` (`packages/webui/src/public`
is served from a static route table in `serve.mjs`, line 24-25).
## Candidates
"Normalisation" is measured over the 414 `.md` files in this checkout (`results/corpus.txt`; no `spec/north-star.md`
exists in this checkout, the nearest file is `packages/project/templates/north-star.md`, 3 lines). The test is
parse, serialise, compare bytes, with no edit.
| # | Candidate | Version | License | Closure (locked pkgs) | Advisories (OSV) | Verdict |
|---|---|---|---|---|---|---|
| A | ProseMirror (11 pkgs) + prosemirror-markdown + markdown-it | pm-markdown 1.13.8, markdown-it 14.3.3, see REPORT.md for all pins | MIT (entities BSD-2-Clause) | 29 | 0 | **Passes. The candidate.** |
| B | Milkdown (core, kit, preset-commonmark, transformer) | 7.22.3 | MIT; one dual `MPL-2.0 OR Apache-2.0` (dompurify) | 156 | 0 | Meets the bar; not chosen. |
| C | Tiptap (core, pm, starter-kit, markdown) | 3.32.0 | MIT | 44 | 0 | Meets the license and CSP bars; fails on content: drops tables. |
| D | Lexical (+ markdown, rich-text, list, link, code, history) | 0.52.0 | MIT | 19 | 0 | Meets the bar on paper; round trip not measured. |
| E | BlockNote core | 0.56.0 | MPL-2.0 (core), MIT (rest) | 36 | 0 | Weaker license fit; block model; not measured. |
| F | Toast UI Editor | 3.2.2 | MIT (+ dual MPL/Apache dompurify) | 13 | dompurify 2.5.9: 17 | **Fails** (row 148's finding, rechecked). |
| G | CodeMirror 6 live-preview hybrid | view 6.43.14, state 6.7.6, language 6.13.1, commands 6.11.1, lang-markdown 6.5.2 | MIT | 22 | 0 | Passes; not WYSIWYG, see note. |
| H | Muya (MarkText) | not examined | not checked | - | - | Not measured. |
### A. ProseMirror + prosemirror-markdown + markdown-it
- **Origin.** Source repositories are `code.haverbeke.berlin/prosemirror/<pkg>` (tags `1.25.12` and so on; the GitHub
mirrors lag and lack the current tags), `github.com/markdown-it/*`, `github.com/marijnh/{orderedmap,rope-sequence,w3c-keyname}`,
`github.com/mathiasbynens/punycode.js`, `github.com/fb55/entities`. Pinned commits are in REPORT.md.
- **Source readable without a prebuilt.** Yes. The ProseMirror packages ship their TypeScript in `src/`; the tagged
trees were compared file by file with the npm packages (`results/pins.txt`): every file present in both is
identical (one metadata difference: punycode.js's `package.json` name). `dist/` is the prebuilt output; the plan
imports `src/` and never `dist/`. Two small packages (orderedmap, rope-sequence) keep a root `index.js` source; their
tags track only type declarations under `dist/`, and the build aliases the root `index.js`.
- **Build.** One unminified IIFE from `esbuild` 0.28.2 pinned in `package.json` with lockfile integrity; two builds
from the pinned trees gave identical sha256 (`9587a170...`). See REPORT.md.
- **Sanitizer.** There is no HTML to sanitize on the load path: `markdown-it` runs with `html:false` and the editor
schema is the whitelist. The one HTML sink is paste, which `prosemirror-view` parses into a detached
`createHTMLDocument` body through the schema's `parseDOM` rules. Measured with hostile HTML: scripts, handlers,
`svg`, `iframe`, `style`, `form`, `object` and `math` are dropped; **`<img src>`, `<a href="javascript:...">` and
`<a href="data:...">` survive the default schema** (`results/hostile-html.txt`). Phase 2 must therefore replace the link and image
node specs with ones that enforce `linkTarget` and render images as text, as row 148's preview does.
- **CSP/eval.** No `eval`, `new Function`, `document.write`, `fetch(`, `XMLHttpRequest` or dynamic `import(` in the
bundle (0 hits; the bundle holds all 132 inputs). It needs only `script-src 'self'`; `style-src` already allows
inline styles. I ran it in jsdom, not in a browser under the real CSP; the brief's browser test settles that in
phase 2. One CSS file (`prosemirror-view/style/prosemirror.css`, 54 lines) must be served as a route, plus the
editor's own CSS.
- **Normalisation.** Stock serialiser: 1 of 414 byte-identical. Splice design (below) makes it 414 of 414 by
construction for an unedited file. Details in REPORT.md.
- **Why it passes.** Smallest closure that is a real WYSIWYG, all MIT/BSD-2, tagged source, no sanitizer needed because
the schema is the filter, and it is the engine the larger options (B, C, E) sit on.
### B. Milkdown 7.22.3
Built on ProseMirror (same `prosemirror-model` 1.25.12 / `prosemirror-view` 1.42.6) with remark/unified for markdown.
156 locked packages, 152 MIT, one dual-licensed (dompurify 3.4.17, `MPL-2.0 OR Apache-2.0`, pulled in by
`@milkdown/components`), BSD-2-Clause, BSD-3-Clause, ISC one each. 0 advisories. `src/` ships in the npm package
(`@milkdown/core` 19 files, `preset-commonmark` 60, `transformer` 17, `crepe` 120). No `eval(` or `new Function(`
text in the four tarballs I grepped. Normalisation with `commonmark` + `gfm`: 59 of 414 byte-identical; 142 of 414 after setting the stringify
bullet to `-`. Not chosen: a closure 5 times the size of A to read for a review, remark's stringifier still rewrites
most files, and the extra packages (unified, mdast, micromark, vfile and so on) are all code the reviewers must accept.
Not an outright fail; if A is rejected it is the next one to build.
### C. Tiptap 3.32.0 + `@tiptap/markdown`
44 locked packages, all MIT, 0 advisories, no sanitizer in the closure (it sits on ProseMirror). `src/` ships for
`@tiptap/core` (323 files) and `@tiptap/markdown` (9). Round trip: 1 of 414 identical, and **tables are dropped
entirely** (346 table blocks in the corpus), which is silent content loss, so it fails the brief's "same bytes or
stated normalisation" rule. `@tiptap/pm` re-exports the ProseMirror packages, so the schema-filter caveat in A applies
here too.
### D. Lexical 0.52.0
19 locked packages, all MIT, 0 advisories, no ProseMirror. `src/` ships. I did not run the 414-file round trip
through `@lexical/markdown`, so its normalisation is **not measured**. It is a possible alternative that I did not
examine further, because A already meets the brief.
### E. BlockNote core 0.56.0
`@blocknote/core` is **MPL-2.0** (file-level copyleft; the other 35 packages are MIT), 0 advisories, TipTap/ProseMirror
underneath. Its model is Notion-style blocks, which does not match a Markdown file's own structure. Not measured; the
MPL-2.0 core would need Mos's say-so, which is not worth asking for a candidate that does not beat A.
### F. Toast UI Editor 3.2.2 (row 148's rejection, rechecked)
A fresh lock now resolves `dompurify` 2.5.9, which has **17** OSV advisories (the control confirms the query works).
The npm package has no `src/`; the standalone bundle is not rebuildable from the tag (row 148's `build.md`), and 2 files in the tarball contain the text
`eval(` or `new Function(` (I did not trace whether either can run). Fails the bar for the same reasons as row 148.
### G. CodeMirror 6 (live-preview hybrid)
MIT, 22 locked packages, 0 advisories, no ProseMirror, no sanitizer. Source is on `code.haverbeke.berlin/codemirror/*`
(the npm tarballs hold no `src/`, so the tag is the only readable source, built with the same method as A). It edits the
**source text** with decorations that hide marks around the cursor, so an open-and-save with no edit is byte-exact with no
extra mechanism. It is not a WYSIWYG editor in the sense of the brief (the user sees and edits markup on the active
line). Kept as the fallback if Mos prefers byte-exactness over a rendered editing surface.
### H. Muya
Not examined. It is MarkText's editor core; I did not check its license text, closure, advisories or build. Listed so
the gap is on record.
### Carried from row 148
`marked`, `markdown-it`, `micromark`/`mdast-util-from-markdown` are renderers and parsers, not editors. They do not
satisfy a WYSIWYG requirement; `markdown-it` appears as the parser inside A.
+283
View File
@@ -0,0 +1,283 @@
# Row 154 (#1648) phase 1: candidate report
Researcher, 2026-10-18 (figures re-checked against the result files at 15:20Z). Brief: `docs/plans/2026-10-16_q168-wysiwyg-editor.md`
(blob 9d01d989c187). Search table and the rejected candidates: `LIBRARY.md`. This report is for Sage to take to Mos for the
decision 123 go. **No editor code is in the repository and nothing was installed there.** Phase 2 has not started.
## Recommendation
Candidate A: **ProseMirror + prosemirror-markdown + markdown-it**, built here from tagged source into one unminified
bundle with `esbuild`, with a **block-splice save** so an unedited file saves the same bytes. All MIT except one
BSD-2-Clause package (`entities`). No separate sanitizer: markdown parsing runs with `html:false`, and the editor schema
is the whitelist. The schema needs two overrides (links, images) that I measured as necessary, below.
This is a recommendation, not a go. Five points need a ruling from Mos (end of this report).
## 1. Project, origin, pins
Twenty packages are bundled. Every pin is a tag in the project's own repository; each tagged tree was compared with the
npm package of the same version and every file present in both is byte-identical (`results/pins.txt`;
`punycode.js` differs only in `package.json`'s `name`). The ProseMirror tags exist on the project's own forge, not on the
GitHub mirrors (which lack the current tags), so the provenance file should record that URL.
| Package | Version | License | Commit | Tree | Origin |
|---|---|---|---|---|---|
| prosemirror-model | 1.25.12 | MIT | 4211aeeaa3d738454a5d1428a95c1a210e86d787 | 30600a5e07c4ec5c63f1fb1c8ab392e2bc019b9f | code.haverbeke.berlin/prosemirror/prosemirror-model |
| prosemirror-state | 1.4.4 | MIT | d6fdcd19c4f7f68206b0a8d49649860365672585 | b781a85e73fb7c3f37bc669e7dc27e7d16f592d6 | …/prosemirror-state |
| prosemirror-view | 1.42.6 | MIT | f5a5b93a78f6f723c1fbf1a2eec1556a022cd0ee | d73328db75884503bf74157722236efe4a6ef867 | …/prosemirror-view |
| prosemirror-transform | 1.12.2 | MIT | a93e228a10b76698e0878df2e1f881389e3a94ec | a0aaeb587f5fa15efa9fadaab03e7fcb26bbe64e | …/prosemirror-transform |
| prosemirror-inputrules | 1.5.1 | MIT | 089aa3852a55d551211af90aae2560c554ccf476 | 056aa2801460da409048c2eef074f6e513bb1233 | …/prosemirror-inputrules |
| prosemirror-markdown | 1.13.8 | MIT | e3a5926aa3236af2a463d824f4f22455460b008f | 1467a53e37b554d0f0329a5017781db89ecc3da1 | …/prosemirror-markdown |
| prosemirror-commands | 1.7.2 | MIT | 59fee8d89be2d033b28c2bac68e6736e2989bf9d | b5e1865a2d532f1424f409dc5be1d56ac077b855 | …/prosemirror-commands |
| prosemirror-history | 1.5.1 | MIT | 44956b6a1929d7bc99aca9a8ec01c790260fa45f | 8c1e6d7ec040a87886e7f39fbf3029b0c2961ca9 | …/prosemirror-history |
| prosemirror-keymap | 1.2.3 | MIT | 081f24f65b6a394174a4bdf07b9a55a00361f1b7 | 9031f125a6b53618b55b12b9272573a5aba1677c | …/prosemirror-keymap |
| prosemirror-schema-basic | 1.2.5 | MIT | 531f1cad1b8059616dbe68407ab4d446b6f882f4 | c7b80fc1ee25b75fa506bd400d2d479a16b33a9c | …/prosemirror-schema-basic |
| prosemirror-schema-list | 1.5.1 | MIT | e65a144f2285178a20cbdea5b0ee16925be7d6c5 | 12f3dd9c2735f86f54af2442e2600a14dc14f61f | …/prosemirror-schema-list |
| markdown-it | 14.3.3 | MIT | d372f0d8a68bef0b0acaa68868ce8ae8ba85b384 | add6fa27b88402728a549324407204b5ca0b9799 | github.com/markdown-it/markdown-it |
| linkify-it | 5.0.2 | MIT | 50a0c914f834b201cab25ff4faefd1f832b37332 | c8b101da7bbcff3a3de72621fc7e9abf31903eab | github.com/markdown-it/linkify-it |
| uc.micro | 2.1.0 | MIT | d91cec10974f125be7accd4dd870900fd18fdec7 | 085c2a8b6c255efbd5ccd1fb13c4fc012a3521da | github.com/markdown-it/uc.micro |
| mdurl | 2.1.0 | MIT | dd913f6290a4d8772240a401aab993eb65c5786d | 36d7a3131965a4e77531f549b89ecb73eede5080 | github.com/markdown-it/mdurl |
| punycode.js | 2.3.1 (tag v2.3.1) | MIT | 9e1b2cda98d215d3a73fcbfe93c62e021f4ba768 | f95d544642e1599cd27de41416654b7b7a950031 | github.com/mathiasbynens/punycode.js |
| entities | 4.5.0 (tag v4.5.0) | BSD-2-Clause | 61afd4701eaa736978b13c7351cd3de9a96b04bc | 23f047805a33dc7ce35dbdb137c947e5526d8d5c | github.com/fb55/entities |
| orderedmap | 2.1.1 | MIT | 6a30ebbbecd30fed8bda884c7acf4ca9c6a02405 | 49c032b36195f4f3eb5bdf3aa9a0a7b70b0d523c | github.com/marijnh/orderedmap |
| rope-sequence | 1.3.4 | MIT | 11db1ba5aa2abf31ff8040bdf01fabdb9db34c7a | 4006f2f2db7ababcbe84527ccc71afc6b69c19b3 | github.com/marijnh/rope-sequence |
| w3c-keyname | 2.2.8 | MIT | 5ea93b04bb62230c7de4165e3a9b5c840f05cd44 | d6851bd96544a49c9ffd99a0b0eae920656b098d | github.com/marijnh/w3c-keyname |
`prosemirror-markdown` 1.13.8 depends on `markdown-it ^14`, so 14.3.3 (what the npm lock resolves under it) is the
parser, not markdown-it 15. `argparse` (Python-2.0 license) is in the npm lock only for markdown-it's CLI and is not
bundled. `@types/*` packages are in the lock for typings and are not bundled.
## 2. Licenses
`licenses/` holds 10 license files (8 distinct by checksum: `orderedmap` = `w3c-keyname`, and `punycode.js` = `uc.micro`).
I copied one file for the ProseMirror group (`prosemirror-model.license`) and did **not** compare the other ten ProseMirror
packages' license files with it; the provenance step in phase 2 should copy each package's own file. Holders, from the copied files:
- Marijn Haverbeke and others: `prosemirror-model` (copied), assumed the same for the other 10 ProseMirror packages (not checked), `orderedmap`, `rope-sequence`, `w3c-keyname` (MIT).
- Vitaly Puzrin (and Alex Kocharin on `markdown-it`, `mdurl`): `markdown-it`, `linkify-it`, `mdurl` (MIT).
- Mathias Bynens: `uc.micro`, `punycode.js` (MIT; the two files are byte-identical).
- Felix Böhm: `entities` (BSD-2-Clause: keep the notice in source and in binary form, with the disclaimer).
All are permissive: the obligation is to keep the notice and the disclaimer with the code, including the built bundle
(`--legal-comments=inline` keeps the license comments the packages carry; phase 2 should also ship a `NOTICE`/`LICENSE`
file next to the imported source, as the brief asks). **The repository has no root `LICENSE`, and `package.json`
says `"license": "UNLICENSED"`.** MIT and BSD-2 allow that: they impose notice-retention, not a license on our code. I am not a
lawyer and this is not a legal opinion; Mos should know the repository's own license position is unstated.
Among the other candidates in LIBRARY.md, only E (BlockNote core, MPL-2.0) and the transitive dual-licensed `dompurify` in B
and F are outside MIT/BSD/ISC.
## 3. Sanitizer, and the schema overrides this design needs
There is **no DOMPurify** in this closure; nothing in the bundle sanitizes HTML strings because nothing parses HTML into the page.
- **Load path:** Markdown is parsed by markdown-it with `html:false` (raw HTML in a file becomes text), then mapped into
the schema by `prosemirror-markdown`. The editor DOM is rendered by `prosemirror-view` through the schema's `toDOM`.
- **Paste path** (the only HTML sink): `prosemirror-view` parses clipboard HTML in a detached document created with
`document.implementation.createHTMLDocument`, which does not run scripts or load images, and maps it through the
schema's `parseDOM` rules, so only schema nodes and marks survive. This is the same mechanism as the sanitizer: the
schema is the allow-list.
- **Measured with the pinned bundle** (jsdom; `results/hostile-html.txt`; 12 hostile inputs through `DOMParser` and
`DOMSerializer` with the stock schema):
- Dropped: `onclick`, `onmouseover`, `style` attributes, `<script>`, `<svg>`, `<iframe>`, `<style>`, `<form>`,
`<object>`, `<math>`.
- **Kept by the stock schema: `<img src="x">` (the `onerror` is dropped but the image stays), `<a href="javascript:alert(3)">`
and `<a href="data:text/html,…">`.**
The stock `link` and `image` specs therefore do not meet the brief's rendering rules. Phase 2 must replace them: the `link`
mark's `parseDOM` and `toDOM` pass the href through the same `window.MosaicMarkdown.linkTarget` row 148 uses (http:,
https: or relative, with `rel="noopener noreferrer"`, nothing else), and the `image` node is replaced by text (the alt
text with the source shown), never an `<img>`. The paste path then cannot reintroduce either. This must be tested with
the brief's `<script>`, `onerror` and `javascript:` browser test, on the paste path as well as the load path.
- **Advisories.** OSV batch query on the 29-package lockfile (`results/osv-a-pm.json`), 2026-10-18: **0
advisories**. Positive control the same day (output not saved in the packet; `repro/osv.sh` has no control): dompurify 2.3.3
returned 20 and markdown-it 12.2.0 returned 3. The build
tool's own lock (27 packages, esbuild 0.28.2) also returned 0 (`results/osv-i-build.json`). An advisory-free answer
is a snapshot of that day; phase 2 should re-run it in the landing record.
- **eval and network.** No `eval(`, `new Function`, `document.write`, `fetch(`, `XMLHttpRequest` or `import(` in the
built bundle (`grep -cE` returns 0 on the 17,963-line file, which contains all 132 inputs). A grep is a screen, not proof that
no code path builds a function from a string by other means. The bundle makes no network call of its own.
## 4. Source size, and what is removed or rewritten
The built bundle reads **132 input files (131 third-party plus the 11-line prototype entry), 25,899 lines**, from the esbuild
metafile of the pinned build, counting each file's lines on disk. (An earlier count of mine, 127 files and 25,706 lines, used a
different method and is superseded.) The prototype entry has no schema or editor code yet, so phase 2 adds to this.
| Package | Files | Lines |
|---|---|---|
| prosemirror-view | 12 | 6,459 |
| prosemirror-model | 12 | 3,574 |
| prosemirror-transform | 10 | 2,113 |
| prosemirror-state | 5 | 1,092 |
| prosemirror-markdown | 4 | 917 |
| prosemirror-commands | 1 | 786 |
| prosemirror-history | 1 | 466 |
| prosemirror-schema-list, -basic, -keymap | 3 | 538 |
| prosemirror-inputrules | 4 | 247 |
| orderedmap, rope-sequence, w3c-keyname | 3 | 444 |
| **ProseMirror side** | 55 | 16,636 |
| markdown-it | 53 | 6,291 |
| entities | 8 | 1,124 |
| linkify-it | 2 | 839 |
| mdurl | 5 | 541 |
| punycode.js | 1 | 443 |
| uc.micro | 7 | 14 |
| **markdown-it side** | 76 | 9,252 |
| prototype entry (ours) | 1 | 11 |
A reviewer reads about 25,900 lines of third-party source (about 1,200 of them are `entities` tables) plus the editor code and CSS we
write in phase 2. For scale, the existing `markdown-preview.js` is 338 lines. The table counts the files the build reads, not
every file in a package's directory.
**What the imported directory would hold:** the files above (the `src/` of the ProseMirror packages, the `index.mjs` and `lib/`
of the markdown-it family, `entities/src`), each package's license file, and a provenance file with the package, the
commit and the tree hash from section 1. **What it would not hold:** `dist/`, `.d.ts`/`.d.cts`, tests, benchmarks, READMEs,
`rollup.config.*` and anything else the build does not read. The brief's tree-hash-vs-provenance test then hashes each package
directory against the tree hash recorded in the provenance file (the tagged tree minus those excluded paths, so the test
needs a rule for which paths count; I would pin the rule in the test and not in prose).
**Rewritten:** nothing in the imported third-party source. All our changes go in our own files: the entry module, the schema, the
splice save, and the editor CSS.
**Not human-readable, three generated files (`results/` lists the line counts):**
- `entities/src/generated/decode-data-html.ts`: 8 lines, 47,698 bytes, encoded strings. The tag has `maps/` and
`scripts/write-decode-map.ts`, which look like its generator (I did not run it, so I have not shown they reproduce the file).
- `uc.micro/categories/P/regex.mjs` (2,042 bytes, one line) and `.../S/regex.mjs` (2,551 bytes): generated Unicode regexes. I did
not find a generator script in the tagged `uc.micro` tree.
The same generated files exist in every markdown-it build. Options: (a) accept them as data, with the provenance file stating they are
generated (and `entities`' generator and input beside its table); (b) regenerate in the build. I did not run any generator, so (b) is
not shown to work; (a) costs nothing and is what I would do unless a reviewer objects.
## 5. Build, and how a reviewer reproduces it byte for byte
**Tool.** `esbuild` 0.28.2. In my scratch build it is the only dependency of a `package.json` with an exact version
(`"esbuild":"0.28.2"`); **nothing in the repository pins it yet**, so phase 2 would add that pin. Lockfile integrity hash `sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==`
(platform binary `@esbuild/linux-x64` 0.28.2, `sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==`;
file sha256 `e1698a3d5c6c0798fee4fd3b5cc816651f460c63d390a7a26ea4beb0b1884100`, 11.4 MB, statically linked, stripped).
**This is a prebuilt Go binary.** It is a build tool pulled by the lockfile, not vendored or committed, and the bundle it produces is
what Q167 D3 requires to be rebuilt from source. Whether that satisfies D3 is Mos's call (question 2).
**Recipe** (`repro/build-pinned.sh`, run from a directory with the pinned trees checked out; no network):
```
esbuild entry.mjs --bundle --format=iife --target=es2022 --platform=browser \
--legal-comments=inline --log-level=warning \
--alias:prosemirror-{model,state,view,transform,inputrules,markdown}=<pkg>/src/index.ts \
--alias:prosemirror-{commands,history,keymap,schema-basic,schema-list}=<pkg>/src/<name>.ts \
--alias:orderedmap=<pkg>/index.js --alias:rope-sequence=<pkg>/index.js --alias:w3c-keyname=<pkg>/index.js \
--alias:markdown-it=<pkg>/index.mjs --alias:mdurl=<pkg>/index.mjs --alias:uc.micro=<pkg>/index.mjs \
--alias:linkify-it=<pkg>/index.mjs --alias:punycode.js=<pkg>/punycode.js --alias:entities=<pkg>/src/index.ts \
--outfile=editor.js
```
No minify flag: the output is readable. For the ProseMirror packages the alias target is the file each package's
`prepare` script feeds `pm-buildhelper` (checked for `prosemirror-view`: `src/index.ts`; the others follow the script in
`repro/build-pinned.sh`). `punycode.js` is the tag's CommonJS file; esbuild wraps it. No `--external`, no plugins, no `define`.
The entry in `repro/entry.mjs` is a measurement prototype that exports the pieces; the phase 2 entry will differ, so the hash
above is the hash of the prototype, and phase 2 records its own.
**Result.** The pinned trees were exported with `git archive <tag>` (no npm packages in the build input). Two builds in a
sandbox with no network gave identical output: sha256
`9587a1706eb5fa8d4d2c79976be6b1d84a0513fe814eeee381b6ecf384d15077`, 17,963 lines, 722,595 bytes (`results/build-hashes.txt`).
A reviewer repeats the same recipe from the same tags and compares the hash. The earlier prototype that aliased
two packages to npm `dist` also built identically twice but is not the plan; this one uses tag sources only.
One esbuild warning appears and is harmless: `prosemirror-transform`'s `import "./mark"` is ignored because the package says
`sideEffects:false`; `addMark` and `removeMark` are still in the bundle (imported by `transform.ts` directly).
**Caveats on the reproduction claim.** My builds ran with the host's Node and the native binary in a `bwrap --unshare-net`
sandbox. I proved identical output on this machine twice; I have not rebuilt on another machine, another architecture, or another
esbuild platform package, and the macOS and Windows binaries are different files. Phase 2's test should record the hash and fail
on drift. An alternative with no prebuilt tool (a small concatenating build with Node's type stripping) is possible but would be new
code to review, because bare imports cannot use an import map under this CSP; I did not build it.
## 6. Markdown normalisation (the measured part)
Corpus: the 414 `.md` files in this checkout (`results/corpus.txt`). **There is no `spec/north-star.md`**; the nearest file is the 3-line
`packages/project/templates/north-star.md`, which is in the corpus. Test: parse, serialise, compare bytes, no edit.
| Stack | Byte-identical, no edit | Notes |
|---|---|---|
| ProseMirror + prosemirror-markdown, stock | 1 of 414 | `repro/rt.mjs` |
| Tiptap 3.32.0 + @tiptap/markdown | 1 of 414 | **drops tables entirely** |
| Milkdown 7.22.3, commonmark + gfm | 59 of 414 | 142 of 414 with `-` bullets set |
| **Block splice** (below), A | **414 of 414** (12,879 blocks, 98 with front matter) | exact by construction |
What the stock serialiser changes (each seen in the corpus; small cases in `repro/micro.mjs`): bullets `-` to `*`;
hard-wrapped paragraphs joined onto one line; tables flattened into one paragraph; setext headings to ATX; `~~~` fences and indented
code to backtick fences; reference links inlined; entities decoded; `_em_` to `*em*`; a hard break becomes backslash plus newline;
`~~strike~~` and task markers escaped; YAML front matter turns into a rule plus a heading; 3+ blank lines collapse to one; CRLF
collapses.
**Block splice (the proposal for phase 2).** The document is split into top-level blocks using markdown-it's token `map` (the source
line range of each block). The editor holds those blocks; on save each block that is unchanged since load writes back its **original
source text**, and only an edited block is re-serialised. Gaps between blocks (blank lines) are kept as they were. Tables, raw HTML
blocks, rules and front matter (762 HTML blocks, 346 tables and 205 rules in this corpus; 98 files start with front matter) are **opaque source blocks**: shown, and edited as
source text, never reserialised. This satisfies the brief's "same bytes if no edits".
Two honest limits:
1. The 414-of-414 figure measures the splice arithmetic (gaps plus block slices rebuild every file), not the editor. A file the
editor loads and saves untouched is exact because untouched blocks emit their stored text; phase 2's round-trip test
(`spec/north-star.md` as the brief says, which does not exist here, so a repo file chosen by Sage, plus a document with every
preview element) is what proves it end to end.
2. **An edited block is rewritten in the editor's canonical Markdown**, not its original style. Measured on the 11,566 blocks that are not
opaque (`results/per-block-roundtrip.txt`), serialising each block alone and comparing with its own source text:
| Block | Count | Stock serialiser exact | With soft breaks kept and `-` bullets |
|---|---|---|---|
| paragraph | 5,639 | 32% | 97% |
| heading | 3,655 | 99% | 99% |
| bullet list | 1,326 | 0% | 85% |
| fence | 468 | 100% | 100% |
| indented code block | 242 | 0% | 0% (becomes a fence) |
| ordered list | 228 | 25% | 84% |
| blockquote | 8 | 13% | 63% |
| all | 11,566 | 52% | 94% |
So with two serialiser settings, about 94% of blocks would come back unchanged even after an edit, and the other 6% are rewritten
(for example indented code to a fenced block, a list's continuation indent, wrapped lines). A list or quote is one top-level
block, so an edit anywhere in a list reserialises that whole list. The brief says reviewers accept "the exact normalisation"; this
is that statement, and the numbers are from one repository's docs.
## 7. What this means for the Console
- **Routing.** `serve.mjs` serves `packages/webui/src/public/` from an explicit route table (lines 24 and 25: file name to content
type). A single bundle is one route (`/editor.js`) and one CSS file is another (`/editor.css`, carrying
`prosemirror.css`'s 54 lines and ours); unbundled serving would need about 131 routes or a new directory route. **`serve.mjs` is not in the
brief's owned-file list, so the two route entries need Sage's say-so.**
- **CSP.** `script-src 'self'` is enough for a same-origin `<script src="/editor.js">`; no CSP change is planned, and if phase 2
finds one is needed it stops there, as the brief says. I have not run the bundle in a browser; jsdom was the environment, so
the brief's browser test is the first real check.
- **Existing code.** `markdown-preview.js` stays; the editor calls `window.MosaicMarkdown.linkTarget` rather than copy the link rule.
## 8. Open items and risks
- Five questions for Mos, below.
- The build is proven reproducible on one machine, twice; not across machines (section 5).
- Three generated data files are not human-readable (section 4).
- Candidates D, E, G, H were not run through the round trip; B and C were. If Mos wants the choice to be between measured round
trips, D and G would be next.
- The advisory check is a snapshot (2026-10-18).
- Phase 2's sizing: the editor view, schema overrides, splice save, tests and CSS are new code. I have not estimated their size.
## Questions for Mos (decision 123)
1. **Go on candidate A** (ProseMirror + prosemirror-markdown + markdown-it; 19 MIT packages plus `entities` BSD-2-Clause), importing its
source into one new directory in the repository?
2. **Build tool.** Accept `esbuild` 0.28.2 (prebuilt Go binary, exact-pinned with lockfile integrity, not committed) as the pinned build
tool, as the brief's "builds from pinned tools" intends? Or require a no-prebuilt-tool build (more code to review, unbuilt)?
3. **Generated tables.** Accept the three generated data files as imported data with generator and input beside them (section 4 option (a))?
4. **Normalisation.** Accept that an unedited file saves byte-identical and an edited block is rewritten in canonical Markdown, with the
table, raw HTML, rule and front-matter blocks edited only as source text?
5. **Licensing.** The repository has no root `LICENSE` and says `UNLICENSED`; the imported code is MIT and BSD-2-Clause and needs only its
notices kept. Does Mos want anything stated about that before import?
For Sage: `serve.mjs` needs two route entries (`/editor.js`, `/editor.css`) and is outside the brief's owned files.
## Packet contents
`LIBRARY.md` (search), `REPORT.md` (this file), `licenses/` (10 files), `results/` (pins, OSV for 8 lockfiles, build hashes,
hostile-HTML run, splice and per-block round-trip output, the corpus list), `repro/` (build script and entry, the measurement
scripts; they carry the scratch paths I ran them from, which a reviewer must edit). Scratch lives outside the repository at
`/mnt/storage/scratch/researcher/q154/` and is not part of the evidence.
@@ -0,0 +1,195 @@
7d01169bd6e68b2cf2b29a57bc793a19296dc9552b640604a03b77d100b828b1 docs/TOOLS.md
6a6620a82d649957602510ae59b13cd8ec69beb316ae80db60aa5b5403296225 packages/webui/README.md
40c4a7ca6e6e46fed2fbbd7287796333ba99f206dc407abf09383284fdaac23e packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
b9c580f6c2a082f8549ccb73fec32b694cf943d383a60e58510ee9e2928f6a82 packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
66f6d9f98e32c05d8c893ab9ef80d7cb61ea3918dd2cabfc38f26be34bccff02 packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
c601f6c3f75b7cf9898a9a52abfdab3e50badbcb5f66e57e6df57641878e6565 packages/webui/src/public/editor.js
a192a614ec1ad9dab9d556f4cd5ad366b902d30101bf8bacb6f874fbe8707416 packages/webui/src/public/index.html
fbd6cbba33572f50f25b597b05c3465241b8cadc3e93b69d39c1d2c527bab06f packages/webui/src/serve.mjs
e073ca5f1b3767b16d33e8a971646eca295a60034e2924518e882f3cab5b6ea2 packages/webui/tests/browser.test.mjs
993a3028d1fae170546c3da7c5810c94f0e78b200c5cf1e53583c357f7b46493 packages/webui/tests/docs-browser.test.mjs
acc8a958e4c309e16dae500608bf0a8fe981b9451f53aa46f14aa1aa4de57712 packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md
packages/webui/README.md
packages/webui/editor/BUILD.json
packages/webui/editor/build.mjs
packages/webui/editor/editor.css
packages/webui/editor/entry.mjs
packages/webui/editor/model.mjs
packages/webui/editor/toolchain.mjs
packages/webui/editor/view.mjs
packages/webui/package-lock.json
packages/webui/package.json
packages/webui/src/public/bus.js
packages/webui/src/public/editor.css
packages/webui/src/public/editor.js
packages/webui/src/public/index.html
packages/webui/src/serve.mjs
packages/webui/tests/browser.test.mjs
packages/webui/tests/docs-browser.test.mjs
packages/webui/tests/editor-browser.test.mjs
packages/webui/tests/editor-provenance.test.mjs
packages/webui/tests/editor.test.mjs
packages/webui/tests/helpers/editor-bundle.mjs
packages/webui/tests/helpers/every-element.mjs
packages/webui/tests/serve.test.mjs
packages/webui/third_party/editor/NOTICE
packages/webui/third_party/editor/PROVENANCE.json
packages/webui/third_party/editor/entities/LICENSE
packages/webui/third_party/editor/entities/package.json
packages/webui/third_party/editor/entities/src/decode.ts
packages/webui/third_party/editor/entities/src/decode_codepoint.ts
packages/webui/third_party/editor/entities/src/encode.ts
packages/webui/third_party/editor/entities/src/escape.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
packages/webui/third_party/editor/entities/src/generated/encode-html.ts
packages/webui/third_party/editor/entities/src/index.ts
packages/webui/third_party/editor/linkify-it/LICENSE
packages/webui/third_party/editor/linkify-it/index.mjs
packages/webui/third_party/editor/linkify-it/lib/re.mjs
packages/webui/third_party/editor/linkify-it/package.json
packages/webui/third_party/editor/markdown-it/LICENSE
packages/webui/third_party/editor/markdown-it/index.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
packages/webui/third_party/editor/markdown-it/lib/index.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
packages/webui/third_party/editor/markdown-it/lib/token.mjs
packages/webui/third_party/editor/markdown-it/package.json
packages/webui/third_party/editor/mdurl/LICENSE
packages/webui/third_party/editor/mdurl/index.mjs
packages/webui/third_party/editor/mdurl/lib/decode.mjs
packages/webui/third_party/editor/mdurl/lib/encode.mjs
packages/webui/third_party/editor/mdurl/lib/format.mjs
packages/webui/third_party/editor/mdurl/lib/parse.mjs
packages/webui/third_party/editor/mdurl/package.json
packages/webui/third_party/editor/orderedmap/LICENSE
packages/webui/third_party/editor/orderedmap/index.js
packages/webui/third_party/editor/orderedmap/package.json
packages/webui/third_party/editor/prosemirror-commands/LICENSE
packages/webui/third_party/editor/prosemirror-commands/package.json
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
packages/webui/third_party/editor/prosemirror-history/LICENSE
packages/webui/third_party/editor/prosemirror-history/package.json
packages/webui/third_party/editor/prosemirror-history/src/history.ts
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
packages/webui/third_party/editor/prosemirror-inputrules/package.json
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
packages/webui/third_party/editor/prosemirror-keymap/LICENSE
packages/webui/third_party/editor/prosemirror-keymap/package.json
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
packages/webui/third_party/editor/prosemirror-markdown/LICENSE
packages/webui/third_party/editor/prosemirror-markdown/package.json
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
packages/webui/third_party/editor/prosemirror-model/LICENSE
packages/webui/third_party/editor/prosemirror-model/package.json
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
packages/webui/third_party/editor/prosemirror-model/src/content.ts
packages/webui/third_party/editor/prosemirror-model/src/diff.ts
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
packages/webui/third_party/editor/prosemirror-model/src/index.ts
packages/webui/third_party/editor/prosemirror-model/src/mark.ts
packages/webui/third_party/editor/prosemirror-model/src/node.ts
packages/webui/third_party/editor/prosemirror-model/src/replace.ts
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
packages/webui/third_party/editor/prosemirror-model/src/schema.ts
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
packages/webui/third_party/editor/prosemirror-schema-list/package.json
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
packages/webui/third_party/editor/prosemirror-state/LICENSE
packages/webui/third_party/editor/prosemirror-state/package.json
packages/webui/third_party/editor/prosemirror-state/src/index.ts
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
packages/webui/third_party/editor/prosemirror-state/src/selection.ts
packages/webui/third_party/editor/prosemirror-state/src/state.ts
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
packages/webui/third_party/editor/prosemirror-transform/LICENSE
packages/webui/third_party/editor/prosemirror-transform/package.json
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/index.ts
packages/webui/third_party/editor/prosemirror-transform/src/map.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/step.ts
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
packages/webui/third_party/editor/prosemirror-view/LICENSE
packages/webui/third_party/editor/prosemirror-view/package.json
packages/webui/third_party/editor/prosemirror-view/src/browser.ts
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
packages/webui/third_party/editor/prosemirror-view/src/dom.ts
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
packages/webui/third_party/editor/prosemirror-view/src/index.ts
packages/webui/third_party/editor/prosemirror-view/src/input.ts
packages/webui/third_party/editor/prosemirror-view/src/selection.ts
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
packages/webui/third_party/editor/punycode.js/package.json
packages/webui/third_party/editor/punycode.js/punycode.js
packages/webui/third_party/editor/rope-sequence/LICENSE
packages/webui/third_party/editor/rope-sequence/index.js
packages/webui/third_party/editor/rope-sequence/package.json
packages/webui/third_party/editor/uc.micro/LICENSE.txt
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
packages/webui/third_party/editor/uc.micro/index.mjs
packages/webui/third_party/editor/uc.micro/package.json
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
packages/webui/third_party/editor/w3c-keyname/LICENSE
packages/webui/third_party/editor/w3c-keyname/index.js
packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,11 @@
Copyright (c) Felix Böhm
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,22 @@
Copyright (c) 2015 Vitaly Puzrin.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,22 @@
Copyright (c) 2014 Vitaly Puzrin, Alex Kocharin.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,45 @@
Copyright (c) 2015 Vitaly Puzrin, Alex Kocharin.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
.parse() is based on Joyent's node.js `url` code:
Copyright Joyent, Inc. and other Node contributors. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2016 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2015-2017 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,20 @@
Copyright Mathias Bynens <https://mathiasbynens.be/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2016 by Marijn Haverbeke <[email protected]>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,20 @@
Copyright Mathias Bynens <https://mathiasbynens.be/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,19 @@
Copyright (C) 2016 by Marijn Haverbeke <[email protected]> and others
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
@@ -0,0 +1,195 @@
a71403bc53edf67feeb5e96f033fcb8bc80f82bd89fef86c05a015c21f42e61c docs/TOOLS.md
afcdb69ced938d04be2a2de760f3d525fb7875786cf3bd6dc55e6624d88d6699 packages/webui/README.md
317e8d78cf178d30d8588fe04e43ae3b2b4b61e1902420a19d83d87a5bf72985 packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
d3457aad19c6091306727d2b68cc22fb8427452269f4eda7e4e21fcb51672eda packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
e6dcef4441140e733929a37eceee87db1f244a0ffc0e224f353ae4c45a3b487f packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
32fcaa18eaee2ff426c3c7e06038ee190f9fd7a332c9f3db349aa74df22c9fb5 packages/webui/src/public/editor.js
c336f00436d9d9c36e8a15a57d2b91f6a7084748c816c40f144000e7c23f410c packages/webui/src/public/index.html
d2d0b094fa435bbb8ed2ea6c81ed2d08d7f2466cbfb8fd54108623b6ad38b9b7 packages/webui/src/serve.mjs
de0e57324b4c6f6651ed95df855893f86a4d6a9930c705b9754164163857df6f packages/webui/tests/browser.test.mjs
28f40ccf1c8173915221f4762df5ffa76e888279c880fd22abd80bc02e62dd32 packages/webui/tests/docs-browser.test.mjs
5b050de81b5c36773d41b956811c93a3cc5a368c449dd581b9448ee77638841a packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md
packages/webui/README.md
packages/webui/editor/BUILD.json
packages/webui/editor/build.mjs
packages/webui/editor/editor.css
packages/webui/editor/entry.mjs
packages/webui/editor/model.mjs
packages/webui/editor/toolchain.mjs
packages/webui/editor/view.mjs
packages/webui/package-lock.json
packages/webui/package.json
packages/webui/src/public/bus.js
packages/webui/src/public/editor.css
packages/webui/src/public/editor.js
packages/webui/src/public/index.html
packages/webui/src/serve.mjs
packages/webui/tests/browser.test.mjs
packages/webui/tests/docs-browser.test.mjs
packages/webui/tests/editor-browser.test.mjs
packages/webui/tests/editor-provenance.test.mjs
packages/webui/tests/editor.test.mjs
packages/webui/tests/helpers/editor-bundle.mjs
packages/webui/tests/helpers/every-element.mjs
packages/webui/tests/serve.test.mjs
packages/webui/third_party/editor/NOTICE
packages/webui/third_party/editor/PROVENANCE.json
packages/webui/third_party/editor/entities/LICENSE
packages/webui/third_party/editor/entities/package.json
packages/webui/third_party/editor/entities/src/decode.ts
packages/webui/third_party/editor/entities/src/decode_codepoint.ts
packages/webui/third_party/editor/entities/src/encode.ts
packages/webui/third_party/editor/entities/src/escape.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
packages/webui/third_party/editor/entities/src/generated/encode-html.ts
packages/webui/third_party/editor/entities/src/index.ts
packages/webui/third_party/editor/linkify-it/LICENSE
packages/webui/third_party/editor/linkify-it/index.mjs
packages/webui/third_party/editor/linkify-it/lib/re.mjs
packages/webui/third_party/editor/linkify-it/package.json
packages/webui/third_party/editor/markdown-it/LICENSE
packages/webui/third_party/editor/markdown-it/index.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
packages/webui/third_party/editor/markdown-it/lib/index.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
packages/webui/third_party/editor/markdown-it/lib/token.mjs
packages/webui/third_party/editor/markdown-it/package.json
packages/webui/third_party/editor/mdurl/LICENSE
packages/webui/third_party/editor/mdurl/index.mjs
packages/webui/third_party/editor/mdurl/lib/decode.mjs
packages/webui/third_party/editor/mdurl/lib/encode.mjs
packages/webui/third_party/editor/mdurl/lib/format.mjs
packages/webui/third_party/editor/mdurl/lib/parse.mjs
packages/webui/third_party/editor/mdurl/package.json
packages/webui/third_party/editor/orderedmap/LICENSE
packages/webui/third_party/editor/orderedmap/index.js
packages/webui/third_party/editor/orderedmap/package.json
packages/webui/third_party/editor/prosemirror-commands/LICENSE
packages/webui/third_party/editor/prosemirror-commands/package.json
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
packages/webui/third_party/editor/prosemirror-history/LICENSE
packages/webui/third_party/editor/prosemirror-history/package.json
packages/webui/third_party/editor/prosemirror-history/src/history.ts
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
packages/webui/third_party/editor/prosemirror-inputrules/package.json
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
packages/webui/third_party/editor/prosemirror-keymap/LICENSE
packages/webui/third_party/editor/prosemirror-keymap/package.json
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
packages/webui/third_party/editor/prosemirror-markdown/LICENSE
packages/webui/third_party/editor/prosemirror-markdown/package.json
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
packages/webui/third_party/editor/prosemirror-model/LICENSE
packages/webui/third_party/editor/prosemirror-model/package.json
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
packages/webui/third_party/editor/prosemirror-model/src/content.ts
packages/webui/third_party/editor/prosemirror-model/src/diff.ts
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
packages/webui/third_party/editor/prosemirror-model/src/index.ts
packages/webui/third_party/editor/prosemirror-model/src/mark.ts
packages/webui/third_party/editor/prosemirror-model/src/node.ts
packages/webui/third_party/editor/prosemirror-model/src/replace.ts
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
packages/webui/third_party/editor/prosemirror-model/src/schema.ts
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
packages/webui/third_party/editor/prosemirror-schema-list/package.json
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
packages/webui/third_party/editor/prosemirror-state/LICENSE
packages/webui/third_party/editor/prosemirror-state/package.json
packages/webui/third_party/editor/prosemirror-state/src/index.ts
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
packages/webui/third_party/editor/prosemirror-state/src/selection.ts
packages/webui/third_party/editor/prosemirror-state/src/state.ts
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
packages/webui/third_party/editor/prosemirror-transform/LICENSE
packages/webui/third_party/editor/prosemirror-transform/package.json
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/index.ts
packages/webui/third_party/editor/prosemirror-transform/src/map.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/step.ts
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
packages/webui/third_party/editor/prosemirror-view/LICENSE
packages/webui/third_party/editor/prosemirror-view/package.json
packages/webui/third_party/editor/prosemirror-view/src/browser.ts
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
packages/webui/third_party/editor/prosemirror-view/src/dom.ts
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
packages/webui/third_party/editor/prosemirror-view/src/index.ts
packages/webui/third_party/editor/prosemirror-view/src/input.ts
packages/webui/third_party/editor/prosemirror-view/src/selection.ts
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
packages/webui/third_party/editor/punycode.js/package.json
packages/webui/third_party/editor/punycode.js/punycode.js
packages/webui/third_party/editor/rope-sequence/LICENSE
packages/webui/third_party/editor/rope-sequence/index.js
packages/webui/third_party/editor/rope-sequence/package.json
packages/webui/third_party/editor/uc.micro/LICENSE.txt
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
packages/webui/third_party/editor/uc.micro/index.mjs
packages/webui/third_party/editor/uc.micro/package.json
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
packages/webui/third_party/editor/w3c-keyname/LICENSE
packages/webui/third_party/editor/w3c-keyname/index.js
packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,32 @@
board-held rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
browser-edge rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
bus-browser rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
bus rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
chat-browser rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
chat rc=0 ℹ tests 22 ℹ pass 22 ℹ fail 0 ℹ skipped 0
conversation rc=0 ℹ tests 4 ℹ pass 4 ℹ fail 0 ℹ skipped 0
discord rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
docs-browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
editor-browser rc=0 ℹ tests 16 ℹ pass 16 ℹ fail 0 ℹ skipped 0
editor-provenance rc=0 ℹ tests 6 ℹ pass 6 ℹ fail 0 ℹ skipped 0
editor rc=0 ℹ tests 5 ℹ pass 5 ℹ fail 0 ℹ skipped 0
history-return-flow rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
markdown-preview rc=0 ℹ tests 19 ℹ pass 19 ℹ fail 0 ℹ skipped 0
messages rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
pinned-copy rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
preview rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
project-file rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
reads rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
relaunch rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
return-flow rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
send-browser rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
send rc=0 ℹ tests 13 ℹ pass 13 ℹ fail 0 ℹ skipped 0
serve rc=0 ℹ tests 4 ℹ pass 4 ℹ fail 0 ℹ skipped 0
service rc=0 ℹ tests 23 ℹ pass 23 ℹ fail 0 ℹ skipped 0
settings-form rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
settings-write rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
shell rc=0 ℹ tests 5 ℹ pass 5 ℹ fail 0 ℹ skipped 0
usage-browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
usage rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
views rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
@@ -0,0 +1,195 @@
a71403bc53edf67feeb5e96f033fcb8bc80f82bd89fef86c05a015c21f42e61c docs/TOOLS.md
afcdb69ced938d04be2a2de760f3d525fb7875786cf3bd6dc55e6624d88d6699 packages/webui/README.md
c60f2e353172bb0e3aa1cfe7be081f49898602af8ca0294fef2dabb8112b942f packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
8596c60ac4b5a8885e02853ef378743eb0bc4c9bbb00ce8a72016e4453b32a79 packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
e6dcef4441140e733929a37eceee87db1f244a0ffc0e224f353ae4c45a3b487f packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee packages/webui/src/public/editor.js
c336f00436d9d9c36e8a15a57d2b91f6a7084748c816c40f144000e7c23f410c packages/webui/src/public/index.html
d2d0b094fa435bbb8ed2ea6c81ed2d08d7f2466cbfb8fd54108623b6ad38b9b7 packages/webui/src/serve.mjs
de0e57324b4c6f6651ed95df855893f86a4d6a9930c705b9754164163857df6f packages/webui/tests/browser.test.mjs
a2dd88810a160a0681e1dac72c4cc0f98a7ac09b445fc38a55d1503d880110d6 packages/webui/tests/docs-browser.test.mjs
40fa1214b605f4b196955da28f26a8f8f0bbac373fc90d27cbc7010d675df01c packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
a71403bc53edf67feeb5e96f033fcb8bc80f82bd89fef86c05a015c21f42e61c docs/TOOLS.md
afcdb69ced938d04be2a2de760f3d525fb7875786cf3bd6dc55e6624d88d6699 packages/webui/README.md
c60f2e353172bb0e3aa1cfe7be081f49898602af8ca0294fef2dabb8112b942f packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
8596c60ac4b5a8885e02853ef378743eb0bc4c9bbb00ce8a72016e4453b32a79 packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
e6dcef4441140e733929a37eceee87db1f244a0ffc0e224f353ae4c45a3b487f packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee packages/webui/src/public/editor.js
c336f00436d9d9c36e8a15a57d2b91f6a7084748c816c40f144000e7c23f410c packages/webui/src/public/index.html
d2d0b094fa435bbb8ed2ea6c81ed2d08d7f2466cbfb8fd54108623b6ad38b9b7 packages/webui/src/serve.mjs
de0e57324b4c6f6651ed95df855893f86a4d6a9930c705b9754164163857df6f packages/webui/tests/browser.test.mjs
a2dd88810a160a0681e1dac72c4cc0f98a7ac09b445fc38a55d1503d880110d6 packages/webui/tests/docs-browser.test.mjs
40fa1214b605f4b196955da28f26a8f8f0bbac373fc90d27cbc7010d675df01c packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md
packages/webui/README.md
packages/webui/editor/BUILD.json
packages/webui/editor/build.mjs
packages/webui/editor/editor.css
packages/webui/editor/entry.mjs
packages/webui/editor/model.mjs
packages/webui/editor/toolchain.mjs
packages/webui/editor/view.mjs
packages/webui/package-lock.json
packages/webui/package.json
packages/webui/src/public/bus.js
packages/webui/src/public/editor.css
packages/webui/src/public/editor.js
packages/webui/src/public/index.html
packages/webui/src/serve.mjs
packages/webui/tests/browser.test.mjs
packages/webui/tests/docs-browser.test.mjs
packages/webui/tests/editor-browser.test.mjs
packages/webui/tests/editor-provenance.test.mjs
packages/webui/tests/editor.test.mjs
packages/webui/tests/helpers/editor-bundle.mjs
packages/webui/tests/helpers/every-element.mjs
packages/webui/tests/serve.test.mjs
packages/webui/third_party/editor/NOTICE
packages/webui/third_party/editor/PROVENANCE.json
packages/webui/third_party/editor/entities/LICENSE
packages/webui/third_party/editor/entities/package.json
packages/webui/third_party/editor/entities/src/decode.ts
packages/webui/third_party/editor/entities/src/decode_codepoint.ts
packages/webui/third_party/editor/entities/src/encode.ts
packages/webui/third_party/editor/entities/src/escape.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
packages/webui/third_party/editor/entities/src/generated/encode-html.ts
packages/webui/third_party/editor/entities/src/index.ts
packages/webui/third_party/editor/linkify-it/LICENSE
packages/webui/third_party/editor/linkify-it/index.mjs
packages/webui/third_party/editor/linkify-it/lib/re.mjs
packages/webui/third_party/editor/linkify-it/package.json
packages/webui/third_party/editor/markdown-it/LICENSE
packages/webui/third_party/editor/markdown-it/index.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
packages/webui/third_party/editor/markdown-it/lib/index.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
packages/webui/third_party/editor/markdown-it/lib/token.mjs
packages/webui/third_party/editor/markdown-it/package.json
packages/webui/third_party/editor/mdurl/LICENSE
packages/webui/third_party/editor/mdurl/index.mjs
packages/webui/third_party/editor/mdurl/lib/decode.mjs
packages/webui/third_party/editor/mdurl/lib/encode.mjs
packages/webui/third_party/editor/mdurl/lib/format.mjs
packages/webui/third_party/editor/mdurl/lib/parse.mjs
packages/webui/third_party/editor/mdurl/package.json
packages/webui/third_party/editor/orderedmap/LICENSE
packages/webui/third_party/editor/orderedmap/index.js
packages/webui/third_party/editor/orderedmap/package.json
packages/webui/third_party/editor/prosemirror-commands/LICENSE
packages/webui/third_party/editor/prosemirror-commands/package.json
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
packages/webui/third_party/editor/prosemirror-history/LICENSE
packages/webui/third_party/editor/prosemirror-history/package.json
packages/webui/third_party/editor/prosemirror-history/src/history.ts
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
packages/webui/third_party/editor/prosemirror-inputrules/package.json
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
packages/webui/third_party/editor/prosemirror-keymap/LICENSE
packages/webui/third_party/editor/prosemirror-keymap/package.json
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
packages/webui/third_party/editor/prosemirror-markdown/LICENSE
packages/webui/third_party/editor/prosemirror-markdown/package.json
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
packages/webui/third_party/editor/prosemirror-model/LICENSE
packages/webui/third_party/editor/prosemirror-model/package.json
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
packages/webui/third_party/editor/prosemirror-model/src/content.ts
packages/webui/third_party/editor/prosemirror-model/src/diff.ts
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
packages/webui/third_party/editor/prosemirror-model/src/index.ts
packages/webui/third_party/editor/prosemirror-model/src/mark.ts
packages/webui/third_party/editor/prosemirror-model/src/node.ts
packages/webui/third_party/editor/prosemirror-model/src/replace.ts
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
packages/webui/third_party/editor/prosemirror-model/src/schema.ts
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
packages/webui/third_party/editor/prosemirror-schema-list/package.json
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
packages/webui/third_party/editor/prosemirror-state/LICENSE
packages/webui/third_party/editor/prosemirror-state/package.json
packages/webui/third_party/editor/prosemirror-state/src/index.ts
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
packages/webui/third_party/editor/prosemirror-state/src/selection.ts
packages/webui/third_party/editor/prosemirror-state/src/state.ts
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
packages/webui/third_party/editor/prosemirror-transform/LICENSE
packages/webui/third_party/editor/prosemirror-transform/package.json
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/index.ts
packages/webui/third_party/editor/prosemirror-transform/src/map.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/step.ts
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
packages/webui/third_party/editor/prosemirror-view/LICENSE
packages/webui/third_party/editor/prosemirror-view/package.json
packages/webui/third_party/editor/prosemirror-view/src/browser.ts
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
packages/webui/third_party/editor/prosemirror-view/src/dom.ts
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
packages/webui/third_party/editor/prosemirror-view/src/index.ts
packages/webui/third_party/editor/prosemirror-view/src/input.ts
packages/webui/third_party/editor/prosemirror-view/src/selection.ts
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
packages/webui/third_party/editor/punycode.js/package.json
packages/webui/third_party/editor/punycode.js/punycode.js
packages/webui/third_party/editor/rope-sequence/LICENSE
packages/webui/third_party/editor/rope-sequence/index.js
packages/webui/third_party/editor/rope-sequence/package.json
packages/webui/third_party/editor/uc.micro/LICENSE.txt
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
packages/webui/third_party/editor/uc.micro/index.mjs
packages/webui/third_party/editor/uc.micro/package.json
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
packages/webui/third_party/editor/w3c-keyname/LICENSE
packages/webui/third_party/editor/w3c-keyname/index.js
packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,37 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (852.739388ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (683.97025ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (575.385611ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2519.106587ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (917.946329ms)
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (5932.237456ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (541.678663ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (534.861852ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (568.558393ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (579.729503ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (605.398908ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (561.166687ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (575.949631ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (644.487953ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (621.717632ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (596.980001ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 17421.005012
✖ failing tests:
test at tests/editor-browser.test.mjs:382:1
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (5932.237456ms)
Error: Uncaught (in promise) Error: Condition timed out: document.querySelector("#doc-visual .ProseMirror"): undefined
at Object.evaluate (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/browser.mjs:48:35)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:402:5
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:383:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
@@ -0,0 +1,43 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (942.598624ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (835.181508ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (650.000377ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2538.615325ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1022.060923ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2041.576597ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (508.549307ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (577.017206ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (573.777017ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (611.644551ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (591.748175ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (638.486458ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (687.545431ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (727.95009ms)
✖ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (652.816695ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (687.154387ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14395.399475
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (652.816695ms)
AssertionError [ERR_ASSERTION]: the value is written as "```\ncode\n```" in "# x\n\n```a`b\ncode\n```\n\nyTitle\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (906.663216ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (782.877439ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (574.240007ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2497.7362ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (960.410491ms)
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (923.252823ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (507.81084ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (577.12317ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (637.931285ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (599.925233ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (598.862357ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (597.57669ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (617.048449ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (749.203925ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (627.321732ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (519.386264ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 12787.091916
✖ failing tests:
test at tests/editor-browser.test.mjs:382:1
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (923.252823ms)
AssertionError [ERR_ASSERTION]: a failed round trip shows the source, the note and a Save that is off
+ actual - expected
{
+ note: false,
+ pm: true,
- note: true,
- pm: false,
pressed: [
+ 'true',
'false',
- 'true'
],
saveOff: true,
+ text: null
- text: '# Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n'
}
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:397:12
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:383:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: { pm: true, text: null, note: false, pressed: [ 'true', 'false' ], saveOff: true },
expected: { pm: false, text: '# Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n', note: true, pressed: [ 'false', 'true' ], saveOff: true },
operator: 'deepStrictEqual',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (835.062582ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (704.243044ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (599.267431ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2525.091118ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1199.574937ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2093.288552ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (635.279331ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (718.749727ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (671.092857ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (653.315023ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (790.645206ms)
✖ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (663.908196ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (597.023665ms)
✖ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (549.017814ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (589.363478ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (575.199298ms)
ℹ tests 16
ℹ suites 0
ℹ pass 14
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14495.351408
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (663.908196ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"x\\\\\\\") <img src=x onerror=alert(1)> \")" in "# ![a](https://ok.example/a.png \"x\\\\\") <img src=x onerror=alert(1)> \")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (549.017814ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"end\\\\\")" in "# ![a](https://ok.example/a.png \"end\\\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,43 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (939.963587ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (821.771747ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (608.552918ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2583.535845ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1044.794977ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1992.682735ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (544.964571ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (578.426363ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (564.7512ms)
✖ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (651.186539ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (615.570272ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (594.729535ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (584.8937ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (602.096386ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (564.745118ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (542.198189ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 13982.289082
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (651.186539ms)
AssertionError [ERR_ASSERTION]: the value is written as "```T\ncode\n```" in "# x\n\n```T\n\n<img src=x onerror=alert(1)>\n\n\ncode\n```\n\nyTitle\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (867.838057ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (757.683785ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (567.039598ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2497.0631ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (985.220306ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1932.42815ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (549.06396ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (594.942531ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (574.343036ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (505.074463ms)
✖ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (562.862519ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (584.679898ms)
✖ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (603.34977ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (592.439653ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (558.453122ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (543.321172ms)
ℹ tests 16
ℹ suites 0
ℹ pass 14
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 13390.95085
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (562.862519ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"x\\\\\\\") <img src=x onerror=alert(1)> \")" in "# [word](https://ok.example/p \"x\\\\\") <img src=x onerror=alert(1)> \")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (603.34977ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"end\\\\\")" in "# [word](https://ok.example/p \"end\\\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,77 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (873.15186ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (683.799287ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (573.962205ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2507.093386ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1001.411195ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2013.315471ms)
✖ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (558.799953ms)
✖ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (603.864767ms)
✖ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (622.641122ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (595.845951ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (617.502443ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (618.658242ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (615.115467ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (778.218919ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (756.782191ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (729.095975ms)
ℹ tests 16
ℹ suites 0
ℹ pass 13
ℹ fail 3
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14253.601051
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (558.799953ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"T <img src=x onerror=alert(1)> \")" in "# [word](https://ok.example/p \"T\n\n<img src=x onerror=alert(1)>\n\n\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (603.864767ms)
AssertionError [ERR_ASSERTION]: the value is written as "![T <img src=x onerror=alert(1)> ](https://ok.example/a.png)" in "# ![T\n\n<img src=x onerror=alert(1)>\n\n](https://ok.example/a.png)Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (622.641122ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"T <img src=x onerror=alert(1)> \")" in "# ![a](https://ok.example/a.png \"T\n\n<img src=x onerror=alert(1)>\n\n\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt2/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,26 @@
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (11.356453ms)
✔ every package names its origin and license, and NOTICE lists each (0.518682ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (5.458375ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (3.937865ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (124.496361ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (55.555699ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 255.271942
+114
View File
@@ -0,0 +1,114 @@
2026-10-18T18:55:31Z lock and esbuild binary sha ok
2026-10-18T18:55:31Z build 1 exit 0
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee src/public/editor.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f src/public/editor.css
758420 src/public/editor.js
4462 src/public/editor.css
762882 total
2026-10-18T18:55:31Z build 2 exit 0
rebuild byte-identical (editor.js and BUILD.json)
BUILD.json records editor.js 9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee 758420
2026-10-18T18:55:31Z start board-held
2026-10-18T18:55:40Z end board-held exit 0
2026-10-18T18:55:40Z start browser-edge
2026-10-18T18:55:41Z end browser-edge exit 0
2026-10-18T18:55:41Z start browser
2026-10-18T18:55:43Z end browser exit 0
2026-10-18T18:55:43Z start bus-browser
2026-10-18T18:55:46Z end bus-browser exit 0
2026-10-18T18:55:46Z start bus
2026-10-18T18:55:49Z end bus exit 0
2026-10-18T18:55:49Z start chat-browser
2026-10-18T18:56:07Z end chat-browser exit 0
2026-10-18T18:56:07Z start chat
2026-10-18T18:56:08Z end chat exit 0
2026-10-18T18:56:08Z start conversation
2026-10-18T18:56:12Z end conversation exit 0
2026-10-18T18:56:12Z start discord
2026-10-18T18:56:14Z end discord exit 0
2026-10-18T18:56:14Z start docs-browser
2026-10-18T18:56:15Z end docs-browser exit 0
2026-10-18T18:56:15Z start editor-browser
2026-10-18T18:56:30Z end editor-browser exit 0
2026-10-18T18:56:30Z start editor-provenance
2026-10-18T18:56:30Z end editor-provenance exit 0
2026-10-18T18:56:30Z start editor
2026-10-18T18:56:32Z end editor exit 0
2026-10-18T18:56:32Z start history-return-flow
2026-10-18T18:57:24Z end history-return-flow exit 0
2026-10-18T18:57:24Z start markdown-preview
2026-10-18T18:57:31Z end markdown-preview exit 0
2026-10-18T18:57:31Z start messages
2026-10-18T18:57:34Z end messages exit 0
2026-10-18T18:57:34Z start pinned-copy
2026-10-18T18:57:38Z end pinned-copy exit 0
2026-10-18T18:57:38Z start preview
2026-10-18T18:57:39Z end preview exit 0
2026-10-18T18:57:39Z start project-file
2026-10-18T18:57:39Z end project-file exit 0
2026-10-18T18:57:39Z start reads
2026-10-18T18:57:41Z end reads exit 0
2026-10-18T18:57:41Z start relaunch
2026-10-18T18:57:42Z end relaunch exit 0
2026-10-18T18:57:42Z start return-flow
2026-10-18T18:58:03Z end return-flow exit 0
2026-10-18T18:58:03Z start send-browser
2026-10-18T18:58:17Z end send-browser exit 0
2026-10-18T18:58:17Z start send
2026-10-18T18:58:17Z end send exit 0
2026-10-18T18:58:17Z start serve
2026-10-18T18:58:18Z end serve exit 0
2026-10-18T18:58:18Z start service
2026-10-18T18:58:20Z end service exit 0
2026-10-18T18:58:20Z start settings-form
2026-10-18T18:58:21Z end settings-form exit 0
2026-10-18T18:58:21Z start settings-write
2026-10-18T18:58:21Z end settings-write exit 0
2026-10-18T18:58:21Z start shell
2026-10-18T18:58:29Z end shell exit 0
2026-10-18T18:58:29Z start usage-browser
2026-10-18T18:58:30Z end usage-browser exit 0
2026-10-18T18:58:30Z start usage
2026-10-18T18:58:30Z end usage exit 0
2026-10-18T18:58:30Z start views
2026-10-18T18:58:35Z end views exit 0
singles: tests=206 pass=206 fail=0 skipped=0
singles files: 32 of 32
2026-10-18T18:58:35Z start suite
2026-10-18T18:59:31Z end suite exit 0
ℹ tests 206
ℹ pass 206
ℹ fail 0
ℹ skipped 0
changed paths: same 195 as r2
195
baseline manifest checks
2026-10-18T18:59:31Z start mutant gate-true
2026-10-18T18:59:44Z end mutant gate-true exit 1
2026-10-18T18:59:44Z start mutant docshown-revert
2026-10-18T19:00:01Z end mutant docshown-revert exit 1
2026-10-18T19:00:01Z start mutant serialiser-verbatim
2026-10-18T19:00:16Z end mutant serialiser-verbatim exit 1
2026-10-18T19:00:16Z start mutant info-verbatim
2026-10-18T19:00:30Z end mutant info-verbatim exit 1
2026-10-18T19:00:30Z start mutant g5-backtick-kept
2026-10-18T19:00:44Z end mutant g5-backtick-kept exit 1
2026-10-18T19:00:45Z start mutant link-backslash
2026-10-18T19:00:58Z end mutant link-backslash exit 1
2026-10-18T19:00:58Z start mutant image-backslash
2026-10-18T19:01:13Z end mutant image-backslash exit 1
2026-10-18T19:01:13Z post-mutant sha256sum -c exit 0 (195 OK of 195)
2026-10-18T19:01:13Z start provenance after mutants
2026-10-18T19:01:13Z end provenance after mutants exit 0
ℹ tests 6
ℹ pass 6
ℹ fail 0
ℹ skipped 0
2026-10-18T19:01:13Z pre-cut sha256sum -c exit 0 (195 OK)
manifest equals the checked baseline
2026-10-18T19:01:13Z cut manifest sha256sum -c exit 0 (195 OK of 195)
patch applies to a clean export of 850484a7d
d709b2dd390b7c01e6ef96aa7eced91287d1a48b7e003d74db3645f57a8c3db1 /mnt/storage/scratch/researcher/r154-r3-out/candidate.patch
cebca5145c899a362e938d36b26168070ad8cc01bfdc0c9f44a68eee07a005ca /mnt/storage/scratch/researcher/r154-r3-out/candidate-manifest.sha256
2026-10-18T19:01:13Z done
2026-10-18T19:01:13Z run exit 0
@@ -0,0 +1,228 @@
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (8700.415179ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (10663.725644ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (5672.51966ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (7785.83926ms)
✔ the README says a refused field table names the file or the key at fault, never a path (4.013403ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (12845.346207ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (163.047297ms)
✔ decisions route serves the roles and recent lists from the reader view (96.081444ms)
✔ credentials route serves the broker credential status from the reader view (94.853315ms)
✔ replies route serves the replies to one message from the reader view (235.531021ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (314.804225ms)
✔ bus refusals map to statuses and never carry a path or a stack (324.041617ms)
✔ humanCall speaks the human transport protocol without blocking the server (2816.55706ms)
✔ busReader takes --business, else the live bus host, else refuses (702.907369ms)
✔ humanCall kills a transport that runs past its timeout (540.325579ms)
✔ serve refuses a --business value that is not a business id (1311.508072ms)
✔ chat browser: list/create named projects and threads, hostile labels inert and no implicit writes (3966.306622ms)
✔ chat browser: thread drafts, receipts and cursor history stay isolated; refresh never writes (3597.899843ms)
✔ chat browser: uncertain writes retain draft, ownership refusal clears it, read-only cannot send (3619.172307ms)
✔ chat browser: a late read from A cannot paint B; sign-out clears private state and stops reads (3299.784243ms)
✔ chat browser: page forward and deduplicate replies; pending and byte-limit submissions do not duplicate (2285.81799ms)
✔ chat browser: scrolled history stays put, New messages and an own send return to the tail (1520.363376ms)
✔ chat browser: automatic polling follows a reply without a POST or a lost draft (11086.482368ms)
✔ chat browser: display stays bounded while every forward page remains reachable (637.182302ms)
✔ chat browser: a confirmed visible message replaces its pending receipt; malformed receipts stay unknown (630.037086ms)
✔ chat browser: a refusal elsewhere forgets private chat drafts (682.324847ms)
✔ chat browser: a late project creation receipt cannot navigate away from another thread (945.905276ms)
✔ chat reads map only fixed verbs, strict forward paging and pure GET (53.978226ms)
✔ chat refuses malformed and repeated query/id values before transport (19.394356ms)
✔ chat project.create: one verified write, fixed identity/class and private log (5.217254ms)
✔ chat project.create: each existing Console write fence makes zero bus calls (21.105874ms)
✔ chat project.create: refusal or lost/malformed receipt never retries or invents success (14.351876ms)
✔ chat thread.create: one verified write, fixed identity/class and private log (3.027636ms)
✔ chat thread.create: each existing Console write fence makes zero bus calls (16.270512ms)
✔ chat thread.create: refusal or lost/malformed receipt never retries or invents success (6.296638ms)
✔ chat thread.send: one verified write, fixed identity/class and private log (2.612731ms)
✔ chat thread.send: each existing Console write fence makes zero bus calls (28.98602ms)
✔ chat thread.send: refusal or lost/malformed receipt never retries or invents success (12.261638ms)
✔ chat thread.open: one verified write, fixed identity/class and private log (2.728808ms)
✔ chat thread.open: each existing Console write fence makes zero bus calls (13.32899ms)
✔ chat thread.open: refusal or lost/malformed receipt never retries or invents success (12.194635ms)
✔ chat createThread receipt requires an instance even when its id is valid (4.378287ms)
✔ chat write receipts expose only the fields belonging to their operation (8.897316ms)
✔ chat validates names, body, project and strict empty open payload (13.210692ms)
✔ chat read failures redact ownership and refuse invalid transport arrays (10.377825ms)
✔ REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations (403.319952ms)
✔ chat repeats every POST boundary even when called behind an admitted request (3.279564ms)
✔ configured Console process injects chat through its existing human transport (1178.126304ms)
✔ chat assets, GET purity, method and unknown-route refusals are explicit (112.031853ms)
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (4988.121424ms)
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (4399.9943ms)
✔ conversation view: a newer session with no readable history keeps the marker (3151.42912ms)
✔ conversation view: seats without history say so and offer no reply (3597.260181ms)
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (3869.703031ms)
✔ the editor: the list, hostile markdown that runs nothing, the draft, and each save receipt (7994.917645ms)
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (4731.020863ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (4420.300589ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (2899.9814ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (5634.743374ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1818.071035ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2249.522564ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (911.538489ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (702.293752ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (641.619013ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (618.656845ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (727.771621ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (599.615979ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (635.208361ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (625.222249ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (600.265033ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (586.209751ms)
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (29.751664ms)
✔ every package names its origin and license, and NOTICE lists each (1.146372ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (11.435419ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (8.408645ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (348.416834ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (410.750257ms)
✔ the editor routes serve the built files with their types and no cache (89.767062ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (41.523027ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (5475.081697ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (4.400303ms)
✔ the link gate and the image rule are the preview's (0.955582ms)
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (55037.299225ms)
✔ the preview source names none of the four string-to-markup sinks (3.505851ms)
✔ headings, paragraphs, emphasis and inline code render (2.233269ms)
✔ lists, block quotes and code blocks render (0.977603ms)
✔ a link is made for http, https and relative targets, with rel and the target shown (2.098832ms)
✔ a link with any other scheme, or an evasion of the scheme, stays source text (1.942516ms)
✔ an image shows alt text and URL, is never an img element and never loads (0.302193ms)
✔ raw HTML, entities and unsupported blocks show as source text, never as elements (0.562317ms)
✔ markup inside code and inside link text stays text (0.304504ms)
✔ hostile and pathological input stays within its look-ahead budget and under the nesting cap (92.706831ms)
✔ trailing blanks and closing hashes are cut by a walk from the end, not a regex that retries inside a blank run (80.601333ms)
✔ a link opener with no closer searches at most SPAN characters ahead (483.363489ms)
✔ the look-ahead work of one render is a fixed multiple of the text, whatever the opener (3446.797644ms)
✔ past the budget an opener is source text, through the path all other text takes (51.416832ms)
✔ a normal 200 KiB document renders exactly as it did without a budget, and spends little of it (52.946082ms)
✔ a line separator inside a heading, a list item or a fence line does not end the marker line (0.815983ms)
✔ a thematic-break line is a paragraph, every other marker line opens a list (0.499621ms)
✔ every short line over space, tab, - * _ and a letter is a break exactly when the old regex said so (87.496948ms)
✔ one line of marks does not throw, at 4 MiB, whatever the mark or the spacing (17687.940469ms)
✔ CRLF and tabs are read like LF and spaces; empty input renders nothing (0.263868ms)
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (479.757664ms)
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (5203.486942ms)
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (5565.416027ms)
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (4583.155848ms)
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (4301.317975ms)
✔ copy writes nothing when an archived path is missing at the commit (1904.71969ms)
✔ a copy that loses the rename race leaves no read-only temp directory behind (2828.159822ms)
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (1442.816033ms)
✔ a copy that meets a target holding files says exists: and moves nothing into it (1219.851817ms)
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (674.716677ms)
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (1384.374462ms)
✔ serve refuses a --checkout that is not an absolute directory path (333.519165ms)
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (69.363989ms)
✔ preview options are all three or none, and each is checked (13.093761ms)
✔ the CLI refuses a partial or invalid preview flag set at start (2714.493569ms)
✔ the CLI with all three flags serves the preview mode (400.098131ms)
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (77.832386ms)
✔ the header name matches without regard to case, and the value compare is exact (9.007147ms)
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (89.420614ms)
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (26.593378ms)
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (12.871832ms)
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (65.874436ms)
✔ a repeated Host is 400 before any other check, in preview mode and without it (26.146609ms)
✔ without the preview flags the public name is refused and writes still reach the board (16.557522ms)
✔ a signed-in same-origin save reaches exactly one human operation and returns the new commit (59.037466ms)
✔ a save needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (41.869213ms)
✔ a save validates JSON, strict keys, text values and the 1 MiB body before the bus is asked (101.43863ms)
✔ a body that is JSON but not an object is refused 400, not thrown on (47.416205ms)
✔ the 1 MiB limit is this route only; Settings and messages keep 16 KiB (17.254267ms)
✔ a bus refusal is reported as not saved with its own status; stale-base tells the user to reload (71.690619ms)
✔ a save whose answer is lost or unusable is reported unknown and is never retried (10.13949ms)
✔ the file list and one file read take strict queries and arrive in the expected shape (23.631311ms)
✔ reads work without --send; an unusable bus answer is a bad response, a refusal keeps its status (15.140992ms)
✔ /api/config says edit only where a save can pass (8.723132ms)
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (3.028316ms)
✔ credential state from the date alone, as the bus states it (0.325012ms)
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (1486.314478ms)
✔ queue: a refused read fails closed with the store's text, redacted (829.583523ms)
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (3218.239311ms)
✔ business: names, vars on the allowlist, authority, credential metadata only (27.145335ms)
✔ business: missing or invalid file refuses with the module's text, redacted (25.739705ms)
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (74.953479ms)
✔ settings: release, board, loopback address, notifier binding name only (651.816564ms)
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (173.092626ms)
✔ bus-status: a refused boot shows reason, file and last good load; a live host or an ok boot clears it (87.870192ms)
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (3772.571442ms)
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (22871.56126ms)
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (8535.098903ms)
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (11941.665611ms)
✔ startServer takes send only as a function and only with the preview mode (25.341308ms)
✔ the CLI refuses --send without the preview flags, and without a configured bus (2225.861596ms)
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (450.910753ms)
✔ without --send the route is read-only like every other write, and config says no send (13.137083ms)
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (40.6677ms)
✔ config says send only on the public name with --send on (5.18515ms)
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (24.862663ms)
✔ each request check refuses before anything is sent, and logs the refusal without the body (27.459613ms)
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (8.518156ms)
✔ a crafted role name cannot forge a log line (6.757167ms)
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (14.813018ms)
✔ through the human transport the request is exactly the business, message.send and the keys (548.979268ms)
✔ against a real broker: the message is written once as a human send, and its refusals map (196.235021ms)
✔ loopback host and board origin fail closed (15.328537ms)
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (465.894086ms)
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (180.750497ms)
✔ unreachable board reports URL; CLI rejects unsupported options (1830.035884ms)
✔ render prints the unit without the preview flags (45.816187ms)
✔ render carries every serve flag, the preview set included (71.9433ms)
✔ a partial preview set is refused (265.271776ms)
✔ a value the unit cannot carry is refused, for every flag (1983.757662ms)
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (165.425051ms)
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (529.368385ms)
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (283.584971ms)
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (1343.356337ms)
✔ status prints the unit state and GET /healthz on the installed port (785.460349ms)
✔ usage: an unknown verb or flag, and start or enable, exit 4 (210.399792ms)
✔ without --send, render is the template with its placeholders filled, byte for byte (94.420084ms)
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (79.940699ms)
✔ --send without the whole preview set is refused and writes nothing (395.866208ms)
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (887.605452ms)
✔ uninstall and status take no --send (81.291025ms)
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (837.78864ms)
✔ when the state read fails, install and uninstall refuse with one line and change nothing (116.346744ms)
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (102.324113ms)
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (317.683547ms)
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (21.08319ms)
✔ the uid header takes only an Authentik uid; the username header still takes a username (543.816093ms)
✔ a preview value cannot start with - or . (49.330236ms)
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (708.953414ms)
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (4699.119665ms)
2026-10-18T18:58:47.927Z settings user="jason" changed
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (81.398563ms)
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (71.45649ms)
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (58.559978ms)
✔ tokens.css and icons.svg are byte copies of docs/design (9.38857ms)
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (8.251467ms)
✔ shipped strings are unchanged, and the web keeps its write boundary (4.287255ms)
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (9624.613668ms)
✔ five states on Board, Inbox, Tasks, Agents and Trail (2696.834305ms)
✔ REQ-LIMIT-4 Settings shows all token kinds and unknown turns beside every total, as a read-only separate section (3152.039133ms)
✔ REQ-WEB-1 usage read keeps unknown counts and each token kind; no query or write is accepted (124.578401ms)
✔ REQ-WEB-1 malformed usage is refused instead of shown as zero (35.174941ms)
✔ Queue, Business and Settings in their five states, with no move button (6063.068495ms)
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (1772.792859ms)
✔ the server log names no config path when the system config refuses (531.988279ms)
ℹ tests 206
ℹ suites 0
ℹ pass 206
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 55710.900114
@@ -0,0 +1,35 @@
board-held rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
browser-edge rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
bus-browser rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
bus rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
channel-chat rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
chat-browser rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
chat rc=0 ℹ tests 22 ℹ pass 22 ℹ fail 0 ℹ skipped 0
conversation rc=0 ℹ tests 4 ℹ pass 4 ℹ fail 0 ℹ skipped 0
discord rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
docs-browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
editor-browser rc=0 ℹ tests 16 ℹ pass 16 ℹ fail 0 ℹ skipped 0
editor-provenance rc=0 ℹ tests 6 ℹ pass 6 ℹ fail 0 ℹ skipped 0
editor rc=0 ℹ tests 5 ℹ pass 5 ℹ fail 0 ℹ skipped 0
history-return-flow rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
limits-browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
limits-route rc=0 ℹ tests 4 ℹ pass 4 ℹ fail 0 ℹ skipped 0
markdown-preview rc=0 ℹ tests 19 ℹ pass 19 ℹ fail 0 ℹ skipped 0
messages rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
pinned-copy rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
preview rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
project-file rc=0 ℹ tests 10 ℹ pass 10 ℹ fail 0 ℹ skipped 0
reads rc=0 ℹ tests 11 ℹ pass 11 ℹ fail 0 ℹ skipped 0
relaunch rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
return-flow rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
send-browser rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
send rc=0 ℹ tests 13 ℹ pass 13 ℹ fail 0 ℹ skipped 0
serve rc=0 ℹ tests 4 ℹ pass 4 ℹ fail 0 ℹ skipped 0
service rc=0 ℹ tests 23 ℹ pass 23 ℹ fail 0 ℹ skipped 0
settings-form rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
settings-write rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
shell rc=0 ℹ tests 5 ℹ pass 5 ℹ fail 0 ℹ skipped 0
usage-browser rc=0 ℹ tests 1 ℹ pass 1 ℹ fail 0 ℹ skipped 0
usage rc=0 ℹ tests 2 ℹ pass 2 ℹ fail 0 ℹ skipped 0
views rc=0 ℹ tests 3 ℹ pass 3 ℹ fail 0 ℹ skipped 0
@@ -0,0 +1,195 @@
f53d30d147ee31235f25e564f5214ad4898b25a9e7227864911d8c56534a7060 docs/TOOLS.md
afcdb69ced938d04be2a2de760f3d525fb7875786cf3bd6dc55e6624d88d6699 packages/webui/README.md
c60f2e353172bb0e3aa1cfe7be081f49898602af8ca0294fef2dabb8112b942f packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
8596c60ac4b5a8885e02853ef378743eb0bc4c9bbb00ce8a72016e4453b32a79 packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
aeda22cf4a6359913fb478abd2518c8e9c638cf6dcb64297b18b5ede7ee159d3 packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee packages/webui/src/public/editor.js
c336f00436d9d9c36e8a15a57d2b91f6a7084748c816c40f144000e7c23f410c packages/webui/src/public/index.html
adca29f8a41afbb6176aee56fc4c973bc512076efa81382dd275bae40d2825d2 packages/webui/src/serve.mjs
de0e57324b4c6f6651ed95df855893f86a4d6a9930c705b9754164163857df6f packages/webui/tests/browser.test.mjs
a2dd88810a160a0681e1dac72c4cc0f98a7ac09b445fc38a55d1503d880110d6 packages/webui/tests/docs-browser.test.mjs
40fa1214b605f4b196955da28f26a8f8f0bbac373fc90d27cbc7010d675df01c packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,14 @@
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js 9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,14 @@
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js 9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,195 @@
f53d30d147ee31235f25e564f5214ad4898b25a9e7227864911d8c56534a7060 docs/TOOLS.md
afcdb69ced938d04be2a2de760f3d525fb7875786cf3bd6dc55e6624d88d6699 packages/webui/README.md
c60f2e353172bb0e3aa1cfe7be081f49898602af8ca0294fef2dabb8112b942f packages/webui/editor/BUILD.json
fe046f0f935c528c9f0a65d589c4401a43ac49ddfa6cf6543814c280d5b619bd packages/webui/editor/build.mjs
3a4931e7fa7d74633a1cbcce31cb202beea40bbcb95ba8dd28a26313bd3d7e24 packages/webui/editor/editor.css
f780c327fab8cde6ef922669959ac2802691cd405d3c0911faf97d7fbe2e7d56 packages/webui/editor/entry.mjs
8596c60ac4b5a8885e02853ef378743eb0bc4c9bbb00ce8a72016e4453b32a79 packages/webui/editor/model.mjs
efc5dd177e1890f5d76c2cf631a9a720c45398a501c52e0d178e5882da77c3c9 packages/webui/editor/toolchain.mjs
737a37696aee31d46a9091119fce294ec7562ff50a54585ec381e1d217132829 packages/webui/editor/view.mjs
eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f packages/webui/package-lock.json
0bb346f598380c2bcdb39db92a006959442d3ce5dc645503ef76405aae53311c packages/webui/package.json
aeda22cf4a6359913fb478abd2518c8e9c638cf6dcb64297b18b5ede7ee159d3 packages/webui/src/public/bus.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f packages/webui/src/public/editor.css
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee packages/webui/src/public/editor.js
c336f00436d9d9c36e8a15a57d2b91f6a7084748c816c40f144000e7c23f410c packages/webui/src/public/index.html
adca29f8a41afbb6176aee56fc4c973bc512076efa81382dd275bae40d2825d2 packages/webui/src/serve.mjs
de0e57324b4c6f6651ed95df855893f86a4d6a9930c705b9754164163857df6f packages/webui/tests/browser.test.mjs
a2dd88810a160a0681e1dac72c4cc0f98a7ac09b445fc38a55d1503d880110d6 packages/webui/tests/docs-browser.test.mjs
40fa1214b605f4b196955da28f26a8f8f0bbac373fc90d27cbc7010d675df01c packages/webui/tests/editor-browser.test.mjs
f18fc2d30025a5402b6b044d2d8630fec4690da5fcd3a01b6fd5f1f3d3661461 packages/webui/tests/editor-provenance.test.mjs
d12ecf293a6dcf55ce24af87c09ca8641b9b698ff52ce1095376f3cea989ec12 packages/webui/tests/editor.test.mjs
d32b86d10998aa6d863c74e1c1054ce1d3a9a21770860eca602538e77394a7e1 packages/webui/tests/helpers/editor-bundle.mjs
552dadb0614bcbb720c1fc4af09cd8a7e760bf987709efe3e3f47524e4af124b packages/webui/tests/helpers/every-element.mjs
7674edf5aa05f374a74cf6f99628b041a7f91983a71fb615c74fc48dd4745a0e packages/webui/tests/serve.test.mjs
2f687a0fd1ea83ce3935b8a06db2aa8a21cb33feb95c22a7b12f8d38e504d6a7 packages/webui/third_party/editor/NOTICE
d0e600f0d649b3cb303172608f5daee72d60214bdbcb9d6a2c9dd8afbf578c5d packages/webui/third_party/editor/PROVENANCE.json
cb992345949ccd6e8394b2cd6c465f7b897c864f845937dbf64e8997f389e164 packages/webui/third_party/editor/entities/LICENSE
c92f657f679669a91bc32cd98f0b4812b3f4a9c6f3b3af3022a70cb25b7efc7c packages/webui/third_party/editor/entities/package.json
38a42d441b67aa4f6397a2edbc57a2845110f2f64c18c56c931f1ac55179be94 packages/webui/third_party/editor/entities/src/decode.ts
7467c31bd84fed848ee0b1b7b4ec100ffe387fb2802ef0fa66307744a45f331c packages/webui/third_party/editor/entities/src/decode_codepoint.ts
e40bad527b5c9a1d5b9e0e7d0b8643328cb4d9e1b2d79777a367b81bcec3e09b packages/webui/third_party/editor/entities/src/encode.ts
c062e448b06654fa3c99a04e89bc53bc4463bf5e5cf65ac711f372a77e22639f packages/webui/third_party/editor/entities/src/escape.ts
99bd4f1a69db8431bf58444e6c38a8b60f2a1820e1ce5781c851c1914a8822c4 packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
701497193dd355232513b7e4a7c6fea4d856eb33d5116c61cda4d59028d4790b packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
409c7a156de66f45037fa684afaa6147f98d8860274ef0218f02a16c993cb103 packages/webui/third_party/editor/entities/src/generated/encode-html.ts
6487bfc6a09ad4211e1264ccd7d21fbce19bfcfd06eba8b83cb80537f0109687 packages/webui/third_party/editor/entities/src/index.ts
95e3f7f0e81e9b4940cdfaa1956aaff5e4dfd2fb1565041e7c78eb9a606f23e3 packages/webui/third_party/editor/linkify-it/LICENSE
b7cdca31306ba9d92b963134333e9ec71df74bd9d8a2c649e0e2f6c7468d92b1 packages/webui/third_party/editor/linkify-it/index.mjs
ce32a3968ede95c9fe29fe505fec5c19ab0bb7f8eb5d7666ab3180910adc9cf8 packages/webui/third_party/editor/linkify-it/lib/re.mjs
492ffef383ead25ddc4a7615129c3c41eafe1a0a10172680a93fbb5039c84204 packages/webui/third_party/editor/linkify-it/package.json
792c48c5a849a15fdf9e37e8bcf9e6d1dd13b32b46c642a748a0a46a9919d473 packages/webui/third_party/editor/markdown-it/LICENSE
a112fad9f779e8e4d58a76586ec54b5b9fe134d92a670a96749bcb676be2c62b packages/webui/third_party/editor/markdown-it/index.mjs
5bbdf4ab71bd31461b29d47da1077c600ba941c3e53d74f8d50ce31ac45546a5 packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
82021df92c9f3f856cd1bb59454c2033c50a0617a748acc150bbdacb8101abcc packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
952160caa972e1d2e291dc284d8531f835b9eb7628c1e806c9cf95351c55afbe packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
c5a73b8f46eaa0f027f06a309a362f885ec4467c99a581d798cbb6a3bac14965 packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
0426a1489ec76c3e10c8b36bf5a286e97cca90a800e4e24a98b314835b790c1c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
70129adaa86dfd0f99e05971c51f865a3956775c045ccdc2ec8f2f2e0c0893aa packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
c10fc0bd89f11eb982a865dcf525cf6f3bec328958bb4de752e3993b44eb9c7c packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
840746264c1655558e80752c663d745e4336e806978f74d4c678c5e21bab5158 packages/webui/third_party/editor/markdown-it/lib/index.mjs
ba9fe86713007b6c04e4381fc15500936ce3852eeaefe819350fa1a42eb10bd4 packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
d6789a1f7ef8ad05a64114b873ca18b4b5c8245fee02d2d7559a20bba93858ec packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
67ed63ad6efecc6f03bf1dc40f01a0abec7c0e675053b7503847bd4b287f72e4 packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
0287ae7e457b4a18f049aa81a7ca39bbc543eb2e9b95718476a8fb16dc299eee packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
f8b577995fcde6bd0fcb96524eb32a872d9e82874921956fda81477913a94cc9 packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
d88083cd3b6a87566b63950c99a810fa3228345a41cb1fe441f2d8139bb9e60f packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
47750faf7a1f9dab8d3e984ee4c6a799c195130ff141c9cb1a98e13d7bf70cc2 packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
86b94f2a50df56a51ef6ee8bdfb23a6733e83a1efa2f58b3b166aebae84a7ce2 packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
d88eaf1c88489376a825e9de09031d17b6cf442ae5f420acce3619df94f5c899 packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
5b5aad3b00bf175f55849ae44974944fc26a45d416440f3710d11c6213f49968 packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
4434e2f70150df1490bd11eeea8bd20fe763f029c22fc21305b6376f068cfd21 packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
75e812fc9938775e55d7c4e840a856e557ef0f4a2ab27aec535d25c78c6e8d7c packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
2d786cf899247071a305d4fefcb3d41de707e31982997ebf134672497f20edc9 packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
d8e20eca3742fb8e5d3eae238de1afa962104d772df6dbccad604325940ca86b packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
ae83782c9a5bbcb69f3127a4541c1e27e6a46be86d4955bf840c5cd1a289a482 packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
1f569f81b61a73094ea7c70a30b2d6d3577de26de2d55d5f8b9146027f2f8a5f packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
be9534ba8fa1312ae6ab6e6ecd6e96173a5a3dd35e924b7751782675bb15dc9a packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
8884a101e95de67d72b1fd3dfe3341bf52876132398d72a528481f662e0eecb6 packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
3f26d52f4fa67c5fa5f85346acf18f4139419b5dc8496056dd6050bd3a266860 packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
454553ff462fc68e353dad0f7b04ba1da46ee18acf88047dde8faf1873d64bca packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
52ef23be5d9248275a5c0ff8b43602540bd3ed8a69bc63fbdc262b09c5de69b5 packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
0da70e72022dda01deaf6630a772a9c4798b6b6dc1d37144520b872d302b12a3 packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
e68ac3597363b13a7451e65d9a7943ce99f4b57e9509eb62eebb1a3162423499 packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
7f7fab952ebe0a0c16016835e1af0bf682af6e2eb5a28454eb350c28332cfa93 packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
9b3211580c89951bad60aa4550f76ebf2d2b81cc4523849ed34e6b85ed25ba3a packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
2d92309d2a0517b7ac74ba6780333996ff3bf0763e28464916f04befdddb4dee packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
eb68c945733124231b5dc98d480854393b99fc069fd95703f4c36d310572e4f0 packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
d61f0f19e2e49b565564a1537c46828c18da453516226d1637816021d4d68fce packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
78599ff3df236375e29dc63f04ad93ae1bb4744d7c47021b93104462cbfc61c5 packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
8baed32815f895f72b0a01255c3180ba2e72fcffb51fbea7677ccf128dafbc40 packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
06769d0aa4e5af875e504dea82db9bc726b463911e7b1c17f732098be95ad403 packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
23e1dbd2fdb408e257f2bbccccae1b1ee8a068db1c43a38b4edd9db76c2f40a1 packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
37c2420b56e055ff150c13485a2322914974b0364a8d3823c3ef81318196c101 packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
f498e10cc6318f2a2856e51217e6c0f0a837b18dd920162d2cd6e49789b15adf packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
143e477737ce7565af95a6c5dbb854667a07d45e7f3e1b849fb68ba39937014c packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
f7bee2bd14c158e0178ef409ea84a5d330672094265fbd112673d23a75ff1924 packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
67e1ad7ba6ce1a2ee0dfaee83653fec3f3e602f8d8841c4b8426c770b03870b4 packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
a805f4cc75ad14b8b7838d408b703a9e26401badfd00a39a80a21e10a3af5cd0 packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
3a55e9a5fa81bd7b924d4f7469452a7fa6ba999f5204ff076a64f5dc8477348e packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
4c51181f46d59ce1d40dfdec014d1eb69937de850eacfdd4fcb759f9f141e990 packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
f4b30bd182fea54a661528d6a031c2cdcb06c688a00fb5598c39cf8ae9554372 packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
cf130f8d2405731b5a2ed687ad7b4571baf9dbc3f98a472629c6553c1c6cb089 packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
63aca7fc12c4e44bbe8edb6b8cf38c8bf01e3aa1ef5dd0feef82aae930b1d0e8 packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
c6ebce7f456a6fef97e3cf2cd411418a80eb15ef469d7a7ea12405191cd5705f packages/webui/third_party/editor/markdown-it/lib/token.mjs
4e47c64787bcfe32c7a8bebc922e03cc5d007f389fc0f8c61199ab76bf7287e5 packages/webui/third_party/editor/markdown-it/package.json
6b6a356c4337e2446841f30f3cdf7e7023af8c5260b5e347c0f987b9f6aa2644 packages/webui/third_party/editor/mdurl/LICENSE
8ea430f1f8a107f529e2dac519d2f18e71ec9befe6f23f78bf6510cf86d3f9a0 packages/webui/third_party/editor/mdurl/index.mjs
d91544cfb42b9639073f5fa0f576bf72ef6697e848005357c433cad036c2ef20 packages/webui/third_party/editor/mdurl/lib/decode.mjs
0ae621933b548f880404841b251b0f4fc2c8446ded699e6812def217250ac15d packages/webui/third_party/editor/mdurl/lib/encode.mjs
2410ec324b913a42c572e01ae49436e5fa4e2e5fbea15c08c92a6dea8bc5887d packages/webui/third_party/editor/mdurl/lib/format.mjs
2a417b42e9ea8ee94fc77c596a34eb206d6c69823484e89d80bf1e7583d8f91d packages/webui/third_party/editor/mdurl/lib/parse.mjs
807e00f99605ba97f4953f8ceb6a65db877d23a9f5496ae367eb953c0e4e627d packages/webui/third_party/editor/mdurl/package.json
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/orderedmap/LICENSE
eb0160f63616895337d3b99b8e445d07327ef283f6b525dbcdce7f11efc7a641 packages/webui/third_party/editor/orderedmap/index.js
282ea598284094608736ed5a75f4e0b48da53b851b62bba22362feac507d5c6c packages/webui/third_party/editor/orderedmap/package.json
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-commands/LICENSE
4cef535a05c932ce887caa9fd6a6af08c1b4eb0ec0b30f7f7d81cb7ef3d32e79 packages/webui/third_party/editor/prosemirror-commands/package.json
41ea89670248c1b68a7120c1304d1491b37e7ed7c02ee36002fed08f3a411dfc packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-history/LICENSE
e6119f791faa9f4b162b7fe5fd6a5a5a42ffbd7070a682db922787e4cbd6df22 packages/webui/third_party/editor/prosemirror-history/package.json
146298d448b0290b6e978ff579a9e159414789d6d37ee9e2bfe7c41e1d45f50c packages/webui/third_party/editor/prosemirror-history/src/history.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
d6609dcfd99fe0dbcf0dcb9121693337b2ded4b4d20ee5255b797277ca59f8c9 packages/webui/third_party/editor/prosemirror-inputrules/package.json
fcf2d6220de0ad68e71a28591d1aafdb776707a551e0e30de5f1b1a772eabbe9 packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
3a551544aa4c81843d0120936f1bee96fa553b1d90ed2ac429688024bf1a21d2 packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
17eab940d68292553eda7fb3ec665f2fb5c1e2c18402115e8bc9931aa97b1bed packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
444a4f1ea383a140708f2a22730568fed590ae4a749581dc2a20937471bb75dd packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-keymap/LICENSE
15652f722a20aa5a7db8a8ae5a1326e56435f6651c67cf8a594c2c826eada761 packages/webui/third_party/editor/prosemirror-keymap/package.json
9d27d674fd56226ce0deb5ba367873872375296d6088783191c039206ea92b60 packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-markdown/LICENSE
f0cbcc04e45defa3e2533ce02e39f06212814b9c17cdccf4e98fd1142e1be494 packages/webui/third_party/editor/prosemirror-markdown/package.json
8f021766089ae38beb47892a8526eb78453cbfc48ee5537ea15bef230cd8283d packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
f0dcc085537da271aa3bc4969576bbd5f03d9982f35807386fdf9b12af7d0aa5 packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
f2559c4d6b14e3a322078f0fdf653f3c8a98ccbd28ec5c9c19eff7be63a6eece packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
fa394f5f51ae8834c78cff106faa9892a0f12a2c265a4bde095861f2a7d207eb packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-model/LICENSE
b9357f3e9f19800fa43e91e70cf62e63e7f181c1acd607c7cf2aac8de212877e packages/webui/third_party/editor/prosemirror-model/package.json
2ea58a7903bd66ce21a7d313f1af3f0674f240e7a207622d6fc1d64b16a7e174 packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
a07fd75d13dd2765526589fd31fdd0307037e6e27dfece91301ca371d3b5fe0c packages/webui/third_party/editor/prosemirror-model/src/content.ts
d1f2c1bc168e0fb891a519ab0daa7e136bd43b7f8a25d50d1cdbed45fe3d6cd5 packages/webui/third_party/editor/prosemirror-model/src/diff.ts
bb9d6b507b084093de4efbe3066dd47b14afe32a41e4390af4aacbe8d98058af packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
b4f5e77c9dd4f430002b83fae8e1d114d9653e16ef4b28fba5ea01eb52980abb packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
d6bd6dfd331f27a8b7ca6554ed4833c4983a6cb1cd6332d1c576c0529df386ea packages/webui/third_party/editor/prosemirror-model/src/index.ts
7ba7a7ba2f1861ae15cd894afa80e5211b59e2117bf4568af0b5cc9cd8e18057 packages/webui/third_party/editor/prosemirror-model/src/mark.ts
39defcbeff65f8de187e61d956a1b5b1080962eda32bb875ac1d1e025c31f0d2 packages/webui/third_party/editor/prosemirror-model/src/node.ts
4f2fbf315fba1e70b7802f7c7f5e3478848c5f57f025c2b2169b680153f18b2c packages/webui/third_party/editor/prosemirror-model/src/replace.ts
dcef2f457569f8c9daf9c33012470a3446d7b42b1c7aecc9b79d025679fcf596 packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
ca0b19ac52487b2d8e75a3ee8321e02ecc5b24397218ca9606bd7b6648c22f7a packages/webui/third_party/editor/prosemirror-model/src/schema.ts
b7b3ee52fd9218c3fcaf45a873aa769a3ec28e539715ec1162a545fbd4c8981f packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
98d90d8f6748a87c4948f518b14a453f00e9f4e1dd507744786a3e0614953964 packages/webui/third_party/editor/prosemirror-schema-list/package.json
fc816321f12d8b9ebbaecfaacd9c48807e3ef0af4f95cc536e30b8cd5df44d54 packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-state/LICENSE
b40080e3d2ebfaab5a6ee44b3b2cb20761d79cbe514411df8641a8434d2b65ef packages/webui/third_party/editor/prosemirror-state/package.json
eb9e85c66caac02f0140ca3686efd10cd117d64eda4d9054bc8c3e4622055d6a packages/webui/third_party/editor/prosemirror-state/src/index.ts
a0bac3d5db226ed673774b0b6b58d43e36d13f34b9ecee874d081dc3145e2202 packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
cea98fb72c5ced3604556909df9acddf924b3e62f80cab4bdbe430a78afc529a packages/webui/third_party/editor/prosemirror-state/src/selection.ts
081d675bbeaa6598c17f45be84a84011c5e083b66f9c6282be0304a5f38f7f44 packages/webui/third_party/editor/prosemirror-state/src/state.ts
fbab5b3d17fc510152167b387e15dcf360c086ed78dcb2751cecae7938d01a83 packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-transform/LICENSE
2e7118bcda51981c6a6703a6acb43d50aad87cb43fee2a35a9b0f0538ed50bcb packages/webui/third_party/editor/prosemirror-transform/package.json
02a7084a3a5cf784504f3e954c248e655ffa16c41bbbb40f35c1139333833f6d packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
340e51489f5ea1e160dc80c9fe0bad0933d276abf33964a05060005c1f314bed packages/webui/third_party/editor/prosemirror-transform/src/index.ts
ddb1fc54b8e49581b6f1f71b84689ccad8b2cb10c44ecc9c01d9b32045624e78 packages/webui/third_party/editor/prosemirror-transform/src/map.ts
f16e4d61bbd8ea94646c16b7b3a781f73a29308a32ac4d9cacc7974c2db5a0cb packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
0beed9199e494bd664e685e05f18a94fd7299f72181702fd9aa5804a6a371ee4 packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
07110ea74d962e5be381628bacb5e340124c77004d08c343a1c500ba1436bfe1 packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
478a68a658aa697ad75be626eaf99616d09e082ed04fb6fb3dd3cb0e76dc28a9 packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
1080eb080282f47c9ac6edf91b1ea788069a2644da4d7257b139ca610ab9e1ac packages/webui/third_party/editor/prosemirror-transform/src/step.ts
0fbbe54771f17d3c309b19846d3bf4ce160642eb7ec43c8bc6edef55a87beae3 packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
ce12d2c55f42342f077a1b08a5ccca1c2847433bacdf2548e00c7e53704342f3 packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
ef0b452ced6304db2ce78ca66de1fc7b97bab05bc1750c95df359ed3fe1d65c8 packages/webui/third_party/editor/prosemirror-view/LICENSE
79841007db65e2d7abf34585ae8accff299081c2f2731b81c138afef050dd29a packages/webui/third_party/editor/prosemirror-view/package.json
753c05e4ed16081e169e57fee6febaddafb7de6edd568fb93b2690c3fd63b3af packages/webui/third_party/editor/prosemirror-view/src/browser.ts
e08d4a3bb328babc0681a3c20bd151b1fb2225d6201949ef4605b933ffe04705 packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
4401b14080289627189743717edfb4131b42087c4d705faab90e0c7bee7b82d9 packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
a18ba09db59bd096ffe84b73554542f93f3c4aa5b92322de38a7ed78da493e3a packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
045cb9f2ee04030a9488b1c8de850a1dbb35e28050a73b92842f3503d37ec6af packages/webui/third_party/editor/prosemirror-view/src/dom.ts
6ff0d1123fce86c9d8ebf1370dc3c6ce143bce30427680556b1b07df76c2a08a packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
d7848f023b7b301267fbc2f73fce36f89ae3a6704f5ca428675ad36f56edb418 packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
ce088c9e363f5f1834a7ed9d32e0b19721651ff04398bafc5db6fd86a7ad60cb packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
14a8ed0e44a7fc73a6886e1dc6ab7c70311f4590b9501578a2fac4e7e37e8200 packages/webui/third_party/editor/prosemirror-view/src/index.ts
58b78c5da37cb9cc255e494c72566c1013eae4972a4b093cca866a6b7de255e4 packages/webui/third_party/editor/prosemirror-view/src/input.ts
6a305d8080a038b0fdb0d7e02b54f802179a9dac47ab3c5386077b5f09d78437 packages/webui/third_party/editor/prosemirror-view/src/selection.ts
3291f9a85c2cd8efcb1f031eed62cfa5a103d760b3a924bcf8d2ee148b8a121f packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
1234171efd99cd16d1a6754c0f6586d0d8b69573432aff2e671cb6a26c9eaa57 packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
e025033bd11110af671fb8eb62f0db8895073ccdca70b596aa94a27eb5bf9acb packages/webui/third_party/editor/punycode.js/package.json
6052a80eac47e46bd4de17ae0095e0192c336d3d7c387d292ad2176ebfc53d04 packages/webui/third_party/editor/punycode.js/punycode.js
530424aebdd0e73f53238d1f89df250057bc8d8ce090cf5954197fadce5bf226 packages/webui/third_party/editor/rope-sequence/LICENSE
efb85fca2ecef4b1dfd63103cfb8c755ff209ffe6e72ae0928e833c3ac666624 packages/webui/third_party/editor/rope-sequence/index.js
0e378a9dcc447c04e712238d60a1f2ffb878bfc161cbb95ef0a3c34d2a541548 packages/webui/third_party/editor/rope-sequence/package.json
483acb265f182907d1caf6cff9c16c96f31325ed23792832cc5d8b12d5f88c8a packages/webui/third_party/editor/uc.micro/LICENSE.txt
d73b91600fd887bccf8f3a7ccb8a98d497222b2923064ca135cd3d86eecba9b8 packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
0ba760155f77b39359cf0ab088589444a68987facd696ae8fe7fc8b7ced5c5c5 packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
378c0a61fee0d8c911d0c6bff819a601571a95ac4296ac5068c56ea76291697f packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
53579876c2563673dbd3f14ad7ccbb0e232aa25f9398679f5d792b75fcbfa40e packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
32c50e92e9f4bab827145c99299616178f65192aedda27d0b9bf938a34c48325 packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
4c6142bf1f94e06fc9942639b651b22e7982a8ccc1427f694ffc6fdf49ef5087 packages/webui/third_party/editor/uc.micro/index.mjs
8b60af5ea73b0bac4d26111a3f5b00844657b998f9a3fd473710d9e33d274250 packages/webui/third_party/editor/uc.micro/package.json
41d50d9f5babe77f07305aec91f0e4bf29fd95980feb2a6592a3bbd077b313bc packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
869c30f368eb08735e779027b9f4bc9fea2f39624351856aebe42741f0bc0884 packages/webui/third_party/editor/w3c-keyname/LICENSE
b649dec4f01c7c5eb05be4641b5b698c6938231ee50b38e17a2f0f822ca3df2e packages/webui/third_party/editor/w3c-keyname/index.js
0396c646f74d52c1b0851074ecdb5cabf540af595ceb5e5a5136df2bf3c2f83b packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md
packages/webui/README.md
packages/webui/editor/BUILD.json
packages/webui/editor/build.mjs
packages/webui/editor/editor.css
packages/webui/editor/entry.mjs
packages/webui/editor/model.mjs
packages/webui/editor/toolchain.mjs
packages/webui/editor/view.mjs
packages/webui/package-lock.json
packages/webui/package.json
packages/webui/src/public/bus.js
packages/webui/src/public/editor.css
packages/webui/src/public/editor.js
packages/webui/src/public/index.html
packages/webui/src/serve.mjs
packages/webui/tests/browser.test.mjs
packages/webui/tests/docs-browser.test.mjs
packages/webui/tests/editor-browser.test.mjs
packages/webui/tests/editor-provenance.test.mjs
packages/webui/tests/editor.test.mjs
packages/webui/tests/helpers/editor-bundle.mjs
packages/webui/tests/helpers/every-element.mjs
packages/webui/tests/serve.test.mjs
packages/webui/third_party/editor/NOTICE
packages/webui/third_party/editor/PROVENANCE.json
packages/webui/third_party/editor/entities/LICENSE
packages/webui/third_party/editor/entities/package.json
packages/webui/third_party/editor/entities/src/decode.ts
packages/webui/third_party/editor/entities/src/decode_codepoint.ts
packages/webui/third_party/editor/entities/src/encode.ts
packages/webui/third_party/editor/entities/src/escape.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts
packages/webui/third_party/editor/entities/src/generated/encode-html.ts
packages/webui/third_party/editor/entities/src/index.ts
packages/webui/third_party/editor/linkify-it/LICENSE
packages/webui/third_party/editor/linkify-it/index.mjs
packages/webui/third_party/editor/linkify-it/lib/re.mjs
packages/webui/third_party/editor/linkify-it/package.json
packages/webui/third_party/editor/markdown-it/LICENSE
packages/webui/third_party/editor/markdown-it/index.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs
packages/webui/third_party/editor/markdown-it/lib/index.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs
packages/webui/third_party/editor/markdown-it/lib/token.mjs
packages/webui/third_party/editor/markdown-it/package.json
packages/webui/third_party/editor/mdurl/LICENSE
packages/webui/third_party/editor/mdurl/index.mjs
packages/webui/third_party/editor/mdurl/lib/decode.mjs
packages/webui/third_party/editor/mdurl/lib/encode.mjs
packages/webui/third_party/editor/mdurl/lib/format.mjs
packages/webui/third_party/editor/mdurl/lib/parse.mjs
packages/webui/third_party/editor/mdurl/package.json
packages/webui/third_party/editor/orderedmap/LICENSE
packages/webui/third_party/editor/orderedmap/index.js
packages/webui/third_party/editor/orderedmap/package.json
packages/webui/third_party/editor/prosemirror-commands/LICENSE
packages/webui/third_party/editor/prosemirror-commands/package.json
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts
packages/webui/third_party/editor/prosemirror-history/LICENSE
packages/webui/third_party/editor/prosemirror-history/package.json
packages/webui/third_party/editor/prosemirror-history/src/history.ts
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE
packages/webui/third_party/editor/prosemirror-inputrules/package.json
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts
packages/webui/third_party/editor/prosemirror-keymap/LICENSE
packages/webui/third_party/editor/prosemirror-keymap/package.json
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts
packages/webui/third_party/editor/prosemirror-markdown/LICENSE
packages/webui/third_party/editor/prosemirror-markdown/package.json
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts
packages/webui/third_party/editor/prosemirror-model/LICENSE
packages/webui/third_party/editor/prosemirror-model/package.json
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts
packages/webui/third_party/editor/prosemirror-model/src/content.ts
packages/webui/third_party/editor/prosemirror-model/src/diff.ts
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts
packages/webui/third_party/editor/prosemirror-model/src/index.ts
packages/webui/third_party/editor/prosemirror-model/src/mark.ts
packages/webui/third_party/editor/prosemirror-model/src/node.ts
packages/webui/third_party/editor/prosemirror-model/src/replace.ts
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts
packages/webui/third_party/editor/prosemirror-model/src/schema.ts
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE
packages/webui/third_party/editor/prosemirror-schema-list/package.json
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts
packages/webui/third_party/editor/prosemirror-state/LICENSE
packages/webui/third_party/editor/prosemirror-state/package.json
packages/webui/third_party/editor/prosemirror-state/src/index.ts
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts
packages/webui/third_party/editor/prosemirror-state/src/selection.ts
packages/webui/third_party/editor/prosemirror-state/src/state.ts
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts
packages/webui/third_party/editor/prosemirror-transform/LICENSE
packages/webui/third_party/editor/prosemirror-transform/package.json
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/index.ts
packages/webui/third_party/editor/prosemirror-transform/src/map.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts
packages/webui/third_party/editor/prosemirror-transform/src/step.ts
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts
packages/webui/third_party/editor/prosemirror-view/LICENSE
packages/webui/third_party/editor/prosemirror-view/package.json
packages/webui/third_party/editor/prosemirror-view/src/browser.ts
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts
packages/webui/third_party/editor/prosemirror-view/src/dom.ts
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts
packages/webui/third_party/editor/prosemirror-view/src/index.ts
packages/webui/third_party/editor/prosemirror-view/src/input.ts
packages/webui/third_party/editor/prosemirror-view/src/selection.ts
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt
packages/webui/third_party/editor/punycode.js/package.json
packages/webui/third_party/editor/punycode.js/punycode.js
packages/webui/third_party/editor/rope-sequence/LICENSE
packages/webui/third_party/editor/rope-sequence/index.js
packages/webui/third_party/editor/rope-sequence/package.json
packages/webui/third_party/editor/uc.micro/LICENSE.txt
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs
packages/webui/third_party/editor/uc.micro/index.mjs
packages/webui/third_party/editor/uc.micro/package.json
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs
packages/webui/third_party/editor/w3c-keyname/LICENSE
packages/webui/third_party/editor/w3c-keyname/index.js
packages/webui/third_party/editor/w3c-keyname/package.json
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,37 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (829.323081ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (683.865508ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (619.144404ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2548.115307ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (974.65857ms)
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (5914.053947ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (572.471403ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (658.334037ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (526.273423ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (552.601957ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (542.803716ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (612.370069ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (598.014183ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (584.941374ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (581.043258ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (578.778575ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 17488.346244
✖ failing tests:
test at tests/editor-browser.test.mjs:382:1
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (5914.053947ms)
Error: Uncaught (in promise) Error: Condition timed out: document.querySelector("#doc-visual .ProseMirror"): undefined
at Object.evaluate (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/browser.mjs:48:35)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:402:5
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:383:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
@@ -0,0 +1,43 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (831.620833ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (779.268402ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (644.787183ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2589.523526ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (975.918588ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1933.818626ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (564.930641ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (591.645594ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (693.421969ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (686.503378ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (601.364599ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (590.953845ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (639.767357ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (685.646252ms)
✖ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (720.590249ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (619.959459ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14247.683039
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (720.590249ms)
AssertionError [ERR_ASSERTION]: the value is written as "```\ncode\n```" in "# x\n\n```a`b\ncode\n```\n\nyTitle\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (770.589395ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (733.08693ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (689.086121ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2637.738723ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (987.831836ms)
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (907.342556ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (674.440249ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (575.422809ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (551.576174ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (635.406085ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (542.370491ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (569.01233ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (546.288997ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (541.073921ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (598.447851ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (556.789719ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 12619.190881
✖ failing tests:
test at tests/editor-browser.test.mjs:382:1
✖ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (907.342556ms)
AssertionError [ERR_ASSERTION]: a failed round trip shows the source, the note and a Save that is off
+ actual - expected
{
+ note: false,
+ pm: true,
- note: true,
- pm: false,
pressed: [
+ 'true',
'false',
- 'true'
],
saveOff: true,
+ text: null
- text: '# Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n'
}
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:397:12
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:383:3)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: { pm: true, text: null, note: false, pressed: [ 'true', 'false' ], saveOff: true },
expected: { pm: false, text: '# Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n', note: true, pressed: [ 'false', 'true' ], saveOff: true },
operator: 'deepStrictEqual',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (877.897174ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (770.675477ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (694.612391ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2656.973308ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1070.720663ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2017.550811ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (557.308871ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (575.745897ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (575.753215ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (606.034423ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (586.713981ms)
✖ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (642.720921ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (559.864873ms)
✖ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (593.394552ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (583.533073ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (571.70688ms)
ℹ tests 16
ℹ suites 0
ℹ pass 14
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14060.513991
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (642.720921ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"x\\\\\\\") <img src=x onerror=alert(1)> \")" in "# ![a](https://ok.example/a.png \"x\\\\\") <img src=x onerror=alert(1)> \")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (593.394552ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"end\\\\\")" in "# ![a](https://ok.example/a.png \"end\\\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,43 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (855.044001ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (731.690122ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (658.604331ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2659.107845ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (989.410968ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2058.362251ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (700.082065ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (769.768249ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (716.971214ms)
✖ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (714.499248ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (738.3899ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (729.359471ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (716.271551ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (634.121667ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (571.549856ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (556.308558ms)
ℹ tests 16
ℹ suites 0
ℹ pass 15
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14906.274937
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (714.499248ms)
AssertionError [ERR_ASSERTION]: the value is written as "```T\ncode\n```" in "# x\n\n```T\n\n<img src=x onerror=alert(1)>\n\n\ncode\n```\n\nyTitle\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,60 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (859.349382ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (739.344195ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (710.080419ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2640.929663ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1009.744105ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1986.65535ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (567.043351ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (536.947533ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (621.815268ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (689.493144ms)
✖ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (619.263481ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (599.606675ms)
✖ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (630.605394ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (647.286659ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (735.087139ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (675.845663ms)
ℹ tests 16
ℹ suites 0
ℹ pass 14
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14371.859079
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (619.263481ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"x\\\\\\\") <img src=x onerror=alert(1)> \")" in "# [word](https://ok.example/p \"x\\\\\") <img src=x onerror=alert(1)> \")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (630.605394ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"end\\\\\")" in "# [word](https://ok.example/p \"end\\\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,77 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (826.554122ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (736.745035ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (665.292508ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2669.999173ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (990.519808ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1957.565268ms)
✖ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (599.315743ms)
✖ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (557.122724ms)
✖ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (582.388616ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (572.680377ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (569.042738ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (520.616298ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (600.941746ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (559.697937ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (628.566264ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (601.324389ms)
ℹ tests 16
ℹ suites 0
ℹ pass 13
ℹ fail 3
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 13748.258341
✖ failing tests:
test at tests/editor-browser.test.mjs:434:3
✖ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (599.315743ms)
AssertionError [ERR_ASSERTION]: the value is written as "[word](https://ok.example/p \"T <img src=x onerror=alert(1)> \")" in "# [word](https://ok.example/p \"T\n\n<img src=x onerror=alert(1)>\n\n\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (557.122724ms)
AssertionError [ERR_ASSERTION]: the value is written as "![T <img src=x onerror=alert(1)> ](https://ok.example/a.png)" in "# ![T\n\n<img src=x onerror=alert(1)>\n\n](https://ok.example/a.png)Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at tests/editor-browser.test.mjs:434:3
✖ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (582.388616ms)
AssertionError [ERR_ASSERTION]: the value is written as "![a](https://ok.example/a.png \"T <img src=x onerror=alert(1)> \")" in "# ![a](https://ok.example/a.png \"T\n\n<img src=x onerror=alert(1)>\n\n\")Title\n\nFirst para.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\nLast para.\n"
at file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:451:14
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async session (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:90:106)
at async TestContext.<anonymous> (file:///mnt/storage/scratch/researcher/r154-wt4/packages/webui/tests/editor-browser.test.mjs:435:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,195 @@
docs/TOOLS.md: OK
packages/webui/README.md: OK
packages/webui/editor/BUILD.json: OK
packages/webui/editor/build.mjs: OK
packages/webui/editor/editor.css: OK
packages/webui/editor/entry.mjs: OK
packages/webui/editor/model.mjs: OK
packages/webui/editor/toolchain.mjs: OK
packages/webui/editor/view.mjs: OK
packages/webui/package-lock.json: OK
packages/webui/package.json: OK
packages/webui/src/public/bus.js: OK
packages/webui/src/public/editor.css: OK
packages/webui/src/public/editor.js: OK
packages/webui/src/public/index.html: OK
packages/webui/src/serve.mjs: OK
packages/webui/tests/browser.test.mjs: OK
packages/webui/tests/docs-browser.test.mjs: OK
packages/webui/tests/editor-browser.test.mjs: OK
packages/webui/tests/editor-provenance.test.mjs: OK
packages/webui/tests/editor.test.mjs: OK
packages/webui/tests/helpers/editor-bundle.mjs: OK
packages/webui/tests/helpers/every-element.mjs: OK
packages/webui/tests/serve.test.mjs: OK
packages/webui/third_party/editor/NOTICE: OK
packages/webui/third_party/editor/PROVENANCE.json: OK
packages/webui/third_party/editor/entities/LICENSE: OK
packages/webui/third_party/editor/entities/package.json: OK
packages/webui/third_party/editor/entities/src/decode.ts: OK
packages/webui/third_party/editor/entities/src/decode_codepoint.ts: OK
packages/webui/third_party/editor/entities/src/encode.ts: OK
packages/webui/third_party/editor/entities/src/escape.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-html.ts: OK
packages/webui/third_party/editor/entities/src/generated/decode-data-xml.ts: OK
packages/webui/third_party/editor/entities/src/generated/encode-html.ts: OK
packages/webui/third_party/editor/entities/src/index.ts: OK
packages/webui/third_party/editor/linkify-it/LICENSE: OK
packages/webui/third_party/editor/linkify-it/index.mjs: OK
packages/webui/third_party/editor/linkify-it/lib/re.mjs: OK
packages/webui/third_party/editor/linkify-it/package.json: OK
packages/webui/third_party/editor/markdown-it/LICENSE: OK
packages/webui/third_party/editor/markdown-it/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_blocks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/html_re.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/common/utils.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_destination.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_label.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/helpers/parse_link_title.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/index.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/parser_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/commonmark.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/default.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/presets/zero.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/renderer.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/ruler.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/blockquote.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/code.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/fence.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/heading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/hr.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/html_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/lheading.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/list.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/paragraph.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/reference.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/state_block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_block/table.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/block.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/normalize.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/replacements.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/smartquotes.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/state_core.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_core/text_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/autolink.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/backticks.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/balance_pairs.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/emphasis.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/entity.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/escape.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/fragments_join.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/html_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/image.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/link.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/linkify.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/newline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/state_inline.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/strikethrough.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/rules_inline/text.mjs: OK
packages/webui/third_party/editor/markdown-it/lib/token.mjs: OK
packages/webui/third_party/editor/markdown-it/package.json: OK
packages/webui/third_party/editor/mdurl/LICENSE: OK
packages/webui/third_party/editor/mdurl/index.mjs: OK
packages/webui/third_party/editor/mdurl/lib/decode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/encode.mjs: OK
packages/webui/third_party/editor/mdurl/lib/format.mjs: OK
packages/webui/third_party/editor/mdurl/lib/parse.mjs: OK
packages/webui/third_party/editor/mdurl/package.json: OK
packages/webui/third_party/editor/orderedmap/LICENSE: OK
packages/webui/third_party/editor/orderedmap/index.js: OK
packages/webui/third_party/editor/orderedmap/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/LICENSE: OK
packages/webui/third_party/editor/prosemirror-commands/package.json: OK
packages/webui/third_party/editor/prosemirror-commands/src/commands.ts: OK
packages/webui/third_party/editor/prosemirror-history/LICENSE: OK
packages/webui/third_party/editor/prosemirror-history/package.json: OK
packages/webui/third_party/editor/prosemirror-history/src/history.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/LICENSE: OK
packages/webui/third_party/editor/prosemirror-inputrules/package.json: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/inputrules.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rulebuilders.ts: OK
packages/webui/third_party/editor/prosemirror-inputrules/src/rules.ts: OK
packages/webui/third_party/editor/prosemirror-keymap/LICENSE: OK
packages/webui/third_party/editor/prosemirror-keymap/package.json: OK
packages/webui/third_party/editor/prosemirror-keymap/src/keymap.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/LICENSE: OK
packages/webui/third_party/editor/prosemirror-markdown/package.json: OK
packages/webui/third_party/editor/prosemirror-markdown/src/from_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-markdown/src/to_markdown.ts: OK
packages/webui/third_party/editor/prosemirror-model/LICENSE: OK
packages/webui/third_party/editor/prosemirror-model/package.json: OK
packages/webui/third_party/editor/prosemirror-model/src/comparedeep.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/content.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/diff.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/fragment.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/from_dom.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/node.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/resolvedpos.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/schema.ts: OK
packages/webui/third_party/editor/prosemirror-model/src/to_dom.ts: OK
packages/webui/third_party/editor/prosemirror-schema-list/LICENSE: OK
packages/webui/third_party/editor/prosemirror-schema-list/package.json: OK
packages/webui/third_party/editor/prosemirror-schema-list/src/schema-list.ts: OK
packages/webui/third_party/editor/prosemirror-state/LICENSE: OK
packages/webui/third_party/editor/prosemirror-state/package.json: OK
packages/webui/third_party/editor/prosemirror-state/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/plugin.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/state.ts: OK
packages/webui/third_party/editor/prosemirror-state/src/transaction.ts: OK
packages/webui/third_party/editor/prosemirror-transform/LICENSE: OK
packages/webui/third_party/editor/prosemirror-transform/package.json: OK
packages/webui/third_party/editor/prosemirror-transform/src/attr_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/map.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/mark_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/replace_step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/step.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/structure.ts: OK
packages/webui/third_party/editor/prosemirror-transform/src/transform.ts: OK
packages/webui/third_party/editor/prosemirror-view/LICENSE: OK
packages/webui/third_party/editor/prosemirror-view/package.json: OK
packages/webui/third_party/editor/prosemirror-view/src/browser.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/capturekeys.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/clipboard.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/decoration.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/dom.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domchange.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domcoords.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/domobserver.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/index.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/input.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/selection.ts: OK
packages/webui/third_party/editor/prosemirror-view/src/viewdesc.ts: OK
packages/webui/third_party/editor/prosemirror-view/style/prosemirror.css: OK
packages/webui/third_party/editor/punycode.js/LICENSE-MIT.txt: OK
packages/webui/third_party/editor/punycode.js/package.json: OK
packages/webui/third_party/editor/punycode.js/punycode.js: OK
packages/webui/third_party/editor/rope-sequence/LICENSE: OK
packages/webui/third_party/editor/rope-sequence/index.js: OK
packages/webui/third_party/editor/rope-sequence/package.json: OK
packages/webui/third_party/editor/uc.micro/LICENSE.txt: OK
packages/webui/third_party/editor/uc.micro/categories/Cc/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Cf/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/P/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/S/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/categories/Z/regex.mjs: OK
packages/webui/third_party/editor/uc.micro/index.mjs: OK
packages/webui/third_party/editor/uc.micro/package.json: OK
packages/webui/third_party/editor/uc.micro/properties/Any/regex.mjs: OK
packages/webui/third_party/editor/w3c-keyname/LICENSE: OK
packages/webui/third_party/editor/w3c-keyname/index.js: OK
packages/webui/third_party/editor/w3c-keyname/package.json: OK
@@ -0,0 +1,26 @@
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (13.136811ms)
✔ every package names its origin and license, and NOTICE lists each (0.578588ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (5.620326ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (4.238549ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (114.773579ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (57.923869ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 246.120456
@@ -0,0 +1,178 @@
diff --git a/packages/webui/src/public/bus.js b/packages/webui/src/public/bus.js
index 64a7d6674..5b95fcc61 100644
--- a/packages/webui/src/public/bus.js
+++ b/packages/webui/src/public/bus.js
@@ -679,6 +679,19 @@
// by the page. A textarea reads CRLF as LF, so the draft and the save are LF.
let canEdit = false, docKey = null;
const docStates = new Map();
+ // Row 154 (#1648, Q168): the visual editor (editor.js, window.MosaicEditor) edits the same draft text.
+ // Its view is destroyed whenever the page is redrawn, since it holds a document-level listener.
+ // docMode is the view asked for; docShown is the view on screen. They differ when a file opens as Source because
+ // the visual editor cannot write it back byte for byte, and a click on a button compares with what is on screen.
+ let docMode = 'visual', docShown = 'visual', editor = null;
+ function unmountEditor() { if (editor) { try { editor.api.destroy(); } catch { /* the page is being replaced */ } editor = null; } }
+ function mountEditor(s, host) {
+ unmountEditor();
+ try {
+ const api = window.MosaicEditor.mount(host, { text: s.text, editable: canEdit && !out(), onChange() { s.text = api.text(); s.status = ''; paintDoc(); } });
+ editor = { host, api };
+ } catch { host.textContent = 'The visual editor did not start. Use Source to edit this file. The draft is unchanged.'; }
+ }
const dirty = s => s.text !== s.original || s.saving;
const lf = v => String(v).replace(/\r\n?/g, '\n');
const DOC_PATH = /^(spec\/north-star\.md|docs\/[A-Za-z0-9][A-Za-z0-9._-]{0,127}\.md)$/;
@@ -695,13 +708,14 @@
return `${head('Docs', `${readLine()} The spec and the files under docs/ of each project. ${canEdit ? 'Open one to edit it; a save makes one commit in the project with you as the author.' : 'Saving needs a Console started with <code>--send</code> behind the sign-in proxy; this one only reads.'}`)}
${blocks.join('') || empty('This business declares no projects.', 'A project shows here when the business file names it.')}`;
}
- async function docView(get, project, file) {
+ async function docView(get, project, file, { reuseDraft = false } = {}) {
if (!SAFE.test(project)) return notFound(`${txt(project)} is not a project name.`);
if (!DOC_PATH.test(file)) return notFound(`${txt(file)} is not a spec or docs file.`);
docKey = JSON.stringify([project, file]);
for (const [k, v] of docStates) if (k !== docKey && !dirty(v)) docStates.delete(k);
let s = docStates.get(docKey);
- if (!s || !dirty(s)) {
+ // A switch between Visual and Source passes reuseDraft: the draft, clean or not, is already the file as opened.
+ if (!s || (!dirty(s) && !reuseDraft)) {
const r = await get.api(`project-file?project=${enc(project)}&path=${enc(file)}`), now = docStates.get(docKey);
// Typing during the read wins over what was read.
s = now && dirty(now) ? now : { project, path: file, commit: r.commit, raw: r.content, original: lf(r.content), text: lf(r.content), status: '', saving: false, at: r.at };
@@ -711,22 +725,38 @@
const unsafe = s.raw.includes('\0'); // a textarea can't hold it, so a save would not write what was read
const stateNote = unsafe ? 'This file holds a NUL character, which the editor cannot keep. Edit it where it lives.'
: `${s.raw.includes('\r') ? 'This file uses CRLF line endings; a save writes LF. ' : ''}${canEdit ? '' : 'Saving needs a Console started with <code>--send</code> behind the sign-in proxy; this one only reads.'}`;
- return `${head(`Edit ${txt(s.path)}`, `Project ${txt(s.project)}, opened at commit <code id="doc-commit">${esc(s.commit.slice(0, 12))}</code>. ${readLine()}`)}
- <p class="small"><a href="#/docs">All documents</a></p>
+ // Row 154 (#1648, Q168): the visual editor is the default view and Source is row 148's textarea. The visual
+ // editor opens a file only when it writes the text back byte for byte; otherwise this opens Source.
+ let visualOk = false;
+ if (docMode === 'visual' && !unsafe && window.MosaicEditor && window.MosaicMarkdown) { try { visualOk = window.MosaicEditor.roundTrip(s.text) === s.text; } catch { /* Source */ } }
+ docShown = visualOk ? 'visual' : 'source';
+ const modeNote = docMode === 'visual' && !visualOk && !unsafe ?'The visual editor is not available for this file, so it is open as source. ' : '';
+ const modes = `<div class="doc-mode" role="group" aria-label="Editor view"><button type="button" class="btn" id="doc-mode-visual" data-field="doc-mode-visual" aria-pressed="${visualOk}">Visual</button> <button type="button" class="btn" id="doc-mode-source" data-field="doc-mode-source" aria-pressed="${!visualOk}">Source</button></div>`;
+ const actions = `<button type="submit" id="doc-save" disabled>Save to the project</button> <button type="button" class="btn" id="doc-reload">Reload from the project and discard the draft</button>
+ <p role="status" id="doc-status">${txt(s.status)}</p>`;
+ const top = `${head(`Edit ${txt(s.path)}`, `Project ${txt(s.project)}, opened at commit <code id="doc-commit">${esc(s.commit.slice(0, 12))}</code>. ${readLine()}`)}
+ <p class="small"><a href="#/docs">All documents</a></p>${modes}`;
+ if (visualOk) return `${top}
+ <div class="doc-edit one"><section class="panel" aria-labelledby="doc-src-title"><h2 id="doc-src-title">Document</h2>
+ <p class="small muted">A save writes Markdown. A block you do not touch is saved exactly as it was; a block you edit is rewritten in a standard form. Source the editor does not draw (tables, HTML, front matter) shows as a tinted block you edit as text. A link shows its target when you select it; an image shows its address and is never loaded.</p>
+ <div id="doc-visual" class="doc-visual"></div>
+ <form id="doc-form"><p class="small muted">${stateNote}</p>
+ ${actions}</form></section></div>`;
+ return `${top}
<div class="doc-edit"><section class="panel" aria-labelledby="doc-src-title"><h2 id="doc-src-title">Markdown source</h2>
<form id="doc-form"><label for="doc-text" class="sr-only">Markdown source of ${txt(s.path)}</label>
<textarea id="doc-text" class="doc-text" data-field="doc-text" rows="26" spellcheck="false" autocomplete="off" aria-describedby="doc-status"${canEdit && !unsafe && !out() ? '' : ' readonly'}>\n${unsafe ? '' : esc(s.text)}</textarea>
- <p class="small muted">${stateNote}</p>
- <button type="submit" id="doc-save" disabled>Save to the project</button> <button type="button" class="btn" id="doc-reload">Reload from the project and discard the draft</button>
- <p role="status" id="doc-status">${txt(s.status)}</p></form></section>
+ <p class="small muted">${modeNote}${stateNote}</p>
+ ${actions}</form></section>
<section class="panel" aria-labelledby="doc-prev-title"><h2 id="doc-prev-title">Preview</h2><p class="small muted">Headings, lists, quotes, code and links are drawn. Raw HTML and anything else shows as text. A link shows where it goes; an image shows its address and is never loaded.</p><div id="doc-preview" class="md-preview"></div></section></div>`;
}
// The parts of the editor that follow the draft, set in place so typing never redraws the page.
function paintDoc() {
- const s = docStates.get(docKey), box = $('doc-preview');
- if (!s || !box) return;
+ const s = docStates.get(docKey), box = $('doc-preview'), host = $('doc-visual');
+ if (!s || !(box || host)) return;
+ if (host && editor?.host !== host) mountEditor(s, host);
// A preview that throws must not skip the lines below, or leave a save stuck on "Saving…".
- try {
+ if (box) try {
if (window.MosaicMarkdown) box.replaceChildren(window.MosaicMarkdown.render(s.text));
else box.textContent = 'The preview did not load. The source is unchanged.';
} catch { box.textContent = 'The preview failed. The source is unchanged.'; }
@@ -737,6 +767,11 @@
}
const saveable = s => canEdit && !out() && !s.saving && s.text !== s.original && !s.raw.includes('\0');
document.addEventListener('input', e => { const s = docStates.get(docKey); if (e.target.id !== 'doc-text' || !s) return; s.text = e.target.value; s.status = ''; paintDoc(); });
+ document.addEventListener('click', e => {
+ const mode = { 'doc-mode-visual': 'visual', 'doc-mode-source': 'source' }[e.target.id], s = docStates.get(docKey);
+ if (!mode || !s || s.saving || mode === docShown) return;
+ docMode = mode; render(false, { reuseDraft: true });
+ });
document.addEventListener('click', e => { if (e.target.id !== 'doc-reload') return; const s = docStates.get(docKey); if (s?.saving) return; docStates.delete(docKey); render(true); });
document.addEventListener('submit', async e => {
if (e.target.id !== 'doc-form') return;
@@ -812,7 +847,7 @@
// ---------------------------------------------------------------- router
// #/ and anything that is not a #/ route is the control board; the rest is this file's.
const routeOf = () => location.hash.startsWith('#/') ? location.hash.slice(1) : '/';
- function view(get, path, q) {
+ function view(get, path, q, opts) {
const parts = path.split('/').filter(Boolean).map(p => { try { return decodeURIComponent(p); } catch { return null; } });
if (parts.includes(null)) return notFound();
const [a, b, c] = parts, n = parts.length;
@@ -827,7 +862,7 @@
if (a === 'business' && n === 1) return businessView(get);
if (a === 'settings' && n === 1) return settingsView(get);
if (a === 'docs' && n === 1) return docsView(get);
- if (a === 'docs' && n === 3) return docView(get, b, c);
+ if (a === 'docs' && n === 3) return docView(get, b, c, opts);
if (a === 'trail' && n === 3 && b === 'task') return TASK.test(c) ? trailView(get, b, c, q) : notFound(`${txt(c)} is not a task reference.`);
if (a === 'trail' && n === 3 && b === 'decision') return SAFE.test(c) ? trailView(get, b, c, q) : notFound(`${txt(c)} is not a decision id.`);
if (a === 'trail' && n === 3 && b === 'message') return SAFE.test(c) ? trailView(get, b, c, q) : notFound(`${txt(c)} is not a message id.`);
@@ -857,7 +892,7 @@
}
else if (k.h1) $('bus-view').querySelector('h1')?.focus({ preventScroll: true });
}
- async function render(navigated) {
+ async function render(navigated, opts = {}) {
// A refresh due while this render reads would replace it: a navigation would lose its heading focus.
clearTimeout(timer);
if (out()) return;
@@ -874,7 +909,7 @@
}
if (board) {
// The board page keeps its own title; the Inbox count still follows the bus.
- if (shown !== null) { shown = null; $('bus-view').innerHTML = ''; document.title = 'Mosaic Console'; if (navigated) $('main').focus(); }
+ if (shown !== null) { shown = null; unmountEditor(); $('bus-view').innerHTML = ''; document.title = 'Mosaic Console'; if (navigated) $('main').focus(); }
// The held roles (row 95) are read with it. A refusal of either forgets both, as on the bus pages.
const [inbox, agents, messages] = await Promise.allSettled([fetchRead('inbox'), fetchRead('agents'), fetchRead('messages')]);
const failed = [inbox, agents, messages].filter(s => s.status === 'rejected').map(s => s.reason);
@@ -891,7 +926,7 @@
sections(path); schedule();
return;
}
- if (navigated || shown !== route) { $('bus-view').innerHTML = loadingView(SOURCES[path.split('/')[1]]); }
+ if (navigated || shown !== route) { unmountEditor(); $('bus-view').innerHTML = loadingView(SOURCES[path.split('/')[1]]); }
let html, state = 'fresh';
const live = reader(true);
try {
@@ -899,17 +934,18 @@
try { await live('messages'); }
catch (err) { messageCount = null; if (err.status === 403 || err.code === 'signed-out') throw err; }
}
- html = await view(live, path, new URLSearchParams(query)); readAt = live.oldest(); }
+ html = await view(live, path, new URLSearchParams(query), opts); readAt = live.oldest(); }
catch (err) {
if (err.code === 'signed-out') return;
const kept = reader(false);
- try { if (refusal(err)) throw err; html = await view(kept, path, new URLSearchParams(query)); readAt = kept.oldest(); html = staleBanner(err) + html; state = 'stale'; }
+ try { if (refusal(err)) throw err; html = await view(kept, path, new URLSearchParams(query), opts); readAt = kept.oldest(); html = staleBanner(err) + html; state = 'stale'; }
catch { html = failedView(err) + (path === '/settings' ? appearance() : ''); state = refusal(err) ? 'refused' : 'failed'; }
if (refusal(err)) forget();
}
if (g !== gen) return;
freshBus(state, SOURCES[path.split('/')[1]]);
const k = !navigated && shown === route ? keep() : null;
+ unmountEditor();
$('bus-view').innerHTML = html; shown = route;
if (path.startsWith('/docs/')) paintDoc();
sections(path);
diff --git a/packages/webui/src/public/index.html b/packages/webui/src/public/index.html
index 4ab935041..5063f33ca 100644
--- a/packages/webui/src/public/index.html
+++ b/packages/webui/src/public/index.html
@@ -2,6 +2,7 @@
<html lang="en" data-design="console" data-palette="harbor">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Mosaic Console</title>
<link rel="stylesheet" href="/shared/app.css"><link rel="stylesheet" href="/tokens.css"><link rel="stylesheet" href="/console.css"><link rel="stylesheet" href="/live.css"><link rel="stylesheet" href="/bus.css"><link rel="stylesheet" href="/chat.css"><link rel="stylesheet" href="/shell.css">
+<link rel="stylesheet" href="/editor.css"><script src="/editor.js" defer></script>
<script src="/brand.js" defer></script><script src="/app.js" defer></script><script src="/markdown-preview.js" defer></script><script src="/chat.js" defer></script><script src="/bus.js" defer></script></head>
<body>
<a class="skip" href="#main">Skip to content</a>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,122 @@
2026-10-18T20:42:10Z lock and esbuild binary sha ok
2026-10-18T20:42:10Z build 1 exit 0
9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee src/public/editor.js
8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f src/public/editor.css
758420 src/public/editor.js
4462 src/public/editor.css
762882 total
2026-10-18T20:42:10Z build 2 exit 0
rebuild byte-identical (editor.js and BUILD.json)
BUILD.json records editor.js 9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee 758420
2026-10-18T20:42:10Z start board-held
2026-10-18T20:42:18Z end board-held exit 0
2026-10-18T20:42:18Z start browser-edge
2026-10-18T20:42:20Z end browser-edge exit 0
2026-10-18T20:42:20Z start browser
2026-10-18T20:42:21Z end browser exit 0
2026-10-18T20:42:21Z start bus-browser
2026-10-18T20:42:24Z end bus-browser exit 0
2026-10-18T20:42:24Z start bus
2026-10-18T20:42:27Z end bus exit 0
2026-10-18T20:42:27Z start channel-chat
2026-10-18T20:42:27Z end channel-chat exit 0
2026-10-18T20:42:27Z start chat-browser
2026-10-18T20:42:46Z end chat-browser exit 0
2026-10-18T20:42:46Z start chat
2026-10-18T20:42:47Z end chat exit 0
2026-10-18T20:42:47Z start conversation
2026-10-18T20:42:51Z end conversation exit 0
2026-10-18T20:42:51Z start discord
2026-10-18T20:42:53Z end discord exit 0
2026-10-18T20:42:53Z start docs-browser
2026-10-18T20:42:54Z end docs-browser exit 0
2026-10-18T20:42:54Z start editor-browser
2026-10-18T20:43:09Z end editor-browser exit 0
2026-10-18T20:43:09Z start editor-provenance
2026-10-18T20:43:09Z end editor-provenance exit 0
2026-10-18T20:43:09Z start editor
2026-10-18T20:43:11Z end editor exit 0
2026-10-18T20:43:11Z start history-return-flow
2026-10-18T20:44:03Z end history-return-flow exit 0
2026-10-18T20:44:03Z start limits-browser
2026-10-18T20:44:04Z end limits-browser exit 0
2026-10-18T20:44:04Z start limits-route
2026-10-18T20:44:04Z end limits-route exit 0
2026-10-18T20:44:04Z start markdown-preview
2026-10-18T20:44:11Z end markdown-preview exit 0
2026-10-18T20:44:11Z start messages
2026-10-18T20:44:14Z end messages exit 0
2026-10-18T20:44:14Z start pinned-copy
2026-10-18T20:44:19Z end pinned-copy exit 0
2026-10-18T20:44:19Z start preview
2026-10-18T20:44:20Z end preview exit 0
2026-10-18T20:44:20Z start project-file
2026-10-18T20:44:20Z end project-file exit 0
2026-10-18T20:44:20Z start reads
2026-10-18T20:44:22Z end reads exit 0
2026-10-18T20:44:22Z start relaunch
2026-10-18T20:44:23Z end relaunch exit 0
2026-10-18T20:44:23Z start return-flow
2026-10-18T20:44:44Z end return-flow exit 0
2026-10-18T20:44:44Z start send-browser
2026-10-18T20:44:57Z end send-browser exit 0
2026-10-18T20:44:57Z start send
2026-10-18T20:44:58Z end send exit 0
2026-10-18T20:44:58Z start serve
2026-10-18T20:44:59Z end serve exit 0
2026-10-18T20:44:59Z start service
2026-10-18T20:45:02Z end service exit 0
2026-10-18T20:45:02Z start settings-form
2026-10-18T20:45:04Z end settings-form exit 0
2026-10-18T20:45:04Z start settings-write
2026-10-18T20:45:04Z end settings-write exit 0
2026-10-18T20:45:04Z start shell
2026-10-18T20:45:12Z end shell exit 0
2026-10-18T20:45:12Z start usage-browser
2026-10-18T20:45:13Z end usage-browser exit 0
2026-10-18T20:45:13Z start usage
2026-10-18T20:45:13Z end usage exit 0
2026-10-18T20:45:13Z start views
2026-10-18T20:45:18Z end views exit 0
singles: tests=214 pass=214 fail=0 skipped=0
singles files: 35 of 35
2026-10-18T20:45:18Z start suite
2026-10-18T20:46:16Z end suite exit 0
ℹ tests 214
ℹ pass 214
ℹ fail 0
ℹ skipped 0
changed paths: same 195 as r3
195
baseline manifest checks
2026-10-18T20:46:16Z start mutant gate-true
2026-10-18T20:46:29Z end mutant gate-true exit 1
2026-10-18T20:46:29Z start mutant docshown-revert
2026-10-18T20:46:46Z end mutant docshown-revert exit 1
2026-10-18T20:46:46Z start mutant serialiser-verbatim
2026-10-18T20:47:00Z end mutant serialiser-verbatim exit 1
2026-10-18T20:47:00Z start mutant info-verbatim
2026-10-18T20:47:15Z end mutant info-verbatim exit 1
2026-10-18T20:47:15Z start mutant g5-backtick-kept
2026-10-18T20:47:30Z end mutant g5-backtick-kept exit 1
2026-10-18T20:47:30Z start mutant link-backslash
2026-10-18T20:47:44Z end mutant link-backslash exit 1
2026-10-18T20:47:44Z start mutant image-backslash
2026-10-18T20:47:59Z end mutant image-backslash exit 1
2026-10-18T20:47:59Z post-mutant sha256sum -c exit 0 (195 OK of 195)
2026-10-18T20:47:59Z start provenance after mutants
2026-10-18T20:47:59Z end provenance after mutants exit 0
ℹ tests 6
ℹ pass 6
ℹ fail 0
ℹ skipped 0
2026-10-18T20:47:59Z pre-cut sha256sum -c exit 0 (195 OK)
manifest equals the checked baseline
2026-10-18T20:47:59Z cut manifest sha256sum -c exit 0 (195 OK of 195)
patch applies to a clean export of 7bd2a348c
a822401ac794252eaebc08510a89597d87ff254508baa3830f7360314cefffc9 /mnt/storage/scratch/researcher/r154-rb-out/candidate.patch
41024ac5e2b118e5ff11a74b61ee82e5bc9f177d0622c5e5af0f284622985111 /mnt/storage/scratch/researcher/r154-rb-out/candidate-manifest.sha256
3b67cf23b70f4e753cda610db0a24c4eaa3107713dd9e0eace9e49a08b78663b /mnt/storage/scratch/researcher/r154-rb-out/public.diff
2251d83b03d467333ca21ad7bbc463040701f4ead1e2b7d01fc289506a98476e /mnt/storage/scratch/researcher/r154-rb-out/public-handwritten.diff
2026-10-18T20:47:59Z done
2026-10-18T20:47:59Z run exit 0
@@ -0,0 +1,130 @@
#!/usr/bin/env bash
# Row 154 rebase onto 7bd2a348c (sage-0884). One run, stop at the first failure. Order (sage-0840): toolchain check, rebuild twice, every webui test
# singly, the suite, baseline manifest of the whole candidate tree, mutants (each restores file, editor.js, editor.css and
# BUILD.json), `sha256sum -c` over the whole manifest (stop on any failure), provenance under MOSAIC_REQUIRE_EDITOR_BUILD=1,
# `sha256sum -c` again, then the patch and the manifest, cut last from the tree just checked.
set -o pipefail
R=/mnt/storage/scratch/researcher
WT=$R/r154-wt4
W=$WT/packages/webui
LOG=$R/r154-rb-logs
OUT=$R/r154-rb-out
mkdir -p "$LOG" "$OUT"
cd "$W" || exit 9
ts() { date -u +%Y-%m-%dT%H:%M:%SZ; }
stop() { echo "$(ts) STOP at $1 exit $2"; exit "$2"; }
export MOSAIC_REQUIRE_EDITOR_BUILD=1
BASE=7bd2a348c
# A mutant in progress is put back by the trap if the script dies inside it.
ACTIVE=; TARGET=
restore() {
[ -n "$ACTIVE" ] || return 0
local n=$ACTIVE
cp "$LOG/$n.file.orig" "$TARGET"
cp "$LOG/$n.editor.orig" "$W/src/public/editor.js"
cp "$LOG/$n.css.orig" "$W/src/public/editor.css"
cp "$LOG/$n.buildjson.orig" "$W/editor/BUILD.json"
ACTIVE=
}
trap 'restore' EXIT
[ "$(sha256sum package-lock.json | cut -d' ' -f1)" = eb60a4945282a5eae49a03a27cc4a1eb67954e73d57b8ef945073ed5c184f63f ] || stop lock-sha 21
B=node_modules/@esbuild/linux-x64/bin/esbuild
[ "$(sha256sum "$B" | cut -d' ' -f1)" = e1698a3d5c6c0798fee4fd3b5cc816651f460c63d390a7a26ea4beb0b1884100 ] || stop esbuild-sha 22
echo "$(ts) lock and esbuild binary sha ok"
node editor/build.mjs > "$LOG/build1.log" 2>&1; rc=$?; echo "$(ts) build 1 exit $rc"; [ $rc -eq 0 ] || stop build1 $rc
sha256sum src/public/editor.js src/public/editor.css | tee "$LOG/shas.txt"; wc -c src/public/editor.js src/public/editor.css
cp src/public/editor.js "$LOG/editor1.js"; cp editor/BUILD.json "$LOG/BUILD1.json"
node editor/build.mjs > "$LOG/build2.log" 2>&1; rc=$?; echo "$(ts) build 2 exit $rc"; [ $rc -eq 0 ] || stop build2 $rc
cmp src/public/editor.js "$LOG/editor1.js" && cmp editor/BUILD.json "$LOG/BUILD1.json" && echo "rebuild byte-identical (editor.js and BUILD.json)" || stop rebuild-differs 23
SHA=$(sha256sum src/public/editor.js | cut -d' ' -f1); BYTES=$(wc -c < src/public/editor.js)
grep -q "\"sha256\": \"$SHA\"" editor/BUILD.json && grep -q "\"bytes\": $BYTES" editor/BUILD.json && echo "BUILD.json records editor.js $SHA $BYTES" || stop buildjson-record 24
# Every webui test file, singly.
: > "$LOG/_singles.txt"
for f in tests/*.test.mjs; do
n=$(basename "$f" .test.mjs)
echo "$(ts) start $n"
timeout -k 10 600 node --test --test-reporter=spec "$f" > "$LOG/single-$n.log" 2>&1; rc=$?
echo "$n rc=$rc $(grep -E '^ℹ (tests|pass|fail|skipped) ' "$LOG/single-$n.log" | tr '\n' ' ')" >> "$LOG/_singles.txt"
echo "$(ts) end $n exit $rc"; [ $rc -eq 0 ] || stop "single-$n" $rc
done
awk '/ℹ tests /{for(i=1;i<=NF;i++)if($i=="tests")t+=$(i+1)} /ℹ pass /{for(i=1;i<=NF;i++)if($i=="pass")p+=$(i+1)} /ℹ fail /{for(i=1;i<=NF;i++)if($i=="fail")f+=$(i+1)} /ℹ skipped /{for(i=1;i<=NF;i++)if($i=="skipped")s+=$(i+1)} END{print "singles: tests="t" pass="p" fail="f" skipped="s}' "$LOG"/single-*.log
echo "singles files: $(ls "$LOG"/single-*.log | wc -l) of $(ls tests/*.test.mjs | wc -l)"
echo "$(ts) start suite"
timeout -k 10 900 node --test --test-reporter=spec tests/ > "$LOG/suite.log" 2>&1; rc=$?
echo "$(ts) end suite exit $rc"; [ $rc -eq 0 ] || stop suite $rc
grep -E '^ℹ (tests|pass|fail|skipped) ' "$LOG/suite.log"
# The tree the run measured, before any mutant: every path of the candidate with its sha256.
cd "$WT" || exit 9
git add -A packages docs
git diff --cached --name-only > "$LOG/paths.txt"
cmp "$LOG/paths.txt" /mnt/storage/src/mosaic-stack/agents/researcher/work/queue-154/r3/changed-paths.txt && echo "changed paths: same 195 as r3" || echo "NOTE changed paths differ from r3 (see $LOG/paths.txt)"
xargs -d '\n' sha256sum < "$LOG/paths.txt" > "$LOG/baseline-manifest.sha256"
wc -l < "$LOG/baseline-manifest.sha256"
sha256sum -c --quiet "$LOG/baseline-manifest.sha256" && echo "baseline manifest checks" || stop baseline-check 25
cd "$W" || exit 9
mutate() { # exact-string replace in a file, one occurrence required
python3 -I -c '
import sys
p, old, new = sys.argv[1:4]
s = open(p).read()
if s.count(old) != 1: sys.exit("occurrences: %d" % s.count(old))
open(p, "w").write(s.replace(old, new))' "$@"
}
mutant() { # name file old new rebuild(0/1)
local name=$1 file=$2 old=$3 new=$4 rebuild=$5
cp "$file" "$LOG/$name.file.orig"; TARGET=$W/$file
cp src/public/editor.js "$LOG/$name.editor.orig"; cp src/public/editor.css "$LOG/$name.css.orig"; cp editor/BUILD.json "$LOG/$name.buildjson.orig"
[ -s "$LOG/$name.file.orig" ] && [ -s "$LOG/$name.editor.orig" ] && [ -s "$LOG/$name.buildjson.orig" ] || stop "backup-$name" 26
ACTIVE=$name
mutate "$file" "$old" "$new" || { echo "$(ts) mutant $name: not applied"; restore; stop "mutant-$name-apply" 27; }
if [ "$rebuild" = 1 ]; then node editor/build.mjs > "$LOG/$name.build.log" 2>&1 || echo "$(ts) mutant $name build failed"; fi
echo "$(ts) start mutant $name"
timeout -k 10 600 node --test --test-reporter=spec tests/editor-browser.test.mjs > "$LOG/mutant-$name.log" 2>&1; local rc=$?
echo "$(ts) end mutant $name exit $rc"
restore
cmp -s "$file" "$LOG/$name.file.orig" || stop "restore-$name" 28
}
mutant gate-true src/public/bus.js 'window.MosaicEditor.roundTrip(s.text) === s.text' 'true' 0
mutant docshown-revert src/public/bus.js 'mode === docShown' 'mode === docMode' 0
mutant serialiser-verbatim editor/model.mjs 'const oneLine = value => (typeof value === '"'string'"' ? value.replace(/[\r\n]+/g, '"' '"') : value);' 'const oneLine = value => value;' 1
mutant info-verbatim editor/model.mjs "const info = typeof value === 'string' ? value.split(/[\\r\\n]/, 1)[0] : '';" "const info = typeof value === 'string' ? value : '';" 1
mutant g5-backtick-kept editor/model.mjs "return info.includes('\`') ? '' : info;" 'return info;' 1
mutant link-backslash editor/model.mjs "oneLine(value).replace(/\\\\/g, '\\\\\\\\') : value);" 'oneLine(value) : value);' 1
mutant image-backslash editor/model.mjs "title.replace(/[\\\\\"]/g, '\\\\\$&')" "title.replace(/\"/g, '\\\\\"')" 1
# The whole candidate, as it must be, before anything else is trusted.
cd "$WT" || exit 9
sha256sum -c "$LOG/baseline-manifest.sha256" > "$LOG/post-mutant-check.txt" 2>&1; rc=$?
echo "$(ts) post-mutant sha256sum -c exit $rc ($(grep -c ': OK$' "$LOG/post-mutant-check.txt") OK of $(wc -l < "$LOG/baseline-manifest.sha256"))"
[ $rc -eq 0 ] || { grep -v ': OK$' "$LOG/post-mutant-check.txt" | head; stop post-mutant-check 29; }
cd "$W" || exit 9
echo "$(ts) start provenance after mutants"
timeout -k 10 600 node --test --test-reporter=spec tests/editor-provenance.test.mjs > "$LOG/provenance-post-mutant.log" 2>&1; rc=$?
echo "$(ts) end provenance after mutants exit $rc"; grep -E '^ℹ (tests|pass|fail|skipped) ' "$LOG/provenance-post-mutant.log"; [ $rc -eq 0 ] || stop provenance-post-mutant $rc
# Cut last, from the tree just checked.
cd "$WT" || exit 9
sha256sum -c "$LOG/baseline-manifest.sha256" > "$LOG/pre-cut-check.txt" 2>&1; rc=$?
echo "$(ts) pre-cut sha256sum -c exit $rc ($(grep -c ': OK$' "$LOG/pre-cut-check.txt") OK)"; [ $rc -eq 0 ] || stop pre-cut-check 30
git add -A packages docs
git diff --cached --name-only | cmp - "$LOG/paths.txt" || stop paths-moved 31
git diff --cached --binary > "$OUT/candidate.patch" || stop patch 32
cp "$LOG/paths.txt" "$OUT/changed-paths.txt"
xargs -d '\n' sha256sum < "$OUT/changed-paths.txt" > "$OUT/candidate-manifest.sha256"
cmp "$OUT/candidate-manifest.sha256" "$LOG/baseline-manifest.sha256" && echo "manifest equals the checked baseline" || stop manifest-differs 33
sha256sum -c "$OUT/candidate-manifest.sha256" > "$LOG/cut-manifest-check.txt" 2>&1; rc=$?
echo "$(ts) cut manifest sha256sum -c exit $rc ($(grep -c ': OK$' "$LOG/cut-manifest-check.txt") OK of $(wc -l < "$OUT/candidate-manifest.sha256"))"; [ $rc -eq 0 ] || stop cut-manifest-check 34
EXP=$(mktemp -d "$R/r154-rb-export.XXXXXX"); git archive "$BASE" | tar -x -C "$EXP" && (cd "$EXP" && git init -q && git apply --check "$OUT/candidate.patch") && echo "patch applies to a clean export of $BASE" || stop apply-check 35
rm -rf "$EXP"
# The public/ diff Mos reads for decision 123: the same cached tree, src/public only.
git diff --cached --binary -- packages/webui/src/public > "$OUT/public.diff" || stop public-diff 36
git diff --cached --binary -- packages/webui/src/public/bus.js packages/webui/src/public/index.html > "$OUT/public-handwritten.diff" || stop public-diff-hand 37
sha256sum "$OUT/candidate.patch" "$OUT/candidate-manifest.sha256" "$OUT/public.diff" "$OUT/public-handwritten.diff"
echo "$(ts) done"
@@ -0,0 +1,10 @@
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (3057.147985ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (5012.350985ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 8202.362731
@@ -0,0 +1,9 @@
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (1316.412669ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1412.685042
@@ -0,0 +1,10 @@
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (1210.597572ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1311.519701
@@ -0,0 +1,10 @@
✔ the README says a refused field table names the file or the key at fault, never a path (0.786743ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (2996.776505ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3107.158736
@@ -0,0 +1,18 @@
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (68.202542ms)
✔ decisions route serves the roles and recent lists from the reader view (34.580756ms)
✔ credentials route serves the broker credential status from the reader view (10.831763ms)
✔ replies route serves the replies to one message from the reader view (32.021399ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (59.840413ms)
✔ bus refusals map to statuses and never carry a path or a stack (26.618591ms)
✔ humanCall speaks the human transport protocol without blocking the server (1687.270593ms)
✔ busReader takes --business, else the live bus host, else refuses (192.13534ms)
✔ humanCall kills a transport that runs past its timeout (527.037312ms)
✔ serve refuses a --business value that is not a business id (244.616443ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3007.798292
@@ -0,0 +1,11 @@
✔ WebUI channel off returns 503 and named recovery for every chat route without a chat operation (34.953208ms)
✔ WebUI only selection keeps web chat enabled while retaining the old read envelope (2.418986ms)
✔ WebUI channel-disabled recovery text is fixed and never echoes transport text (1.652863ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 143.272251
@@ -0,0 +1,19 @@
✔ chat browser: list/create named projects and threads, hostile labels inert and no implicit writes (701.16173ms)
✔ chat browser: thread drafts, receipts and cursor history stay isolated; refresh never writes (656.123148ms)
✔ chat browser: uncertain writes retain draft, ownership refusal clears it, read-only cannot send (894.308669ms)
✔ chat browser: a late read from A cannot paint B; sign-out clears private state and stops reads (986.820573ms)
✔ chat browser: page forward and deduplicate replies; pending and byte-limit submissions do not duplicate (659.737277ms)
✔ chat browser: scrolled history stays put, New messages and an own send return to the tail (740.810099ms)
✔ chat browser: automatic polling follows a reply without a POST or a lost draft (10694.136278ms)
✔ chat browser: display stays bounded while every forward page remains reachable (900.766381ms)
✔ chat browser: a confirmed visible message replaces its pending receipt; malformed receipts stay unknown (844.4584ms)
✔ chat browser: a refusal elsewhere forgets private chat drafts (760.464346ms)
✔ chat browser: a late project creation receipt cannot navigate away from another thread (797.595869ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 18750.091654
@@ -0,0 +1,30 @@
✔ chat reads map only fixed verbs, strict forward paging and pure GET (28.573728ms)
✔ chat refuses malformed and repeated query/id values before transport (6.356745ms)
✔ chat project.create: one verified write, fixed identity/class and private log (3.153983ms)
✔ chat project.create: each existing Console write fence makes zero bus calls (10.153549ms)
✔ chat project.create: refusal or lost/malformed receipt never retries or invents success (5.298855ms)
✔ chat thread.create: one verified write, fixed identity/class and private log (1.673771ms)
✔ chat thread.create: each existing Console write fence makes zero bus calls (7.830198ms)
✔ chat thread.create: refusal or lost/malformed receipt never retries or invents success (5.18653ms)
✔ chat thread.send: one verified write, fixed identity/class and private log (2.019665ms)
✔ chat thread.send: each existing Console write fence makes zero bus calls (7.478508ms)
✔ chat thread.send: refusal or lost/malformed receipt never retries or invents success (4.938145ms)
✔ chat thread.open: one verified write, fixed identity/class and private log (1.674449ms)
✔ chat thread.open: each existing Console write fence makes zero bus calls (7.510865ms)
✔ chat thread.open: refusal or lost/malformed receipt never retries or invents success (6.355027ms)
✔ chat createThread receipt requires an instance even when its id is valid (3.507536ms)
✔ chat write receipts expose only the fields belonging to their operation (5.533449ms)
✔ chat validates names, body, project and strict empty open payload (4.69996ms)
✔ chat read failures redact ownership and refuse invalid transport arrays (4.74288ms)
✔ REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations (74.525568ms)
✔ chat repeats every POST boundary even when called behind an admitted request (1.054775ms)
✔ configured Console process injects chat through its existing human transport (141.25078ms)
✔ chat assets, GET purity, method and unknown-route refusals are explicit (17.181823ms)
ℹ tests 22
ℹ suites 0
ℹ pass 22
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 500.038822
@@ -0,0 +1,12 @@
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (1163.873177ms)
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (1544.99085ms)
✔ conversation view: a newer session with no readable history keeps the marker (1073.416578ms)
✔ conversation view: seats without history say so and offer no reply (770.229275ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 4674.088844
@@ -0,0 +1,9 @@
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (916.193394ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1016.72936
@@ -0,0 +1,9 @@
✔ the editor: the list, hostile markdown that runs nothing, the draft, and each save receipt (1700.162524ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1821.771531
@@ -0,0 +1,24 @@
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (1070.00793ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (821.819758ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (708.596335ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2639.446841ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1024.914747ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (1971.668115ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (613.052901ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (548.923534ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (585.593662ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (558.909523ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (561.311483ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (576.370433ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (582.92228ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (670.647902ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (706.064444ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (622.936289ms)
ℹ tests 16
ℹ suites 0
ℹ pass 16
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14406.422374
@@ -0,0 +1,26 @@
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (11.218527ms)
✔ every package names its origin and license, and NOTICE lists each (0.428585ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (4.627609ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (3.558014ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (112.061375ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (54.328776ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 233.330114
@@ -0,0 +1,13 @@
✔ the editor routes serve the built files with their types and no cache (33.580621ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (15.38758ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (1306.181916ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (2.406436ms)
✔ the link gate and the image rule are the preview's (0.484614ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1493.005408
@@ -0,0 +1,9 @@
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (51935.216984ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 52151.285773
@@ -0,0 +1,9 @@
✔ REQ-LIMIT-3 REQ-LIMIT-4 Settings shows token limits counted, not enforced and check failed; Reset posts one path; a save keeps the token limits (881.402333ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 985.154125
@@ -0,0 +1,13 @@
✔ REQ-LIMIT-3 limits read returns only the token rows; no query or write is accepted (26.531932ms)
✔ REQ-LIMIT-3 a limits answer without a token list is refused, not shown as no limits (7.69421ms)
2026-10-18T20:44:04.463Z settings user="jason" changed
✔ REQ-LIMIT-3 a Settings reset reaches the human write with its paths; a reset alone is enough (5.615038ms)
✔ REQ-LIMIT-3 the Console reader asks the bus limits verb with no arguments (0.231223ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 136.030057
@@ -0,0 +1,27 @@
✔ the preview source names none of the four string-to-markup sinks (0.884061ms)
✔ headings, paragraphs, emphasis and inline code render (1.153549ms)
✔ lists, block quotes and code blocks render (0.414953ms)
✔ a link is made for http, https and relative targets, with rel and the target shown (0.929211ms)
✔ a link with any other scheme, or an evasion of the scheme, stays source text (0.71831ms)
✔ an image shows alt text and URL, is never an img element and never loads (0.138552ms)
✔ raw HTML, entities and unsupported blocks show as source text, never as elements (0.296929ms)
✔ markup inside code and inside link text stays text (0.140552ms)
✔ hostile and pathological input stays within its look-ahead budget and under the nesting cap (32.345478ms)
✔ trailing blanks and closing hashes are cut by a walk from the end, not a regex that retries inside a blank run (26.213756ms)
✔ a link opener with no closer searches at most SPAN characters ahead (151.548006ms)
✔ the look-ahead work of one render is a fixed multiple of the text, whatever the opener (734.076249ms)
✔ past the budget an opener is source text, through the path all other text takes (13.265196ms)
✔ a normal 200 KiB document renders exactly as it did without a budget, and spends little of it (17.941841ms)
✔ a line separator inside a heading, a list item or a fence line does not end the marker line (0.460797ms)
✔ a thematic-break line is a paragraph, every other marker line opens a list (0.332278ms)
✔ every short line over space, tab, - * _ and a letter is a break exactly when the old regex said so (39.335088ms)
✔ one line of marks does not throw, at 4 MiB, whatever the mark or the spacing (6063.088398ms)
✔ CRLF and tabs are read like LF and spaces; empty input renders nothing (0.185349ms)
ℹ tests 19
ℹ suites 0
ℹ pass 19
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 7196.787575
@@ -0,0 +1,11 @@
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (72.499604ms)
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (839.12002ms)
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (1702.671083ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2726.459773
@@ -0,0 +1,18 @@
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (822.307155ms)
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (747.140961ms)
✔ copy writes nothing when an archived path is missing at the commit (279.452676ms)
✔ a copy that loses the rename race leaves no read-only temp directory behind (461.384935ms)
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (486.627105ms)
✔ a copy that meets a target holding files says exists: and moves nothing into it (473.90548ms)
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (408.656382ms)
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (777.614209ms)
✔ serve refuses a --checkout that is not an absolute directory path (240.616976ms)
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (54.859586ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 4891.638988
@@ -0,0 +1,19 @@
✔ preview options are all three or none, and each is checked (6.464825ms)
✔ the CLI refuses a partial or invalid preview flag set at start (578.387971ms)
✔ the CLI with all three flags serves the preview mode (119.316229ms)
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (15.847094ms)
✔ the header name matches without regard to case, and the value compare is exact (3.636885ms)
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (23.855231ms)
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (9.384007ms)
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (3.841295ms)
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (14.203628ms)
✔ a repeated Host is 400 before any other check, in preview mode and without it (6.005607ms)
✔ without the preview flags the public name is refused and writes still reach the board (3.887842ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 900.702331
@@ -0,0 +1,18 @@
✔ a signed-in same-origin save reaches exactly one human operation and returns the new commit (16.357699ms)
✔ a save needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (7.135075ms)
✔ a save validates JSON, strict keys, text values and the 1 MiB body before the bus is asked (15.46834ms)
✔ a body that is JSON but not an object is refused 400, not thrown on (4.499183ms)
✔ the 1 MiB limit is this route only; Settings and messages keep 16 KiB (1.963566ms)
✔ a bus refusal is reported as not saved with its own status; stale-base tells the user to reload (4.893066ms)
✔ a save whose answer is lost or unusable is reported unknown and is never retried (2.86083ms)
✔ the file list and one file read take strict queries and arrive in the expected shape (3.970518ms)
✔ reads work without --send; an unusable bus answer is a bad response, a refusal keeps its status (2.563535ms)
✔ /api/config says edit only where a save can pass (1.589889ms)
ℹ tests 10
ℹ suites 0
ℹ pass 10
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 158.453794
@@ -0,0 +1,19 @@
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (1.421896ms)
✔ credential state from the date alone, as the bus states it (0.159504ms)
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (374.178561ms)
✔ queue: a refused read fails closed with the store's text, redacted (179.120415ms)
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (765.447533ms)
✔ business: names, vars on the allowlist, authority, credential metadata only (8.674172ms)
✔ business: missing or invalid file refuses with the module's text, redacted (6.141911ms)
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (6.552368ms)
✔ settings: release, board, loopback address, notifier binding name only (114.659772ms)
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (16.511073ms)
✔ bus-status: a refused boot shows reason, file and last good load; a live host or an ok boot clears it (8.308268ms)
ℹ tests 11
ℹ suites 0
ℹ pass 11
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1593.690597
@@ -0,0 +1,9 @@
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (787.746746ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 888.547382
@@ -0,0 +1,9 @@
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (20819.102255ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 20929.999008
@@ -0,0 +1,10 @@
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (2396.341672ms)
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (11362.435384ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 13883.852905
@@ -0,0 +1,21 @@
✔ startServer takes send only as a function and only with the preview mode (6.535664ms)
✔ the CLI refuses --send without the preview flags, and without a configured bus (493.019208ms)
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (148.386834ms)
✔ without --send the route is read-only like every other write, and config says no send (7.740887ms)
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (6.270998ms)
✔ config says send only on the public name with --send on (2.044131ms)
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (4.874682ms)
✔ each request check refuses before anything is sent, and logs the refusal without the body (13.024687ms)
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (3.495945ms)
✔ a crafted role name cannot forge a log line (2.195339ms)
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (8.425614ms)
✔ through the human transport the request is exactly the business, message.send and the keys (94.834387ms)
✔ against a real broker: the message is written once as a human send, and its refusals map (27.972792ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 949.437475
@@ -0,0 +1,12 @@
✔ loopback host and board origin fail closed (7.864184ms)
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (113.205408ms)
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (55.465738ms)
✔ unreachable board reports URL; CLI rejects unsupported options (513.639494ms)
ℹ tests 4
ℹ suites 0
ℹ pass 4
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 823.664143
@@ -0,0 +1,31 @@
✔ render prints the unit without the preview flags (9.719788ms)
✔ render carries every serve flag, the preview set included (7.784161ms)
✔ a partial preview set is refused (17.482714ms)
✔ a value the unit cannot carry is refused, for every flag (320.172879ms)
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (19.41158ms)
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (60.561852ms)
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (30.546627ms)
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (130.08486ms)
✔ status prints the unit state and GET /healthz on the installed port (229.618277ms)
✔ usage: an unknown verb or flag, and start or enable, exit 4 (89.752685ms)
✔ without --send, render is the template with its placeholders filled, byte for byte (40.023455ms)
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (50.095649ms)
✔ --send without the whole preview set is refused and writes nothing (145.132828ms)
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (268.237798ms)
✔ uninstall and status take no --send (36.90766ms)
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (267.514001ms)
✔ when the state read fails, install and uninstall refuse with one line and change nothing (87.340651ms)
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (63.154849ms)
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (231.936445ms)
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (15.307667ms)
✔ the uid header takes only an Authentik uid; the username header still takes a username (289.469602ms)
✔ a preview value cannot start with - or . (32.547365ms)
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (401.997477ms)
ℹ tests 23
ℹ suites 0
ℹ pass 23
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2915.033004
@@ -0,0 +1,9 @@
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (1335.755174ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1452.824887
@@ -0,0 +1,12 @@
2026-10-18T20:45:04.388Z settings user="jason" changed
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (19.424922ms)
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (7.521108ms)
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (6.913099ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 150.622982
@@ -0,0 +1,13 @@
✔ tokens.css and icons.svg are byte copies of docs/design (0.853515ms)
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (1.736303ms)
✔ shipped strings are unchanged, and the web keeps its write boundary (2.529193ms)
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (5648.682498ms)
✔ five states on Board, Inbox, Tasks, Agents and Trail (2540.540351ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 8333.442166
@@ -0,0 +1,9 @@
✔ REQ-LIMIT-4 Settings shows all token kinds and unknown turns beside every total, as a read-only separate section (711.983464ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 843.151611
@@ -0,0 +1,10 @@
✔ REQ-WEB-1 usage read keeps unknown counts and each token kind; no query or write is accepted (29.983158ms)
✔ REQ-WEB-1 malformed usage is refused instead of shown as zero (6.541516ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 175.346876
@@ -0,0 +1,11 @@
✔ Queue, Business and Settings in their five states, with no move button (3181.735935ms)
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (1378.72498ms)
✔ the server log names no config path when the system config refuses (313.494661ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 4996.685583
@@ -0,0 +1,237 @@
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (10382.297582ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (10461.64261ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (4977.756634ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (10228.978323ms)
✔ the README says a refused field table names the file or the key at fault, never a path (3.531522ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (13340.566365ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (271.755184ms)
✔ decisions route serves the roles and recent lists from the reader view (368.153433ms)
✔ credentials route serves the broker credential status from the reader view (96.039164ms)
✔ replies route serves the replies to one message from the reader view (260.225787ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (168.58022ms)
✔ bus refusals map to statuses and never carry a path or a stack (300.883768ms)
✔ humanCall speaks the human transport protocol without blocking the server (3123.13022ms)
✔ busReader takes --business, else the live bus host, else refuses (716.101309ms)
✔ humanCall kills a transport that runs past its timeout (572.012503ms)
✔ serve refuses a --business value that is not a business id (1259.940814ms)
✔ WebUI channel off returns 503 and named recovery for every chat route without a chat operation (87.277345ms)
✔ WebUI only selection keeps web chat enabled while retaining the old read envelope (7.802941ms)
✔ WebUI channel-disabled recovery text is fixed and never echoes transport text (5.715662ms)
✔ chat browser: list/create named projects and threads, hostile labels inert and no implicit writes (5114.598675ms)
✔ chat browser: thread drafts, receipts and cursor history stay isolated; refresh never writes (3315.035917ms)
✔ chat browser: uncertain writes retain draft, ownership refusal clears it, read-only cannot send (3554.780391ms)
✔ chat browser: a late read from A cannot paint B; sign-out clears private state and stops reads (3091.125761ms)
✔ chat browser: page forward and deduplicate replies; pending and byte-limit submissions do not duplicate (2978.398458ms)
✔ chat browser: scrolled history stays put, New messages and an own send return to the tail (1941.72286ms)
✔ chat browser: automatic polling follows a reply without a POST or a lost draft (10930.710103ms)
✔ chat browser: display stays bounded while every forward page remains reachable (754.874184ms)
✔ chat browser: a confirmed visible message replaces its pending receipt; malformed receipts stay unknown (742.536334ms)
✔ chat browser: a refusal elsewhere forgets private chat drafts (677.462007ms)
✔ chat browser: a late project creation receipt cannot navigate away from another thread (718.539916ms)
✔ chat reads map only fixed verbs, strict forward paging and pure GET (104.517073ms)
✔ chat refuses malformed and repeated query/id values before transport (39.091219ms)
✔ chat project.create: one verified write, fixed identity/class and private log (11.023378ms)
✔ chat project.create: each existing Console write fence makes zero bus calls (51.092227ms)
✔ chat project.create: refusal or lost/malformed receipt never retries or invents success (13.595022ms)
✔ chat thread.create: one verified write, fixed identity/class and private log (7.787915ms)
✔ chat thread.create: each existing Console write fence makes zero bus calls (21.875978ms)
✔ chat thread.create: refusal or lost/malformed receipt never retries or invents success (11.604804ms)
✔ chat thread.send: one verified write, fixed identity/class and private log (3.814891ms)
✔ chat thread.send: each existing Console write fence makes zero bus calls (21.535826ms)
✔ chat thread.send: refusal or lost/malformed receipt never retries or invents success (11.89744ms)
✔ chat thread.open: one verified write, fixed identity/class and private log (4.494112ms)
✔ chat thread.open: each existing Console write fence makes zero bus calls (16.927786ms)
✔ chat thread.open: refusal or lost/malformed receipt never retries or invents success (13.715589ms)
✔ chat createThread receipt requires an instance even when its id is valid (4.390757ms)
✔ chat write receipts expose only the fields belonging to their operation (9.5811ms)
✔ chat validates names, body, project and strict empty open payload (37.267969ms)
✔ chat read failures redact ownership and refuse invalid transport arrays (10.939821ms)
✔ REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations (621.444452ms)
✔ chat repeats every POST boundary even when called behind an admitted request (16.892088ms)
✔ configured Console process injects chat through its existing human transport (1054.461813ms)
✔ chat assets, GET purity, method and unknown-route refusals are explicit (64.338057ms)
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (6684.6882ms)
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (5027.019064ms)
✔ conversation view: a newer session with no readable history keeps the marker (3059.553826ms)
✔ conversation view: seats without history say so and offer no reply (3162.279241ms)
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (5995.137047ms)
✔ the editor: the list, hostile markdown that runs nothing, the draft, and each save receipt (10081.834002ms)
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (6796.31493ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (4289.364803ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (2313.058441ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (5586.286737ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1748.199726ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2255.070433ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (878.006237ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (857.498361ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (736.838857ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (760.437937ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (753.397169ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (741.369836ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (643.830295ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (608.99198ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (631.184859ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (675.770457ms)
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (50.343152ms)
✔ every package names its origin and license, and NOTICE lists each (1.069921ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (13.537042ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (9.023806ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (652.37626ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (658.43078ms)
✔ the editor routes serve the built files with their types and no cache (196.937127ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (123.090606ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (5147.294913ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (4.403423ms)
✔ the link gate and the image rule are the preview's (1.087537ms)
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (56294.519033ms)
✔ REQ-LIMIT-3 REQ-LIMIT-4 Settings shows token limits counted, not enforced and check failed; Reset posts one path; a save keeps the token limits (6904.661229ms)
✔ REQ-LIMIT-3 limits read returns only the token rows; no query or write is accepted (246.708125ms)
✔ REQ-LIMIT-3 a limits answer without a token list is refused, not shown as no limits (34.11255ms)
2026-10-18T20:45:21.476Z settings user="jason" changed
✔ REQ-LIMIT-3 a Settings reset reaches the human write with its paths; a reset alone is enough (55.275122ms)
✔ REQ-LIMIT-3 the Console reader asks the bus limits verb with no arguments (5.865357ms)
✔ the preview source names none of the four string-to-markup sinks (4.047354ms)
✔ headings, paragraphs, emphasis and inline code render (3.53358ms)
✔ lists, block quotes and code blocks render (2.868783ms)
✔ a link is made for http, https and relative targets, with rel and the target shown (2.290007ms)
✔ a link with any other scheme, or an evasion of the scheme, stays source text (2.146899ms)
✔ an image shows alt text and URL, is never an img element and never loads (0.774435ms)
✔ raw HTML, entities and unsupported blocks show as source text, never as elements (0.753635ms)
✔ markup inside code and inside link text stays text (0.311725ms)
✔ hostile and pathological input stays within its look-ahead budget and under the nesting cap (189.943423ms)
✔ trailing blanks and closing hashes are cut by a walk from the end, not a regex that retries inside a blank run (151.931791ms)
✔ a link opener with no closer searches at most SPAN characters ahead (886.133884ms)
✔ the look-ahead work of one render is a fixed multiple of the text, whatever the opener (2650.665266ms)
✔ past the budget an opener is source text, through the path all other text takes (103.859534ms)
✔ a normal 200 KiB document renders exactly as it did without a budget, and spends little of it (97.520296ms)
✔ a line separator inside a heading, a list item or a fence line does not end the marker line (3.020417ms)
✔ a thematic-break line is a paragraph, every other marker line opens a list (1.61526ms)
✔ every short line over space, tab, - * _ and a letter is a break exactly when the old regex said so (121.11835ms)
✔ one line of marks does not throw, at 4 MiB, whatever the mark or the spacing (17287.826146ms)
✔ CRLF and tabs are read like LF and spaces; empty input renders nothing (0.179361ms)
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (634.945685ms)
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (5424.797748ms)
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (5421.804249ms)
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (4695.659822ms)
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (3584.862528ms)
✔ copy writes nothing when an archived path is missing at the commit (1779.966023ms)
✔ a copy that loses the rename race leaves no read-only temp directory behind (2683.690553ms)
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (1733.372282ms)
✔ a copy that meets a target holding files says exists: and moves nothing into it (1033.528714ms)
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (780.998679ms)
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (1069.022439ms)
✔ serve refuses a --checkout that is not an absolute directory path (392.102694ms)
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (78.183166ms)
✔ preview options are all three or none, and each is checked (14.414598ms)
✔ the CLI refuses a partial or invalid preview flag set at start (2532.178426ms)
✔ the CLI with all three flags serves the preview mode (493.727305ms)
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (89.744516ms)
✔ the header name matches without regard to case, and the value compare is exact (16.562414ms)
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (128.582543ms)
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (36.069222ms)
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (14.448677ms)
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (44.473862ms)
✔ a repeated Host is 400 before any other check, in preview mode and without it (39.91518ms)
✔ without the preview flags the public name is refused and writes still reach the board (55.54362ms)
✔ a signed-in same-origin save reaches exactly one human operation and returns the new commit (50.347958ms)
✔ a save needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (24.024304ms)
✔ a save validates JSON, strict keys, text values and the 1 MiB body before the bus is asked (46.375561ms)
✔ a body that is JSON but not an object is refused 400, not thrown on (24.475436ms)
✔ the 1 MiB limit is this route only; Settings and messages keep 16 KiB (5.269524ms)
✔ a bus refusal is reported as not saved with its own status; stale-base tells the user to reload (13.667789ms)
✔ a save whose answer is lost or unusable is reported unknown and is never retried (10.055603ms)
✔ the file list and one file read take strict queries and arrive in the expected shape (11.499249ms)
✔ reads work without --send; an unusable bus answer is a bad response, a refusal keeps its status (8.759203ms)
✔ /api/config says edit only where a save can pass (5.342738ms)
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (11.646856ms)
✔ credential state from the date alone, as the bus states it (2.267063ms)
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (1745.518706ms)
✔ queue: a refused read fails closed with the store's text, redacted (1305.765694ms)
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (2755.3646ms)
✔ business: names, vars on the allowlist, authority, credential metadata only (77.186832ms)
✔ business: missing or invalid file refuses with the module's text, redacted (71.42993ms)
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (94.076009ms)
✔ settings: release, board, loopback address, notifier binding name only (559.252929ms)
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (98.673786ms)
✔ bus-status: a refused boot shows reason, file and last good load; a live host or an ok boot clears it (26.087962ms)
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (4376.609053ms)
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (23279.721414ms)
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (7515.761253ms)
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (12417.027992ms)
✔ startServer takes send only as a function and only with the preview mode (25.835786ms)
✔ the CLI refuses --send without the preview flags, and without a configured bus (1524.962385ms)
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (445.082581ms)
✔ without --send the route is read-only like every other write, and config says no send (55.714779ms)
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (23.01408ms)
✔ config says send only on the public name with --send on (11.5953ms)
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (21.206983ms)
✔ each request check refuses before anything is sent, and logs the refusal without the body (77.907648ms)
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (8.447351ms)
✔ a crafted role name cannot forge a log line (9.622905ms)
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (21.449866ms)
✔ through the human transport the request is exactly the business, message.send and the keys (318.358802ms)
✔ against a real broker: the message is written once as a human send, and its refusals map (219.338119ms)
✔ loopback host and board origin fail closed (13.15891ms)
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (329.676269ms)
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (139.250253ms)
✔ unreachable board reports URL; CLI rejects unsupported options (1655.398962ms)
✔ render prints the unit without the preview flags (54.42358ms)
✔ render carries every serve flag, the preview set included (49.137161ms)
✔ a partial preview set is refused (91.263618ms)
✔ a value the unit cannot carry is refused, for every flag (1703.332335ms)
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (197.734767ms)
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (321.404445ms)
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (406.729906ms)
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (1179.502002ms)
✔ status prints the unit state and GET /healthz on the installed port (1071.699701ms)
✔ usage: an unknown verb or flag, and start or enable, exit 4 (286.252398ms)
✔ without --send, render is the template with its placeholders filled, byte for byte (109.080717ms)
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (232.787968ms)
✔ --send without the whole preview set is refused and writes nothing (508.361129ms)
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (928.738403ms)
✔ uninstall and status take no --send (163.618865ms)
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (753.370878ms)
✔ when the state read fails, install and uninstall refuse with one line and change nothing (129.233136ms)
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (119.719881ms)
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (434.741471ms)
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (27.84003ms)
✔ the uid header takes only an Authentik uid; the username header still takes a username (498.778209ms)
✔ a preview value cannot start with - or . (48.955357ms)
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (529.699788ms)
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (4857.67332ms)
2026-10-18T20:45:33.010Z settings user="jason" changed
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (49.901574ms)
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (37.960286ms)
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (40.441374ms)
✔ tokens.css and icons.svg are byte copies of docs/design (1.660188ms)
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (3.502056ms)
✔ shipped strings are unchanged, and the web keeps its write boundary (7.042718ms)
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (9840.41447ms)
✔ five states on Board, Inbox, Tasks, Agents and Trail (2838.409952ms)
✔ REQ-LIMIT-4 Settings shows all token kinds and unknown turns beside every total, as a read-only separate section (3312.774588ms)
✔ REQ-WEB-1 usage read keeps unknown counts and each token kind; no query or write is accepted (66.107475ms)
✔ REQ-WEB-1 malformed usage is refused instead of shown as zero (31.563937ms)
✔ Queue, Business and Settings in their five states, with no move button (6742.458615ms)
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (1568.545388ms)
✔ the server log names no config path when the system config refuses (530.127828ms)
ℹ tests 214
ℹ suites 0
ℹ pass 214
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 57268.98663

Some files were not shown because too many files have changed in this diff Show More