markform 0.0.1 → 0.1.1
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 +664 -0
- package/README.md +216 -44
- package/dist/ai-sdk.d.mts +2 -3
- package/dist/ai-sdk.mjs +2 -3
- package/dist/{apply-C0vjijlP.mjs → apply-BQdd-fdx.mjs} +381 -38
- package/dist/bin.d.mts +0 -0
- package/dist/bin.mjs +4 -5
- package/dist/{cli-9fvFySww.mjs → cli-pjOiHgCW.mjs} +506 -94
- package/dist/cli.d.mts +1 -2
- package/dist/cli.mjs +3 -3
- package/dist/{coreTypes-T7dAuewt.d.mts → coreTypes--6etkcwb.d.mts} +1088 -131
- package/dist/index.d.mts +90 -10
- package/dist/index.mjs +2 -2
- package/dist/{src-DBD3Dt4f.mjs → src-Cs4_9lWP.mjs} +461 -96
- package/examples/simple/simple-mock-filled.form.md +36 -0
- package/examples/simple/simple-skipped-filled.form.md +147 -0
- package/examples/simple/simple-with-skips.session.yaml +230 -0
- package/examples/simple/simple.form.md +22 -0
- package/examples/simple/simple.session.yaml +60 -28
- package/examples/startup-deep-research/startup-deep-research.form.md +404 -0
- package/examples/startup-research/startup-research-mock-filled.form.md +307 -0
- package/examples/startup-research/startup-research.form.md +211 -0
- package/package.json +17 -16
- package/dist/ai-sdk.mjs.map +0 -1
- package/dist/apply-C0vjijlP.mjs.map +0 -1
- package/dist/bin.mjs.map +0 -1
- package/dist/cli-9fvFySww.mjs.map +0 -1
- package/dist/src-DBD3Dt4f.mjs.map +0 -1
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
---
|
|
2
|
+
markform:
|
|
3
|
+
markform_version: "0.1.0"
|
|
4
|
+
roles:
|
|
5
|
+
- user
|
|
6
|
+
- agent
|
|
7
|
+
role_instructions:
|
|
8
|
+
user: "Enter the name of the startup company you want to research."
|
|
9
|
+
agent: |
|
|
10
|
+
Research and fill in all company information for the specified startup.
|
|
11
|
+
Guidelines:
|
|
12
|
+
1. Start with Crunchbase - The company's Crunchbase page is the primary source
|
|
13
|
+
2. Verify with company website and press releases
|
|
14
|
+
3. Use official formats - Dates as YYYY-MM-DD, funding as USD amounts
|
|
15
|
+
4. Fill funding rounds chronologically - Most recent first
|
|
16
|
+
5. Include all relevant URLs - Website, LinkedIn, press coverage
|
|
17
|
+
6. Leave unknown fields empty - Don't guess or fabricate information
|
|
18
|
+
7. Keep descriptions concise - Aim for 100-200 words max
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
{% form id="startup_research" title="Startup Research Form" %}
|
|
22
|
+
|
|
23
|
+
{% description ref="startup_research" %}
|
|
24
|
+
A comprehensive research form for startup companies. This form demonstrates URL field types
|
|
25
|
+
for capturing company websites, funding sources, press coverage, and other web references.
|
|
26
|
+
The user provides the company name, and the agent researches and fills all remaining fields.
|
|
27
|
+
{% /description %}
|
|
28
|
+
|
|
29
|
+
{% documentation ref="startup_research" %}
|
|
30
|
+
**Workflow:**
|
|
31
|
+
1. User enters the startup company name
|
|
32
|
+
2. Agent researches and fills company information
|
|
33
|
+
3. Agent includes all relevant URLs (website, LinkedIn, press, funding sources)
|
|
34
|
+
4. Agent provides source citations
|
|
35
|
+
|
|
36
|
+
**Data Sources:**
|
|
37
|
+
- Crunchbase profiles
|
|
38
|
+
- Company websites
|
|
39
|
+
- Press releases
|
|
40
|
+
- LinkedIn company pages
|
|
41
|
+
- Tech news publications
|
|
42
|
+
{% /documentation %}
|
|
43
|
+
|
|
44
|
+
{% field-group id="basic_info" title="Company Information" %}
|
|
45
|
+
|
|
46
|
+
{% string-field id="company_name" label="Company Name" role="user" required=true minLength=2 maxLength=200 %}
|
|
47
|
+
```value
|
|
48
|
+
Anthropic
|
|
49
|
+
```
|
|
50
|
+
{% /string-field %}
|
|
51
|
+
|
|
52
|
+
{% instructions ref="company_name" %}
|
|
53
|
+
Enter the official name of the startup company you want to research (e.g., "Stripe", "OpenAI").
|
|
54
|
+
{% /instructions %}
|
|
55
|
+
|
|
56
|
+
{% url-field id="company_website" label="Company Website" required=true %}
|
|
57
|
+
```value
|
|
58
|
+
https://www.anthropic.com
|
|
59
|
+
```
|
|
60
|
+
{% /url-field %}
|
|
61
|
+
|
|
62
|
+
{% instructions ref="company_website" %}
|
|
63
|
+
The official company website URL.
|
|
64
|
+
{% /instructions %}
|
|
65
|
+
|
|
66
|
+
{% url-field id="linkedin_page" label="LinkedIn Company Page" %}
|
|
67
|
+
```value
|
|
68
|
+
https://www.linkedin.com/company/anthropic
|
|
69
|
+
```
|
|
70
|
+
{% /url-field %}
|
|
71
|
+
|
|
72
|
+
{% instructions ref="linkedin_page" %}
|
|
73
|
+
LinkedIn company page URL if available.
|
|
74
|
+
{% /instructions %}
|
|
75
|
+
|
|
76
|
+
{% string-field id="founded_date" label="Founded Date" pattern="^\\d{4}(-\\d{2}(-\\d{2})?)?$" %}
|
|
77
|
+
```value
|
|
78
|
+
2021
|
|
79
|
+
```
|
|
80
|
+
{% /string-field %}
|
|
81
|
+
|
|
82
|
+
{% instructions ref="founded_date" %}
|
|
83
|
+
Format: YYYY, YYYY-MM, or YYYY-MM-DD (e.g., 2010, 2010-06, 2010-06-15)
|
|
84
|
+
{% /instructions %}
|
|
85
|
+
|
|
86
|
+
{% string-field id="headquarters" label="Headquarters Location" %}
|
|
87
|
+
```value
|
|
88
|
+
San Francisco, California
|
|
89
|
+
```
|
|
90
|
+
{% /string-field %}
|
|
91
|
+
|
|
92
|
+
{% instructions ref="headquarters" %}
|
|
93
|
+
Format: City, State/Country (e.g., "San Francisco, California")
|
|
94
|
+
{% /instructions %}
|
|
95
|
+
|
|
96
|
+
{% string-field id="company_description" label="Company Description" multiline=true maxLength=1000 %}
|
|
97
|
+
```value
|
|
98
|
+
Anthropic is an AI safety company focused on building reliable, interpretable, and steerable AI systems. Founded by former members of OpenAI, the company develops large language models with an emphasis on safety research and alignment. Their flagship product is Claude, an AI assistant designed to be helpful, harmless, and honest.
|
|
99
|
+
```
|
|
100
|
+
{% /string-field %}
|
|
101
|
+
|
|
102
|
+
{% instructions ref="company_description" %}
|
|
103
|
+
Brief description of what the company does. 100-200 words max.
|
|
104
|
+
{% /instructions %}
|
|
105
|
+
|
|
106
|
+
{% /field-group %}
|
|
107
|
+
|
|
108
|
+
{% field-group id="funding_info" title="Funding Information" %}
|
|
109
|
+
|
|
110
|
+
{% string-field id="total_funding" label="Total Funding Raised" pattern="^\\$[0-9]+(\\.[0-9]+)?(K|M|B)?$" %}
|
|
111
|
+
```value
|
|
112
|
+
$7.6B
|
|
113
|
+
```
|
|
114
|
+
{% /string-field %}
|
|
115
|
+
|
|
116
|
+
{% instructions ref="total_funding" %}
|
|
117
|
+
Format: $X.XB, $XXM, or $XXK (e.g., "$1.5B", "$50M", "$500K")
|
|
118
|
+
{% /instructions %}
|
|
119
|
+
|
|
120
|
+
{% string-field id="latest_valuation" label="Latest Valuation" pattern="^\\$[0-9]+(\\.[0-9]+)?(K|M|B)?$" %}
|
|
121
|
+
```value
|
|
122
|
+
$18.4B
|
|
123
|
+
```
|
|
124
|
+
{% /string-field %}
|
|
125
|
+
|
|
126
|
+
{% instructions ref="latest_valuation" %}
|
|
127
|
+
Format: $X.XB, $XXM, or $XXK (e.g., "$10B")
|
|
128
|
+
{% /instructions %}
|
|
129
|
+
|
|
130
|
+
{% single-select id="funding_stage" label="Funding Stage" %}
|
|
131
|
+
- [ ] Pre-seed {% #pre_seed %}
|
|
132
|
+
- [ ] Seed {% #seed %}
|
|
133
|
+
- [ ] Series A {% #series_a %}
|
|
134
|
+
- [ ] Series B {% #series_b %}
|
|
135
|
+
- [ ] Series C {% #series_c %}
|
|
136
|
+
- [x] Series D+ {% #series_d_plus %}
|
|
137
|
+
- [ ] Public {% #public %}
|
|
138
|
+
{% /single-select %}
|
|
139
|
+
|
|
140
|
+
{% string-list id="key_investors" label="Key Investors" maxItems=10 %}
|
|
141
|
+
```value
|
|
142
|
+
Google
|
|
143
|
+
Spark Capital
|
|
144
|
+
Salesforce Ventures
|
|
145
|
+
Amazon
|
|
146
|
+
Sound Ventures
|
|
147
|
+
```
|
|
148
|
+
{% /string-list %}
|
|
149
|
+
|
|
150
|
+
{% instructions ref="key_investors" %}
|
|
151
|
+
List notable investors (VCs, angels), one per line.
|
|
152
|
+
{% /instructions %}
|
|
153
|
+
|
|
154
|
+
{% url-list id="funding_announcements" label="Funding Announcement URLs" maxItems=5 uniqueItems=true %}
|
|
155
|
+
```value
|
|
156
|
+
https://www.anthropic.com/news/anthropic-raises-series-c
|
|
157
|
+
https://techcrunch.com/2023/09/25/amazon-to-invest-up-to-4-billion-in-anthropic/
|
|
158
|
+
```
|
|
159
|
+
{% /url-list %}
|
|
160
|
+
|
|
161
|
+
{% instructions ref="funding_announcements" %}
|
|
162
|
+
URLs to press releases or articles about funding rounds.
|
|
163
|
+
{% /instructions %}
|
|
164
|
+
|
|
165
|
+
{% /field-group %}
|
|
166
|
+
|
|
167
|
+
{% field-group id="people" title="Key People" %}
|
|
168
|
+
|
|
169
|
+
{% string-field id="ceo" label="CEO / Founder" %}
|
|
170
|
+
```value
|
|
171
|
+
Dario Amodei
|
|
172
|
+
```
|
|
173
|
+
{% /string-field %}
|
|
174
|
+
|
|
175
|
+
{% instructions ref="ceo" %}
|
|
176
|
+
Name of CEO or primary founder.
|
|
177
|
+
{% /instructions %}
|
|
178
|
+
|
|
179
|
+
{% url-field id="ceo_linkedin" label="CEO LinkedIn" %}
|
|
180
|
+
```value
|
|
181
|
+
https://www.linkedin.com/in/dario-amodei
|
|
182
|
+
```
|
|
183
|
+
{% /url-field %}
|
|
184
|
+
|
|
185
|
+
{% instructions ref="ceo_linkedin" %}
|
|
186
|
+
LinkedIn profile URL of the CEO/founder.
|
|
187
|
+
{% /instructions %}
|
|
188
|
+
|
|
189
|
+
{% string-list id="founders" label="Founders" maxItems=5 %}
|
|
190
|
+
```value
|
|
191
|
+
Dario Amodei
|
|
192
|
+
Daniela Amodei
|
|
193
|
+
Tom Brown
|
|
194
|
+
Chris Olah
|
|
195
|
+
Sam McCandlish
|
|
196
|
+
```
|
|
197
|
+
{% /string-list %}
|
|
198
|
+
|
|
199
|
+
{% instructions ref="founders" %}
|
|
200
|
+
List all founders, one per line.
|
|
201
|
+
{% /instructions %}
|
|
202
|
+
|
|
203
|
+
{% number-field id="employee_count" label="Employee Count" min=1 integer=true %}
|
|
204
|
+
```value
|
|
205
|
+
1000
|
|
206
|
+
```
|
|
207
|
+
{% /number-field %}
|
|
208
|
+
|
|
209
|
+
{% instructions ref="employee_count" %}
|
|
210
|
+
Approximate number of employees.
|
|
211
|
+
{% /instructions %}
|
|
212
|
+
|
|
213
|
+
{% /field-group %}
|
|
214
|
+
|
|
215
|
+
{% field-group id="market_info" title="Market & Industry" %}
|
|
216
|
+
|
|
217
|
+
{% multi-select id="industry_sectors" label="Industry Sectors" minSelections=1 maxSelections=5 %}
|
|
218
|
+
- [x] AI/ML {% #ai_ml %}
|
|
219
|
+
- [ ] FinTech {% #fintech %}
|
|
220
|
+
- [ ] HealthTech {% #healthtech %}
|
|
221
|
+
- [ ] EdTech {% #edtech %}
|
|
222
|
+
- [x] SaaS {% #saas %}
|
|
223
|
+
- [ ] E-commerce {% #ecommerce %}
|
|
224
|
+
- [x] Security {% #security %}
|
|
225
|
+
- [x] Developer Tools {% #devtools %}
|
|
226
|
+
- [ ] Climate Tech {% #climatetech %}
|
|
227
|
+
- [ ] Other {% #other %}
|
|
228
|
+
{% /multi-select %}
|
|
229
|
+
|
|
230
|
+
{% string-list id="competitors" label="Competitors" maxItems=5 %}
|
|
231
|
+
```value
|
|
232
|
+
OpenAI
|
|
233
|
+
Google DeepMind
|
|
234
|
+
Cohere
|
|
235
|
+
Mistral AI
|
|
236
|
+
```
|
|
237
|
+
{% /string-list %}
|
|
238
|
+
|
|
239
|
+
{% instructions ref="competitors" %}
|
|
240
|
+
List main competitors, one per line.
|
|
241
|
+
{% /instructions %}
|
|
242
|
+
|
|
243
|
+
{% url-list id="competitor_urls" label="Competitor Website URLs" maxItems=5 uniqueItems=true %}
|
|
244
|
+
```value
|
|
245
|
+
https://openai.com
|
|
246
|
+
https://deepmind.google
|
|
247
|
+
https://cohere.com
|
|
248
|
+
https://mistral.ai
|
|
249
|
+
```
|
|
250
|
+
{% /url-list %}
|
|
251
|
+
|
|
252
|
+
{% instructions ref="competitor_urls" %}
|
|
253
|
+
Website URLs of main competitors.
|
|
254
|
+
{% /instructions %}
|
|
255
|
+
|
|
256
|
+
{% /field-group %}
|
|
257
|
+
|
|
258
|
+
{% field-group id="press_coverage" title="Press & Coverage" %}
|
|
259
|
+
|
|
260
|
+
{% url-list id="press_articles" label="Press Coverage URLs" minItems=1 maxItems=10 uniqueItems=true %}
|
|
261
|
+
```value
|
|
262
|
+
https://www.wired.com/story/anthropic-ai-claude-chatgpt-rival/
|
|
263
|
+
https://www.nytimes.com/2023/03/14/technology/anthropic-ai-chatbot.html
|
|
264
|
+
https://www.forbes.com/sites/alexkonrad/2023/09/25/anthropic-ai-amazon-investment/
|
|
265
|
+
```
|
|
266
|
+
{% /url-list %}
|
|
267
|
+
|
|
268
|
+
{% instructions ref="press_articles" %}
|
|
269
|
+
URLs to major press articles, reviews, or coverage about the company.
|
|
270
|
+
{% /instructions %}
|
|
271
|
+
|
|
272
|
+
{% url-field id="crunchbase_url" label="Crunchbase Profile" %}
|
|
273
|
+
```value
|
|
274
|
+
https://www.crunchbase.com/organization/anthropic
|
|
275
|
+
```
|
|
276
|
+
{% /url-field %}
|
|
277
|
+
|
|
278
|
+
{% instructions ref="crunchbase_url" %}
|
|
279
|
+
Crunchbase company profile URL.
|
|
280
|
+
{% /instructions %}
|
|
281
|
+
|
|
282
|
+
{% url-field id="pitchbook_url" label="PitchBook Profile" %}{% /url-field %}
|
|
283
|
+
|
|
284
|
+
{% instructions ref="pitchbook_url" %}
|
|
285
|
+
PitchBook company profile URL if available.
|
|
286
|
+
{% /instructions %}
|
|
287
|
+
|
|
288
|
+
{% /field-group %}
|
|
289
|
+
|
|
290
|
+
{% field-group id="sources_section" title="Research Sources" %}
|
|
291
|
+
|
|
292
|
+
{% url-list id="sources" label="Source URLs" minItems=1 uniqueItems=true %}
|
|
293
|
+
```value
|
|
294
|
+
https://www.crunchbase.com/organization/anthropic
|
|
295
|
+
https://www.anthropic.com
|
|
296
|
+
https://www.linkedin.com/company/anthropic
|
|
297
|
+
https://en.wikipedia.org/wiki/Anthropic
|
|
298
|
+
```
|
|
299
|
+
{% /url-list %}
|
|
300
|
+
|
|
301
|
+
{% instructions ref="sources" %}
|
|
302
|
+
List all source URLs used for this research. Include Crunchbase, company website, and any additional sources consulted.
|
|
303
|
+
{% /instructions %}
|
|
304
|
+
|
|
305
|
+
{% /field-group %}
|
|
306
|
+
|
|
307
|
+
{% /form %}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
markform:
|
|
3
|
+
markform_version: "0.1.0"
|
|
4
|
+
roles:
|
|
5
|
+
- user
|
|
6
|
+
- agent
|
|
7
|
+
role_instructions:
|
|
8
|
+
user: "Enter the name of the startup company you want to research."
|
|
9
|
+
agent: |
|
|
10
|
+
Research and fill in all company information for the specified startup.
|
|
11
|
+
Guidelines:
|
|
12
|
+
1. Start with Crunchbase - The company's Crunchbase page is the primary source
|
|
13
|
+
2. Verify with company website and press releases
|
|
14
|
+
3. Use official formats - Dates as YYYY-MM-DD, funding as USD amounts
|
|
15
|
+
4. Fill funding rounds chronologically - Most recent first
|
|
16
|
+
5. Include all relevant URLs - Website, LinkedIn, press coverage
|
|
17
|
+
6. Leave unknown fields empty - Don't guess or fabricate information
|
|
18
|
+
7. Keep descriptions concise - Aim for 100-200 words max
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
{% form id="startup_research" title="Startup Research Form" %}
|
|
22
|
+
|
|
23
|
+
{% description ref="startup_research" %}
|
|
24
|
+
A comprehensive research form for startup companies. This form demonstrates URL field types
|
|
25
|
+
for capturing company websites, funding sources, press coverage, and other web references.
|
|
26
|
+
The user provides the company name, and the agent researches and fills all remaining fields.
|
|
27
|
+
{% /description %}
|
|
28
|
+
|
|
29
|
+
{% documentation ref="startup_research" %}
|
|
30
|
+
**Workflow:**
|
|
31
|
+
1. User enters the startup company name
|
|
32
|
+
2. Agent researches and fills company information
|
|
33
|
+
3. Agent includes all relevant URLs (website, LinkedIn, press, funding sources)
|
|
34
|
+
4. Agent provides source citations
|
|
35
|
+
|
|
36
|
+
**Data Sources:**
|
|
37
|
+
- Crunchbase profiles
|
|
38
|
+
- Company websites
|
|
39
|
+
- Press releases
|
|
40
|
+
- LinkedIn company pages
|
|
41
|
+
- Tech news publications
|
|
42
|
+
{% /documentation %}
|
|
43
|
+
|
|
44
|
+
{% field-group id="basic_info" title="Company Information" %}
|
|
45
|
+
|
|
46
|
+
{% string-field id="company_name" label="Company Name" role="user" required=true minLength=2 maxLength=200 %}{% /string-field %}
|
|
47
|
+
|
|
48
|
+
{% instructions ref="company_name" %}
|
|
49
|
+
Enter the official name of the startup company you want to research (e.g., "Stripe", "OpenAI").
|
|
50
|
+
{% /instructions %}
|
|
51
|
+
|
|
52
|
+
{% url-field id="company_website" label="Company Website" required=true %}{% /url-field %}
|
|
53
|
+
|
|
54
|
+
{% instructions ref="company_website" %}
|
|
55
|
+
The official company website URL.
|
|
56
|
+
{% /instructions %}
|
|
57
|
+
|
|
58
|
+
{% url-field id="linkedin_page" label="LinkedIn Company Page" %}{% /url-field %}
|
|
59
|
+
|
|
60
|
+
{% instructions ref="linkedin_page" %}
|
|
61
|
+
LinkedIn company page URL if available.
|
|
62
|
+
{% /instructions %}
|
|
63
|
+
|
|
64
|
+
{% string-field id="founded_date" label="Founded Date" pattern="^\\d{4}(-\\d{2}(-\\d{2})?)?$" %}{% /string-field %}
|
|
65
|
+
|
|
66
|
+
{% instructions ref="founded_date" %}
|
|
67
|
+
Format: YYYY, YYYY-MM, or YYYY-MM-DD (e.g., 2010, 2010-06, 2010-06-15)
|
|
68
|
+
{% /instructions %}
|
|
69
|
+
|
|
70
|
+
{% string-field id="headquarters" label="Headquarters Location" %}{% /string-field %}
|
|
71
|
+
|
|
72
|
+
{% instructions ref="headquarters" %}
|
|
73
|
+
Format: City, State/Country (e.g., "San Francisco, California")
|
|
74
|
+
{% /instructions %}
|
|
75
|
+
|
|
76
|
+
{% string-field id="company_description" label="Company Description" multiline=true maxLength=1000 %}{% /string-field %}
|
|
77
|
+
|
|
78
|
+
{% instructions ref="company_description" %}
|
|
79
|
+
Brief description of what the company does. 100-200 words max.
|
|
80
|
+
{% /instructions %}
|
|
81
|
+
|
|
82
|
+
{% /field-group %}
|
|
83
|
+
|
|
84
|
+
{% field-group id="funding_info" title="Funding Information" %}
|
|
85
|
+
|
|
86
|
+
{% string-field id="total_funding" label="Total Funding Raised" pattern="^\\$[0-9]+(\\.[0-9]+)?(K|M|B)?$" %}{% /string-field %}
|
|
87
|
+
|
|
88
|
+
{% instructions ref="total_funding" %}
|
|
89
|
+
Format: $X.XB, $XXM, or $XXK (e.g., "$1.5B", "$50M", "$500K")
|
|
90
|
+
{% /instructions %}
|
|
91
|
+
|
|
92
|
+
{% string-field id="latest_valuation" label="Latest Valuation" pattern="^\\$[0-9]+(\\.[0-9]+)?(K|M|B)?$" %}{% /string-field %}
|
|
93
|
+
|
|
94
|
+
{% instructions ref="latest_valuation" %}
|
|
95
|
+
Format: $X.XB, $XXM, or $XXK (e.g., "$10B")
|
|
96
|
+
{% /instructions %}
|
|
97
|
+
|
|
98
|
+
{% single-select id="funding_stage" label="Funding Stage" %}
|
|
99
|
+
- [ ] Pre-seed {% #pre_seed %}
|
|
100
|
+
- [ ] Seed {% #seed %}
|
|
101
|
+
- [ ] Series A {% #series_a %}
|
|
102
|
+
- [ ] Series B {% #series_b %}
|
|
103
|
+
- [ ] Series C {% #series_c %}
|
|
104
|
+
- [ ] Series D+ {% #series_d_plus %}
|
|
105
|
+
- [ ] Public {% #public %}
|
|
106
|
+
{% /single-select %}
|
|
107
|
+
|
|
108
|
+
{% string-list id="key_investors" label="Key Investors" maxItems=10 %}{% /string-list %}
|
|
109
|
+
|
|
110
|
+
{% instructions ref="key_investors" %}
|
|
111
|
+
List notable investors (VCs, angels), one per line.
|
|
112
|
+
{% /instructions %}
|
|
113
|
+
|
|
114
|
+
{% url-list id="funding_announcements" label="Funding Announcement URLs" maxItems=5 uniqueItems=true %}{% /url-list %}
|
|
115
|
+
|
|
116
|
+
{% instructions ref="funding_announcements" %}
|
|
117
|
+
URLs to press releases or articles about funding rounds.
|
|
118
|
+
{% /instructions %}
|
|
119
|
+
|
|
120
|
+
{% /field-group %}
|
|
121
|
+
|
|
122
|
+
{% field-group id="people" title="Key People" %}
|
|
123
|
+
|
|
124
|
+
{% string-field id="ceo" label="CEO / Founder" %}{% /string-field %}
|
|
125
|
+
|
|
126
|
+
{% instructions ref="ceo" %}
|
|
127
|
+
Name of CEO or primary founder.
|
|
128
|
+
{% /instructions %}
|
|
129
|
+
|
|
130
|
+
{% url-field id="ceo_linkedin" label="CEO LinkedIn" %}{% /url-field %}
|
|
131
|
+
|
|
132
|
+
{% instructions ref="ceo_linkedin" %}
|
|
133
|
+
LinkedIn profile URL of the CEO/founder.
|
|
134
|
+
{% /instructions %}
|
|
135
|
+
|
|
136
|
+
{% string-list id="founders" label="Founders" maxItems=5 %}{% /string-list %}
|
|
137
|
+
|
|
138
|
+
{% instructions ref="founders" %}
|
|
139
|
+
List all founders, one per line.
|
|
140
|
+
{% /instructions %}
|
|
141
|
+
|
|
142
|
+
{% number-field id="employee_count" label="Employee Count" min=1 integer=true %}{% /number-field %}
|
|
143
|
+
|
|
144
|
+
{% instructions ref="employee_count" %}
|
|
145
|
+
Approximate number of employees.
|
|
146
|
+
{% /instructions %}
|
|
147
|
+
|
|
148
|
+
{% /field-group %}
|
|
149
|
+
|
|
150
|
+
{% field-group id="market_info" title="Market & Industry" %}
|
|
151
|
+
|
|
152
|
+
{% multi-select id="industry_sectors" label="Industry Sectors" minSelections=1 maxSelections=5 %}
|
|
153
|
+
- [ ] AI/ML {% #ai_ml %}
|
|
154
|
+
- [ ] FinTech {% #fintech %}
|
|
155
|
+
- [ ] HealthTech {% #healthtech %}
|
|
156
|
+
- [ ] EdTech {% #edtech %}
|
|
157
|
+
- [ ] SaaS {% #saas %}
|
|
158
|
+
- [ ] E-commerce {% #ecommerce %}
|
|
159
|
+
- [ ] Security {% #security %}
|
|
160
|
+
- [ ] Developer Tools {% #devtools %}
|
|
161
|
+
- [ ] Climate Tech {% #climatetech %}
|
|
162
|
+
- [ ] Other {% #other %}
|
|
163
|
+
{% /multi-select %}
|
|
164
|
+
|
|
165
|
+
{% string-list id="competitors" label="Competitors" maxItems=5 %}{% /string-list %}
|
|
166
|
+
|
|
167
|
+
{% instructions ref="competitors" %}
|
|
168
|
+
List main competitors, one per line.
|
|
169
|
+
{% /instructions %}
|
|
170
|
+
|
|
171
|
+
{% url-list id="competitor_urls" label="Competitor Website URLs" maxItems=5 uniqueItems=true %}{% /url-list %}
|
|
172
|
+
|
|
173
|
+
{% instructions ref="competitor_urls" %}
|
|
174
|
+
Website URLs of main competitors.
|
|
175
|
+
{% /instructions %}
|
|
176
|
+
|
|
177
|
+
{% /field-group %}
|
|
178
|
+
|
|
179
|
+
{% field-group id="press_coverage" title="Press & Coverage" %}
|
|
180
|
+
|
|
181
|
+
{% url-list id="press_articles" label="Press Coverage URLs" minItems=1 maxItems=10 uniqueItems=true %}{% /url-list %}
|
|
182
|
+
|
|
183
|
+
{% instructions ref="press_articles" %}
|
|
184
|
+
URLs to major press articles, reviews, or coverage about the company.
|
|
185
|
+
{% /instructions %}
|
|
186
|
+
|
|
187
|
+
{% url-field id="crunchbase_url" label="Crunchbase Profile" %}{% /url-field %}
|
|
188
|
+
|
|
189
|
+
{% instructions ref="crunchbase_url" %}
|
|
190
|
+
Crunchbase company profile URL.
|
|
191
|
+
{% /instructions %}
|
|
192
|
+
|
|
193
|
+
{% url-field id="pitchbook_url" label="PitchBook Profile" %}{% /url-field %}
|
|
194
|
+
|
|
195
|
+
{% instructions ref="pitchbook_url" %}
|
|
196
|
+
PitchBook company profile URL if available.
|
|
197
|
+
{% /instructions %}
|
|
198
|
+
|
|
199
|
+
{% /field-group %}
|
|
200
|
+
|
|
201
|
+
{% field-group id="sources_section" title="Research Sources" %}
|
|
202
|
+
|
|
203
|
+
{% url-list id="sources" label="Source URLs" minItems=1 uniqueItems=true %}{% /url-list %}
|
|
204
|
+
|
|
205
|
+
{% instructions ref="sources" %}
|
|
206
|
+
List all source URLs used for this research. Include Crunchbase, company website, and any additional sources consulted.
|
|
207
|
+
{% /instructions %}
|
|
208
|
+
|
|
209
|
+
{% /field-group %}
|
|
210
|
+
|
|
211
|
+
{% /form %}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "markform",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Agent-friendly, human-readable, editable forms stored as .form.md files",
|
|
5
5
|
"license": "AGPL-3.0-or-later",
|
|
6
6
|
"author": "Joshua Levy",
|
|
@@ -47,24 +47,12 @@
|
|
|
47
47
|
},
|
|
48
48
|
"files": [
|
|
49
49
|
"dist",
|
|
50
|
-
"examples"
|
|
50
|
+
"examples",
|
|
51
|
+
"README.md"
|
|
51
52
|
],
|
|
52
53
|
"engines": {
|
|
53
54
|
"node": ">=24"
|
|
54
55
|
},
|
|
55
|
-
"scripts": {
|
|
56
|
-
"build": "tsdown",
|
|
57
|
-
"dev": "tsdown --watch",
|
|
58
|
-
"prepare": "tsdown",
|
|
59
|
-
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
60
|
-
"test": "vitest run",
|
|
61
|
-
"test:watch": "vitest",
|
|
62
|
-
"test:unit": "vitest run tests/unit",
|
|
63
|
-
"test:golden": "vitest run tests/golden",
|
|
64
|
-
"test:coverage": "vitest run --coverage",
|
|
65
|
-
"test:coverage:html": "vitest run --coverage && open coverage/index.html",
|
|
66
|
-
"publint": "publint"
|
|
67
|
-
},
|
|
68
56
|
"dependencies": {
|
|
69
57
|
"@ai-sdk/deepseek": "^2.0.1",
|
|
70
58
|
"@ai-sdk/google": "^3.0.1",
|
|
@@ -76,6 +64,7 @@
|
|
|
76
64
|
"commander": "^13.0.0",
|
|
77
65
|
"dotenv": "^17.2.3",
|
|
78
66
|
"jiti": "^2.4.0",
|
|
67
|
+
"js-sha256": "^0.11.1",
|
|
79
68
|
"picocolors": "^1.1.0",
|
|
80
69
|
"yaml": "^2.7.0",
|
|
81
70
|
"zod": "^3.24.0"
|
|
@@ -97,5 +86,17 @@
|
|
|
97
86
|
"tsdown": "^0.16.0",
|
|
98
87
|
"typescript": "^5.0.0",
|
|
99
88
|
"vitest": "^3.0.0"
|
|
89
|
+
},
|
|
90
|
+
"scripts": {
|
|
91
|
+
"build": "tsdown",
|
|
92
|
+
"dev": "tsdown --watch",
|
|
93
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
94
|
+
"test": "vitest run",
|
|
95
|
+
"test:watch": "vitest",
|
|
96
|
+
"test:unit": "vitest run tests/unit",
|
|
97
|
+
"test:golden": "vitest run tests/golden",
|
|
98
|
+
"test:coverage": "vitest run --coverage",
|
|
99
|
+
"test:coverage:html": "vitest run --coverage && open coverage/index.html",
|
|
100
|
+
"publint": "publint"
|
|
100
101
|
}
|
|
101
|
-
}
|
|
102
|
+
}
|
package/dist/ai-sdk.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk.mjs","names":["toolset: MarkformToolSet"],"sources":["../src/integrations/ai-sdk.ts"],"sourcesContent":["/**\n * AI SDK Integration for Markform.\n *\n * Provides Vercel AI SDK compatible tools for agent-driven form filling.\n * Use createMarkformTools() to create a toolset that wraps the Markform engine.\n *\n * @example\n * ```typescript\n * import { createMarkformTools, MarkformSessionStore } from 'markform/ai-sdk';\n * import { generateText } from 'ai';\n *\n * const store = new MarkformSessionStore(parsedForm);\n * const tools = createMarkformTools({ sessionStore: store });\n *\n * const { text } = await generateText({\n * model: openai('gpt-4'),\n * prompt: 'Fill out this form...',\n * tools,\n * });\n * ```\n */\n\nimport { z } from \"zod\";\nimport type { ParsedForm, Patch, ValidatorRegistry } from \"../engine/coreTypes.js\";\nimport { inspect } from \"../engine/inspect.js\";\nimport { applyPatches } from \"../engine/apply.js\";\nimport { serialize } from \"../engine/serialize.js\";\nimport { PatchSchema } from \"../engine/coreTypes.js\";\n\n// =============================================================================\n// Session Store\n// =============================================================================\n\n/**\n * Session store for managing form state during AI interactions.\n *\n * The AI SDK tools operate on a shared form instance through this store.\n * Create one store per form-filling session.\n */\nexport class MarkformSessionStore {\n private form: ParsedForm;\n private validatorRegistry: ValidatorRegistry;\n\n constructor(form: ParsedForm, validatorRegistry?: ValidatorRegistry) {\n this.form = form;\n this.validatorRegistry = validatorRegistry ?? {};\n }\n\n /**\n * Get the current form.\n */\n getForm(): ParsedForm {\n return this.form;\n }\n\n /**\n * Get the validator registry.\n */\n getValidatorRegistry(): ValidatorRegistry {\n return this.validatorRegistry;\n }\n\n /**\n * Update the form values.\n */\n updateForm(form: ParsedForm): void {\n this.form = form;\n }\n}\n\n// =============================================================================\n// Tool Creation Options\n// =============================================================================\n\n/**\n * Options for creating Markform AI SDK tools.\n */\nexport interface CreateMarkformToolsOptions {\n /**\n * Session store managing the form state.\n */\n sessionStore: MarkformSessionStore;\n\n /**\n * Whether to include the markform_get_markdown tool.\n * Defaults to true.\n */\n includeGetMarkdown?: boolean;\n}\n\n// =============================================================================\n// Tool Types (imported from toolTypes.ts)\n// =============================================================================\n\nimport type {\n ApplyToolResult,\n ExportToolResult,\n GetMarkdownToolResult,\n InspectToolResult,\n MarkformTool,\n MarkformToolSet,\n} from \"./toolTypes.js\";\n\n// Re-export types for backwards compatibility\nexport type {\n ApplyToolResult,\n ExportToolResult,\n GetMarkdownToolResult,\n InspectToolResult,\n MarkformTool,\n MarkformToolSet,\n} from \"./toolTypes.js\";\n\n// =============================================================================\n// Zod Schemas for Tool Inputs\n// =============================================================================\n\n/**\n * Input schema for markform_inspect tool (no parameters).\n */\nconst InspectInputSchema = z\n .object({})\n .describe(\"No input parameters required. Call this tool to inspect the current form state.\");\n\n/**\n * Input schema for markform_apply tool.\n */\nconst ApplyInputSchema = z\n .object({\n patches: z\n .array(PatchSchema)\n .min(1)\n .max(20)\n .describe(\n \"Array of patches to apply to the form. Each patch sets or clears a field value. \" +\n 'Operations: set_string, set_number, set_string_list, set_single_select, set_multi_select, set_checkboxes, clear_field. ' +\n 'Example: [{ \"op\": \"set_string\", \"fieldId\": \"name\", \"value\": \"Alice\" }]'\n ),\n })\n .describe(\"Apply patches to update form field values.\");\n\n/**\n * Input schema for markform_export tool (no parameters).\n */\nconst ExportInputSchema = z\n .object({})\n .describe(\n \"No input parameters required. Call this tool to export the form schema and current values as JSON.\"\n );\n\n/**\n * Input schema for markform_get_markdown tool (no parameters).\n */\nconst GetMarkdownInputSchema = z\n .object({})\n .describe(\n \"No input parameters required. Call this tool to get the canonical Markdown representation of the current form.\"\n );\n\n// =============================================================================\n// Tool Factory\n// =============================================================================\n\n/**\n * Create Markform AI SDK tools for agent-driven form filling.\n *\n * Returns a toolset compatible with Vercel AI SDK's generateText and streamText.\n *\n * @param options - Tool creation options including session store\n * @returns MarkformToolSet containing all tools\n *\n * @example\n * ```typescript\n * import { parseForm } from 'markform';\n * import { createMarkformTools, MarkformSessionStore } from 'markform/ai-sdk';\n *\n * const form = parseForm(markdownContent);\n * const store = new MarkformSessionStore(form);\n * const tools = createMarkformTools({ sessionStore: store });\n *\n * // Use with AI SDK\n * const result = await generateText({\n * model: yourModel,\n * tools,\n * prompt: 'Fill out this form based on the user information...',\n * });\n * ```\n */\nexport function createMarkformTools(\n options: CreateMarkformToolsOptions\n): MarkformToolSet {\n const { sessionStore, includeGetMarkdown = true } = options;\n\n // markform_inspect - Get current form state with issues\n const markform_inspect: MarkformTool<\n Record<string, never>,\n InspectToolResult\n > = {\n description:\n \"Inspect the current form state. Returns structure summary, progress summary, validation issues, \" +\n \"and completion status. Use this to understand what fields need to be filled and what issues exist. \" +\n \"Issues are sorted by priority (1 = highest). Focus on 'required' severity issues first.\",\n inputSchema: InspectInputSchema,\n execute: () => {\n const form = sessionStore.getForm();\n const result = inspect(form);\n\n const requiredCount = result.issues.filter(\n (i) => i.severity === \"required\"\n ).length;\n const message = result.isComplete\n ? \"Form is complete. All required fields are filled.\"\n : `Form has ${requiredCount} required issue(s) to resolve.`;\n\n return Promise.resolve({\n success: true,\n data: result,\n message,\n });\n },\n };\n\n // markform_apply - Apply patches to update form values\n const markform_apply: MarkformTool<{ patches: Patch[] }, ApplyToolResult> = {\n description:\n \"Apply patches to update form field values. Use this after inspecting the form to set values for \" +\n \"fields that need to be filled. Patches are applied as a transaction - all succeed or all fail. \" +\n \"Returns the updated form state and any remaining issues. \" +\n \"Patch operations: set_string, set_number, set_string_list, set_single_select, set_multi_select, set_checkboxes, clear_field.\",\n inputSchema: ApplyInputSchema,\n execute: ({ patches }) => {\n const form = sessionStore.getForm();\n const result = applyPatches(form, patches);\n\n // Update the store with the modified form\n sessionStore.updateForm(form);\n\n const message =\n result.applyStatus === \"applied\"\n ? `Applied ${patches.length} patch(es). ${\n result.isComplete\n ? \"Form is now complete!\"\n : `${result.issues.filter((i) => i.severity === \"required\").length} required issue(s) remaining.`\n }`\n : `Patches rejected. Check field IDs and value types.`;\n\n return Promise.resolve({\n success: result.applyStatus === \"applied\",\n data: result,\n message,\n });\n },\n };\n\n // markform_export - Export schema and values as JSON\n const markform_export: MarkformTool<Record<string, never>, ExportToolResult> =\n {\n description:\n \"Export the form schema and current values as JSON. Use this to get a machine-readable \" +\n \"representation of the form structure and all field values. Useful for processing or analysis.\",\n inputSchema: ExportInputSchema,\n execute: () => {\n const form = sessionStore.getForm();\n\n return Promise.resolve({\n success: true,\n data: {\n schema: form.schema,\n values: form.valuesByFieldId,\n },\n message: `Exported form with ${form.schema.groups.length} group(s) and ${Object.keys(form.valuesByFieldId).length} value(s).`,\n });\n },\n };\n\n // Build the toolset\n const toolset: MarkformToolSet = {\n markform_inspect,\n markform_apply,\n markform_export,\n };\n\n // Optionally include markform_get_markdown\n if (includeGetMarkdown) {\n const markform_get_markdown: MarkformTool<\n Record<string, never>,\n GetMarkdownToolResult\n > = {\n description:\n \"Get the canonical Markdown representation of the current form. \" +\n \"Use this to see the complete form with all current values in Markform format. \" +\n \"The output is deterministic and round-trip safe.\",\n inputSchema: GetMarkdownInputSchema,\n execute: () => {\n const form = sessionStore.getForm();\n const markdown = serialize(form);\n\n return Promise.resolve({\n success: true,\n data: {\n markdown,\n },\n message: `Generated Markdown (${markdown.length} characters).`,\n });\n },\n };\n\n toolset.markform_get_markdown = markform_get_markdown;\n }\n\n return toolset;\n}\n\n// =============================================================================\n// Convenience Exports\n// =============================================================================\n\nexport { PatchSchema } from \"../engine/coreTypes.js\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,IAAa,uBAAb,MAAkC;CAChC,AAAQ;CACR,AAAQ;CAER,YAAY,MAAkB,mBAAuC;AACnE,OAAK,OAAO;AACZ,OAAK,oBAAoB,qBAAqB,EAAE;;;;;CAMlD,UAAsB;AACpB,SAAO,KAAK;;;;;CAMd,uBAA0C;AACxC,SAAO,KAAK;;;;;CAMd,WAAW,MAAwB;AACjC,OAAK,OAAO;;;;;;AAsDhB,MAAM,qBAAqB,EACxB,OAAO,EAAE,CAAC,CACV,SAAS,kFAAkF;;;;AAK9F,MAAM,mBAAmB,EACtB,OAAO,EACN,SAAS,EACN,MAAM,YAAY,CAClB,IAAI,EAAE,CACN,IAAI,GAAG,CACP,SACC,4RAGD,EACJ,CAAC,CACD,SAAS,6CAA6C;;;;AAKzD,MAAM,oBAAoB,EACvB,OAAO,EAAE,CAAC,CACV,SACC,qGACD;;;;AAKH,MAAM,yBAAyB,EAC5B,OAAO,EAAE,CAAC,CACV,SACC,iHACD;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BH,SAAgB,oBACd,SACiB;CACjB,MAAM,EAAE,cAAc,qBAAqB,SAAS;CAqFpD,MAAMA,UAA2B;EAC/B,kBAhFE;GACF,aACE;GAGF,aAAa;GACb,eAAe;IAEb,MAAM,SAAS,QADF,aAAa,SAAS,CACP;IAE5B,MAAM,gBAAgB,OAAO,OAAO,QACjC,MAAM,EAAE,aAAa,WACvB,CAAC;IACF,MAAM,UAAU,OAAO,aACnB,sDACA,YAAY,cAAc;AAE9B,WAAO,QAAQ,QAAQ;KACrB,SAAS;KACT,MAAM;KACN;KACD,CAAC;;GAEL;EA0DC,gBAvD0E;GAC1E,aACE;GAIF,aAAa;GACb,UAAU,EAAE,cAAc;IACxB,MAAM,OAAO,aAAa,SAAS;IACnC,MAAM,SAAS,aAAa,MAAM,QAAQ;AAG1C,iBAAa,WAAW,KAAK;IAE7B,MAAM,UACJ,OAAO,gBAAgB,YACnB,WAAW,QAAQ,OAAO,cACxB,OAAO,aACH,0BACA,GAAG,OAAO,OAAO,QAAQ,MAAM,EAAE,aAAa,WAAW,CAAC,OAAO,mCAEvE;AAEN,WAAO,QAAQ,QAAQ;KACrB,SAAS,OAAO,gBAAgB;KAChC,MAAM;KACN;KACD,CAAC;;GAEL;EA2BC,iBAvBA;GACE,aACE;GAEF,aAAa;GACb,eAAe;IACb,MAAM,OAAO,aAAa,SAAS;AAEnC,WAAO,QAAQ,QAAQ;KACrB,SAAS;KACT,MAAM;MACJ,QAAQ,KAAK;MACb,QAAQ,KAAK;MACd;KACD,SAAS,sBAAsB,KAAK,OAAO,OAAO,OAAO,gBAAgB,OAAO,KAAK,KAAK,gBAAgB,CAAC,OAAO;KACnH,CAAC;;GAEL;EAOF;AAGD,KAAI,mBAwBF,SAAQ,wBApBJ;EACF,aACE;EAGF,aAAa;EACb,eAAe;GAEb,MAAM,WAAW,UADJ,aAAa,SAAS,CACH;AAEhC,UAAO,QAAQ,QAAQ;IACrB,SAAS;IACT,MAAM,EACJ,UACD;IACD,SAAS,uBAAuB,SAAS,OAAO;IACjD,CAAC;;EAEL;AAKH,QAAO"}
|