@graview/core 0.1.61 → 0.1.63

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 (464) hide show
  1. package/README.md +13 -1
  2. package/dist/app-places.d.ts.map +1 -1
  3. package/dist/app-places.js +2 -2
  4. package/dist/app-places.js.map +1 -1
  5. package/dist/app.d.ts +22 -0
  6. package/dist/app.d.ts.map +1 -1
  7. package/dist/app.js.map +1 -1
  8. package/dist/arranging.js +2 -2
  9. package/dist/arranging.js.map +1 -1
  10. package/dist/capabilities.js +1 -1
  11. package/dist/capabilities.js.map +1 -1
  12. package/dist/cli/check/hidden-reads.d.ts.map +1 -1
  13. package/dist/cli/check/hidden-reads.js +26 -0
  14. package/dist/cli/check/hidden-reads.js.map +1 -1
  15. package/dist/cli/check/index.d.ts +2 -0
  16. package/dist/cli/check/index.d.ts.map +1 -1
  17. package/dist/cli/check/index.js +2 -0
  18. package/dist/cli/check/index.js.map +1 -1
  19. package/dist/cli/check/tidying.d.ts +14 -0
  20. package/dist/cli/check/tidying.d.ts.map +1 -0
  21. package/dist/cli/check/tidying.js +24 -0
  22. package/dist/cli/check/tidying.js.map +1 -0
  23. package/dist/cli/check/workflows.d.ts +11 -0
  24. package/dist/cli/check/workflows.d.ts.map +1 -0
  25. package/dist/cli/check/workflows.js +20 -0
  26. package/dist/cli/check/workflows.js.map +1 -0
  27. package/dist/cli/check.d.ts.map +1 -1
  28. package/dist/cli/check.js +3 -1
  29. package/dist/cli/check.js.map +1 -1
  30. package/dist/cli/describe.d.ts.map +1 -1
  31. package/dist/cli/describe.js +45 -2
  32. package/dist/cli/describe.js.map +1 -1
  33. package/dist/cli/document-schema.d.ts.map +1 -1
  34. package/dist/cli/document-schema.js +15 -2
  35. package/dist/cli/document-schema.js.map +1 -1
  36. package/dist/cli/index.js +1 -1
  37. package/dist/cli/index.js.map +1 -1
  38. package/dist/compose.d.ts +11 -3
  39. package/dist/compose.d.ts.map +1 -1
  40. package/dist/compose.js +12 -2
  41. package/dist/compose.js.map +1 -1
  42. package/dist/css/sanitize.d.ts +125 -0
  43. package/dist/css/sanitize.d.ts.map +1 -0
  44. package/dist/css/sanitize.js +989 -0
  45. package/dist/css/sanitize.js.map +1 -0
  46. package/dist/css/tables.d.ts +55 -0
  47. package/dist/css/tables.d.ts.map +1 -0
  48. package/dist/css/tables.js +137 -0
  49. package/dist/css/tables.js.map +1 -0
  50. package/dist/css.d.ts +20 -0
  51. package/dist/css.d.ts.map +1 -0
  52. package/dist/css.js +19 -0
  53. package/dist/css.js.map +1 -0
  54. package/dist/days.d.ts +15 -0
  55. package/dist/days.d.ts.map +1 -1
  56. package/dist/days.js +21 -0
  57. package/dist/days.js.map +1 -1
  58. package/dist/describe.d.ts +1 -1
  59. package/dist/describe.d.ts.map +1 -1
  60. package/dist/document/act-findings.d.ts.map +1 -1
  61. package/dist/document/act-findings.js +80 -1
  62. package/dist/document/act-findings.js.map +1 -1
  63. package/dist/document/amount.d.ts +1 -1
  64. package/dist/document/amount.d.ts.map +1 -1
  65. package/dist/document/amount.js +2 -2
  66. package/dist/document/amount.js.map +1 -1
  67. package/dist/document/blocks.d.ts.map +1 -1
  68. package/dist/document/blocks.js +17 -1
  69. package/dist/document/blocks.js.map +1 -1
  70. package/dist/document/brand-check.d.ts +15 -1
  71. package/dist/document/brand-check.d.ts.map +1 -1
  72. package/dist/document/brand-check.js +80 -0
  73. package/dist/document/brand-check.js.map +1 -1
  74. package/dist/document/brand.d.ts.map +1 -1
  75. package/dist/document/brand.js +2 -0
  76. package/dist/document/brand.js.map +1 -1
  77. package/dist/document/compile-checked.d.ts.map +1 -1
  78. package/dist/document/compile-checked.js +5 -2
  79. package/dist/document/compile-checked.js.map +1 -1
  80. package/dist/document/compile.d.ts.map +1 -1
  81. package/dist/document/compile.js +96 -16
  82. package/dist/document/compile.js.map +1 -1
  83. package/dist/document/compiled.d.ts +32 -3
  84. package/dist/document/compiled.d.ts.map +1 -1
  85. package/dist/document/compiled.js +123 -12
  86. package/dist/document/compiled.js.map +1 -1
  87. package/dist/document/connection-findings.js +165 -22
  88. package/dist/document/connection-findings.js.map +1 -1
  89. package/dist/document/connection-spec.d.ts +38 -1
  90. package/dist/document/connection-spec.d.ts.map +1 -1
  91. package/dist/document/connection-spec.js +71 -7
  92. package/dist/document/connection-spec.js.map +1 -1
  93. package/dist/document/covers.d.ts +48 -0
  94. package/dist/document/covers.d.ts.map +1 -0
  95. package/dist/document/covers.js +90 -0
  96. package/dist/document/covers.js.map +1 -0
  97. package/dist/document/derives-findings.d.ts +4 -0
  98. package/dist/document/derives-findings.d.ts.map +1 -0
  99. package/dist/document/derives-findings.js +68 -0
  100. package/dist/document/derives-findings.js.map +1 -0
  101. package/dist/document/describe-forms.js +2 -2
  102. package/dist/document/describe-forms.js.map +1 -1
  103. package/dist/document/describe-place.d.ts +3 -0
  104. package/dist/document/describe-place.d.ts.map +1 -1
  105. package/dist/document/describe-place.js +11 -0
  106. package/dist/document/describe-place.js.map +1 -1
  107. package/dist/document/described.d.ts +28 -0
  108. package/dist/document/described.d.ts.map +1 -1
  109. package/dist/document/diff.d.ts +6 -0
  110. package/dist/document/diff.d.ts.map +1 -1
  111. package/dist/document/diff.js +53 -2
  112. package/dist/document/diff.js.map +1 -1
  113. package/dist/document/edit.d.ts +1 -1
  114. package/dist/document/edit.d.ts.map +1 -1
  115. package/dist/document/edit.js +366 -29
  116. package/dist/document/edit.js.map +1 -1
  117. package/dist/document/expr/evaluate.d.ts +17 -1
  118. package/dist/document/expr/evaluate.d.ts.map +1 -1
  119. package/dist/document/expr/evaluate.js +110 -2
  120. package/dist/document/expr/evaluate.js.map +1 -1
  121. package/dist/document/expr/index.d.ts +1 -0
  122. package/dist/document/expr/index.d.ts.map +1 -1
  123. package/dist/document/expr/index.js +2 -0
  124. package/dist/document/expr/index.js.map +1 -1
  125. package/dist/document/expr/typing.d.ts +24 -0
  126. package/dist/document/expr/typing.d.ts.map +1 -0
  127. package/dist/document/expr/typing.js +219 -0
  128. package/dist/document/expr/typing.js.map +1 -0
  129. package/dist/document/expr/when.d.ts +52 -0
  130. package/dist/document/expr/when.d.ts.map +1 -0
  131. package/dist/document/expr/when.js +215 -0
  132. package/dist/document/expr/when.js.map +1 -0
  133. package/dist/document/expr-type-findings.d.ts +5 -0
  134. package/dist/document/expr-type-findings.d.ts.map +1 -0
  135. package/dist/document/expr-type-findings.js +90 -0
  136. package/dist/document/expr-type-findings.js.map +1 -0
  137. package/dist/document/format-words.d.ts +1 -0
  138. package/dist/document/format-words.d.ts.map +1 -1
  139. package/dist/document/format-words.js +2 -2
  140. package/dist/document/format-words.js.map +1 -1
  141. package/dist/document/index.d.ts +6 -3
  142. package/dist/document/index.d.ts.map +1 -1
  143. package/dist/document/index.js +5 -2
  144. package/dist/document/index.js.map +1 -1
  145. package/dist/document/kept-in-step-with.d.ts +20 -0
  146. package/dist/document/kept-in-step-with.d.ts.map +1 -0
  147. package/dist/document/kept-in-step-with.js +38 -0
  148. package/dist/document/kept-in-step-with.js.map +1 -0
  149. package/dist/document/kept-in-step.d.ts.map +1 -1
  150. package/dist/document/kept-in-step.js +3 -1
  151. package/dist/document/kept-in-step.js.map +1 -1
  152. package/dist/document/linked-findings.js +1 -1
  153. package/dist/document/linked-findings.js.map +1 -1
  154. package/dist/document/money.d.ts +10 -2
  155. package/dist/document/money.d.ts.map +1 -1
  156. package/dist/document/money.js +14 -5
  157. package/dist/document/money.js.map +1 -1
  158. package/dist/document/policy-words.d.ts +2 -0
  159. package/dist/document/policy-words.d.ts.map +1 -1
  160. package/dist/document/policy-words.js +11 -1
  161. package/dist/document/policy-words.js.map +1 -1
  162. package/dist/document/rule-line.d.ts +7 -3
  163. package/dist/document/rule-line.d.ts.map +1 -1
  164. package/dist/document/rule-line.js +17 -2
  165. package/dist/document/rule-line.js.map +1 -1
  166. package/dist/document/rule-reads.d.ts.map +1 -1
  167. package/dist/document/rule-reads.js +3 -1
  168. package/dist/document/rule-reads.js.map +1 -1
  169. package/dist/document/rules.d.ts +30 -0
  170. package/dist/document/rules.d.ts.map +1 -1
  171. package/dist/document/rules.js +74 -0
  172. package/dist/document/rules.js.map +1 -1
  173. package/dist/document/schema.d.ts +110 -2
  174. package/dist/document/schema.d.ts.map +1 -1
  175. package/dist/document/schema.js +125 -10
  176. package/dist/document/schema.js.map +1 -1
  177. package/dist/document/template-parse.d.ts.map +1 -1
  178. package/dist/document/template-parse.js +7 -1
  179. package/dist/document/template-parse.js.map +1 -1
  180. package/dist/document/template.d.ts +2 -0
  181. package/dist/document/template.d.ts.map +1 -1
  182. package/dist/document/template.js +10 -1
  183. package/dist/document/template.js.map +1 -1
  184. package/dist/document/to-document.d.ts.map +1 -1
  185. package/dist/document/to-document.js +5 -3
  186. package/dist/document/to-document.js.map +1 -1
  187. package/dist/document/workflow-spec.d.ts +72 -0
  188. package/dist/document/workflow-spec.d.ts.map +1 -0
  189. package/dist/document/workflow-spec.js +45 -0
  190. package/dist/document/workflow-spec.js.map +1 -0
  191. package/dist/document.schema.json +1143 -50
  192. package/dist/history.d.ts.map +1 -1
  193. package/dist/history.js +2 -0
  194. package/dist/history.js.map +1 -1
  195. package/dist/index.d.ts +11 -8
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +8 -5
  198. package/dist/index.js.map +1 -1
  199. package/dist/installation.d.ts +1 -1
  200. package/dist/invariants/types.d.ts +7 -2
  201. package/dist/invariants/types.d.ts.map +1 -1
  202. package/dist/job-findings.d.ts +5 -0
  203. package/dist/job-findings.d.ts.map +1 -1
  204. package/dist/job-findings.js +9 -3
  205. package/dist/job-findings.js.map +1 -1
  206. package/dist/keep-linked.d.ts +45 -0
  207. package/dist/keep-linked.d.ts.map +1 -0
  208. package/dist/keep-linked.js +188 -0
  209. package/dist/keep-linked.js.map +1 -0
  210. package/dist/lines.d.ts.map +1 -1
  211. package/dist/lines.js +6 -2
  212. package/dist/lines.js.map +1 -1
  213. package/dist/mutations/derive-edits.js +2 -2
  214. package/dist/mutations/propose-changes.d.ts +24 -0
  215. package/dist/mutations/propose-changes.d.ts.map +1 -0
  216. package/dist/mutations/propose-changes.js +30 -0
  217. package/dist/mutations/propose-changes.js.map +1 -0
  218. package/dist/mutations/types.d.ts +9 -0
  219. package/dist/mutations/types.d.ts.map +1 -1
  220. package/dist/mutations/vote-suggestion.d.ts +97 -0
  221. package/dist/mutations/vote-suggestion.d.ts.map +1 -0
  222. package/dist/mutations/vote-suggestion.js +59 -0
  223. package/dist/mutations/vote-suggestion.js.map +1 -0
  224. package/dist/mutations/words.js +3 -3
  225. package/dist/navigate.d.ts +7 -3
  226. package/dist/navigate.d.ts.map +1 -1
  227. package/dist/navigate.js +7 -3
  228. package/dist/navigate.js.map +1 -1
  229. package/dist/ops/digest.d.ts +3 -1
  230. package/dist/ops/digest.d.ts.map +1 -1
  231. package/dist/ops/digest.js +7 -2
  232. package/dist/ops/digest.js.map +1 -1
  233. package/dist/ops/lineage.d.ts +29 -2
  234. package/dist/ops/lineage.d.ts.map +1 -1
  235. package/dist/ops/lineage.js +12 -4
  236. package/dist/ops/lineage.js.map +1 -1
  237. package/dist/ops/log.d.ts.map +1 -1
  238. package/dist/ops/log.js +13 -2
  239. package/dist/ops/log.js.map +1 -1
  240. package/dist/ops/suggestions.d.ts +75 -1
  241. package/dist/ops/suggestions.d.ts.map +1 -1
  242. package/dist/ops/suggestions.js +123 -6
  243. package/dist/ops/suggestions.js.map +1 -1
  244. package/dist/ops/tidying.d.ts.map +1 -1
  245. package/dist/ops/tidying.js +6 -1
  246. package/dist/ops/tidying.js.map +1 -1
  247. package/dist/ops/types.d.ts +41 -0
  248. package/dist/ops/types.d.ts.map +1 -1
  249. package/dist/ops/types.js.map +1 -1
  250. package/dist/ops/undo.d.ts.map +1 -1
  251. package/dist/ops/undo.js +17 -0
  252. package/dist/ops/undo.js.map +1 -1
  253. package/dist/permissions/policy.d.ts +7 -0
  254. package/dist/permissions/policy.d.ts.map +1 -1
  255. package/dist/permissions/policy.js +12 -0
  256. package/dist/permissions/policy.js.map +1 -1
  257. package/dist/permissions/types.d.ts +27 -0
  258. package/dist/permissions/types.d.ts.map +1 -1
  259. package/dist/permissions/types.js.map +1 -1
  260. package/dist/place-names.d.ts +42 -0
  261. package/dist/place-names.d.ts.map +1 -0
  262. package/dist/place-names.js +43 -0
  263. package/dist/place-names.js.map +1 -0
  264. package/dist/places.d.ts +12 -0
  265. package/dist/places.d.ts.map +1 -1
  266. package/dist/places.js +37 -1
  267. package/dist/places.js.map +1 -1
  268. package/dist/scene.d.ts +2 -0
  269. package/dist/scene.d.ts.map +1 -1
  270. package/dist/scene.js +2 -0
  271. package/dist/scene.js.map +1 -1
  272. package/dist/schema/amount-mark.d.ts +2 -0
  273. package/dist/schema/amount-mark.d.ts.map +1 -1
  274. package/dist/schema/amount-mark.js.map +1 -1
  275. package/dist/schema/amount-words.js +2 -2
  276. package/dist/schema/amount-words.js.map +1 -1
  277. package/dist/schema/choice-words.js +2 -2
  278. package/dist/schema/define-node.d.ts +8 -2
  279. package/dist/schema/define-node.d.ts.map +1 -1
  280. package/dist/schema/define-node.js +2 -2
  281. package/dist/schema/define-node.js.map +1 -1
  282. package/dist/schema/humanize.d.ts +17 -0
  283. package/dist/schema/humanize.d.ts.map +1 -1
  284. package/dist/schema/humanize.js +28 -1
  285. package/dist/schema/humanize.js.map +1 -1
  286. package/dist/schema/reading.d.ts +8 -0
  287. package/dist/schema/reading.d.ts.map +1 -1
  288. package/dist/schema/reading.js +16 -2
  289. package/dist/schema/reading.js.map +1 -1
  290. package/dist/schema/types.d.ts +8 -0
  291. package/dist/schema/types.d.ts.map +1 -1
  292. package/dist/schema/value-words.js +2 -2
  293. package/dist/schema/value-words.js.map +1 -1
  294. package/dist/starting-document.d.ts +47 -2
  295. package/dist/starting-document.d.ts.map +1 -1
  296. package/dist/starting-document.js +66 -8
  297. package/dist/starting-document.js.map +1 -1
  298. package/dist/store.d.ts +75 -1
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +305 -29
  301. package/dist/store.js.map +1 -1
  302. package/dist/sync/connection.d.ts +35 -6
  303. package/dist/sync/connection.d.ts.map +1 -1
  304. package/dist/sync/connection.js +252 -47
  305. package/dist/sync/connection.js.map +1 -1
  306. package/dist/sync/engine.d.ts +83 -0
  307. package/dist/sync/engine.d.ts.map +1 -1
  308. package/dist/sync/engine.js +157 -4
  309. package/dist/sync/engine.js.map +1 -1
  310. package/dist/sync/google-calendar.d.ts +8 -0
  311. package/dist/sync/google-calendar.d.ts.map +1 -1
  312. package/dist/sync/google-calendar.js +30 -3
  313. package/dist/sync/google-calendar.js.map +1 -1
  314. package/dist/sync/guest-words.d.ts +9 -0
  315. package/dist/sync/guest-words.d.ts.map +1 -0
  316. package/dist/sync/guest-words.js +41 -0
  317. package/dist/sync/guest-words.js.map +1 -0
  318. package/dist/sync/guests.d.ts +44 -0
  319. package/dist/sync/guests.d.ts.map +1 -0
  320. package/dist/sync/guests.js +57 -0
  321. package/dist/sync/guests.js.map +1 -0
  322. package/dist/sync/index.d.ts +8 -5
  323. package/dist/sync/index.d.ts.map +1 -1
  324. package/dist/sync/index.js +2 -0
  325. package/dist/sync/index.js.map +1 -1
  326. package/dist/sync/notion-stub.d.ts +4 -1
  327. package/dist/sync/notion-stub.d.ts.map +1 -1
  328. package/dist/sync/notion-stub.js +40 -0
  329. package/dist/sync/notion-stub.js.map +1 -1
  330. package/dist/sync/notion.d.ts +43 -2
  331. package/dist/sync/notion.d.ts.map +1 -1
  332. package/dist/sync/notion.js +274 -140
  333. package/dist/sync/notion.js.map +1 -1
  334. package/dist/sync/status.d.ts +43 -0
  335. package/dist/sync/status.d.ts.map +1 -0
  336. package/dist/sync/status.js +45 -0
  337. package/dist/sync/status.js.map +1 -0
  338. package/dist/sync/types.d.ts +64 -0
  339. package/dist/sync/types.d.ts.map +1 -1
  340. package/dist/sync/types.js.map +1 -1
  341. package/dist/testing.js +1 -1
  342. package/dist/testing.js.map +1 -1
  343. package/dist/theme/contrast.d.ts +2 -0
  344. package/dist/theme/contrast.d.ts.map +1 -1
  345. package/dist/theme/contrast.js +4 -0
  346. package/dist/theme/contrast.js.map +1 -1
  347. package/dist/theme/ground.d.ts +1 -2
  348. package/dist/theme/ground.d.ts.map +1 -1
  349. package/dist/theme/ground.js +2 -5
  350. package/dist/theme/ground.js.map +1 -1
  351. package/dist/theme/marks.d.ts +14 -2
  352. package/dist/theme/marks.d.ts.map +1 -1
  353. package/dist/theme/marks.js +20 -3
  354. package/dist/theme/marks.js.map +1 -1
  355. package/dist/theme/types.d.ts +22 -0
  356. package/dist/theme/types.d.ts.map +1 -1
  357. package/dist/theme/types.js.map +1 -1
  358. package/dist/tidying.d.ts +79 -4
  359. package/dist/tidying.d.ts.map +1 -1
  360. package/dist/tidying.js +216 -9
  361. package/dist/tidying.js.map +1 -1
  362. package/dist/trait-vocabulary.d.ts +17 -0
  363. package/dist/trait-vocabulary.d.ts.map +1 -0
  364. package/dist/trait-vocabulary.js +16 -0
  365. package/dist/trait-vocabulary.js.map +1 -0
  366. package/dist/traits.d.ts +14 -7
  367. package/dist/traits.d.ts.map +1 -1
  368. package/dist/traits.js +33 -12
  369. package/dist/traits.js.map +1 -1
  370. package/dist/validate-graph.d.ts +2 -1
  371. package/dist/validate-graph.d.ts.map +1 -1
  372. package/dist/validate-graph.js +32 -1
  373. package/dist/validate-graph.js.map +1 -1
  374. package/dist/version.d.ts +1 -1
  375. package/dist/version.js +1 -1
  376. package/dist/words.d.ts +4 -1
  377. package/dist/words.d.ts.map +1 -1
  378. package/dist/words.js +4 -1
  379. package/dist/words.js.map +1 -1
  380. package/dist/workflow-shape.d.ts +217 -0
  381. package/dist/workflow-shape.d.ts.map +1 -0
  382. package/dist/workflow-shape.js +31 -0
  383. package/dist/workflow-shape.js.map +1 -0
  384. package/dist/workflows/findings.d.ts +13 -0
  385. package/dist/workflows/findings.d.ts.map +1 -0
  386. package/dist/workflows/findings.js +157 -0
  387. package/dist/workflows/findings.js.map +1 -0
  388. package/dist/workflows/generate-words.d.ts +12 -0
  389. package/dist/workflows/generate-words.d.ts.map +1 -0
  390. package/dist/workflows/generate-words.js +25 -0
  391. package/dist/workflows/generate-words.js.map +1 -0
  392. package/dist/workflows/generate.d.ts +59 -0
  393. package/dist/workflows/generate.d.ts.map +1 -0
  394. package/dist/workflows/generate.js +165 -0
  395. package/dist/workflows/generate.js.map +1 -0
  396. package/dist/workflows/judging.d.ts +17 -0
  397. package/dist/workflows/judging.d.ts.map +1 -0
  398. package/dist/workflows/judging.js +11 -0
  399. package/dist/workflows/judging.js.map +1 -0
  400. package/dist/workflows/next.d.ts +18 -0
  401. package/dist/workflows/next.d.ts.map +1 -0
  402. package/dist/workflows/next.js +75 -0
  403. package/dist/workflows/next.js.map +1 -0
  404. package/dist/workflows/on-the-map.d.ts +70 -0
  405. package/dist/workflows/on-the-map.d.ts.map +1 -0
  406. package/dist/workflows/on-the-map.js +94 -0
  407. package/dist/workflows/on-the-map.js.map +1 -0
  408. package/dist/workflows/policies.d.ts +39 -0
  409. package/dist/workflows/policies.d.ts.map +1 -0
  410. package/dist/workflows/policies.js +95 -0
  411. package/dist/workflows/policies.js.map +1 -0
  412. package/dist/workflows/resolve.d.ts +55 -0
  413. package/dist/workflows/resolve.d.ts.map +1 -0
  414. package/dist/workflows/resolve.js +57 -0
  415. package/dist/workflows/resolve.js.map +1 -0
  416. package/dist/workflows/schedule.d.ts +28 -0
  417. package/dist/workflows/schedule.d.ts.map +1 -0
  418. package/dist/workflows/schedule.js +160 -0
  419. package/dist/workflows/schedule.js.map +1 -0
  420. package/dist/workflows/step-act.d.ts +6 -0
  421. package/dist/workflows/step-act.d.ts.map +1 -0
  422. package/dist/workflows/step-act.js +79 -0
  423. package/dist/workflows/step-act.js.map +1 -0
  424. package/dist/workflows/step-agent.d.ts +4 -0
  425. package/dist/workflows/step-agent.d.ts.map +1 -0
  426. package/dist/workflows/step-agent.js +55 -0
  427. package/dist/workflows/step-agent.js.map +1 -0
  428. package/dist/workflows/step-archive.d.ts +8 -0
  429. package/dist/workflows/step-archive.d.ts.map +1 -0
  430. package/dist/workflows/step-archive.js +74 -0
  431. package/dist/workflows/step-archive.js.map +1 -0
  432. package/dist/workflows/step-classify.d.ts +23 -0
  433. package/dist/workflows/step-classify.d.ts.map +1 -0
  434. package/dist/workflows/step-classify.js +143 -0
  435. package/dist/workflows/step-classify.js.map +1 -0
  436. package/dist/workflows/step-generate.d.ts +7 -0
  437. package/dist/workflows/step-generate.d.ts.map +1 -0
  438. package/dist/workflows/step-generate.js +185 -0
  439. package/dist/workflows/step-generate.js.map +1 -0
  440. package/dist/workflows/steps.d.ts +75 -0
  441. package/dist/workflows/steps.d.ts.map +1 -0
  442. package/dist/workflows/steps.js +40 -0
  443. package/dist/workflows/steps.js.map +1 -0
  444. package/dist/workflows/triggered.d.ts +22 -0
  445. package/dist/workflows/triggered.d.ts.map +1 -0
  446. package/dist/workflows/triggered.js +52 -0
  447. package/dist/workflows/triggered.js.map +1 -0
  448. package/dist/workflows/values.d.ts +28 -0
  449. package/dist/workflows/values.d.ts.map +1 -0
  450. package/dist/workflows/values.js +75 -0
  451. package/dist/workflows/values.js.map +1 -0
  452. package/dist/workflows/words.d.ts +10 -0
  453. package/dist/workflows/words.d.ts.map +1 -0
  454. package/dist/workflows/words.js +30 -0
  455. package/dist/workflows/words.js.map +1 -0
  456. package/dist/workflows/world.d.ts +23 -0
  457. package/dist/workflows/world.d.ts.map +1 -0
  458. package/dist/workflows/world.js +50 -0
  459. package/dist/workflows/world.js.map +1 -0
  460. package/dist/workflows.d.ts +35 -0
  461. package/dist/workflows.d.ts.map +1 -0
  462. package/dist/workflows.js +20 -0
  463. package/dist/workflows.js.map +1 -0
  464. package/package.json +18 -2
@@ -0,0 +1,217 @@
1
+ /**
2
+ * WORKFLOWS: WHAT THE APP DOES ON ITS OWN, AND WHEN (Roadmap f-jobs-declared).
3
+ *
4
+ * workflows: {
5
+ * "next-weeks-events": {
6
+ * title: "Fill out next week's events",
7
+ * when: [{ every: "sunday 18:00" }, { made: "grocery-list" }],
8
+ * steps: [{ act: "add-event", over: { kind: "routine", where: "active" }, args: { name: { expr: "name" } }, key: "{id}" }],
9
+ * },
10
+ * }
11
+ *
12
+ * A workflow is the app's own actor given a schedule and a list of steps,
13
+ * in the declaration: run on a clock (`every`, `cron`, said in the brand's
14
+ * time zone), when a record of a kind is made or changed, when a connection
15
+ * finishes a pass, or by hand. Each step is one of a closed set of kinds
16
+ * (`STEP_KINDS`, `@graview/core/workflows`): run an act once or over the
17
+ * records a rule picks, or let a model propose acts from a list. What it
18
+ * makes is applied, suggested or asked about (`approve`).
19
+ *
20
+ * The same shape in a document (`workflows`) and in `defineApp({ workflows })`.
21
+ * `graview check` holds each to the declaration (`workflow-*`);
22
+ * `@graview/core/workflows` resolves them (`workflowsOf`), says them
23
+ * (`workflowWords`) and says when one runs next (`nextRunAt`);
24
+ * `@graview/tools/workflows` runs one (`runWorkflow`). Never a "job": the
25
+ * purpose's jobs are the questions an app answers (`job-shape.ts`).
26
+ */
27
+ /** What starts a run: a clock in words or cron, a record made or changed, a connection's pass, or a person. */
28
+ export type WorkflowTrigger =
29
+ /** Words: "day", "day 03:00", "weekday 09:00", "sunday 18:00", "month 1 09:00", "hour" — in the brand's time zone. */
30
+ {
31
+ readonly every: string;
32
+ }
33
+ /** Five-field cron, "0 18 * * 0", in the brand's time zone. */
34
+ | {
35
+ readonly cron: string;
36
+ }
37
+ /** A record of this kind was made; `where`, in the rule language, holds of it. */
38
+ | {
39
+ readonly made: string;
40
+ readonly where?: string;
41
+ }
42
+ /** A record of this kind changed — one of these fields, when said. */
43
+ | {
44
+ readonly changed: string;
45
+ readonly fields?: readonly string[];
46
+ readonly where?: string;
47
+ }
48
+ /** The named connection finished a pass. */
49
+ | {
50
+ readonly synced: string;
51
+ }
52
+ /** Run now, only. */
53
+ | {
54
+ readonly byHand: true;
55
+ };
56
+ /** What becomes of what a run would change: made, suggested by how sure it is, or gathered for a person to approve. */
57
+ export type WorkflowApproval = "apply" | "suggest" | "ask";
58
+ /** A value a step hands an act: a literal, `$subject`, `$now`, `$today`, or `{ expr }` read on the record a step is over. */
59
+ export type WorkflowValue = string | number | boolean | null | readonly unknown[] | {
60
+ readonly expr: string;
61
+ };
62
+ /** Which records a step runs over: one kind, those a rule holds of, at most `limit`. */
63
+ export interface WorkflowOver {
64
+ readonly kind: string;
65
+ readonly where?: string;
66
+ readonly limit?: number;
67
+ }
68
+ /**
69
+ * RUN AN ACT: once (no `over`), or once per record `over` picks — the
70
+ * record the act's subject and what `{ expr }` values read. `key`, a
71
+ * `{field}` template ("{id}:{date}"), is the stable key of what the step
72
+ * makes: a rerun with the same key changes the record it made last time
73
+ * rather than making another.
74
+ */
75
+ export interface ActStep {
76
+ readonly act: string;
77
+ readonly over?: WorkflowOver;
78
+ readonly args?: Readonly<Record<string, WorkflowValue>>;
79
+ readonly key?: string;
80
+ readonly approve?: WorkflowApproval;
81
+ }
82
+ /**
83
+ * LET A MODEL PROPOSE: an instruction in words, the kinds it may read and
84
+ * the acts it may propose, the model ("fast" or a host's model id) and
85
+ * what one run may spend. Each act it proposes is applied, suggested or
86
+ * let go by `approve` and its confidence, as the app's own actor's are.
87
+ * With no model lent, the step is skipped and the run says so.
88
+ */
89
+ export interface AgentStep {
90
+ readonly agent: string;
91
+ readonly reads: readonly string[];
92
+ readonly acts: readonly string[];
93
+ readonly model?: string;
94
+ readonly budget?: {
95
+ readonly calls?: number;
96
+ readonly tokens?: number;
97
+ };
98
+ readonly approve?: WorkflowApproval;
99
+ }
100
+ /** Where a generate step's dates come from: a kind, the records a rule picks of it, and the field that holds each one's date. */
101
+ export interface GenerateFrom {
102
+ readonly kind: string;
103
+ readonly where?: string;
104
+ /** A date or a moment (one day), one that repeats (`<field>Repeat` beside it), or a set of weekdays ("mon", "wed"). */
105
+ readonly dates: string;
106
+ }
107
+ /** The days a generate step makes records for: words ("next week", "this week", "next 7 days", "today", "tomorrow"), or two expressions. */
108
+ export type GenerateWindow = string | {
109
+ readonly from: string;
110
+ readonly to: string;
111
+ };
112
+ /**
113
+ * MAKE DATED RECORDS FROM A PATTERN (Roadmap f-job-generate-from-pattern):
114
+ * for each day in `window` that a source record's date falls on — a date,
115
+ * a date that repeats, a set of weekdays — one record of the kind
116
+ * `generate` names, its fields from `set` (read on the source, with `date`
117
+ * the occurrence and `source` its record), linked back through `link`.
118
+ * Made once per `key` ("{source}:{date}" when unsaid): a rerun changes what
119
+ * the source changed and nothing a person changed, unless `overwrite`.
120
+ */
121
+ export interface GenerateStep {
122
+ readonly generate: string;
123
+ readonly from: readonly GenerateFrom[];
124
+ readonly window: GenerateWindow;
125
+ readonly set?: Readonly<Record<string, WorkflowValue>>;
126
+ readonly key?: string;
127
+ /** The relation between a made record and its source: the made kind's, or the source kind's. */
128
+ readonly link?: string;
129
+ /** The act that makes one, where more than one act makes the kind (not `act`, which would make the step an act step). */
130
+ readonly using?: string;
131
+ /** A rerun sets a field again even where a person changed it. */
132
+ readonly overwrite?: boolean;
133
+ readonly approve?: WorkflowApproval;
134
+ }
135
+ /**
136
+ * SET ASIDE WHAT IS DONE WITH (Roadmap f-retention-rules): archive the
137
+ * records of a kind `where` holds of, once they have stood `after` — "3
138
+ * days" since each last changed, or `{ field, days }` after a date it
139
+ * holds. Archived, never removed; a record left alone, a kind never
140
+ * tidied and a record a person brought back from this workflow's archive
141
+ * are passed by.
142
+ */
143
+ export interface ArchiveStep {
144
+ readonly archive: string;
145
+ readonly where?: string;
146
+ readonly after?: string | {
147
+ readonly field: string;
148
+ readonly days: number;
149
+ };
150
+ readonly approve?: WorkflowApproval;
151
+ }
152
+ /** A floor rule: what labels a record when no model judges it — any one of these that holds. */
153
+ export interface ClassifyFloorRule {
154
+ /** At least this many links (http, https or www) in its text fields. */
155
+ readonly links?: number;
156
+ /** Any of these words or phrases in its text fields, as whole words, any case. */
157
+ readonly words?: readonly string[];
158
+ /** A line of the rule language that holds of it. */
159
+ readonly expr?: string;
160
+ }
161
+ /**
162
+ * LABEL EACH RECORD (Roadmap f-feedback-triage-agent): one typed judgment
163
+ * per record of `classify` — which of `field`'s options fits it, and how
164
+ * sure — set through the kind's own act with the reason on its lineage.
165
+ * Without a model, the `floor` decides; a record no rule matches is left
166
+ * for a person. An option whose confidence reaches its `setAside`
167
+ * threshold also archives the record (never removes it). Asked of a person
168
+ * unless the step says its own `approve`; an option in `confirm` is
169
+ * always asked. A record already labeled is passed by unless `relabel`.
170
+ */
171
+ export interface ClassifyStep {
172
+ readonly classify: string;
173
+ readonly where?: string;
174
+ /** The choice field the label is kept in. */
175
+ readonly field: string;
176
+ /** The options it may choose from: the field's, or some of them. */
177
+ readonly options?: readonly string[];
178
+ /** What the model is told, in words, beside the options. */
179
+ readonly instruction?: string;
180
+ readonly floor?: Readonly<Record<string, ClassifyFloorRule>>;
181
+ /** An option, and how sure (0 to 1) a judgment must be for the record to be archived too. */
182
+ readonly setAside?: Readonly<Record<string, number>>;
183
+ /** Options never set without a person's yes, whatever `approve` says. */
184
+ readonly confirm?: readonly string[];
185
+ /** Judge a record again though it is labeled already. */
186
+ readonly relabel?: boolean;
187
+ readonly model?: string;
188
+ readonly budget?: {
189
+ readonly calls?: number;
190
+ readonly tokens?: number;
191
+ };
192
+ readonly approve?: WorkflowApproval;
193
+ }
194
+ /** One step of a workflow: one of `STEP_KINDS`, told apart by its one discriminating key. */
195
+ export type WorkflowStep = ActStep | AgentStep | GenerateStep | ArchiveStep | ClassifyStep;
196
+ /** A workflow as it is declared. */
197
+ export interface WorkflowDeclaration {
198
+ /** Words a person reads: "Fill out next week's events". 1–120 characters. */
199
+ readonly title: string;
200
+ /** What starts it: one or several. */
201
+ readonly when: readonly WorkflowTrigger[];
202
+ /** Paused, it runs on no clock and no change; Run now still dry-runs it. Active when unsaid. */
203
+ readonly status?: "active" | "paused";
204
+ /** The workflow's own word on what its changes become; a step may say its own. */
205
+ readonly approve?: WorkflowApproval;
206
+ /** In order; at least one. */
207
+ readonly steps: readonly WorkflowStep[];
208
+ /** A kind of policy records the run reads and its model steps are told (Roadmap f-job-rule-inputs). */
209
+ readonly follows?: string;
210
+ }
211
+ /** An app's workflows, by slug name. */
212
+ export type AppWorkflows = Readonly<Record<string, WorkflowDeclaration>>;
213
+ /** The most workflows an app declares. */
214
+ export declare const MOST_WORKFLOWS = 40;
215
+ /** The most steps one workflow takes. */
216
+ export declare const MOST_STEPS = 40;
217
+ //# sourceMappingURL=workflow-shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-shape.d.ts","sourceRoot":"","sources":["../src/workflow-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * WORKFLOWS: WHAT THE APP DOES ON ITS OWN, AND WHEN (Roadmap f-jobs-declared).
3
+ *
4
+ * workflows: {
5
+ * "next-weeks-events": {
6
+ * title: "Fill out next week's events",
7
+ * when: [{ every: "sunday 18:00" }, { made: "grocery-list" }],
8
+ * steps: [{ act: "add-event", over: { kind: "routine", where: "active" }, args: { name: { expr: "name" } }, key: "{id}" }],
9
+ * },
10
+ * }
11
+ *
12
+ * A workflow is the app's own actor given a schedule and a list of steps,
13
+ * in the declaration: run on a clock (`every`, `cron`, said in the brand's
14
+ * time zone), when a record of a kind is made or changed, when a connection
15
+ * finishes a pass, or by hand. Each step is one of a closed set of kinds
16
+ * (`STEP_KINDS`, `@graview/core/workflows`): run an act once or over the
17
+ * records a rule picks, or let a model propose acts from a list. What it
18
+ * makes is applied, suggested or asked about (`approve`).
19
+ *
20
+ * The same shape in a document (`workflows`) and in `defineApp({ workflows })`.
21
+ * `graview check` holds each to the declaration (`workflow-*`);
22
+ * `@graview/core/workflows` resolves them (`workflowsOf`), says them
23
+ * (`workflowWords`) and says when one runs next (`nextRunAt`);
24
+ * `@graview/tools/workflows` runs one (`runWorkflow`). Never a "job": the
25
+ * purpose's jobs are the questions an app answers (`job-shape.ts`).
26
+ */
27
+ /** The most workflows an app declares. */
28
+ export const MOST_WORKFLOWS = 40;
29
+ /** The most steps one workflow takes. */
30
+ export const MOST_STEPS = 40;
31
+ //# sourceMappingURL=workflow-shape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-shape.js","sourceRoot":"","sources":["../src/workflow-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AA8KH,0CAA0C;AAC1C,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,yCAAyC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { type Finding } from "../document/findings.js";
2
+ import type { GraviewDocument } from "../document/schema.js";
3
+ import { type WorkflowFinding } from "./steps.js";
4
+ import { type WorkflowWorld } from "./world.js";
5
+ /** Every finding about one workflow. */
6
+ export declare function workflowFindingsOf(name: string, raw: unknown, world: WorkflowWorld): WorkflowFinding[];
7
+ /** Every finding about an app's workflows, by name, at paths under `workflows`. */
8
+ export declare function workflowFindings(workflows: unknown, world: WorkflowWorld): (WorkflowFinding & {
9
+ readonly workflow: string;
10
+ })[];
11
+ /** A document's workflows, judged with its own sentences at its own paths (`workflows.<name>.steps.0.act`): what `compileDocument` and `graview check` say of them. */
12
+ export declare function documentWorkflowFindings(document: GraviewDocument): Finding[];
13
+ //# sourceMappingURL=findings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.d.ts","sourceRoot":"","sources":["../../src/workflows/findings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAM7D,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAGtF,OAAO,EAA2B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AA+BzE,wCAAwC;AACxC,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,eAAe,EAAE,CAyEtG;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,CAAC,eAAe,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAU9H;AAED,uKAAuK;AACvK,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,EAAE,CAM7E"}
@@ -0,0 +1,157 @@
1
+ import { error, warning } from "../document/findings.js";
2
+ import { WorkflowSpec } from "../document/workflow-spec.js";
3
+ import { conditionProblems } from "../job-findings.js";
4
+ import { MOST_WORKFLOWS } from "../workflow-shape.js";
5
+ import { followsFindings } from "./policies.js";
6
+ import { scheduleOf } from "./schedule.js";
7
+ import { STEP_KINDS, stepKindOf, stepShapes } from "./steps.js";
8
+ import { WORKFLOW_JUDGING } from "./judging.js";
9
+ import { resolveWorkflow, workflowReach } from "./resolve.js";
10
+ import { workflowWorldOfDocument } from "./world.js";
11
+ /*
12
+ * A DECLARATION'S WORKFLOWS, JUDGED (Roadmap f-jobs-declared), in one
13
+ * vocabulary for a document and a TypeScript app, each finding with the
14
+ * edit that fixes it where one can be written down. Codes:
15
+ *
16
+ * workflow-steps-empty a workflow with no step (error)
17
+ * workflow-schedule-invalid words or cron that do not read (error)
18
+ * workflow-connection-unknown `synced` names no connection (error)
19
+ * workflow-kind-unknown a kind no kind of the app is (error)
20
+ * workflow-field-unknown `changed` names a field the kind lacks (error)
21
+ * workflow-where-invalid a rule that does not read, or reads what is not there (error)
22
+ * workflow-act-unknown an act the app does not give (error)
23
+ * workflow-key-field-unknown a key that reads what the step does not have (error)
24
+ * workflow-agent-acts-empty a model's step that may propose nothing (error)
25
+ * workflow-sends-out-unasked `approve: "apply"` said of a step that writes to another system (warning)
26
+ * workflow-follows-unknown `follows` names no kind (error)
27
+ * workflow-shape anything else not shaped as a workflow (error)
28
+ */
29
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
30
+ const quoted = (names) => [...names].map((name) => `"${name}"`).join(", ") || "none";
31
+ /** What is wrong with a value's shape, as zod says it, at paths under the workflow. */
32
+ function shapeIssues(spec, value, prefix) {
33
+ const parsed = spec.safeParse(value);
34
+ if (parsed.success)
35
+ return [];
36
+ return parsed.error.issues.map((issue) => ({ path: [prefix, ...issue.path.map(String)].filter(Boolean).join("."), message: issue.keys ? `${issue.keys.map((k) => `"${k}"`).join(", ")} ${issue.keys.length === 1 ? "is" : "are"} not part of a workflow here` : issue.message }));
37
+ }
38
+ /** Every finding about one workflow. */
39
+ export function workflowFindingsOf(name, raw, world) {
40
+ const out = [];
41
+ const said = `The workflow “${name}”`;
42
+ if (!isRecord(raw))
43
+ return [{ code: "workflow-shape", severity: "error", path: "", message: `${said} is not a workflow: it is { title, when, steps }.`, fix: "Say its title, what starts it and its steps." }];
44
+ const steps = raw["steps"];
45
+ if (!Array.isArray(steps) || steps.length === 0) {
46
+ out.push({ code: "workflow-steps-empty", severity: "error", path: "steps", message: `${said} has no steps, so it would do nothing.`, fix: "Give it a step — run an act, or let a model propose — or remove it.", edits: [{ op: "remove-workflow", name }] });
47
+ }
48
+ // The shape of everything but the steps, then each step by its own kind's shape: a union's refusal names no kind.
49
+ const shaped = shapeIssues(WorkflowSpec, { ...raw, steps: [{ act: "x" }] }, "").filter((issue) => !issue.path.startsWith("steps"));
50
+ for (const issue of shaped)
51
+ out.push({ code: "workflow-shape", severity: "error", path: issue.path, message: `${said}: ${issue.message}.`, fix: "A workflow says title, when, status, approve and steps." });
52
+ const stepsOk = [];
53
+ (Array.isArray(steps) ? steps : []).forEach((step, index) => {
54
+ const kind = stepKindOf(step);
55
+ if (!kind) {
56
+ out.push({ code: "workflow-shape", severity: "error", path: `steps.${index}`, message: `Step ${index + 1} of “${name}” is no kind of step Graview runs.`, fix: `A step says one of ${quoted(Object.keys(STEP_KINDS))}.` });
57
+ return;
58
+ }
59
+ const issues = shapeIssues(kind.shape(stepShapes()), step, `steps.${index}`);
60
+ for (const issue of issues)
61
+ out.push({ code: "workflow-shape", severity: "error", path: issue.path, message: `Step ${index + 1} of “${name}”: ${issue.message}.`, fix: `${kind.title}: say only the keys that kind of step takes.` });
62
+ if (issues.length === 0)
63
+ stepsOk.push(step);
64
+ else
65
+ return;
66
+ out.push(...kind.findings(step, { world, workflow: name, index, said: `Step ${index + 1} of “${name}”`, declared: raw }));
67
+ });
68
+ if (shaped.length > 0)
69
+ return out;
70
+ const declared = raw;
71
+ declared.when.forEach((trigger, at) => {
72
+ const schedule = scheduleOf(trigger);
73
+ if (typeof schedule === "string")
74
+ out.push({ code: "workflow-schedule-invalid", severity: "error", path: `when.${at}.${"every" in trigger ? "every" : "cron"}`, message: `${said} cannot be run on its clock: ${schedule}.`, fix: 'Write it as "sunday 18:00", "day 03:00", "weekday 09:00", "month 1 09:00", "hour", or five-field cron.' });
75
+ if ("synced" in trigger && !world.connections.has(trigger.synced)) {
76
+ out.push({ code: "workflow-connection-unknown", severity: "error", path: `when.${at}.synced`, message: `${said} starts when “${trigger.synced}” finishes a pass, and the app has no connection called that.`, fix: world.connections.size > 0 ? `Name one of ${quoted(world.connections.keys())}.` : "The app declares no connection; declare one under connections, or start it another way." });
77
+ }
78
+ if ("made" in trigger || "changed" in trigger) {
79
+ const kindName = "made" in trigger ? trigger.made : trigger.changed;
80
+ const key = "made" in trigger ? "made" : "changed";
81
+ const kind = world.kinds.get(kindName);
82
+ if (!kind) {
83
+ out.push({ code: "workflow-kind-unknown", severity: "error", path: `when.${at}.${key}`, message: `${said} starts when a “${kindName}” record is ${key}, and “${kindName}” is not a kind of this app.`, fix: `Name one of its kinds: ${quoted(world.kinds.keys())}.` });
84
+ return;
85
+ }
86
+ if ("changed" in trigger) {
87
+ for (const field of trigger.fields ?? []) {
88
+ if (kind.fields[field] || kind.edges.has(field))
89
+ continue;
90
+ out.push({ code: "workflow-field-unknown", severity: "error", path: `when.${at}.fields`, message: `${said} starts when a ${kindName}'s “${field}” changes, and ${kindName} has no field or relation called that.`, fix: `Name one of ${quoted(Object.keys(kind.fields))}.` });
91
+ }
92
+ }
93
+ if (trigger.where !== undefined) {
94
+ for (const problem of conditionProblems(trigger.where, kindName, kind, world))
95
+ out.push({ code: "workflow-where-invalid", severity: "error", path: `when.${at}.where`, message: `${said} cannot tell which records start it: ${problem}.`, fix: `Write it in the rule language over the fields of "${kindName}".` });
96
+ }
97
+ }
98
+ });
99
+ out.push(...followsFindings(declared.follows, world));
100
+ // Said, not refused: a step that writes to another system unasked.
101
+ stepsOk.forEach((step, index) => {
102
+ const stated = step.approve ?? declared.approve;
103
+ if (stated !== "apply")
104
+ return;
105
+ const reach = workflowReach([step], world);
106
+ if (!reach.sendsOut)
107
+ return;
108
+ const through = [...world.connections].filter(([, connection]) => connection.writes && connection.kinds.some((kind) => reach.writes.includes(kind))).map(([name]) => name);
109
+ const own = step.approve !== undefined;
110
+ out.push({
111
+ code: "workflow-sends-out-unasked",
112
+ severity: "warning",
113
+ path: own ? `steps.${index}.approve` : "approve",
114
+ message: `Step ${index + 1} of “${name}” writes through ${quoted(through)} to another system without asking anybody first.`,
115
+ fix: 'Allowed. Say approve: "ask" to have a person approve each run first.',
116
+ edits: [{ op: "set-workflow", name, workflow: own ? { ...raw, steps: raw["steps"].map((one, i) => (i === index ? { ...one, approve: "ask" } : one)) } : { ...raw, approve: "ask" } }],
117
+ });
118
+ });
119
+ return out;
120
+ }
121
+ /** Every finding about an app's workflows, by name, at paths under `workflows`. */
122
+ export function workflowFindings(workflows, world) {
123
+ if (workflows === undefined)
124
+ return [];
125
+ if (!isRecord(workflows))
126
+ return [{ workflow: "", code: "workflow-shape", severity: "error", path: "", message: "workflows is the app's workflows by name.", fix: 'Write { "<name>": { title, when, steps } }.' }];
127
+ const out = [];
128
+ if (Object.keys(workflows).length > MOST_WORKFLOWS)
129
+ out.push({ workflow: "", code: "workflow-shape", severity: "error", path: "", message: `The app declares ${Object.keys(workflows).length} workflows; at most ${MOST_WORKFLOWS}.`, fix: "Fold some into others." });
130
+ for (const [name, raw] of Object.entries(workflows)) {
131
+ if (!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(name))
132
+ out.push({ workflow: name, code: "workflow-shape", severity: "error", path: "", message: `“${name}” is not a workflow's name: kebab-case, like "next-weeks-events".`, fix: "Rename it in kebab-case." });
133
+ for (const finding of workflowFindingsOf(name, raw, world))
134
+ out.push({ ...finding, workflow: name });
135
+ }
136
+ return out;
137
+ }
138
+ /** A document's workflows, judged with its own sentences at its own paths (`workflows.<name>.steps.0.act`): what `compileDocument` and `graview check` say of them. */
139
+ export function documentWorkflowFindings(document) {
140
+ if (document.workflows === undefined)
141
+ return [];
142
+ return workflowFindings(document.workflows, workflowWorldOfDocument(document)).map((finding) => {
143
+ const path = ["workflows", finding.workflow, finding.path].filter(Boolean).join(".");
144
+ return finding.severity === "warning" ? warning(finding.code, path, finding.message, finding.fix, finding.edits) : error(finding.code, path, finding.message, finding.fix, finding.edits ? { edits: finding.edits } : undefined);
145
+ });
146
+ }
147
+ // An edit asks this checker when it is loaded (`./judging.ts`).
148
+ WORKFLOW_JUDGING.judge = (name, workflow, document) => {
149
+ const world = workflowWorldOfDocument(document);
150
+ const found = workflowFindingsOf(name, workflow, world);
151
+ const errors = found.filter((finding) => finding.severity === "error");
152
+ if (errors.length > 0)
153
+ return { errors, warnings: [], said: "" };
154
+ const resolved = resolveWorkflow(name, workflow, world);
155
+ return { errors: [], warnings: found.filter((finding) => finding.severity === "warning").map((finding) => finding.message), said: `${resolved.words.slice(0, resolved.words.lastIndexOf(":"))}, ${resolved.steps.length === 1 ? "one step" : `${resolved.steps.length} steps`}${resolved.status === "paused" ? ", paused" : ""}` };
156
+ };
157
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/workflows/findings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** A key when the step says none: one record per source and day. */
2
+ export declare const DEFAULT_GENERATE_KEY = "{source}:{date}";
3
+ /** The longest window a step makes records for, in days. */
4
+ export declare const MOST_WINDOW_DAYS = 366;
5
+ /** The most records one step wants in one run. */
6
+ export declare const MOST_GENERATED = 2000;
7
+ export declare const WINDOW_WORDS: RegExp;
8
+ /** What a window says in words, or why it cannot be read. */
9
+ export declare function windowWordsProblem(window: string): string | undefined;
10
+ /** The `$` names a generate step's values may give. */
11
+ export declare const GENERATE_REFS: readonly ["$date", "$source", "$subject", "$today", "$now"];
12
+ //# sourceMappingURL=generate-words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-words.d.ts","sourceRoot":"","sources":["../../src/workflows/generate-words.ts"],"names":[],"mappings":"AAOA,oEAAoE;AACpE,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AAEtD,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,kDAAkD;AAClD,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,YAAY,QAAkE,CAAC;AAE5F,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKrE;AAED,uDAAuD;AACvD,eAAO,MAAM,aAAa,6DAA8D,CAAC"}
@@ -0,0 +1,25 @@
1
+ /*
2
+ * A GENERATE STEP'S WORDS, apart from what it wants (`generate.ts`): its
3
+ * default key, the windows it reads, the `$` names its values give and its
4
+ * limits — what the checker holds a step to without bringing the runner's
5
+ * arithmetic onto every path `graview check` is on.
6
+ */
7
+ /** A key when the step says none: one record per source and day. */
8
+ export const DEFAULT_GENERATE_KEY = "{source}:{date}";
9
+ /** The longest window a step makes records for, in days. */
10
+ export const MOST_WINDOW_DAYS = 366;
11
+ /** The most records one step wants in one run. */
12
+ export const MOST_GENERATED = 2000;
13
+ export const WINDOW_WORDS = /^(?:today|tomorrow|this week|next week|next (\d{1,3}) days?)$/;
14
+ /** What a window says in words, or why it cannot be read. */
15
+ export function windowWordsProblem(window) {
16
+ const found = WINDOW_WORDS.exec(window.trim().toLowerCase());
17
+ if (!found)
18
+ return `"${window}" is not a window it can read: say "today", "tomorrow", "this week", "next week" or "next 7 days", or give { "from": …, "to": … }`;
19
+ if (found[1] !== undefined && (+found[1] < 1 || +found[1] > MOST_WINDOW_DAYS))
20
+ return `"${window}" is not between 1 and ${MOST_WINDOW_DAYS} days`;
21
+ return undefined;
22
+ }
23
+ /** The `$` names a generate step's values may give. */
24
+ export const GENERATE_REFS = ["$date", "$source", "$subject", "$today", "$now"];
25
+ //# sourceMappingURL=generate-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-words.js","sourceRoot":"","sources":["../../src/workflows/generate-words.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAEtD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,kDAAkD;AAClD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;AAEnC,MAAM,CAAC,MAAM,YAAY,GAAG,+DAA+D,CAAC;AAE5F,6DAA6D;AAC7D,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,MAAM,mIAAmI,CAAC;IACjK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;QAAE,OAAO,IAAI,MAAM,0BAA0B,gBAAgB,OAAO,CAAC;IAClJ,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { type Value } from "../document/expr/evaluate.js";
2
+ import type { Graph } from "../graph/graph.js";
3
+ import type { AnySchema } from "../schema/schema.js";
4
+ import type { GenerateStep, GenerateWindow } from "../workflow-shape.js";
5
+ /** The days a window covers, from and to (both included), on a day and the app's clock. A week starts on Monday. */
6
+ export declare function windowDays(window: GenerateWindow, at: {
7
+ readonly today: string;
8
+ readonly zone: string;
9
+ readonly evaluate?: (expr: string) => Value;
10
+ }): {
11
+ readonly from: string;
12
+ readonly to: string;
13
+ };
14
+ /** The days a record's date falls on between two days: a date, a date that repeats, or a set of weekdays. Each as the record says it (a moment keeps its time of day). */
15
+ export declare function datesIn(node: Readonly<Record<string, unknown>>, field: string, window: {
16
+ readonly from: string;
17
+ readonly to: string;
18
+ }, zone: string): string[];
19
+ /** One record a generate step wants. */
20
+ export interface WantedRecord {
21
+ /** The record it comes from, and its kind. */
22
+ readonly source: string;
23
+ readonly sourceKind: string;
24
+ /** The occurrence, as the source says it, and its day. */
25
+ readonly date: string;
26
+ readonly day: string;
27
+ /** The step's key, read on the source and the occurrence. */
28
+ readonly key: string;
29
+ /** The id the key gives what the step makes: the same key, the same record. */
30
+ readonly id: string;
31
+ /** Its fields, as `set` reads them. */
32
+ readonly values: Readonly<Record<string, unknown>>;
33
+ }
34
+ /** What a generate step wants for one run. */
35
+ export interface GenerateWants {
36
+ readonly from: string;
37
+ readonly to: string;
38
+ readonly wanted: readonly WantedRecord[];
39
+ /** What could not be read, by source record, in words. */
40
+ readonly problems: readonly {
41
+ readonly source?: string;
42
+ readonly why: string;
43
+ }[];
44
+ }
45
+ /** What a generate step reads a run with. */
46
+ export interface GenerateReading {
47
+ readonly graph: Graph<AnySchema>;
48
+ readonly schema: AnySchema;
49
+ /** The workflow's name: in every id the step makes. */
50
+ readonly workflow: string;
51
+ readonly now: number;
52
+ /** The run's day on the app's clock; read from `now` in `timeZone` when unsaid. */
53
+ readonly today?: string | undefined;
54
+ readonly timeZone?: string | undefined;
55
+ readonly locale?: string | undefined;
56
+ }
57
+ /** WHAT A GENERATE STEP WANTS, on the graph as it stands: every record, in day order. */
58
+ export declare function generateWants(step: GenerateStep, reading: GenerateReading): GenerateWants;
59
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/workflows/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAyC,KAAK,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAKjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKrD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAaxF,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAyBrM;AAED,0KAA0K;AAC1K,wBAAgB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAa9J;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACpD;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,0DAA0D;IAC1D,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClF;AAeD,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,aAAa,CAiDzF"}