@open-agreements/open-agreements 0.2.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 (358) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +359 -0
  3. package/bin/open-agreements.js +4 -0
  4. package/content/external/LICENSE +27 -0
  5. package/content/external/README.md +38 -0
  6. package/content/external/yc-safe-discount/README.md +16 -0
  7. package/content/external/yc-safe-discount/clean.json +4 -0
  8. package/content/external/yc-safe-discount/metadata.yaml +67 -0
  9. package/content/external/yc-safe-discount/replacements.json +13 -0
  10. package/content/external/yc-safe-discount/template.docx +0 -0
  11. package/content/external/yc-safe-mfn/README.md +16 -0
  12. package/content/external/yc-safe-mfn/clean.json +4 -0
  13. package/content/external/yc-safe-mfn/metadata.yaml +64 -0
  14. package/content/external/yc-safe-mfn/replacements.json +12 -0
  15. package/content/external/yc-safe-mfn/template.docx +0 -0
  16. package/content/external/yc-safe-pro-rata-side-letter/README.md +16 -0
  17. package/content/external/yc-safe-pro-rata-side-letter/clean.json +4 -0
  18. package/content/external/yc-safe-pro-rata-side-letter/metadata.yaml +49 -0
  19. package/content/external/yc-safe-pro-rata-side-letter/replacements.json +9 -0
  20. package/content/external/yc-safe-pro-rata-side-letter/template.docx +0 -0
  21. package/content/external/yc-safe-valuation-cap/README.md +16 -0
  22. package/content/external/yc-safe-valuation-cap/clean.json +4 -0
  23. package/content/external/yc-safe-valuation-cap/metadata.yaml +64 -0
  24. package/content/external/yc-safe-valuation-cap/replacements.json +12 -0
  25. package/content/external/yc-safe-valuation-cap/template.docx +0 -0
  26. package/content/recipes/nvca-certificate-of-incorporation/clean.json +8 -0
  27. package/content/recipes/nvca-certificate-of-incorporation/metadata.yaml +43 -0
  28. package/content/recipes/nvca-certificate-of-incorporation/replacements.json +9 -0
  29. package/content/recipes/nvca-indemnification-agreement/clean.json +17 -0
  30. package/content/recipes/nvca-indemnification-agreement/metadata.yaml +79 -0
  31. package/content/recipes/nvca-indemnification-agreement/replacements.json +17 -0
  32. package/content/recipes/nvca-investors-rights-agreement/clean.json +12 -0
  33. package/content/recipes/nvca-investors-rights-agreement/metadata.yaml +71 -0
  34. package/content/recipes/nvca-investors-rights-agreement/replacements.json +18 -0
  35. package/content/recipes/nvca-management-rights-letter/clean.json +7 -0
  36. package/content/recipes/nvca-management-rights-letter/metadata.yaml +47 -0
  37. package/content/recipes/nvca-management-rights-letter/replacements.json +11 -0
  38. package/content/recipes/nvca-rofr-co-sale-agreement/clean.json +7 -0
  39. package/content/recipes/nvca-rofr-co-sale-agreement/metadata.yaml +76 -0
  40. package/content/recipes/nvca-rofr-co-sale-agreement/replacements.json +17 -0
  41. package/content/recipes/nvca-stock-purchase-agreement/clean.json +13 -0
  42. package/content/recipes/nvca-stock-purchase-agreement/computed.json +103 -0
  43. package/content/recipes/nvca-stock-purchase-agreement/metadata.yaml +138 -0
  44. package/content/recipes/nvca-stock-purchase-agreement/normalize.json +83 -0
  45. package/content/recipes/nvca-stock-purchase-agreement/replacements.json +41 -0
  46. package/content/recipes/nvca-voting-agreement/README.md +53 -0
  47. package/content/recipes/nvca-voting-agreement/clean.json +7 -0
  48. package/content/recipes/nvca-voting-agreement/metadata.yaml +66 -0
  49. package/content/recipes/nvca-voting-agreement/replacements.json +18 -0
  50. package/content/templates/bonterms-mutual-nda/README.md +27 -0
  51. package/content/templates/bonterms-mutual-nda/metadata.yaml +58 -0
  52. package/content/templates/bonterms-mutual-nda/source.json +18 -0
  53. package/content/templates/bonterms-mutual-nda/template.docx +0 -0
  54. package/content/templates/bonterms-professional-services-agreement/README.md +24 -0
  55. package/content/templates/bonterms-professional-services-agreement/metadata.yaml +45 -0
  56. package/content/templates/bonterms-professional-services-agreement/selections.json +12 -0
  57. package/content/templates/bonterms-professional-services-agreement/source.json +18 -0
  58. package/content/templates/bonterms-professional-services-agreement/template.docx +0 -0
  59. package/content/templates/closing-checklist/metadata.yaml +39 -0
  60. package/content/templates/closing-checklist/template.docx +0 -0
  61. package/content/templates/common-paper-ai-addendum/README.md +23 -0
  62. package/content/templates/common-paper-ai-addendum/metadata.yaml +31 -0
  63. package/content/templates/common-paper-ai-addendum/template.docx +0 -0
  64. package/content/templates/common-paper-ai-addendum-in-app/README.md +21 -0
  65. package/content/templates/common-paper-ai-addendum-in-app/metadata.yaml +21 -0
  66. package/content/templates/common-paper-ai-addendum-in-app/template.docx +0 -0
  67. package/content/templates/common-paper-amendment/README.md +27 -0
  68. package/content/templates/common-paper-amendment/metadata.yaml +53 -0
  69. package/content/templates/common-paper-amendment/template.docx +0 -0
  70. package/content/templates/common-paper-business-associate-agreement/README.md +29 -0
  71. package/content/templates/common-paper-business-associate-agreement/metadata.yaml +56 -0
  72. package/content/templates/common-paper-business-associate-agreement/replacements.json +3 -0
  73. package/content/templates/common-paper-business-associate-agreement/template.docx +0 -0
  74. package/content/templates/common-paper-cloud-service-agreement/README.md +32 -0
  75. package/content/templates/common-paper-cloud-service-agreement/metadata.yaml +354 -0
  76. package/content/templates/common-paper-cloud-service-agreement/template.docx +0 -0
  77. package/content/templates/common-paper-csa-click-through/README.md +33 -0
  78. package/content/templates/common-paper-csa-click-through/metadata.yaml +73 -0
  79. package/content/templates/common-paper-csa-click-through/template.docx +0 -0
  80. package/content/templates/common-paper-csa-with-ai/README.md +49 -0
  81. package/content/templates/common-paper-csa-with-ai/metadata.yaml +143 -0
  82. package/content/templates/common-paper-csa-with-ai/replacements.json +7 -0
  83. package/content/templates/common-paper-csa-with-ai/template.docx +0 -0
  84. package/content/templates/common-paper-csa-with-sla/README.md +53 -0
  85. package/content/templates/common-paper-csa-with-sla/metadata.yaml +159 -0
  86. package/content/templates/common-paper-csa-with-sla/replacements.json +7 -0
  87. package/content/templates/common-paper-csa-with-sla/template.docx +0 -0
  88. package/content/templates/common-paper-csa-without-sla/README.md +47 -0
  89. package/content/templates/common-paper-csa-without-sla/metadata.yaml +135 -0
  90. package/content/templates/common-paper-csa-without-sla/replacements.json +7 -0
  91. package/content/templates/common-paper-csa-without-sla/template.docx +0 -0
  92. package/content/templates/common-paper-data-processing-agreement/README.md +46 -0
  93. package/content/templates/common-paper-data-processing-agreement/metadata.yaml +130 -0
  94. package/content/templates/common-paper-data-processing-agreement/replacements.json +3 -0
  95. package/content/templates/common-paper-data-processing-agreement/template.docx +0 -0
  96. package/content/templates/common-paper-design-partner-agreement/README.md +29 -0
  97. package/content/templates/common-paper-design-partner-agreement/metadata.yaml +59 -0
  98. package/content/templates/common-paper-design-partner-agreement/replacements.json +4 -0
  99. package/content/templates/common-paper-design-partner-agreement/template.docx +0 -0
  100. package/content/templates/common-paper-independent-contractor-agreement/README.md +27 -0
  101. package/content/templates/common-paper-independent-contractor-agreement/metadata.yaml +55 -0
  102. package/content/templates/common-paper-independent-contractor-agreement/template.docx +0 -0
  103. package/content/templates/common-paper-letter-of-intent/README.md +25 -0
  104. package/content/templates/common-paper-letter-of-intent/metadata.yaml +42 -0
  105. package/content/templates/common-paper-letter-of-intent/template.docx +0 -0
  106. package/content/templates/common-paper-mutual-nda/README.md +29 -0
  107. package/content/templates/common-paper-mutual-nda/metadata.yaml +59 -0
  108. package/content/templates/common-paper-mutual-nda/selections.json +38 -0
  109. package/content/templates/common-paper-mutual-nda/template.docx +0 -0
  110. package/content/templates/common-paper-one-way-nda/README.md +27 -0
  111. package/content/templates/common-paper-one-way-nda/metadata.yaml +59 -0
  112. package/content/templates/common-paper-one-way-nda/template.docx +0 -0
  113. package/content/templates/common-paper-order-form/README.md +36 -0
  114. package/content/templates/common-paper-order-form/metadata.yaml +87 -0
  115. package/content/templates/common-paper-order-form/replacements.json +5 -0
  116. package/content/templates/common-paper-order-form/template.docx +0 -0
  117. package/content/templates/common-paper-order-form-with-sla/README.md +42 -0
  118. package/content/templates/common-paper-order-form-with-sla/metadata.yaml +111 -0
  119. package/content/templates/common-paper-order-form-with-sla/replacements.json +5 -0
  120. package/content/templates/common-paper-order-form-with-sla/template.docx +0 -0
  121. package/content/templates/common-paper-partnership-agreement/README.md +34 -0
  122. package/content/templates/common-paper-partnership-agreement/metadata.yaml +78 -0
  123. package/content/templates/common-paper-partnership-agreement/replacements.json +7 -0
  124. package/content/templates/common-paper-partnership-agreement/template.docx +0 -0
  125. package/content/templates/common-paper-pilot-agreement/README.md +34 -0
  126. package/content/templates/common-paper-pilot-agreement/metadata.yaml +100 -0
  127. package/content/templates/common-paper-pilot-agreement/replacements.json +4 -0
  128. package/content/templates/common-paper-pilot-agreement/selections.json +37 -0
  129. package/content/templates/common-paper-pilot-agreement/template.docx +0 -0
  130. package/content/templates/common-paper-professional-services-agreement/README.md +44 -0
  131. package/content/templates/common-paper-professional-services-agreement/metadata.yaml +124 -0
  132. package/content/templates/common-paper-professional-services-agreement/replacements.json +8 -0
  133. package/content/templates/common-paper-professional-services-agreement/template.docx +0 -0
  134. package/content/templates/common-paper-software-license-agreement/README.md +18 -0
  135. package/content/templates/common-paper-software-license-agreement/metadata.yaml +13 -0
  136. package/content/templates/common-paper-software-license-agreement/template.docx +0 -0
  137. package/content/templates/common-paper-statement-of-work/README.md +32 -0
  138. package/content/templates/common-paper-statement-of-work/metadata.yaml +71 -0
  139. package/content/templates/common-paper-statement-of-work/replacements.json +3 -0
  140. package/content/templates/common-paper-statement-of-work/template.docx +0 -0
  141. package/content/templates/common-paper-term-sheet/README.md +22 -0
  142. package/content/templates/common-paper-term-sheet/metadata.yaml +28 -0
  143. package/content/templates/common-paper-term-sheet/template.docx +0 -0
  144. package/content/templates/openagreements-employee-ip-inventions-assignment/README.md +31 -0
  145. package/content/templates/openagreements-employee-ip-inventions-assignment/metadata.yaml +71 -0
  146. package/content/templates/openagreements-employee-ip-inventions-assignment/template.docx +0 -0
  147. package/content/templates/openagreements-employee-ip-inventions-assignment/template.md +80 -0
  148. package/content/templates/openagreements-employment-confidentiality-acknowledgement/README.md +30 -0
  149. package/content/templates/openagreements-employment-confidentiality-acknowledgement/metadata.yaml +60 -0
  150. package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.docx +0 -0
  151. package/content/templates/openagreements-employment-confidentiality-acknowledgement/template.md +51 -0
  152. package/content/templates/openagreements-employment-offer-letter/README.md +33 -0
  153. package/content/templates/openagreements-employment-offer-letter/metadata.yaml +75 -0
  154. package/content/templates/openagreements-employment-offer-letter/template.docx +0 -0
  155. package/content/templates/openagreements-employment-offer-letter/template.md +90 -0
  156. package/content/templates/working-group-list/metadata.yaml +22 -0
  157. package/content/templates/working-group-list/template.docx +0 -0
  158. package/dist/cli/index.d.ts +4 -0
  159. package/dist/cli/index.d.ts.map +1 -0
  160. package/dist/cli/index.js +199 -0
  161. package/dist/cli/index.js.map +1 -0
  162. package/dist/commands/checklist.d.ts +22 -0
  163. package/dist/commands/checklist.d.ts.map +1 -0
  164. package/dist/commands/checklist.js +222 -0
  165. package/dist/commands/checklist.js.map +1 -0
  166. package/dist/commands/fill.d.ts +18 -0
  167. package/dist/commands/fill.d.ts.map +1 -0
  168. package/dist/commands/fill.js +119 -0
  169. package/dist/commands/fill.js.map +1 -0
  170. package/dist/commands/list.d.ts +7 -0
  171. package/dist/commands/list.d.ts.map +1 -0
  172. package/dist/commands/list.js +247 -0
  173. package/dist/commands/list.js.map +1 -0
  174. package/dist/commands/recipe.d.ts +24 -0
  175. package/dist/commands/recipe.d.ts.map +1 -0
  176. package/dist/commands/recipe.js +96 -0
  177. package/dist/commands/recipe.js.map +1 -0
  178. package/dist/commands/scan.d.ts +28 -0
  179. package/dist/commands/scan.d.ts.map +1 -0
  180. package/dist/commands/scan.js +138 -0
  181. package/dist/commands/scan.js.map +1 -0
  182. package/dist/commands/validate.d.ts +6 -0
  183. package/dist/commands/validate.d.ts.map +1 -0
  184. package/dist/commands/validate.js +158 -0
  185. package/dist/commands/validate.js.map +1 -0
  186. package/dist/core/checklist/index.d.ts +38 -0
  187. package/dist/core/checklist/index.d.ts.map +1 -0
  188. package/dist/core/checklist/index.js +229 -0
  189. package/dist/core/checklist/index.js.map +1 -0
  190. package/dist/core/checklist/patch-apply.d.ts +65 -0
  191. package/dist/core/checklist/patch-apply.d.ts.map +1 -0
  192. package/dist/core/checklist/patch-apply.js +274 -0
  193. package/dist/core/checklist/patch-apply.js.map +1 -0
  194. package/dist/core/checklist/patch-schemas.d.ts +86 -0
  195. package/dist/core/checklist/patch-schemas.d.ts.map +1 -0
  196. package/dist/core/checklist/patch-schemas.js +89 -0
  197. package/dist/core/checklist/patch-schemas.js.map +1 -0
  198. package/dist/core/checklist/patch-validator.d.ts +76 -0
  199. package/dist/core/checklist/patch-validator.d.ts.map +1 -0
  200. package/dist/core/checklist/patch-validator.js +404 -0
  201. package/dist/core/checklist/patch-validator.js.map +1 -0
  202. package/dist/core/checklist/schemas.d.ts +270 -0
  203. package/dist/core/checklist/schemas.d.ts.map +1 -0
  204. package/dist/core/checklist/schemas.js +229 -0
  205. package/dist/core/checklist/schemas.js.map +1 -0
  206. package/dist/core/checklist/test-utils.d.ts +7 -0
  207. package/dist/core/checklist/test-utils.d.ts.map +1 -0
  208. package/dist/core/checklist/test-utils.js +13 -0
  209. package/dist/core/checklist/test-utils.js.map +1 -0
  210. package/dist/core/command-generation/adapters/claude.d.ts +11 -0
  211. package/dist/core/command-generation/adapters/claude.d.ts.map +1 -0
  212. package/dist/core/command-generation/adapters/claude.js +91 -0
  213. package/dist/core/command-generation/adapters/claude.js.map +1 -0
  214. package/dist/core/command-generation/types.d.ts +14 -0
  215. package/dist/core/command-generation/types.d.ts.map +1 -0
  216. package/dist/core/command-generation/types.js +2 -0
  217. package/dist/core/command-generation/types.js.map +1 -0
  218. package/dist/core/employment/jurisdiction-rules.d.ts +20 -0
  219. package/dist/core/employment/jurisdiction-rules.d.ts.map +1 -0
  220. package/dist/core/employment/jurisdiction-rules.js +57 -0
  221. package/dist/core/employment/jurisdiction-rules.js.map +1 -0
  222. package/dist/core/employment/memo.d.ts +57 -0
  223. package/dist/core/employment/memo.d.ts.map +1 -0
  224. package/dist/core/employment/memo.js +589 -0
  225. package/dist/core/employment/memo.js.map +1 -0
  226. package/dist/core/engine.d.ts +13 -0
  227. package/dist/core/engine.d.ts.map +1 -0
  228. package/dist/core/engine.js +182 -0
  229. package/dist/core/engine.js.map +1 -0
  230. package/dist/core/external/index.d.ts +8 -0
  231. package/dist/core/external/index.d.ts.map +1 -0
  232. package/dist/core/external/index.js +50 -0
  233. package/dist/core/external/index.js.map +1 -0
  234. package/dist/core/external/types.d.ts +18 -0
  235. package/dist/core/external/types.d.ts.map +1 -0
  236. package/dist/core/external/types.js +2 -0
  237. package/dist/core/external/types.js.map +1 -0
  238. package/dist/core/fill-pipeline.d.ts +64 -0
  239. package/dist/core/fill-pipeline.d.ts.map +1 -0
  240. package/dist/core/fill-pipeline.js +350 -0
  241. package/dist/core/fill-pipeline.js.map +1 -0
  242. package/dist/core/fill-utils.d.ts +39 -0
  243. package/dist/core/fill-utils.d.ts.map +1 -0
  244. package/dist/core/fill-utils.js +127 -0
  245. package/dist/core/fill-utils.js.map +1 -0
  246. package/dist/core/metadata.d.ts +194 -0
  247. package/dist/core/metadata.d.ts.map +1 -0
  248. package/dist/core/metadata.js +197 -0
  249. package/dist/core/metadata.js.map +1 -0
  250. package/dist/core/recipe/bracket-normalizer.d.ts +46 -0
  251. package/dist/core/recipe/bracket-normalizer.d.ts.map +1 -0
  252. package/dist/core/recipe/bracket-normalizer.js +354 -0
  253. package/dist/core/recipe/bracket-normalizer.js.map +1 -0
  254. package/dist/core/recipe/cleaner.d.ts +27 -0
  255. package/dist/core/recipe/cleaner.d.ts.map +1 -0
  256. package/dist/core/recipe/cleaner.js +345 -0
  257. package/dist/core/recipe/cleaner.js.map +1 -0
  258. package/dist/core/recipe/computed.d.ts +136 -0
  259. package/dist/core/recipe/computed.d.ts.map +1 -0
  260. package/dist/core/recipe/computed.js +225 -0
  261. package/dist/core/recipe/computed.js.map +1 -0
  262. package/dist/core/recipe/downloader.d.ts +8 -0
  263. package/dist/core/recipe/downloader.d.ts.map +1 -0
  264. package/dist/core/recipe/downloader.js +58 -0
  265. package/dist/core/recipe/downloader.js.map +1 -0
  266. package/dist/core/recipe/index.d.ts +17 -0
  267. package/dist/core/recipe/index.d.ts.map +1 -0
  268. package/dist/core/recipe/index.js +90 -0
  269. package/dist/core/recipe/index.js.map +1 -0
  270. package/dist/core/recipe/ooxml-parts.d.ts +21 -0
  271. package/dist/core/recipe/ooxml-parts.d.ts.map +1 -0
  272. package/dist/core/recipe/ooxml-parts.js +33 -0
  273. package/dist/core/recipe/ooxml-parts.js.map +1 -0
  274. package/dist/core/recipe/patcher.d.ts +34 -0
  275. package/dist/core/recipe/patcher.d.ts.map +1 -0
  276. package/dist/core/recipe/patcher.js +423 -0
  277. package/dist/core/recipe/patcher.js.map +1 -0
  278. package/dist/core/recipe/replacement-keys.d.ts +33 -0
  279. package/dist/core/recipe/replacement-keys.d.ts.map +1 -0
  280. package/dist/core/recipe/replacement-keys.js +53 -0
  281. package/dist/core/recipe/replacement-keys.js.map +1 -0
  282. package/dist/core/recipe/source-drift.d.ts +33 -0
  283. package/dist/core/recipe/source-drift.d.ts.map +1 -0
  284. package/dist/core/recipe/source-drift.js +113 -0
  285. package/dist/core/recipe/source-drift.js.map +1 -0
  286. package/dist/core/recipe/types.d.ts +33 -0
  287. package/dist/core/recipe/types.d.ts.map +1 -0
  288. package/dist/core/recipe/types.js +2 -0
  289. package/dist/core/recipe/types.js.map +1 -0
  290. package/dist/core/recipe/verifier.d.ts +24 -0
  291. package/dist/core/recipe/verifier.d.ts.map +1 -0
  292. package/dist/core/recipe/verifier.js +158 -0
  293. package/dist/core/recipe/verifier.js.map +1 -0
  294. package/dist/core/selector.d.ts +41 -0
  295. package/dist/core/selector.d.ts.map +1 -0
  296. package/dist/core/selector.js +323 -0
  297. package/dist/core/selector.js.map +1 -0
  298. package/dist/core/unified-pipeline.d.ts +53 -0
  299. package/dist/core/unified-pipeline.d.ts.map +1 -0
  300. package/dist/core/unified-pipeline.js +107 -0
  301. package/dist/core/unified-pipeline.js.map +1 -0
  302. package/dist/core/validation/external.d.ts +16 -0
  303. package/dist/core/validation/external.d.ts.map +1 -0
  304. package/dist/core/validation/external.js +114 -0
  305. package/dist/core/validation/external.js.map +1 -0
  306. package/dist/core/validation/license.d.ts +15 -0
  307. package/dist/core/validation/license.d.ts.map +1 -0
  308. package/dist/core/validation/license.js +30 -0
  309. package/dist/core/validation/license.js.map +1 -0
  310. package/dist/core/validation/output.d.ts +12 -0
  311. package/dist/core/validation/output.d.ts.map +1 -0
  312. package/dist/core/validation/output.js +47 -0
  313. package/dist/core/validation/output.js.map +1 -0
  314. package/dist/core/validation/recipe.d.ts +19 -0
  315. package/dist/core/validation/recipe.d.ts.map +1 -0
  316. package/dist/core/validation/recipe.js +159 -0
  317. package/dist/core/validation/recipe.js.map +1 -0
  318. package/dist/core/validation/scan-metadata.d.ts +21 -0
  319. package/dist/core/validation/scan-metadata.d.ts.map +1 -0
  320. package/dist/core/validation/scan-metadata.js +70 -0
  321. package/dist/core/validation/scan-metadata.js.map +1 -0
  322. package/dist/core/validation/template.d.ts +11 -0
  323. package/dist/core/validation/template.d.ts.map +1 -0
  324. package/dist/core/validation/template.js +248 -0
  325. package/dist/core/validation/template.js.map +1 -0
  326. package/dist/index.d.ts +16 -0
  327. package/dist/index.d.ts.map +1 -0
  328. package/dist/index.js +23 -0
  329. package/dist/index.js.map +1 -0
  330. package/dist/utils/paths.d.ts +43 -0
  331. package/dist/utils/paths.d.ts.map +1 -0
  332. package/dist/utils/paths.js +149 -0
  333. package/dist/utils/paths.js.map +1 -0
  334. package/package.json +148 -0
  335. package/skills/cloud-service-agreement/CONNECTORS.md +19 -0
  336. package/skills/cloud-service-agreement/SKILL.md +172 -0
  337. package/skills/data-privacy-agreement/CONNECTORS.md +19 -0
  338. package/skills/data-privacy-agreement/SKILL.md +158 -0
  339. package/skills/delaware-franchise-tax/CONNECTORS.md +16 -0
  340. package/skills/delaware-franchise-tax/SKILL.md +206 -0
  341. package/skills/delaware-franchise-tax/reference/ecorp-portal-playwright-notes.md +136 -0
  342. package/skills/delaware-franchise-tax/reference/faq.md +101 -0
  343. package/skills/delaware-franchise-tax/reference/filing-instructions.md +111 -0
  344. package/skills/delaware-franchise-tax/reference/tax-calculation.md +167 -0
  345. package/skills/employment-contract/CONNECTORS.md +19 -0
  346. package/skills/employment-contract/SKILL.md +157 -0
  347. package/skills/nda/CONNECTORS.md +19 -0
  348. package/skills/nda/SKILL.md +153 -0
  349. package/skills/open-agreements/CONNECTORS.md +19 -0
  350. package/skills/open-agreements/SKILL.md +182 -0
  351. package/skills/safe/CONNECTORS.md +19 -0
  352. package/skills/safe/SKILL.md +161 -0
  353. package/skills/services-agreement/CONNECTORS.md +19 -0
  354. package/skills/services-agreement/SKILL.md +156 -0
  355. package/skills/unit-test-philosophy/SKILL.md +113 -0
  356. package/skills/unit-test-philosophy/references/allure-test-spec-writing-guide.md +164 -0
  357. package/skills/venture-financing/CONNECTORS.md +19 -0
  358. package/skills/venture-financing/SKILL.md +169 -0
@@ -0,0 +1,247 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { loadMetadata, loadRecipeMetadata, loadExternalMetadata } from '../core/metadata.js';
4
+ import { listExternalEntries, listRecipeEntries, listTemplateEntries } from '../utils/paths.js';
5
+ const pkgPath = fileURLToPath(new URL('../../package.json', import.meta.url));
6
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
7
+ function categoryFromId(id) {
8
+ if (id.includes('employment') || id.includes('employee-ip-inventions')) {
9
+ return 'employment';
10
+ }
11
+ return 'general';
12
+ }
13
+ /** Extract a human-friendly source name from a URL */
14
+ function sourceName(url) {
15
+ try {
16
+ const parsed = new URL(url);
17
+ const host = parsed.hostname.replace(/^www\./, '');
18
+ const pathname = parsed.pathname;
19
+ if (host === 'github.com' && pathname.startsWith('/open-agreements/')) {
20
+ return 'OpenAgreements';
21
+ }
22
+ if (host === 'github.com' && pathname.startsWith('/papertrail/legal-docs')) {
23
+ return 'Papertrail';
24
+ }
25
+ if (host === 'github.com' && pathname.startsWith('/docusign/')) {
26
+ return 'DocuSign';
27
+ }
28
+ const map = {
29
+ 'commonpaper.com': 'Common Paper',
30
+ 'bonterms.com': 'Bonterms',
31
+ 'ycombinator.com': 'Y Combinator',
32
+ 'bookface-static.ycombinator.com': 'Y Combinator',
33
+ 'nvca.org': 'NVCA',
34
+ 'openagreements.ai': 'OpenAgreements',
35
+ };
36
+ return map[host] ?? host;
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ export function runList(opts = {}) {
43
+ if (opts.json || opts.jsonStrict) {
44
+ runListJson(opts);
45
+ return;
46
+ }
47
+ listAgreementsWithOptions(opts);
48
+ }
49
+ function mapFields(fields, requiredFields) {
50
+ const required = new Set(requiredFields);
51
+ return fields.map((f) => ({
52
+ name: f.name,
53
+ type: f.type,
54
+ required: required.has(f.name),
55
+ section: f.section ?? null,
56
+ description: f.description,
57
+ default: f.default ?? null,
58
+ }));
59
+ }
60
+ function runListJson(opts) {
61
+ const results = [];
62
+ const errors = [];
63
+ const templatesOnly = opts.templatesOnly === true;
64
+ // Templates
65
+ for (const entry of listTemplateEntries()) {
66
+ const id = entry.id;
67
+ const dir = entry.dir;
68
+ try {
69
+ const meta = loadMetadata(dir);
70
+ results.push({
71
+ name: id,
72
+ category: categoryFromId(id),
73
+ description: meta.description ?? meta.name,
74
+ license: meta.license,
75
+ source_url: meta.source_url,
76
+ source: sourceName(meta.source_url),
77
+ attribution_text: meta.attribution_text,
78
+ fields: mapFields(meta.fields, meta.required_fields),
79
+ });
80
+ }
81
+ catch (err) {
82
+ errors.push(`template ${id}: ${err instanceof Error ? err.message : String(err)}`);
83
+ }
84
+ }
85
+ if (!templatesOnly) {
86
+ // External templates
87
+ for (const entry of listExternalEntries()) {
88
+ const id = entry.id;
89
+ const dir = entry.dir;
90
+ try {
91
+ const meta = loadExternalMetadata(dir);
92
+ results.push({
93
+ name: id,
94
+ category: categoryFromId(id),
95
+ description: meta.description ?? meta.name,
96
+ license: meta.license,
97
+ source_url: meta.source_url,
98
+ source: sourceName(meta.source_url),
99
+ attribution_text: meta.attribution_text,
100
+ fields: mapFields(meta.fields, meta.required_fields),
101
+ });
102
+ }
103
+ catch (err) {
104
+ errors.push(`external ${id}: ${err instanceof Error ? err.message : String(err)}`);
105
+ }
106
+ }
107
+ // Recipes
108
+ for (const entry of listRecipeEntries()) {
109
+ const id = entry.id;
110
+ const dir = entry.dir;
111
+ try {
112
+ const meta = loadRecipeMetadata(dir);
113
+ results.push({
114
+ name: id,
115
+ category: categoryFromId(id),
116
+ description: meta.description ?? meta.name,
117
+ license_note: meta.license_note,
118
+ source_url: meta.source_url,
119
+ source: sourceName(meta.source_url),
120
+ source_version: meta.source_version,
121
+ optional: meta.optional,
122
+ fields: mapFields(meta.fields, meta.required_fields),
123
+ });
124
+ }
125
+ catch (err) {
126
+ errors.push(`recipe ${id}: ${err instanceof Error ? err.message : String(err)}`);
127
+ }
128
+ }
129
+ }
130
+ results.sort((a, b) => a.name.localeCompare(b.name));
131
+ if (opts.jsonStrict && errors.length > 0) {
132
+ for (const msg of errors) {
133
+ console.error(`error: ${msg}`);
134
+ }
135
+ process.exit(1);
136
+ }
137
+ const envelope = {
138
+ schema_version: 1,
139
+ cli_version: pkg.version,
140
+ items: results,
141
+ };
142
+ console.log(JSON.stringify(envelope, null, 2));
143
+ }
144
+ function listAgreementsWithOptions(opts) {
145
+ const rows = [];
146
+ const templatesOnly = opts.templatesOnly === true;
147
+ for (const entry of listTemplateEntries()) {
148
+ const id = entry.id;
149
+ const dir = entry.dir;
150
+ try {
151
+ const meta = loadMetadata(dir);
152
+ const required = meta.required_fields.length;
153
+ rows.push({
154
+ id,
155
+ category: categoryFromId(id),
156
+ license: meta.license,
157
+ required,
158
+ total: meta.fields.length,
159
+ source: sourceName(meta.source_url) || '—',
160
+ sourceUrl: meta.source_url,
161
+ });
162
+ }
163
+ catch {
164
+ rows.push({
165
+ id,
166
+ category: categoryFromId(id),
167
+ license: 'ERROR',
168
+ required: 0,
169
+ total: 0,
170
+ source: '—',
171
+ sourceUrl: 'Could not load metadata',
172
+ });
173
+ }
174
+ }
175
+ if (!templatesOnly) {
176
+ for (const entry of listExternalEntries()) {
177
+ const id = entry.id;
178
+ const dir = entry.dir;
179
+ try {
180
+ const meta = loadExternalMetadata(dir);
181
+ const required = meta.required_fields.length;
182
+ rows.push({
183
+ id,
184
+ category: categoryFromId(id),
185
+ license: meta.license,
186
+ required,
187
+ total: meta.fields.length,
188
+ source: sourceName(meta.source_url) || '—',
189
+ sourceUrl: meta.source_url,
190
+ });
191
+ }
192
+ catch {
193
+ rows.push({
194
+ id,
195
+ category: categoryFromId(id),
196
+ license: 'ERROR',
197
+ required: 0,
198
+ total: 0,
199
+ source: '—',
200
+ sourceUrl: 'Could not load metadata',
201
+ });
202
+ }
203
+ }
204
+ for (const entry of listRecipeEntries()) {
205
+ const id = entry.id;
206
+ const dir = entry.dir;
207
+ try {
208
+ const meta = loadRecipeMetadata(dir);
209
+ const required = meta.required_fields.length;
210
+ const license = meta.optional ? 'recipe*' : 'recipe';
211
+ rows.push({
212
+ id,
213
+ category: categoryFromId(id),
214
+ license,
215
+ required,
216
+ total: meta.fields.length,
217
+ source: sourceName(meta.source_url) || '—',
218
+ sourceUrl: meta.source_url,
219
+ });
220
+ }
221
+ catch {
222
+ rows.push({
223
+ id,
224
+ category: categoryFromId(id),
225
+ license: 'ERROR',
226
+ required: 0,
227
+ total: 0,
228
+ source: '—',
229
+ sourceUrl: 'Could not load metadata',
230
+ });
231
+ }
232
+ }
233
+ }
234
+ if (rows.length === 0) {
235
+ console.log('No agreements found.');
236
+ return;
237
+ }
238
+ rows.sort((a, b) => a.id.localeCompare(b.id));
239
+ console.log(`\n${'Agreement'.padEnd(40)} ${'Category'.padEnd(12)} ${'License'.padEnd(14)} ${'Fields'.padEnd(8)} ${'Source'.padEnd(16)} URL`);
240
+ console.log('─'.repeat(120));
241
+ for (const row of rows) {
242
+ const fields = row.license === 'ERROR' ? '—' : `${row.required}/${row.total}`;
243
+ console.log(`${row.id.padEnd(40)} ${row.category.padEnd(12)} ${row.license.padEnd(14)} ${fields.padEnd(8)} ${row.source.padEnd(16)} ${row.sourceUrl}`);
244
+ }
245
+ console.log('');
246
+ }
247
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface RecipeRunArgs {
2
+ recipeId: string;
3
+ input?: string;
4
+ output?: string;
5
+ data?: string;
6
+ keepIntermediate?: boolean;
7
+ computedOut?: string;
8
+ normalizeBrackets?: boolean;
9
+ }
10
+ export declare function runRecipeCommand(args: RecipeRunArgs): Promise<void>;
11
+ export interface RecipeCleanArgs {
12
+ input: string;
13
+ output: string;
14
+ recipe: string;
15
+ extractGuidance?: string;
16
+ }
17
+ export declare function runRecipeClean(args: RecipeCleanArgs): Promise<void>;
18
+ export interface RecipePatchArgs {
19
+ input: string;
20
+ output: string;
21
+ recipe: string;
22
+ }
23
+ export declare function runRecipePatch(args: RecipePatchArgs): Promise<void>;
24
+ //# sourceMappingURL=recipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/commands/recipe.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCzE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzE;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAYzE"}
@@ -0,0 +1,96 @@
1
+ import { resolve } from 'node:path';
2
+ import { createHash } from 'node:crypto';
3
+ import { existsSync, readFileSync, readdirSync, writeFileSync } from 'node:fs';
4
+ import { runRecipe, cleanDocument, patchDocument } from '../core/recipe/index.js';
5
+ import { loadCleanConfig } from '../core/metadata.js';
6
+ import { getRecipesDir, resolveRecipeDir } from '../utils/paths.js';
7
+ export async function runRecipeCommand(args) {
8
+ const recipeDir = resolveRecipeDir(args.recipeId);
9
+ if (!existsSync(recipeDir)) {
10
+ const available = getAvailableRecipes();
11
+ console.error(`Recipe "${args.recipeId}" not found.`);
12
+ if (available.length > 0) {
13
+ console.error(`Available recipes: ${available.join(', ')}`);
14
+ }
15
+ process.exit(1);
16
+ }
17
+ let values = {};
18
+ if (args.data) {
19
+ values = JSON.parse(readFileSync(args.data, 'utf-8'));
20
+ }
21
+ const outputPath = resolve(args.output ?? `${args.recipeId}-filled.docx`);
22
+ try {
23
+ const result = await runRecipe({
24
+ recipeId: args.recipeId,
25
+ inputPath: args.input ? resolve(args.input) : undefined,
26
+ outputPath,
27
+ values,
28
+ keepIntermediate: args.keepIntermediate,
29
+ computedOutPath: args.computedOut ? resolve(args.computedOut) : undefined,
30
+ normalizeBracketArtifacts: args.normalizeBrackets,
31
+ });
32
+ console.log(`Filled ${result.metadata.name}`);
33
+ console.log(`Output: ${result.outputPath}`);
34
+ console.log(`Fields used: ${result.fieldsUsed.join(', ')}`);
35
+ if (result.computedOutPath && result.computedArtifact) {
36
+ console.log(`Computed artifact: ${result.computedOutPath}`);
37
+ }
38
+ }
39
+ catch (err) {
40
+ console.error(`Error: ${err.message}`);
41
+ process.exit(1);
42
+ }
43
+ }
44
+ export async function runRecipeClean(args) {
45
+ const recipeDir = resolveRecipeDir(args.recipe);
46
+ const config = loadCleanConfig(recipeDir);
47
+ const inputPath = resolve(args.input);
48
+ try {
49
+ if (args.extractGuidance) {
50
+ const sourceData = readFileSync(inputPath);
51
+ const sourceHash = createHash('sha256').update(sourceData).digest('hex');
52
+ const cleanPath = resolve(recipeDir, 'clean.json');
53
+ const configData = existsSync(cleanPath) ? readFileSync(cleanPath, 'utf-8') : '{}';
54
+ const configHash = createHash('sha256').update(configData).digest('hex');
55
+ const result = await cleanDocument(inputPath, resolve(args.output), config, {
56
+ extractGuidance: true,
57
+ sourceHash,
58
+ configHash,
59
+ });
60
+ if (result.guidance) {
61
+ writeFileSync(resolve(args.extractGuidance), JSON.stringify(result.guidance, null, 2) + '\n');
62
+ console.log(`Guidance: ${args.extractGuidance} (${result.guidance.entries.length} entries)`);
63
+ }
64
+ }
65
+ else {
66
+ await cleanDocument(inputPath, resolve(args.output), config);
67
+ }
68
+ console.log(`Cleaned: ${args.output}`);
69
+ }
70
+ catch (err) {
71
+ console.error(`Error: ${err.message}`);
72
+ process.exit(1);
73
+ }
74
+ }
75
+ export async function runRecipePatch(args) {
76
+ const recipeDir = resolveRecipeDir(args.recipe);
77
+ const replacementsPath = resolve(recipeDir, 'replacements.json');
78
+ const replacements = JSON.parse(readFileSync(replacementsPath, 'utf-8'));
79
+ try {
80
+ await patchDocument(resolve(args.input), resolve(args.output), replacements);
81
+ console.log(`Patched: ${args.output}`);
82
+ }
83
+ catch (err) {
84
+ console.error(`Error: ${err.message}`);
85
+ process.exit(1);
86
+ }
87
+ }
88
+ function getAvailableRecipes() {
89
+ const recipesDir = getRecipesDir();
90
+ if (!existsSync(recipesDir))
91
+ return [];
92
+ return readdirSync(recipesDir, { withFileTypes: true })
93
+ .filter((d) => d.isDirectory())
94
+ .map((d) => d.name);
95
+ }
96
+ //# sourceMappingURL=recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recipe.js","sourceRoot":"","sources":["../../src/commands/recipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface ScanDocxResult {
2
+ partNames: string[];
3
+ bracketsByPart: Map<string, Set<string>>;
4
+ unique: string[];
5
+ shortPlaceholders: string[];
6
+ longClauses: string[];
7
+ footnoteCount: number;
8
+ underscoreBlankCount: number;
9
+ }
10
+ /**
11
+ * Collect bracket placeholder information from a DOCX file.
12
+ *
13
+ * This is the programmatic counterpart to the user-facing `scan` command and
14
+ * can be reused by tests and validation tools.
15
+ */
16
+ export declare function scanDocxBrackets(inputPath: string): ScanDocxResult;
17
+ /**
18
+ * Scan a DOCX file and report all bracketed placeholders.
19
+ * Classifies them as short (fill-in fields) vs long (alternative clauses).
20
+ * Optionally outputs a draft replacements.json.
21
+ *
22
+ * Scans all general OOXML text parts (document, headers, footers, endnotes).
23
+ */
24
+ export declare function runScan(args: {
25
+ input: string;
26
+ outputReplacements?: string;
27
+ }): void;
28
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CA6ClE;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgElF"}
@@ -0,0 +1,138 @@
1
+ import { existsSync, writeFileSync } from 'node:fs';
2
+ import AdmZip from 'adm-zip';
3
+ import { enumerateTextParts, getGeneralTextPartNames } from '../core/recipe/ooxml-parts.js';
4
+ /**
5
+ * Collect bracket placeholder information from a DOCX file.
6
+ *
7
+ * This is the programmatic counterpart to the user-facing `scan` command and
8
+ * can be reused by tests and validation tools.
9
+ */
10
+ export function scanDocxBrackets(inputPath) {
11
+ const zip = new AdmZip(inputPath);
12
+ const parts = enumerateTextParts(zip);
13
+ const partNames = getGeneralTextPartNames(parts);
14
+ const bracketsByPart = new Map();
15
+ const allBrackets = [];
16
+ for (const partName of partNames) {
17
+ const text = extractPartText(zip, partName);
18
+ const brackets = [...text.matchAll(/\[([^\]]+)\]/g)].map((m) => m[1]);
19
+ if (brackets.length > 0) {
20
+ bracketsByPart.set(partName, new Set(brackets));
21
+ allBrackets.push(...brackets);
22
+ }
23
+ }
24
+ const unique = [...new Set(allBrackets)].sort();
25
+ const shortPlaceholders = [];
26
+ const longClauses = [];
27
+ for (const b of unique) {
28
+ if (b.length <= 80) {
29
+ shortPlaceholders.push(`[${b}]`);
30
+ }
31
+ else {
32
+ longClauses.push(`[${b.slice(0, 60)}...]`);
33
+ }
34
+ }
35
+ let underscoreBlankCount = 0;
36
+ for (const partName of partNames) {
37
+ const text = extractPartText(zip, partName);
38
+ const blanks = text.match(/_{3,}/g) ?? [];
39
+ underscoreBlankCount += blanks.length;
40
+ }
41
+ return {
42
+ partNames,
43
+ bracketsByPart,
44
+ unique,
45
+ shortPlaceholders,
46
+ longClauses,
47
+ footnoteCount: countFootnotes(zip),
48
+ underscoreBlankCount,
49
+ };
50
+ }
51
+ /**
52
+ * Scan a DOCX file and report all bracketed placeholders.
53
+ * Classifies them as short (fill-in fields) vs long (alternative clauses).
54
+ * Optionally outputs a draft replacements.json.
55
+ *
56
+ * Scans all general OOXML text parts (document, headers, footers, endnotes).
57
+ */
58
+ export function runScan(args) {
59
+ if (!existsSync(args.input)) {
60
+ console.error(`File not found: ${args.input}`);
61
+ process.exit(1);
62
+ }
63
+ const scan = scanDocxBrackets(args.input);
64
+ const { partNames, bracketsByPart, shortPlaceholders, longClauses, footnoteCount, underscoreBlankCount, } = scan;
65
+ console.log(`\n=== Scan of ${args.input} ===`);
66
+ // Report parts scanned
67
+ const nonDocParts = partNames.filter((p) => p !== 'word/document.xml');
68
+ if (nonDocParts.length > 0) {
69
+ console.log(`Parts scanned: document.xml + ${nonDocParts.length} additional (${nonDocParts.join(', ')})`);
70
+ }
71
+ console.log(`\nShort placeholders (${shortPlaceholders.length}):`);
72
+ for (const p of shortPlaceholders) {
73
+ // Note which parts contain this placeholder (if outside document.xml)
74
+ const inner = p.slice(1, -1);
75
+ const locations = [];
76
+ for (const [partName, brackets] of bracketsByPart) {
77
+ if (partName !== 'word/document.xml' && brackets.has(inner)) {
78
+ locations.push(partName.replace('word/', ''));
79
+ }
80
+ }
81
+ const suffix = locations.length > 0 ? ` (also in: ${locations.join(', ')})` : '';
82
+ console.log(` ${p}${suffix}`);
83
+ }
84
+ console.log(`\nLong clauses/alternatives (${longClauses.length}) — skipped by recipe:`);
85
+ for (const c of longClauses) {
86
+ console.log(` ${c}`);
87
+ }
88
+ // Footnote count
89
+ console.log(`\nFootnotes: ${footnoteCount} explanatory footnote(s)`);
90
+ console.log(`Underscore blanks: ${underscoreBlankCount} occurrence(s)`);
91
+ // Output draft replacements.json
92
+ if (args.outputReplacements) {
93
+ const replacements = {};
94
+ for (const p of shortPlaceholders) {
95
+ const inner = p.slice(1, -1);
96
+ const tagName = inner
97
+ .toLowerCase()
98
+ .replace(/[^a-z0-9]+/g, '_')
99
+ .replace(/^_|_$/g, '');
100
+ replacements[p] = `{${tagName}}`;
101
+ }
102
+ writeFileSync(args.outputReplacements, JSON.stringify(replacements, null, 2) + '\n');
103
+ console.log(`\nDraft replacements written to: ${args.outputReplacements}`);
104
+ }
105
+ console.log('');
106
+ }
107
+ function extractPartText(zip, partName) {
108
+ const entry = zip.getEntry(partName);
109
+ if (!entry)
110
+ return '';
111
+ const xml = entry.getData().toString('utf-8');
112
+ const paragraphs = [];
113
+ const paraRegex = /<w:p[\s>][\s\S]*?<\/w:p>/g;
114
+ let paraMatch;
115
+ while ((paraMatch = paraRegex.exec(xml)) !== null) {
116
+ const paraXml = paraMatch[0];
117
+ const textParts = [];
118
+ const tRegex = /<w:t[^>]*>([^<]*)<\/w:t>/g;
119
+ let tMatch;
120
+ while ((tMatch = tRegex.exec(paraXml)) !== null) {
121
+ textParts.push(tMatch[1]);
122
+ }
123
+ if (textParts.length > 0) {
124
+ paragraphs.push(textParts.join(''));
125
+ }
126
+ }
127
+ return paragraphs.join('\n');
128
+ }
129
+ function countFootnotes(zip) {
130
+ const entry = zip.getEntry('word/footnotes.xml');
131
+ if (!entry)
132
+ return 0;
133
+ const xml = entry.getData().toString('utf-8');
134
+ const all = xml.match(/<w:footnote\s/g) ?? [];
135
+ const separators = xml.match(/w:type="(separator|continuationSeparator)"/g) ?? [];
136
+ return all.length - separators.length;
137
+ }
138
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ValidateArgs {
2
+ template?: string;
3
+ strict?: boolean;
4
+ }
5
+ export declare function runValidate(args: ValidateArgs): void;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAgCpD"}