markform 0.1.16 → 0.1.18
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.
- package/LICENSE +369 -0
- package/README.md +154 -214
- package/dist/ai-sdk.d.mts +1 -1
- package/dist/ai-sdk.mjs +2 -2
- package/dist/{apply-CXsI5N9x.mjs → apply-BYgtU64w.mjs} +203 -16
- package/dist/apply-BYgtU64w.mjs.map +1 -0
- package/dist/bin.mjs +1 -1
- package/dist/{cli-BsFessUW.mjs → cli-D9w0Bp4J.mjs} +199 -13
- package/dist/cli-D9w0Bp4J.mjs.map +1 -0
- package/dist/cli.mjs +1 -1
- package/dist/{coreTypes-DE6Giau5.d.mts → coreTypes-BMEs8h_2.d.mts} +165 -2
- package/dist/{coreTypes-DiCddBKu.mjs → coreTypes-SDB3KRRJ.mjs} +9 -4
- package/dist/coreTypes-SDB3KRRJ.mjs.map +1 -0
- package/dist/index.d.mts +266 -2
- package/dist/index.mjs +5 -5
- package/dist/{session-B7aR6hno.mjs → session-CW9AQw6i.mjs} +1 -1
- package/dist/{session-XDrocA3j.mjs → session-Ci4B0Pna.mjs} +2 -2
- package/dist/{session-XDrocA3j.mjs.map → session-Ci4B0Pna.mjs.map} +1 -1
- package/dist/{src-Dv3IZSQU.mjs → src-DDxi-2ne.mjs} +966 -32
- package/dist/src-DDxi-2ne.mjs.map +1 -0
- package/docs/markform-apis.md +110 -0
- package/docs/markform-reference.md +58 -0
- package/docs/markform-spec.md +204 -9
- package/examples/movie-research/movie-deep-research-mock-filled.form.md +1 -1
- package/examples/movie-research/movie-deep-research.form.md +1 -1
- package/examples/parallel/parallel-research.form.md +57 -0
- package/examples/plan-document/plan-document-markdoc.form.md +35 -0
- package/examples/plan-document/plan-document-progress.form.md +47 -0
- package/examples/plan-document/plan-document.form.md +47 -0
- package/examples/startup-deep-research/startup-deep-research.form.md +1 -1
- package/package.json +2 -2
- package/dist/apply-CXsI5N9x.mjs.map +0 -1
- package/dist/cli-BsFessUW.mjs.map +0 -1
- package/dist/coreTypes-DiCddBKu.mjs.map +0 -1
- package/dist/src-Dv3IZSQU.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Markform
|
|
2
2
|
|
|
3
|
-
[](https://github.com/jlevy/markform/actions/runs/
|
|
4
|
-
[](https://github.com/jlevy/markform/actions/runs/
|
|
3
|
+
[](https://github.com/jlevy/markform/actions/runs/21430430567)
|
|
4
|
+
[](https://github.com/jlevy/markform/actions/runs/21430430567)
|
|
5
5
|
[](https://www.npmjs.com/package/markform)
|
|
6
6
|
[](https://x.com/ojoshe)
|
|
7
7
|
|
|
@@ -24,8 +24,9 @@ in one place.
|
|
|
24
24
|
UI, agents fill via tool calls ([Vercel AI SDK](https://github.com/vercel/ai)
|
|
25
25
|
integration included).
|
|
26
26
|
|
|
27
|
-
- Changes are explicit patch operations
|
|
28
|
-
"value": "Alice" }`) validated against a
|
|
27
|
+
- Changes are explicit patch operations
|
|
28
|
+
(`{ "op": "set_string", "fieldId": "name", "value": "Alice" }`) validated against a
|
|
29
|
+
schema specified in the form.
|
|
29
30
|
The agent sees validation errors and can self-correct.
|
|
30
31
|
|
|
31
32
|
- The format extends Markdown with a
|
|
@@ -33,121 +34,17 @@ in one place.
|
|
|
33
34
|
Export Markform syntax to JSON, YAML, JSON Schema, or plain Markdown reports.
|
|
34
35
|
|
|
35
36
|
Markform syntax is a good source format: token-efficient text you can read, diff, and
|
|
36
|
-
version control.
|
|
37
|
-
|
|
38
|
-
on GitHub, so forms look like regular Markdown.
|
|
37
|
+
version control. Structure is defined with HTML comment tags (`<!-- field -->`) that
|
|
38
|
+
render invisibly on GitHub, so forms look like regular Markdown.
|
|
39
39
|
|
|
40
|
-
##
|
|
41
|
-
|
|
42
|
-
For centuries, humans have used paper forms and
|
|
43
|
-
[checklists](https://en.wikipedia.org/wiki/The_Checklist_Manifesto) to systematize
|
|
44
|
-
complex processes. A form with instructions, field definitions, and validations is a
|
|
45
|
-
concise way to share context: goals, background knowledge, process rules, and state
|
|
46
|
-
(memory). I don’t think AI changes this essential aspect of knowledge work.
|
|
47
|
-
|
|
48
|
-
Most agent frameworks focus on *prompts* and *flow* (the how) over the *structure* of
|
|
49
|
-
results (the what).
|
|
50
|
-
But for deep research or other multi-step workflows, you need precise
|
|
51
|
-
control over intermediate states and final output.
|
|
52
|
-
You don’t want that structure in a GUI (not token-friendly), in code (hard to update),
|
|
53
|
-
or dependent on model whims (changes unpredictably with model updates).
|
|
54
|
-
|
|
55
|
-
Forms solve this. Forms codify operational excellence.
|
|
56
|
-
They’re easy to read, easy to edit, and enforce standards.
|
|
57
|
-
Because LLMs handle Markdown well, agents can also help create and improve the forms
|
|
58
|
-
themselves—closing the meta-loop.
|
|
59
|
-
|
|
60
|
-
It’s time to bring bureaucracy to the agents!
|
|
61
|
-
See [the FAQ](#faq) for more on the design.
|
|
62
|
-
|
|
63
|
-
## Quick Start
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
# Copy example forms to ./forms/ and run one interactively.
|
|
67
|
-
# Set OPENAI_API_KEY or ANTHROPIC_API_KEY (or put in .env) for research examples
|
|
68
|
-
npx markform@latest examples
|
|
69
|
-
|
|
70
|
-
# Read the docs (tell your agents to run these; they are agent-friendly!)
|
|
71
|
-
npx markform # CLI help
|
|
72
|
-
npx markform readme # This file
|
|
73
|
-
npx markform docs # Quick reference for writing Markforms
|
|
74
|
-
npx markform spec # Read the full spec
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The `markform examples` command copies some sample forms to `./forms` and prompts you to
|
|
78
|
-
fill in a form interactively and then optionally have an agent complete it.
|
|
79
|
-
Pick `movie-research-demo.form.md` for a quick example.
|
|
80
|
-
|
|
81
|
-
## Installation
|
|
82
|
-
|
|
83
|
-
Requires Node.js 20+.
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
# As a global CLI
|
|
87
|
-
npm install -g markform
|
|
88
|
-
|
|
89
|
-
# Or as a project dependency
|
|
90
|
-
npm install markform
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Example: Research a Movie
|
|
40
|
+
## Simple Example: Research a Movie
|
|
94
41
|
|
|
95
42
|
### Form Definition
|
|
96
43
|
|
|
97
|
-
A `.form.md` file combines YAML frontmatter with HTML comment tags that define
|
|
98
|
-
The text can be any Markdown.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
```markdown
|
|
102
|
-
<!-- field kind="string" id="movie" label="Movie" role="user"
|
|
103
|
-
required=true minLength=1 maxLength=300 --><!-- /field -->
|
|
104
|
-
|
|
105
|
-
<!-- field kind="single_select" id="mpaa_rating" role="agent" label="MPAA Rating" -->
|
|
106
|
-
- [ ] G <!-- #g -->
|
|
107
|
-
- [ ] PG <!-- #pg -->
|
|
108
|
-
- [ ] PG-13 <!-- #pg_13 -->
|
|
109
|
-
- [ ] R <!-- #r -->
|
|
110
|
-
- [ ] NC-17 <!-- #nc_17 -->
|
|
111
|
-
- [ ] NR/Unrated <!-- #nr -->
|
|
112
|
-
<!-- /field -->
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Fields have types defined by the attributes.
|
|
116
|
-
Values are filled in incrementally, just like any form.
|
|
117
|
-
Once filled in, values appear directly inside the tags, in Markdown format:
|
|
118
|
-
|
|
119
|
-
````markdown
|
|
120
|
-
<!-- field kind="string" id="movie" label="Movie" role="user"
|
|
121
|
-
required=true minLength=1 maxLength=300 -->
|
|
122
|
-
```value
|
|
123
|
-
The Shawshank Redemption
|
|
124
|
-
```
|
|
125
|
-
<!-- /field -->
|
|
126
|
-
|
|
127
|
-
<!-- field kind="single_select" id="mpaa_rating" role="agent" label="MPAA Rating" -->
|
|
128
|
-
- [ ] G <!-- #g -->
|
|
129
|
-
- [ ] PG <!-- #pg -->
|
|
130
|
-
- [ ] PG-13 <!-- #pg_13 -->
|
|
131
|
-
- [x] R <!-- #r -->
|
|
132
|
-
- [ ] NC-17 <!-- #nc_17 -->
|
|
133
|
-
- [ ] NR/Unrated <!-- #nr -->
|
|
134
|
-
<!-- /field -->
|
|
135
|
-
````
|
|
136
|
-
|
|
137
|
-
Note fields can have a `role="user"` to indicate they are filled interactively by the
|
|
138
|
-
user, or a `role="agent"` to indicate an agent should fill them in.
|
|
139
|
-
|
|
140
|
-
There are also tags for user or agent instructions per field or at form level and
|
|
141
|
-
grouping of forms.
|
|
142
|
-
|
|
143
|
-
Checkboxes and tables as values are supported!
|
|
144
|
-
Checkboxes can be single-select or multi-select.
|
|
145
|
-
|
|
146
|
-
Here's a full example (using the alternative Markdoc tag syntax, which also works):
|
|
147
|
-
|
|
148
|
-
<details>
|
|
149
|
-
|
|
150
|
-
<summary>Markform for Movie Research Demo (click to expand)</summary>
|
|
44
|
+
A `.form.md` file combines YAML frontmatter with HTML comment tags that define
|
|
45
|
+
structure. The text can be any Markdown.
|
|
46
|
+
Here is the
|
|
47
|
+
[movie-research-demo.form.md](https://github.com/jlevy/markform/blob/main/packages/markform/examples/movie-research/movie-research-demo.form.md):
|
|
151
48
|
|
|
152
49
|
```markdown
|
|
153
50
|
---
|
|
@@ -164,142 +61,135 @@ markform:
|
|
|
164
61
|
agent: |
|
|
165
62
|
Identify the movie with web searches and use imdb.com and rottentomatoes.com to fill in the ratings.
|
|
166
63
|
---
|
|
167
|
-
|
|
168
|
-
|
|
64
|
+
|
|
65
|
+
<!-- form id="movie_research_demo" -->
|
|
66
|
+
<!-- group id="movie_input" -->
|
|
169
67
|
|
|
170
68
|
## What movie do you want to research?
|
|
171
69
|
|
|
172
|
-
|
|
173
|
-
|
|
70
|
+
<!-- field kind="string" id="movie" label="Movie" role="user" required=true minLength=1 maxLength=300 --><!-- /field -->
|
|
71
|
+
<!-- instructions ref="movie" -->Enter the movie title (add year or details for disambiguation).<!-- /instructions -->
|
|
174
72
|
|
|
175
|
-
|
|
73
|
+
<!-- /group -->
|
|
176
74
|
|
|
177
|
-
|
|
75
|
+
<!-- group id="about_the_movie" title="About the Movie" -->
|
|
178
76
|
|
|
179
77
|
## Movie Ratings
|
|
180
78
|
|
|
181
79
|
Here are the ratings for the movie:
|
|
182
80
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
- [ ]
|
|
186
|
-
- [ ] PG
|
|
187
|
-
- [ ]
|
|
188
|
-
- [ ]
|
|
189
|
-
- [ ]
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
81
|
+
<!-- field kind="single_select" id="mpaa_rating" role="agent" label="MPAA Rating" -->
|
|
82
|
+
|
|
83
|
+
- [ ] G <!-- #g -->
|
|
84
|
+
- [ ] PG <!-- #pg -->
|
|
85
|
+
- [ ] PG-13 <!-- #pg_13 -->
|
|
86
|
+
- [ ] R <!-- #r -->
|
|
87
|
+
- [ ] NC-17 <!-- #nc_17 -->
|
|
88
|
+
- [ ] NR/Unrated <!-- #nr -->
|
|
89
|
+
|
|
90
|
+
<!-- /field -->
|
|
91
|
+
|
|
92
|
+
<!-- field kind="table" id="ratings_table" role="agent" label="Ratings" required=true columnIds=["source", "score", "votes"] columnTypes=["string", "number", "number"] minRows=0 maxRows=3 -->
|
|
93
|
+
|
|
196
94
|
| Source | Score | Votes |
|
|
197
95
|
|--------|-------|-------|
|
|
198
|
-
{% /field %}
|
|
199
96
|
|
|
200
|
-
|
|
97
|
+
<!-- /field -->
|
|
98
|
+
|
|
99
|
+
<!-- instructions ref="ratings_table" -->
|
|
201
100
|
Fill in scores and vote counts from each source:
|
|
202
101
|
- IMDB: Rating (1.0-10.0 scale), vote count
|
|
203
102
|
- RT Critics: Tomatometer (0-100%), review count
|
|
204
103
|
- RT Audience: Audience Score (0-100%), rating count
|
|
205
|
-
{% /instructions %}
|
|
206
104
|
|
|
207
|
-
|
|
208
|
-
|
|
105
|
+
<!-- /instructions -->
|
|
106
|
+
|
|
107
|
+
<!-- /group -->
|
|
108
|
+
<!-- /form -->
|
|
209
109
|
```
|
|
210
110
|
|
|
211
|
-
|
|
111
|
+
Fields have types defined by the attributes.
|
|
112
|
+
A field can have `role="user"` (filled interactively) or `role="agent"` (filled by an
|
|
113
|
+
agent). Values are filled in incrementally, just like any form.
|
|
212
114
|
|
|
213
|
-
### Form
|
|
115
|
+
### Filled Form
|
|
214
116
|
|
|
215
|
-
|
|
216
|
-
|
|
117
|
+
The key point is that with this structure **a Markdown file automatically gets a schema
|
|
118
|
+
and a tool API.**
|
|
217
119
|
|
|
218
|
-
|
|
120
|
+
Agents or users can fill in values using a TypeScript API or via agent tool calls.
|
|
219
121
|
|
|
220
|
-
|
|
122
|
+
And agents find this format **highly context efficient**. All information needed to fill
|
|
123
|
+
in the form is right there, not in long conversation history.
|
|
124
|
+
And it can be done incrementally, a few fields at a time.
|
|
221
125
|
|
|
222
|
-
|
|
126
|
+
Once filled in, values appear directly inside the tags, in Markdown format:
|
|
223
127
|
|
|
224
|
-
|
|
128
|
+
````markdown
|
|
129
|
+
<!-- form id="movie_research_demo" -->
|
|
130
|
+
<!-- group id="movie_input" -->
|
|
225
131
|
|
|
226
|
-
|
|
132
|
+
<!-- field kind="string" id="movie" label="Movie" role="user" required=true minLength=1 maxLength=300 -->
|
|
133
|
+
```value
|
|
134
|
+
The Shawshank Redemption
|
|
135
|
+
```
|
|
136
|
+
<!-- /field -->
|
|
227
137
|
|
|
228
|
-
|
|
138
|
+
<!-- /group -->
|
|
229
139
|
|
|
230
|
-
|
|
231
|
-
Movie:
|
|
232
|
-
The Shawshank Redemption
|
|
140
|
+
<!-- group id="about_the_movie" title="About the Movie" -->
|
|
233
141
|
|
|
234
|
-
|
|
142
|
+
<!-- field kind="single_select" id="mpaa_rating" role="agent" label="MPAA Rating" -->
|
|
235
143
|
|
|
236
|
-
|
|
237
|
-
|
|
144
|
+
- [ ] G <!-- #g -->
|
|
145
|
+
- [ ] PG <!-- #pg -->
|
|
146
|
+
- [ ] PG-13 <!-- #pg_13 -->
|
|
147
|
+
- [x] R <!-- #r -->
|
|
148
|
+
- [ ] NC-17 <!-- #nc_17 -->
|
|
149
|
+
- [ ] NR/Unrated <!-- #nr -->
|
|
150
|
+
|
|
151
|
+
<!-- /field -->
|
|
152
|
+
|
|
153
|
+
<!-- field kind="table" id="ratings_table" role="agent" label="Ratings" required=true columnIds=["source", "score", "votes"] columnTypes=["string", "number", "number"] minRows=0 maxRows=3 -->
|
|
238
154
|
|
|
239
|
-
Ratings:
|
|
240
155
|
| Source | Score | Votes |
|
|
241
156
|
| --- | --- | --- |
|
|
242
157
|
| IMDB | 9.3 | 3100000 |
|
|
243
158
|
| RT Critics | 89 | 146 |
|
|
244
159
|
| RT Audience | 98 | 250000 |
|
|
245
|
-
```
|
|
246
160
|
|
|
247
|
-
|
|
161
|
+
<!-- /field -->
|
|
248
162
|
|
|
249
|
-
|
|
163
|
+
<!-- /group -->
|
|
164
|
+
<!-- /form -->
|
|
165
|
+
````
|
|
250
166
|
|
|
251
|
-
|
|
252
|
-
{% form id="movie_research_demo" %}
|
|
167
|
+
### Report Output
|
|
253
168
|
|
|
254
|
-
|
|
169
|
+
Run `npx markform examples` to copy examples, then `npx markform run` and select
|
|
170
|
+
`Movie Research Demo` to fill it.
|
|
255
171
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
The Shawshank Redemption
|
|
259
|
-
```
|
|
260
|
-
{% /field %}
|
|
172
|
+
A form can be exported as the filled form (Markform), as a report (plain Markdown), as
|
|
173
|
+
values (YAML or JSON), or as a JSON Schema (just the structure).
|
|
261
174
|
|
|
262
|
-
|
|
263
|
-
Enter the movie title (add year or details for disambiguation).
|
|
264
|
-
{% /instructions %}
|
|
175
|
+
The report output (using `gpt-5-mini` to fill it in) looks like:
|
|
265
176
|
|
|
266
|
-
|
|
177
|
+
```markdown
|
|
178
|
+
Movie:
|
|
179
|
+
The Shawshank Redemption
|
|
267
180
|
|
|
268
|
-
|
|
181
|
+
## About the Movie
|
|
269
182
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
- [ ] PG {% #pg %}
|
|
273
|
-
- [ ] PG-13 {% #pg_13 %}
|
|
274
|
-
- [x] R {% #r %}
|
|
275
|
-
- [ ] NC-17 {% #nc_17 %}
|
|
276
|
-
- [ ] NR/Unrated {% #nr %}
|
|
277
|
-
{% /field %}
|
|
183
|
+
MPAA Rating:
|
|
184
|
+
R
|
|
278
185
|
|
|
279
|
-
|
|
280
|
-
columnIds=["source", "score", "votes"] columnLabels=["Source", "Score", "Votes"]
|
|
281
|
-
columnTypes=["string", "number", "number"]
|
|
282
|
-
label="Ratings" maxRows=3 minRows=0 required=true %}
|
|
186
|
+
Ratings:
|
|
283
187
|
| Source | Score | Votes |
|
|
284
188
|
| --- | --- | --- |
|
|
285
189
|
| IMDB | 9.3 | 3100000 |
|
|
286
190
|
| RT Critics | 89 | 146 |
|
|
287
191
|
| RT Audience | 98 | 250000 |
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
{% instructions ref="ratings_table" %}
|
|
291
|
-
Fill in scores and vote counts from each source:
|
|
292
|
-
- IMDB: Rating (1.0-10.0 scale), vote count
|
|
293
|
-
- RT Critics: Tomatometer (0-100%), review count
|
|
294
|
-
- RT Audience: Audience Score (0-100%), rating count
|
|
295
|
-
{% /instructions %}
|
|
296
|
-
|
|
297
|
-
{% /group %}
|
|
298
|
-
|
|
299
|
-
{% /form %}
|
|
300
|
-
````
|
|
301
|
-
|
|
302
|
-
</details>
|
|
192
|
+
```
|
|
303
193
|
|
|
304
194
|
<details> <summary>YAML Export (click to expand)</summary>
|
|
305
195
|
|
|
@@ -367,6 +257,59 @@ values:
|
|
|
367
257
|
|
|
368
258
|
</details>
|
|
369
259
|
|
|
260
|
+
## Why Do Agents Need Forms?
|
|
261
|
+
|
|
262
|
+
For centuries, humans have used paper forms and
|
|
263
|
+
[checklists](https://en.wikipedia.org/wiki/The_Checklist_Manifesto) to systematize
|
|
264
|
+
complex processes. A form with instructions, field definitions, and validations is a
|
|
265
|
+
concise way to share context: goals, background knowledge, process rules, and state
|
|
266
|
+
(memory). I don’t think AI changes this essential aspect of knowledge work.
|
|
267
|
+
|
|
268
|
+
Most agent frameworks focus on *prompts* and *flow* (the how) over the *structure* of
|
|
269
|
+
results (the what).
|
|
270
|
+
But for deep research or other multi-step workflows, you need precise
|
|
271
|
+
control over intermediate states and final output.
|
|
272
|
+
You don’t want that structure in a GUI (not token-friendly), in code (hard to update),
|
|
273
|
+
or dependent on model whims (changes unpredictably with model updates).
|
|
274
|
+
|
|
275
|
+
Forms solve this. Forms codify operational excellence.
|
|
276
|
+
They’re easy to read, easy to edit, and enforce standards.
|
|
277
|
+
Because LLMs handle Markdown well, agents can also help create and improve the forms
|
|
278
|
+
themselves—closing the meta-loop.
|
|
279
|
+
|
|
280
|
+
It’s time to bring bureaucracy to the agents!
|
|
281
|
+
See [the FAQ](#faq) for more on the design.
|
|
282
|
+
|
|
283
|
+
## Quick Start
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Copy example forms to ./forms/ and run one interactively.
|
|
287
|
+
# Set OPENAI_API_KEY or ANTHROPIC_API_KEY (or put in .env) for research examples
|
|
288
|
+
npx markform@latest examples
|
|
289
|
+
|
|
290
|
+
# Read the docs (tell your agents to run these; they are agent-friendly!)
|
|
291
|
+
npx markform # CLI help
|
|
292
|
+
npx markform readme # This file
|
|
293
|
+
npx markform docs # Quick reference for writing Markforms
|
|
294
|
+
npx markform spec # Read the full spec
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
The `markform examples` command copies some sample forms to `./forms` and prompts you to
|
|
298
|
+
fill in a form interactively and then optionally have an agent complete it.
|
|
299
|
+
Pick `movie-research-demo.form.md` for a quick example.
|
|
300
|
+
|
|
301
|
+
## Installation
|
|
302
|
+
|
|
303
|
+
Requires Node.js 20+.
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
# As a global CLI
|
|
307
|
+
npm install -g markform
|
|
308
|
+
|
|
309
|
+
# Or as a project dependency
|
|
310
|
+
npm install markform
|
|
311
|
+
```
|
|
312
|
+
|
|
370
313
|
### More Example Forms
|
|
371
314
|
|
|
372
315
|
The package includes example forms.
|
|
@@ -583,8 +526,8 @@ markform --help
|
|
|
583
526
|
|
|
584
527
|
## API Key Setup
|
|
585
528
|
|
|
586
|
-
Set the appropriate environment variable for your provider before running
|
|
587
|
-
fill`:
|
|
529
|
+
Set the appropriate environment variable for your provider before running
|
|
530
|
+
`markform fill`:
|
|
588
531
|
|
|
589
532
|
| Provider | Env Variable | Native Web Search |
|
|
590
533
|
| --- | --- | :---: |
|
|
@@ -659,19 +602,16 @@ const result = await generateText({
|
|
|
659
602
|
|
|
660
603
|
## Other Documentation
|
|
661
604
|
|
|
662
|
-
- **[Quick
|
|
663
|
-
Reference](https://github.com/jlevy/markform/blob/main/docs/markform-reference.md)**
|
|
605
|
+
- **[Quick Reference](https://github.com/jlevy/markform/blob/main/docs/markform-reference.md)**
|
|
664
606
|
(or run `markform docs`) — Concise syntax reference (agent-friendly)
|
|
665
607
|
|
|
666
608
|
- **[Markform Spec](https://github.com/jlevy/markform/blob/main/docs/markform-spec.md)**
|
|
667
609
|
(or run `markform spec`) — Complete syntax and semantics
|
|
668
610
|
|
|
669
|
-
- **[API
|
|
670
|
-
Documentation](https://github.com/jlevy/markform/blob/main/docs/markform-apis.md)**
|
|
611
|
+
- **[API Documentation](https://github.com/jlevy/markform/blob/main/docs/markform-apis.md)**
|
|
671
612
|
(or run `markform apis`) — TypeScript and AI SDK APIs
|
|
672
613
|
|
|
673
|
-
- **[Design
|
|
674
|
-
Doc](https://github.com/jlevy/markform/blob/main/docs/project/architecture/current/arch-markform-design.md)**
|
|
614
|
+
- **[Design Doc](https://github.com/jlevy/markform/blob/main/docs/project/architecture/current/arch-markform-design.md)**
|
|
675
615
|
— Technical design and roadmap
|
|
676
616
|
|
|
677
617
|
- **[Development](https://github.com/jlevy/markform/blob/main/docs/development.md)** —
|
|
@@ -732,9 +672,9 @@ But it’s not slop. It is written via a strongly spec-driven process, using rul
|
|
|
732
672
|
See
|
|
733
673
|
[my post](https://github.com/jlevy/speculate/blob/main/about/lessons_in_spec_coding.md)
|
|
734
674
|
for more thoughts on how this works.
|
|
735
|
-
And see
|
|
736
|
-
specs](https://github.com/jlevy/markform/tree/main/docs/project/specs/done)
|
|
737
|
-
of how everything is done with specs.
|
|
675
|
+
And see
|
|
676
|
+
[the complete history of specs](https://github.com/jlevy/markform/tree/main/docs/project/specs/done)
|
|
677
|
+
for examples of how everything is done with specs.
|
|
738
678
|
|
|
739
679
|
Although I didn’t write much code, there was a *lot* of management, review, and
|
|
740
680
|
iteration on design decisions.
|
|
@@ -824,12 +764,12 @@ This project uses a dual licensing approach:
|
|
|
824
764
|
|
|
825
765
|
- **Markform Specification** ([`docs/markform-spec.md`](docs/markform-spec.md),
|
|
826
766
|
[`docs/markform-reference.md`](docs/markform-reference.md)):
|
|
827
|
-
[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/).
|
|
828
|
-
|
|
767
|
+
[CC-BY-4.0](https://creativecommons.org/licenses/by/4.0/). You may freely implement
|
|
768
|
+
this specification in your own software under any license.
|
|
829
769
|
|
|
830
770
|
- **Reference Implementation** (all code in this repository):
|
|
831
|
-
[AGPL-3.0-or-later](./LICENSE).
|
|
832
|
-
|
|
771
|
+
[AGPL-3.0-or-later](./LICENSE). [Contact me](https://github.com/jlevy) for commercial
|
|
772
|
+
licensing options.
|
|
833
773
|
|
|
834
774
|
See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution terms.
|
|
835
775
|
|
package/dist/ai-sdk.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { At as
|
|
2
|
+
import { At as Patch, Mt as PatchSchema, U as FieldResponse, Y as FormSchema, at as InspectResult, et as Id, kt as ParsedForm, mr as ValidatorRegistry, r as ApplyResult } from "./coreTypes-BMEs8h_2.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/integrations/toolTypes.d.ts
|
package/dist/ai-sdk.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
import { L as PatchSchema } from "./coreTypes-
|
|
3
|
-
import { d as serializeForm, i as inspect, t as applyPatches } from "./apply-
|
|
2
|
+
import { L as PatchSchema } from "./coreTypes-SDB3KRRJ.mjs";
|
|
3
|
+
import { d as serializeForm, i as inspect, t as applyPatches } from "./apply-BYgtU64w.mjs";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
|
|
6
6
|
//#region src/integrations/vercelAiSdkTools.ts
|