visualproof 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +88 -33
  2. package/dist/assets/tips/phone-fingers.light.mp4 +0 -0
  3. package/dist/assets/tips/phone-fingers.light.webp +0 -0
  4. package/dist/assets/tips/tour-agent.webp +0 -0
  5. package/dist/assets/tips/tour-arrange.webp +0 -0
  6. package/dist/assets/tips/tour-artwork.webp +0 -0
  7. package/dist/assets/tips/tour-checks.webp +0 -0
  8. package/dist/assets/tips/tour-export.webp +0 -0
  9. package/dist/assets/tips/tour-keys.webp +0 -0
  10. package/dist/assets/tips/tour-library.webp +0 -0
  11. package/dist/assets/tips/tour-project.webp +0 -0
  12. package/dist/assets/tips/tour-review.webp +0 -0
  13. package/dist/assets/tips/tour-share.webp +0 -0
  14. package/dist/assets/tips/tour-source.webp +0 -0
  15. package/dist/assets/tips/tour-target.webp +0 -0
  16. package/dist/assets/tips/tour-view.webp +0 -0
  17. package/dist/assets/tips/tour.json +289 -0
  18. package/dist/assets/tips/tour.webp +0 -0
  19. package/dist/assets/webfonts/LICENSE-Noto.txt +95 -0
  20. package/dist/assets/webfonts/metrics.json +1 -0
  21. package/dist/assets/webfonts/ttf/jost-400-normal.ttf +0 -0
  22. package/dist/assets/webfonts/ttf/jost-500-normal.ttf +0 -0
  23. package/dist/assets/webfonts/ttf/noto-sans-math.ttf +0 -0
  24. package/dist/assets/webfonts/ttf/noto-sans.ttf +0 -0
  25. package/dist/assets/webfonts/ttf/source-sans-3-400-italic.ttf +0 -0
  26. package/dist/assets/webfonts/ttf/source-sans-3-400-normal.ttf +0 -0
  27. package/dist/assets/webfonts/ttf/source-sans-3-500-normal.ttf +0 -0
  28. package/dist/assets/webfonts/ttf/source-sans-3-600-normal.ttf +0 -0
  29. package/dist/assets/webfonts/ttf/source-sans-3-700-normal.ttf +0 -0
  30. package/dist/assets/webfonts/ttf/source-serif-4-400-italic.ttf +0 -0
  31. package/dist/assets/webfonts/ttf/source-serif-4-600-italic.ttf +0 -0
  32. package/dist/mcp/visualproof-mcp.mjs +3 -1
  33. package/dist/server/agent.js +94 -91
  34. package/dist/server/agentdocs.js +1 -1
  35. package/dist/server/artcmd.js +335 -0
  36. package/dist/server/children.js +85 -0
  37. package/dist/server/doctor.js +105 -42
  38. package/dist/server/events.js +10 -0
  39. package/dist/server/export.js +11 -4
  40. package/dist/server/extract.js +3 -2
  41. package/dist/server/figures.js +3 -2
  42. package/dist/server/film.js +380 -0
  43. package/dist/server/history.js +11 -1
  44. package/dist/server/hover.js +8 -5
  45. package/dist/server/live.js +72 -9
  46. package/dist/server/main.js +352 -23
  47. package/dist/server/mcptools.js +4 -1
  48. package/dist/server/media.js +114 -0
  49. package/dist/server/pipeline.js +21 -10
  50. package/dist/server/poppler.js +3 -2
  51. package/dist/server/readonlygate.js +4 -4
  52. package/dist/server/review.js +4 -1
  53. package/dist/server/reviewapi.js +35 -1
  54. package/dist/server/snapshot.js +10 -1
  55. package/dist/server/sourcestore.js +3 -2
  56. package/dist/server/status.js +3 -2
  57. package/dist/server/supervise.js +219 -0
  58. package/dist/server/updates.js +951 -0
  59. package/dist/server/usage.js +3 -1
  60. package/dist/server/version.js +183 -0
  61. package/dist/server/view.js +0 -7
  62. package/dist/server/views.js +24 -0
  63. package/dist/shared/artfonts.js +81 -0
  64. package/dist/shared/artrecipe.js +316 -0
  65. package/dist/shared/collab.js +7 -2
  66. package/dist/shared/declfind.js +95 -0
  67. package/dist/shared/lostfound.js +1 -0
  68. package/dist/shared/pastgraph.js +6 -6
  69. package/dist/shared/review.js +62 -5
  70. package/dist/shared/timeline.js +5 -0
  71. package/dist/web/bundle/app.js +3006 -413
  72. package/dist/web/bundle/edges.js +1 -1
  73. package/dist/web/index.html +13 -1
  74. package/dist/web/src/agentmark.js +14 -0
  75. package/dist/web/src/artwork.js +1000 -0
  76. package/dist/web/src/bundles.js +151 -0
  77. package/dist/web/src/canvas.js +3716 -0
  78. package/dist/web/src/drag.js +61 -0
  79. package/dist/web/src/edgequeue.js +204 -0
  80. package/dist/web/src/gl/gl.js +123 -0
  81. package/dist/web/src/gl/renderer.js +451 -0
  82. package/dist/web/src/halo.js +95 -0
  83. package/dist/web/src/highlight.js +108 -0
  84. package/dist/web/src/overview.js +393 -0
  85. package/dist/web/src/reviewqueue.js +250 -0
  86. package/dist/web/src/selection.js +272 -0
  87. package/dist/web/src/status.js +80 -0
  88. package/dist/web/src/visitors.js +318 -0
  89. package/dist/web/src/visits.js +174 -0
  90. package/dist/web/style.css +196 -1
  91. package/docs/agent-api/README.md +1 -1
  92. package/docs/agent-api/export.md +41 -2
  93. package/docs/agent-api/history.md +5 -3
  94. package/docs/agent-api/mcp.md +1 -1
  95. package/docs/agent-api/reading.md +2 -1
  96. package/package.json +5 -1
package/README.md CHANGED
@@ -1,21 +1,75 @@
1
1
  # VisualProof
2
2
 
3
- **See what a Lean theorem actually rests on.**
3
+ <p align="center">
4
+ <a href="https://github.com/math-inc/Sphere-Packing-Lean"><img src="docs/images/artwork-sphere-packing.webp" width="19%" alt="Sphere Packing"></a>
5
+ <a href="https://github.com/leanprover-community/flt-regular"><img src="docs/images/artwork-flt-regular.webp" width="19%" alt="FLT Regular"></a>
6
+ <a href="https://github.com/AlexKontorovich/PrimeNumberTheoremAnd"><img src="docs/images/artwork-prime-numbers.webp" width="19%" alt="Prime Numbers"></a>
7
+ <a href="https://github.com/openai/NavierStokesAndEuler"><img src="docs/images/artwork-navier-stokes.webp" width="19%" alt="Navier–Stokes"></a>
8
+ <a href="https://github.com/cedar-policy/cedar-spec"><img src="docs/images/artwork-cedar.webp" width="19%" alt="Cedar"></a>
9
+ </p>
10
+ <p align="center"><sub>Five Lean codebases, drawn by <code>visualproof artwork</code>.</sub></p>
11
+
12
+ https://github.com/user-attachments/assets/98e435d6-f493-437d-b342-1833819c0b77
13
+
14
+ <p align="center"><sub>A review of Sphere-Packing-Lean in 74 seconds. The whole tour — four minutes in thirteen chapters, with captions — is in the page under <b>?</b> → Tips, and <a href="https://visualproof-demo.yingte.io/#tips">on the live demo</a>.</sub></p>
15
+
16
+ [![VisualProof on flt-regular, from the live demo: the TCB of flt_regular, its key declarations approved, an approval recorded at a meeting, the review plan pinned beside it](docs/images/board.webp)](https://visualproof-demo.yingte.io)
17
+
18
+ <p align="center"><b>Live demo: <a href="https://visualproof-demo.yingte.io">https://visualproof-demo.yingte.io</a></b><br><sub>flt-regular in the middle of a review by three people and an AI assistant, read-only</sub></p>
19
+
20
+ ## Try it
21
+
22
+ Set up in your Lean codebase with agent prompt:
23
+ ```text
24
+ Set up VisualProof (https://github.com/LucianoXu/VisualProof) for my Lean project, and give me the address to open.
25
+ ```
26
+
27
+ Or have your codebase drawn as a poster:
28
+ ```text
29
+ Draw my Lean project as a poster with VisualProof (https://github.com/LucianoXu/VisualProof): pick its main theorem, light up what its statement rests on, and give me the PNG and the SVG.
30
+ ```
31
+ What the agent does, step by step: [A poster from the command line](docs/MANUAL.md#a-poster-from-the-command-line).
32
+
33
+ Set up manually:
34
+ ```bash
35
+ npm install --global visualproof
36
+ cd my-lean-project && lake build
37
+ visualproof serve .
38
+ ```
39
+
40
+ It needs Node, elan and Poppler ([Requirements](#requirements)). On the first visit the page offers
41
+ a short tour of your own project; `?` holds the tips — a film of a review on Sphere-Packing-Lean in
42
+ thirteen scenes, with captions, and a row for each thing it does not show — and every key.
43
+
44
+ ## See what a Lean theorem actually rests on
4
45
 
5
46
  Lean checks that a proof is correct. It cannot check that the theorem says what you mean: that the
6
47
  definitions in its statement mean what their names suggest. VisualProof shows exactly which
7
48
  definitions those are, so that people, and AI agents, can read them, review them together, and
8
49
  keep a record of the review.
9
50
 
10
- <!-- A screenshot or a short video of the board goes here. -->
51
+ On [flt-regular](https://github.com/leanprover-community/flt-regular), Fermat's Last Theorem for
52
+ regular primes. Of the project's
53
+ 273 declarations, two light up besides the theorem, `IsRegularPrime` and `IsRegularNumber`: they
54
+ are what you need to read to believe what it says. The Mathlib definitions they use light up too,
55
+ trusted and assumed as Mathlib is, unless a review chooses to read them: the walk stops at the
56
+ project's edge.
57
+
58
+ <p align="center">
59
+ <img src="docs/images/tcb-view-theorem.webp" width="32%" alt="flt_regular alone, lit on the board">
60
+ <img src="docs/images/tcb-view-tcb.webp" width="32%" alt="the TCB of flt_regular: IsRegularPrime, IsRegularNumber and the Mathlib definitions they use, lit with the edges between them">
61
+ <img src="docs/images/tcb-view-keys.webp" width="32%" alt="the key declarations of flt_regular, IsRegularPrime and FermatLastTheoremFor, joined by dashed edges">
62
+ </p>
63
+ <p align="center"><sub>The theorem alone · what its statement rests on, its TCB · the few the review marked key, read first.<br>This review no longer trusts <code>Mathlib.NumberTheory</code>, so the definitions it holds that the statement means, <code>FermatLastTheoremFor</code> among them, are read too, and can be key.</sub></p>
11
64
 
12
65
  ## What it does
13
66
 
14
67
  - **The declaration graph** of a built Lean project, clustered by namespace or by file, and updated
15
68
  live as you rebuild.
16
- - **The TCB of any theorem**: the definitions its statement rests on, followed through their bodies,
17
- instances and notation, and the axioms behind its proof. What lies only inside proofs is left
18
- out, since Lean has checked it.
69
+ - **The TCB of any theorem**: the project's definitions its statement rests on, followed through
70
+ their bodies, instances and notation, and the axioms its statement and proof use. What lies only
71
+ inside proofs is left out, since Lean has checked it; what lies outside the project, Mathlib's
72
+ definitions, is lit but trusted and assumed.
19
73
  - **A review together**: approve or comment on each declaration, mark targets and their key
20
74
  declarations, leave notes, link papers to declarations, and see what changed since an opinion was
21
75
  given. Everyone on the page sees it live.
@@ -24,6 +78,9 @@ keep a record of the review.
24
78
  - **History**: every build is kept, and a past board can be browsed.
25
79
  - **A printed document** of what a view holds: definitions in full, proofs left out, typeset with
26
80
  XeLaTeX.
81
+ - **A picture of the board**, PNG or SVG up to poster size: from the page, from an agent's link, or
82
+ without a browser (`visualproof artwork <project> --recipe recipe.json`,
83
+ [step by step](docs/MANUAL.md#a-poster-from-the-command-line)).
27
84
 
28
85
  ## Requirements
29
86
 
@@ -36,28 +93,6 @@ keep a record of the review.
36
93
  The project must have been built with `lake build`: VisualProof only reads what the build left,
37
94
  and never builds it.
38
95
 
39
- ## Try it
40
-
41
- VisualProof is not on npm yet: install its `visualproof` command from a checkout, which packs it
42
- as npm would. Here it is on [flt-regular](https://github.com/leanprover-community/flt-regular),
43
- Fermat's Last Theorem for regular primes, built on Mathlib:
44
-
45
- ```bash
46
- git clone https://github.com/LucianoXu/VisualProof
47
- (cd VisualProof && npm install && npm pack && npm install --global ./visualproof-*.tgz)
48
-
49
- git clone https://github.com/leanprover-community/flt-regular
50
- (cd flt-regular && git checkout bd81b78ba6 && lake exe cache get && lake build)
51
-
52
- visualproof doctor flt-regular # what is missing, if anything, and what to do
53
- visualproof serve flt-regular
54
- ```
55
-
56
- Open http://127.0.0.1:4173/. Choose the *Rests on* tool (`2`), find `flt_regular` with the search
57
- (`/`), and click it on the board. Of the project's 297 declarations, two light up besides the
58
- theorem: `IsRegularPrime` and `IsRegularNumber`. With the Mathlib definitions they use, they are
59
- what you need to read to believe what the theorem says.
60
-
61
96
  ## Where it keeps things
62
97
 
63
98
  It writes nothing into the project, and nothing into its own checkout. It keeps everything in two
@@ -68,8 +103,10 @@ places:
68
103
  `~/.local/share/visualproof/sites/<project>-<hash>/` (on macOS, under
69
104
  `~/Library/Application Support/visualproof/`). It cannot be derived again and holds secrets, so
70
105
  back it up and keep it out of git.
71
- - **The cache** (`--cache <dir>`) holds what a rebuild makes again. By default it is
72
- `~/.cache/visualproof/` (on macOS, `~/Library/Caches/visualproof/`).
106
+ - **The cache** (`--cache <dir>`) holds what a rebuild makes again, and the patch releases a server
107
+ took (`versions/`, with `updates.json`, the last check: code the server runs, so the cache is the
108
+ server's user's alone). By default it is `~/.cache/visualproof/` (on macOS,
109
+ `~/Library/Caches/visualproof/`).
73
110
 
74
111
  ## Reviewing with others
75
112
 
@@ -85,10 +122,26 @@ project with a read-only link (nothing changes, nobody sees the reader), or give
85
122
  token and a prompt. To put a project online for anyone, read-only, add `--public`. The server
86
123
  speaks plain HTTP: beyond a trusted network, put a TLS proxy in front. [SECURITY.md](SECURITY.md) says what the server trusts and what it exposes.
87
124
 
125
+ ## Updating
126
+
127
+ A server keeps itself up to date with patch releases (`--updates auto`, the default): it asks npm
128
+ once a day and takes a newer release of the same minor version, 0.4.1 after 0.4.0, at a quiet
129
+ moment (nobody on a page and nothing running, a day later at the latest); the pages left open
130
+ reload where they were. A newer minor version, which may change the command line or the site
131
+ folder, is only announced — in the server's log, by `visualproof doctor` and in the About of the
132
+ page's `?` — with the command it prints to install it, e.g.
133
+ `npm install --global visualproof@0.5.0`; once it is installed, the server restarts into it by
134
+ itself within ten minutes. `--updates notify` announces patch releases too, and `--updates off`
135
+ never asks npm. 0.3.0 has no updater: upgrade it to 0.4.0 by hand
136
+ ([the manual](docs/MANUAL.md#updates)).
137
+
88
138
  ## Documentation
89
139
 
90
- - [The manual](docs/MANUAL.md): every part of the page, the review, views, history, the printed
91
- document, collaboration, and how the TCB is computed.
140
+ - **In the page**: the tour, offered on the first visit, and the tips under `?`: a film of a review
141
+ in thirteen scenes, each with a few words, and a row for the rest. They are the documentation to
142
+ start with.
143
+ - [The manual](docs/MANUAL.md): how to start, the concepts, then every part of the page, the review,
144
+ views, history, the printed document, collaboration, and how the TCB is computed.
92
145
  - [The agents' API](docs/agent-api/README.md), which the server also serves to agents, topic by topic.
93
146
  - [SPEC/](SPEC/): the specification, and the design decisions behind each part.
94
147
  - [CONTRIBUTING.md](CONTRIBUTING.md), for working on VisualProof itself.
@@ -96,5 +149,7 @@ speaks plain HTTP: beyond a trusted network, put a TLS proxy in front. [SECURITY
96
149
  ## License and citation
97
150
 
98
151
  VisualProof is licensed under Apache-2.0 ([LICENSE](LICENSE)). The fonts in `src/assets/fonts/`
99
- are JuliaMono, under the SIL Open Font License. If you use VisualProof in your work, please cite
100
- it ([CITATION.cff](CITATION.cff)).
152
+ are JuliaMono; those in `src/assets/webfonts/`, which artworks are drawn in, are Source Sans 3,
153
+ Source Serif 4, Jost, Noto Sans and Noto Sans Math. All are under the SIL Open Font License, whose
154
+ text is beside them. If you use VisualProof in your work, please cite it
155
+ ([CITATION.cff](CITATION.cff)).
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,289 @@
1
+ {
2
+ "film": {
3
+ "file": "tour-d98aa9f30925.mp4",
4
+ "sha256": "d98aa9f309254c0591ebd3bde6107750f4e1881c3fdd12d3824631daec0ce940",
5
+ "size": 53705683,
6
+ "width": 2560,
7
+ "height": 1600,
8
+ "duration": 238.96666666666667
9
+ },
10
+ "chapters": [
11
+ {
12
+ "id": "target",
13
+ "start": 0,
14
+ "end": 19.466666666666665
15
+ },
16
+ {
17
+ "id": "view",
18
+ "start": 19.466666666666665,
19
+ "end": 31.833333333333332
20
+ },
21
+ {
22
+ "id": "arrange",
23
+ "start": 31.833333333333332,
24
+ "end": 53.666666666666664
25
+ },
26
+ {
27
+ "id": "source",
28
+ "start": 53.666666666666664,
29
+ "end": 66.06666666666666
30
+ },
31
+ {
32
+ "id": "keys",
33
+ "start": 66.06666666666666,
34
+ "end": 92.8
35
+ },
36
+ {
37
+ "id": "checks",
38
+ "start": 92.8,
39
+ "end": 111.3
40
+ },
41
+ {
42
+ "id": "review",
43
+ "start": 111.3,
44
+ "end": 129.73333333333332
45
+ },
46
+ {
47
+ "id": "project",
48
+ "start": 129.73333333333332,
49
+ "end": 138.66666666666666
50
+ },
51
+ {
52
+ "id": "share",
53
+ "start": 138.66666666666666,
54
+ "end": 152
55
+ },
56
+ {
57
+ "id": "agent",
58
+ "start": 152,
59
+ "end": 171.33333333333334
60
+ },
61
+ {
62
+ "id": "library",
63
+ "start": 171.33333333333334,
64
+ "end": 199.73333333333332
65
+ },
66
+ {
67
+ "id": "export",
68
+ "start": 199.73333333333332,
69
+ "end": 219.23333333333332
70
+ },
71
+ {
72
+ "id": "artwork",
73
+ "start": 219.23333333333332,
74
+ "end": 238.96666666666667
75
+ }
76
+ ],
77
+ "captions": [
78
+ {
79
+ "start": 4.1,
80
+ "end": 7.9,
81
+ "text": "Search the theorem to review: press /."
82
+ },
83
+ {
84
+ "start": 7.9,
85
+ "end": 11.9,
86
+ "text": "There are two MainTheorems: take the one in Dim24."
87
+ },
88
+ {
89
+ "start": 11.9,
90
+ "end": 15.866666666666667,
91
+ "text": "Mark it as the target of the review."
92
+ },
93
+ {
94
+ "start": 15.866666666666667,
95
+ "end": 19.466666666666665,
96
+ "text": "The side panel lists the targets, with their progress."
97
+ },
98
+ {
99
+ "start": 19.466666666666665,
100
+ "end": 25.333333333333332,
101
+ "text": "Rests on · Uses: everything the theorem uses."
102
+ },
103
+ {
104
+ "start": 25.333333333333332,
105
+ "end": 28.833333333333332,
106
+ "text": "Zoom in: a view of just that, in a tab of its own."
107
+ },
108
+ {
109
+ "start": 28.833333333333332,
110
+ "end": 31.833333333333332,
111
+ "text": "The view is laid out for what it holds alone."
112
+ },
113
+ {
114
+ "start": 34.13333333333333,
115
+ "end": 39.5,
116
+ "text": "Drag a cluster with Ctrl held: it stays there, for everyone."
117
+ },
118
+ {
119
+ "start": 39.5,
120
+ "end": 46.53333333333333,
121
+ "text": "Or let the lock go with l, and drag without Ctrl."
122
+ },
123
+ {
124
+ "start": 46.53333333333333,
125
+ "end": 53.666666666666664,
126
+ "text": "Double-click a circle to fold it to a point; again to open."
127
+ },
128
+ {
129
+ "start": 53.666666666666664,
130
+ "end": 58.7,
131
+ "text": "Space opens the source of what is selected."
132
+ },
133
+ {
134
+ "start": 58.7,
135
+ "end": 62.5,
136
+ "text": "Rest on a name: Lean says what it is."
137
+ },
138
+ {
139
+ "start": 62.5,
140
+ "end": 66.06666666666666,
141
+ "text": "Click it to go there: its source, its panel."
142
+ },
143
+ {
144
+ "start": 66.06666666666666,
145
+ "end": 69.13333333333334,
146
+ "text": "Keys: the definitions that carry what it says."
147
+ },
148
+ {
149
+ "start": 69.13333333333334,
150
+ "end": 84.53333333333333,
151
+ "text": "Mark each as a key with the mouse, in its panel."
152
+ },
153
+ {
154
+ "start": 84.53333333333333,
155
+ "end": 92.8,
156
+ "text": "Rests on · Keys lights them, joined to the target."
157
+ },
158
+ {
159
+ "start": 93.4,
160
+ "end": 96.1,
161
+ "text": "Selection: the statement alone."
162
+ },
163
+ {
164
+ "start": 96.1,
165
+ "end": 98.9,
166
+ "text": "Least effort — you trust every name in it."
167
+ },
168
+ {
169
+ "start": 98.9,
170
+ "end": 101.36666666666666,
171
+ "text": "Keys: the few that carry the meaning."
172
+ },
173
+ {
174
+ "start": 101.36666666666666,
175
+ "end": 103.43333333333334,
176
+ "text": "Little effort, good confidence."
177
+ },
178
+ {
179
+ "start": 103.43333333333334,
180
+ "end": 105.63333333333334,
181
+ "text": "TCB: everything it rests on."
182
+ },
183
+ {
184
+ "start": 105.63333333333334,
185
+ "end": 107.63333333333334,
186
+ "text": "Most effort, most confidence."
187
+ },
188
+ {
189
+ "start": 107.63333333333334,
190
+ "end": 111.3,
191
+ "text": "Choose how far to read: the counts say what each costs."
192
+ },
193
+ {
194
+ "start": 111.3,
195
+ "end": 116.6,
196
+ "text": "Read a definition, then say what you think of it."
197
+ },
198
+ {
199
+ "start": 116.6,
200
+ "end": 125.96666666666667,
201
+ "text": "Approve it, with why: the comment stays with it."
202
+ },
203
+ {
204
+ "start": 125.96666666666667,
205
+ "end": 129.73333333333332,
206
+ "text": "The target's progress counts your approval."
207
+ },
208
+ {
209
+ "start": 129.73333333333332,
210
+ "end": 135.03333333333333,
211
+ "text": "The Project tab: the whole codebase."
212
+ },
213
+ {
214
+ "start": 135.03333333333333,
215
+ "end": 138.66666666666666,
216
+ "text": "Every board shows the same review."
217
+ },
218
+ {
219
+ "start": 138.66666666666666,
220
+ "end": 145.56666666666666,
221
+ "text": "Share → AI agent: a token, and a prompt for it."
222
+ },
223
+ {
224
+ "start": 145.56666666666666,
225
+ "end": 148.76666666666668,
226
+ "text": "Paste the prompt into your agent: it joins here."
227
+ },
228
+ {
229
+ "start": 148.76666666666668,
230
+ "end": 152,
231
+ "text": "The token is the agent's own: revoke it here."
232
+ },
233
+ {
234
+ "start": 152.7,
235
+ "end": 160.13333333333333,
236
+ "text": "Click the agent to follow it, and ask."
237
+ },
238
+ {
239
+ "start": 160.13333333333333,
240
+ "end": 165.83333333333334,
241
+ "text": "It reads the code, and takes your view along."
242
+ },
243
+ {
244
+ "start": 165.83333333333334,
245
+ "end": 171.33333333333334,
246
+ "text": "Its answer names what it explains."
247
+ },
248
+ {
249
+ "start": 172.13333333333333,
250
+ "end": 178.23333333333332,
251
+ "text": "Library: add a paper about the code."
252
+ },
253
+ {
254
+ "start": 178.23333333333332,
255
+ "end": 191.53333333333333,
256
+ "text": "Link it to the theorem, at its page."
257
+ },
258
+ {
259
+ "start": 191.53333333333333,
260
+ "end": 199.73333333333332,
261
+ "text": "Pin a note on the target: where to start."
262
+ },
263
+ {
264
+ "start": 199.73333333333332,
265
+ "end": 207.66666666666666,
266
+ "text": "Export prints a view: here, the target's TCB."
267
+ },
268
+ {
269
+ "start": 207.66666666666666,
270
+ "end": 212.26666666666668,
271
+ "text": "Drag a section to change the document's order."
272
+ },
273
+ {
274
+ "start": 212.26666666666668,
275
+ "end": 219.23333333333332,
276
+ "text": "Typeset: the PDF follows the order you set."
277
+ },
278
+ {
279
+ "start": 219.23333333333332,
280
+ "end": 224,
281
+ "text": "Artwork: the board as a picture to keep."
282
+ },
283
+ {
284
+ "start": 224,
285
+ "end": 235.36666666666667,
286
+ "text": "Frame it, then save it as PNG or SVG."
287
+ }
288
+ ]
289
+ }
Binary file
@@ -0,0 +1,95 @@
1
+ Noto Sans: Copyright 2015 Google LLC. All Rights Reserved.
2
+ Noto Sans Math: Copyright 2018 Google LLC. All Rights Reserved.
3
+ (The files ttf/noto-sans.ttf and ttf/noto-sans-math.ttf hold a subset of each.)
4
+
5
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
6
+ This license is copied below, and is also available with a FAQ at:
7
+ http://scripts.sil.org/OFL
8
+
9
+
10
+ -----------------------------------------------------------
11
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
12
+ -----------------------------------------------------------
13
+
14
+ PREAMBLE
15
+ The goals of the Open Font License (OFL) are to stimulate worldwide
16
+ development of collaborative font projects, to support the font creation
17
+ efforts of academic and linguistic communities, and to provide a free and
18
+ open framework in which fonts may be shared and improved in partnership
19
+ with others.
20
+
21
+ The OFL allows the licensed fonts to be used, studied, modified and
22
+ redistributed freely as long as they are not sold by themselves. The
23
+ fonts, including any derivative works, can be bundled, embedded,
24
+ redistributed and/or sold with any software provided that any reserved
25
+ names are not used by derivative works. The fonts and derivatives,
26
+ however, cannot be released under any other type of license. The
27
+ requirement for fonts to remain under this license does not apply
28
+ to any document created using the fonts or their derivatives.
29
+
30
+ DEFINITIONS
31
+ "Font Software" refers to the set of files released by the Copyright
32
+ Holder(s) under this license and clearly marked as such. This may
33
+ include source files, build scripts and documentation.
34
+
35
+ "Reserved Font Name" refers to any names specified as such after the
36
+ copyright statement(s).
37
+
38
+ "Original Version" refers to the collection of Font Software components as
39
+ distributed by the Copyright Holder(s).
40
+
41
+ "Modified Version" refers to any derivative made by adding to, deleting,
42
+ or substituting -- in part or in whole -- any of the components of the
43
+ Original Version, by changing formats or by porting the Font Software to a
44
+ new environment.
45
+
46
+ "Author" refers to any designer, engineer, programmer, technical
47
+ writer or other person who contributed to the Font Software.
48
+
49
+ PERMISSION & CONDITIONS
50
+ Permission is hereby granted, free of charge, to any person obtaining
51
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
52
+ redistribute, and sell modified and unmodified copies of the Font
53
+ Software, subject to the following conditions:
54
+
55
+ 1) Neither the Font Software nor any of its individual components,
56
+ in Original or Modified Versions, may be sold by itself.
57
+
58
+ 2) Original or Modified Versions of the Font Software may be bundled,
59
+ redistributed and/or sold with any software, provided that each copy
60
+ contains the above copyright notice and this license. These can be
61
+ included either as stand-alone text files, human-readable headers or
62
+ in the appropriate machine-readable metadata fields within text or
63
+ binary files as long as those fields can be easily viewed by the user.
64
+
65
+ 3) No Modified Version of the Font Software may use the Reserved Font
66
+ Name(s) unless explicit written permission is granted by the corresponding
67
+ Copyright Holder. This restriction only applies to the primary font name as
68
+ presented to the users.
69
+
70
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
71
+ Software shall not be used to promote, endorse or advertise any
72
+ Modified Version, except to acknowledge the contribution(s) of the
73
+ Copyright Holder(s) and the Author(s) or with their explicit written
74
+ permission.
75
+
76
+ 5) The Font Software, modified or unmodified, in part or in whole,
77
+ must be distributed entirely under this license, and must not be
78
+ distributed under any other license. The requirement for fonts to
79
+ remain under this license does not apply to any document created
80
+ using the Font Software.
81
+
82
+ TERMINATION
83
+ This license becomes null and void if any of the above conditions are
84
+ not met.
85
+
86
+ DISCLAIMER
87
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
88
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
89
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
90
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
91
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
92
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
93
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
94
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
95
+ OTHER DEALINGS IN THE FONT SOFTWARE.