@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.
- package/README.md +13 -1
- package/dist/app-places.d.ts.map +1 -1
- package/dist/app-places.js +2 -2
- package/dist/app-places.js.map +1 -1
- package/dist/app.d.ts +22 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js.map +1 -1
- package/dist/arranging.js +2 -2
- package/dist/arranging.js.map +1 -1
- package/dist/capabilities.js +1 -1
- package/dist/capabilities.js.map +1 -1
- package/dist/cli/check/hidden-reads.d.ts.map +1 -1
- package/dist/cli/check/hidden-reads.js +26 -0
- package/dist/cli/check/hidden-reads.js.map +1 -1
- package/dist/cli/check/index.d.ts +2 -0
- package/dist/cli/check/index.d.ts.map +1 -1
- package/dist/cli/check/index.js +2 -0
- package/dist/cli/check/index.js.map +1 -1
- package/dist/cli/check/tidying.d.ts +14 -0
- package/dist/cli/check/tidying.d.ts.map +1 -0
- package/dist/cli/check/tidying.js +24 -0
- package/dist/cli/check/tidying.js.map +1 -0
- package/dist/cli/check/workflows.d.ts +11 -0
- package/dist/cli/check/workflows.d.ts.map +1 -0
- package/dist/cli/check/workflows.js +20 -0
- package/dist/cli/check/workflows.js.map +1 -0
- package/dist/cli/check.d.ts.map +1 -1
- package/dist/cli/check.js +3 -1
- package/dist/cli/check.js.map +1 -1
- package/dist/cli/describe.d.ts.map +1 -1
- package/dist/cli/describe.js +45 -2
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/document-schema.d.ts.map +1 -1
- package/dist/cli/document-schema.js +15 -2
- package/dist/cli/document-schema.js.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/compose.d.ts +11 -3
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +12 -2
- package/dist/compose.js.map +1 -1
- package/dist/css/sanitize.d.ts +125 -0
- package/dist/css/sanitize.d.ts.map +1 -0
- package/dist/css/sanitize.js +989 -0
- package/dist/css/sanitize.js.map +1 -0
- package/dist/css/tables.d.ts +55 -0
- package/dist/css/tables.d.ts.map +1 -0
- package/dist/css/tables.js +137 -0
- package/dist/css/tables.js.map +1 -0
- package/dist/css.d.ts +20 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +19 -0
- package/dist/css.js.map +1 -0
- package/dist/days.d.ts +15 -0
- package/dist/days.d.ts.map +1 -1
- package/dist/days.js +21 -0
- package/dist/days.js.map +1 -1
- package/dist/describe.d.ts +1 -1
- package/dist/describe.d.ts.map +1 -1
- package/dist/document/act-findings.d.ts.map +1 -1
- package/dist/document/act-findings.js +80 -1
- package/dist/document/act-findings.js.map +1 -1
- package/dist/document/amount.d.ts +1 -1
- package/dist/document/amount.d.ts.map +1 -1
- package/dist/document/amount.js +2 -2
- package/dist/document/amount.js.map +1 -1
- package/dist/document/blocks.d.ts.map +1 -1
- package/dist/document/blocks.js +17 -1
- package/dist/document/blocks.js.map +1 -1
- package/dist/document/brand-check.d.ts +15 -1
- package/dist/document/brand-check.d.ts.map +1 -1
- package/dist/document/brand-check.js +80 -0
- package/dist/document/brand-check.js.map +1 -1
- package/dist/document/brand.d.ts.map +1 -1
- package/dist/document/brand.js +2 -0
- package/dist/document/brand.js.map +1 -1
- package/dist/document/compile-checked.d.ts.map +1 -1
- package/dist/document/compile-checked.js +5 -2
- package/dist/document/compile-checked.js.map +1 -1
- package/dist/document/compile.d.ts.map +1 -1
- package/dist/document/compile.js +96 -16
- package/dist/document/compile.js.map +1 -1
- package/dist/document/compiled.d.ts +32 -3
- package/dist/document/compiled.d.ts.map +1 -1
- package/dist/document/compiled.js +123 -12
- package/dist/document/compiled.js.map +1 -1
- package/dist/document/connection-findings.js +165 -22
- package/dist/document/connection-findings.js.map +1 -1
- package/dist/document/connection-spec.d.ts +38 -1
- package/dist/document/connection-spec.d.ts.map +1 -1
- package/dist/document/connection-spec.js +71 -7
- package/dist/document/connection-spec.js.map +1 -1
- package/dist/document/covers.d.ts +48 -0
- package/dist/document/covers.d.ts.map +1 -0
- package/dist/document/covers.js +90 -0
- package/dist/document/covers.js.map +1 -0
- package/dist/document/derives-findings.d.ts +4 -0
- package/dist/document/derives-findings.d.ts.map +1 -0
- package/dist/document/derives-findings.js +68 -0
- package/dist/document/derives-findings.js.map +1 -0
- package/dist/document/describe-forms.js +2 -2
- package/dist/document/describe-forms.js.map +1 -1
- package/dist/document/describe-place.d.ts +3 -0
- package/dist/document/describe-place.d.ts.map +1 -1
- package/dist/document/describe-place.js +11 -0
- package/dist/document/describe-place.js.map +1 -1
- package/dist/document/described.d.ts +28 -0
- package/dist/document/described.d.ts.map +1 -1
- package/dist/document/diff.d.ts +6 -0
- package/dist/document/diff.d.ts.map +1 -1
- package/dist/document/diff.js +53 -2
- package/dist/document/diff.js.map +1 -1
- package/dist/document/edit.d.ts +1 -1
- package/dist/document/edit.d.ts.map +1 -1
- package/dist/document/edit.js +366 -29
- package/dist/document/edit.js.map +1 -1
- package/dist/document/expr/evaluate.d.ts +17 -1
- package/dist/document/expr/evaluate.d.ts.map +1 -1
- package/dist/document/expr/evaluate.js +110 -2
- package/dist/document/expr/evaluate.js.map +1 -1
- package/dist/document/expr/index.d.ts +1 -0
- package/dist/document/expr/index.d.ts.map +1 -1
- package/dist/document/expr/index.js +2 -0
- package/dist/document/expr/index.js.map +1 -1
- package/dist/document/expr/typing.d.ts +24 -0
- package/dist/document/expr/typing.d.ts.map +1 -0
- package/dist/document/expr/typing.js +219 -0
- package/dist/document/expr/typing.js.map +1 -0
- package/dist/document/expr/when.d.ts +52 -0
- package/dist/document/expr/when.d.ts.map +1 -0
- package/dist/document/expr/when.js +215 -0
- package/dist/document/expr/when.js.map +1 -0
- package/dist/document/expr-type-findings.d.ts +5 -0
- package/dist/document/expr-type-findings.d.ts.map +1 -0
- package/dist/document/expr-type-findings.js +90 -0
- package/dist/document/expr-type-findings.js.map +1 -0
- package/dist/document/format-words.d.ts +1 -0
- package/dist/document/format-words.d.ts.map +1 -1
- package/dist/document/format-words.js +2 -2
- package/dist/document/format-words.js.map +1 -1
- package/dist/document/index.d.ts +6 -3
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/index.js +5 -2
- package/dist/document/index.js.map +1 -1
- package/dist/document/kept-in-step-with.d.ts +20 -0
- package/dist/document/kept-in-step-with.d.ts.map +1 -0
- package/dist/document/kept-in-step-with.js +38 -0
- package/dist/document/kept-in-step-with.js.map +1 -0
- package/dist/document/kept-in-step.d.ts.map +1 -1
- package/dist/document/kept-in-step.js +3 -1
- package/dist/document/kept-in-step.js.map +1 -1
- package/dist/document/linked-findings.js +1 -1
- package/dist/document/linked-findings.js.map +1 -1
- package/dist/document/money.d.ts +10 -2
- package/dist/document/money.d.ts.map +1 -1
- package/dist/document/money.js +14 -5
- package/dist/document/money.js.map +1 -1
- package/dist/document/policy-words.d.ts +2 -0
- package/dist/document/policy-words.d.ts.map +1 -1
- package/dist/document/policy-words.js +11 -1
- package/dist/document/policy-words.js.map +1 -1
- package/dist/document/rule-line.d.ts +7 -3
- package/dist/document/rule-line.d.ts.map +1 -1
- package/dist/document/rule-line.js +17 -2
- package/dist/document/rule-line.js.map +1 -1
- package/dist/document/rule-reads.d.ts.map +1 -1
- package/dist/document/rule-reads.js +3 -1
- package/dist/document/rule-reads.js.map +1 -1
- package/dist/document/rules.d.ts +30 -0
- package/dist/document/rules.d.ts.map +1 -1
- package/dist/document/rules.js +74 -0
- package/dist/document/rules.js.map +1 -1
- package/dist/document/schema.d.ts +110 -2
- package/dist/document/schema.d.ts.map +1 -1
- package/dist/document/schema.js +125 -10
- package/dist/document/schema.js.map +1 -1
- package/dist/document/template-parse.d.ts.map +1 -1
- package/dist/document/template-parse.js +7 -1
- package/dist/document/template-parse.js.map +1 -1
- package/dist/document/template.d.ts +2 -0
- package/dist/document/template.d.ts.map +1 -1
- package/dist/document/template.js +10 -1
- package/dist/document/template.js.map +1 -1
- package/dist/document/to-document.d.ts.map +1 -1
- package/dist/document/to-document.js +5 -3
- package/dist/document/to-document.js.map +1 -1
- package/dist/document/workflow-spec.d.ts +72 -0
- package/dist/document/workflow-spec.d.ts.map +1 -0
- package/dist/document/workflow-spec.js +45 -0
- package/dist/document/workflow-spec.js.map +1 -0
- package/dist/document.schema.json +1143 -50
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +2 -0
- package/dist/history.js.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- package/dist/index.js.map +1 -1
- package/dist/installation.d.ts +1 -1
- package/dist/invariants/types.d.ts +7 -2
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/job-findings.d.ts +5 -0
- package/dist/job-findings.d.ts.map +1 -1
- package/dist/job-findings.js +9 -3
- package/dist/job-findings.js.map +1 -1
- package/dist/keep-linked.d.ts +45 -0
- package/dist/keep-linked.d.ts.map +1 -0
- package/dist/keep-linked.js +188 -0
- package/dist/keep-linked.js.map +1 -0
- package/dist/lines.d.ts.map +1 -1
- package/dist/lines.js +6 -2
- package/dist/lines.js.map +1 -1
- package/dist/mutations/derive-edits.js +2 -2
- package/dist/mutations/propose-changes.d.ts +24 -0
- package/dist/mutations/propose-changes.d.ts.map +1 -0
- package/dist/mutations/propose-changes.js +30 -0
- package/dist/mutations/propose-changes.js.map +1 -0
- package/dist/mutations/types.d.ts +9 -0
- package/dist/mutations/types.d.ts.map +1 -1
- package/dist/mutations/vote-suggestion.d.ts +97 -0
- package/dist/mutations/vote-suggestion.d.ts.map +1 -0
- package/dist/mutations/vote-suggestion.js +59 -0
- package/dist/mutations/vote-suggestion.js.map +1 -0
- package/dist/mutations/words.js +3 -3
- package/dist/navigate.d.ts +7 -3
- package/dist/navigate.d.ts.map +1 -1
- package/dist/navigate.js +7 -3
- package/dist/navigate.js.map +1 -1
- package/dist/ops/digest.d.ts +3 -1
- package/dist/ops/digest.d.ts.map +1 -1
- package/dist/ops/digest.js +7 -2
- package/dist/ops/digest.js.map +1 -1
- package/dist/ops/lineage.d.ts +29 -2
- package/dist/ops/lineage.d.ts.map +1 -1
- package/dist/ops/lineage.js +12 -4
- package/dist/ops/lineage.js.map +1 -1
- package/dist/ops/log.d.ts.map +1 -1
- package/dist/ops/log.js +13 -2
- package/dist/ops/log.js.map +1 -1
- package/dist/ops/suggestions.d.ts +75 -1
- package/dist/ops/suggestions.d.ts.map +1 -1
- package/dist/ops/suggestions.js +123 -6
- package/dist/ops/suggestions.js.map +1 -1
- package/dist/ops/tidying.d.ts.map +1 -1
- package/dist/ops/tidying.js +6 -1
- package/dist/ops/tidying.js.map +1 -1
- package/dist/ops/types.d.ts +41 -0
- package/dist/ops/types.d.ts.map +1 -1
- package/dist/ops/types.js.map +1 -1
- package/dist/ops/undo.d.ts.map +1 -1
- package/dist/ops/undo.js +17 -0
- package/dist/ops/undo.js.map +1 -1
- package/dist/permissions/policy.d.ts +7 -0
- package/dist/permissions/policy.d.ts.map +1 -1
- package/dist/permissions/policy.js +12 -0
- package/dist/permissions/policy.js.map +1 -1
- package/dist/permissions/types.d.ts +27 -0
- package/dist/permissions/types.d.ts.map +1 -1
- package/dist/permissions/types.js.map +1 -1
- package/dist/place-names.d.ts +42 -0
- package/dist/place-names.d.ts.map +1 -0
- package/dist/place-names.js +43 -0
- package/dist/place-names.js.map +1 -0
- package/dist/places.d.ts +12 -0
- package/dist/places.d.ts.map +1 -1
- package/dist/places.js +37 -1
- package/dist/places.js.map +1 -1
- package/dist/scene.d.ts +2 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +2 -0
- package/dist/scene.js.map +1 -1
- package/dist/schema/amount-mark.d.ts +2 -0
- package/dist/schema/amount-mark.d.ts.map +1 -1
- package/dist/schema/amount-mark.js.map +1 -1
- package/dist/schema/amount-words.js +2 -2
- package/dist/schema/amount-words.js.map +1 -1
- package/dist/schema/choice-words.js +2 -2
- package/dist/schema/define-node.d.ts +8 -2
- package/dist/schema/define-node.d.ts.map +1 -1
- package/dist/schema/define-node.js +2 -2
- package/dist/schema/define-node.js.map +1 -1
- package/dist/schema/humanize.d.ts +17 -0
- package/dist/schema/humanize.d.ts.map +1 -1
- package/dist/schema/humanize.js +28 -1
- package/dist/schema/humanize.js.map +1 -1
- package/dist/schema/reading.d.ts +8 -0
- package/dist/schema/reading.d.ts.map +1 -1
- package/dist/schema/reading.js +16 -2
- package/dist/schema/reading.js.map +1 -1
- package/dist/schema/types.d.ts +8 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/value-words.js +2 -2
- package/dist/schema/value-words.js.map +1 -1
- package/dist/starting-document.d.ts +47 -2
- package/dist/starting-document.d.ts.map +1 -1
- package/dist/starting-document.js +66 -8
- package/dist/starting-document.js.map +1 -1
- package/dist/store.d.ts +75 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +305 -29
- package/dist/store.js.map +1 -1
- package/dist/sync/connection.d.ts +35 -6
- package/dist/sync/connection.d.ts.map +1 -1
- package/dist/sync/connection.js +252 -47
- package/dist/sync/connection.js.map +1 -1
- package/dist/sync/engine.d.ts +83 -0
- package/dist/sync/engine.d.ts.map +1 -1
- package/dist/sync/engine.js +157 -4
- package/dist/sync/engine.js.map +1 -1
- package/dist/sync/google-calendar.d.ts +8 -0
- package/dist/sync/google-calendar.d.ts.map +1 -1
- package/dist/sync/google-calendar.js +30 -3
- package/dist/sync/google-calendar.js.map +1 -1
- package/dist/sync/guest-words.d.ts +9 -0
- package/dist/sync/guest-words.d.ts.map +1 -0
- package/dist/sync/guest-words.js +41 -0
- package/dist/sync/guest-words.js.map +1 -0
- package/dist/sync/guests.d.ts +44 -0
- package/dist/sync/guests.d.ts.map +1 -0
- package/dist/sync/guests.js +57 -0
- package/dist/sync/guests.js.map +1 -0
- package/dist/sync/index.d.ts +8 -5
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +2 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/notion-stub.d.ts +4 -1
- package/dist/sync/notion-stub.d.ts.map +1 -1
- package/dist/sync/notion-stub.js +40 -0
- package/dist/sync/notion-stub.js.map +1 -1
- package/dist/sync/notion.d.ts +43 -2
- package/dist/sync/notion.d.ts.map +1 -1
- package/dist/sync/notion.js +274 -140
- package/dist/sync/notion.js.map +1 -1
- package/dist/sync/status.d.ts +43 -0
- package/dist/sync/status.d.ts.map +1 -0
- package/dist/sync/status.js +45 -0
- package/dist/sync/status.js.map +1 -0
- package/dist/sync/types.d.ts +64 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/types.js.map +1 -1
- package/dist/testing.js +1 -1
- package/dist/testing.js.map +1 -1
- package/dist/theme/contrast.d.ts +2 -0
- package/dist/theme/contrast.d.ts.map +1 -1
- package/dist/theme/contrast.js +4 -0
- package/dist/theme/contrast.js.map +1 -1
- package/dist/theme/ground.d.ts +1 -2
- package/dist/theme/ground.d.ts.map +1 -1
- package/dist/theme/ground.js +2 -5
- package/dist/theme/ground.js.map +1 -1
- package/dist/theme/marks.d.ts +14 -2
- package/dist/theme/marks.d.ts.map +1 -1
- package/dist/theme/marks.js +20 -3
- package/dist/theme/marks.js.map +1 -1
- package/dist/theme/types.d.ts +22 -0
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/types.js.map +1 -1
- package/dist/tidying.d.ts +79 -4
- package/dist/tidying.d.ts.map +1 -1
- package/dist/tidying.js +216 -9
- package/dist/tidying.js.map +1 -1
- package/dist/trait-vocabulary.d.ts +17 -0
- package/dist/trait-vocabulary.d.ts.map +1 -0
- package/dist/trait-vocabulary.js +16 -0
- package/dist/trait-vocabulary.js.map +1 -0
- package/dist/traits.d.ts +14 -7
- package/dist/traits.d.ts.map +1 -1
- package/dist/traits.js +33 -12
- package/dist/traits.js.map +1 -1
- package/dist/validate-graph.d.ts +2 -1
- package/dist/validate-graph.d.ts.map +1 -1
- package/dist/validate-graph.js +32 -1
- package/dist/validate-graph.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/words.d.ts +4 -1
- package/dist/words.d.ts.map +1 -1
- package/dist/words.js +4 -1
- package/dist/words.js.map +1 -1
- package/dist/workflow-shape.d.ts +217 -0
- package/dist/workflow-shape.d.ts.map +1 -0
- package/dist/workflow-shape.js +31 -0
- package/dist/workflow-shape.js.map +1 -0
- package/dist/workflows/findings.d.ts +13 -0
- package/dist/workflows/findings.d.ts.map +1 -0
- package/dist/workflows/findings.js +157 -0
- package/dist/workflows/findings.js.map +1 -0
- package/dist/workflows/generate-words.d.ts +12 -0
- package/dist/workflows/generate-words.d.ts.map +1 -0
- package/dist/workflows/generate-words.js +25 -0
- package/dist/workflows/generate-words.js.map +1 -0
- package/dist/workflows/generate.d.ts +59 -0
- package/dist/workflows/generate.d.ts.map +1 -0
- package/dist/workflows/generate.js +165 -0
- package/dist/workflows/generate.js.map +1 -0
- package/dist/workflows/judging.d.ts +17 -0
- package/dist/workflows/judging.d.ts.map +1 -0
- package/dist/workflows/judging.js +11 -0
- package/dist/workflows/judging.js.map +1 -0
- package/dist/workflows/next.d.ts +18 -0
- package/dist/workflows/next.d.ts.map +1 -0
- package/dist/workflows/next.js +75 -0
- package/dist/workflows/next.js.map +1 -0
- package/dist/workflows/on-the-map.d.ts +70 -0
- package/dist/workflows/on-the-map.d.ts.map +1 -0
- package/dist/workflows/on-the-map.js +94 -0
- package/dist/workflows/on-the-map.js.map +1 -0
- package/dist/workflows/policies.d.ts +39 -0
- package/dist/workflows/policies.d.ts.map +1 -0
- package/dist/workflows/policies.js +95 -0
- package/dist/workflows/policies.js.map +1 -0
- package/dist/workflows/resolve.d.ts +55 -0
- package/dist/workflows/resolve.d.ts.map +1 -0
- package/dist/workflows/resolve.js +57 -0
- package/dist/workflows/resolve.js.map +1 -0
- package/dist/workflows/schedule.d.ts +28 -0
- package/dist/workflows/schedule.d.ts.map +1 -0
- package/dist/workflows/schedule.js +160 -0
- package/dist/workflows/schedule.js.map +1 -0
- package/dist/workflows/step-act.d.ts +6 -0
- package/dist/workflows/step-act.d.ts.map +1 -0
- package/dist/workflows/step-act.js +79 -0
- package/dist/workflows/step-act.js.map +1 -0
- package/dist/workflows/step-agent.d.ts +4 -0
- package/dist/workflows/step-agent.d.ts.map +1 -0
- package/dist/workflows/step-agent.js +55 -0
- package/dist/workflows/step-agent.js.map +1 -0
- package/dist/workflows/step-archive.d.ts +8 -0
- package/dist/workflows/step-archive.d.ts.map +1 -0
- package/dist/workflows/step-archive.js +74 -0
- package/dist/workflows/step-archive.js.map +1 -0
- package/dist/workflows/step-classify.d.ts +23 -0
- package/dist/workflows/step-classify.d.ts.map +1 -0
- package/dist/workflows/step-classify.js +143 -0
- package/dist/workflows/step-classify.js.map +1 -0
- package/dist/workflows/step-generate.d.ts +7 -0
- package/dist/workflows/step-generate.d.ts.map +1 -0
- package/dist/workflows/step-generate.js +185 -0
- package/dist/workflows/step-generate.js.map +1 -0
- package/dist/workflows/steps.d.ts +75 -0
- package/dist/workflows/steps.d.ts.map +1 -0
- package/dist/workflows/steps.js +40 -0
- package/dist/workflows/steps.js.map +1 -0
- package/dist/workflows/triggered.d.ts +22 -0
- package/dist/workflows/triggered.d.ts.map +1 -0
- package/dist/workflows/triggered.js +52 -0
- package/dist/workflows/triggered.js.map +1 -0
- package/dist/workflows/values.d.ts +28 -0
- package/dist/workflows/values.d.ts.map +1 -0
- package/dist/workflows/values.js +75 -0
- package/dist/workflows/values.js.map +1 -0
- package/dist/workflows/words.d.ts +10 -0
- package/dist/workflows/words.d.ts.map +1 -0
- package/dist/workflows/words.js +30 -0
- package/dist/workflows/words.js.map +1 -0
- package/dist/workflows/world.d.ts +23 -0
- package/dist/workflows/world.d.ts.map +1 -0
- package/dist/workflows/world.js +50 -0
- package/dist/workflows/world.js.map +1 -0
- package/dist/workflows.d.ts +35 -0
- package/dist/workflows.d.ts.map +1 -0
- package/dist/workflows.js +20 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +18 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-agent.js","sourceRoot":"","sources":["../../src/workflows/step-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ArchiveStep } from "../workflow-shape.js";
|
|
2
|
+
import type { StepKind } from "./steps.js";
|
|
3
|
+
/** How long `after` asks a record to have stood, in milliseconds, or undefined when its words do not read. */
|
|
4
|
+
export declare function afterMs(after: string): number | undefined;
|
|
5
|
+
/** `after` said: "3 days after it last changed", "7 days after its date". */
|
|
6
|
+
export declare function afterWords(after: ArchiveStep["after"]): string;
|
|
7
|
+
export declare const archiveStep: StepKind<ArchiveStep>;
|
|
8
|
+
//# sourceMappingURL=step-archive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-archive.d.ts","sourceRoot":"","sources":["../../src/workflows/step-archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAuB,QAAQ,EAA+B,MAAM,YAAY,CAAC;AAoB7F,8GAA8G;AAC9G,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKzD;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,CAI9D;AAED,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,WAAW,CAwC7C,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import * as z from "../schema/zod.js";
|
|
2
|
+
import { conditionProblems } from "../job-findings.js";
|
|
3
|
+
/*
|
|
4
|
+
* SET ASIDE WHAT IS DONE WITH (Roadmap f-retention-rules): the records of
|
|
5
|
+
* one kind a rule holds of, once they have stood so long — "archive
|
|
6
|
+
* grocery lists where status == 'done' after 3 days". Archived, never
|
|
7
|
+
* removed (FR-173): each keeps its fields, its links and its history, and
|
|
8
|
+
* "Bring it back" undoes it. Deterministic, so it spends no model. The
|
|
9
|
+
* run holds it to what people said — a record left alone, a kind the app
|
|
10
|
+
* says is never tidied — and never sets aside again a record a person
|
|
11
|
+
* brought back from one of this workflow's archives
|
|
12
|
+
* (`@graview/tools/workflows`).
|
|
13
|
+
*/
|
|
14
|
+
const quoted = (names) => [...names].map((name) => `"${name}"`).join(", ") || "none";
|
|
15
|
+
/** How long, in words: "3 days", "1 day", "2 weeks", "12 hours". */
|
|
16
|
+
const AFTER = /^\s*(\d{1,4})\s*(hour|hours|day|days|week|weeks)\s*$/i;
|
|
17
|
+
/** How long `after` asks a record to have stood, in milliseconds, or undefined when its words do not read. */
|
|
18
|
+
export function afterMs(after) {
|
|
19
|
+
const found = AFTER.exec(after);
|
|
20
|
+
if (!found)
|
|
21
|
+
return undefined;
|
|
22
|
+
const unit = found[2].toLowerCase().replace(/s$/, "");
|
|
23
|
+
return Number(found[1]) * (unit === "hour" ? 3_600_000 : unit === "day" ? 86_400_000 : 7 * 86_400_000);
|
|
24
|
+
}
|
|
25
|
+
/** `after` said: "3 days after it last changed", "7 days after its date". */
|
|
26
|
+
export function afterWords(after) {
|
|
27
|
+
if (after === undefined)
|
|
28
|
+
return "";
|
|
29
|
+
if (typeof after === "string")
|
|
30
|
+
return ` ${after.trim()} after it last changed`;
|
|
31
|
+
return ` ${after.days} ${after.days === 1 ? "day" : "days"} after its ${after.field.replace(/([a-z])([A-Z])/g, "$1 $2").toLowerCase()}`;
|
|
32
|
+
}
|
|
33
|
+
export const archiveStep = {
|
|
34
|
+
key: "archive",
|
|
35
|
+
title: "Archive what is done with",
|
|
36
|
+
shape: (s) => z.strictObject({
|
|
37
|
+
archive: s.name("kind"),
|
|
38
|
+
where: z.optional(s.expression),
|
|
39
|
+
after: z.optional(z.union([s.str(1, 40), z.strictObject({ field: s.str(1, 120), days: z.number().check(z.int(), z.minimum(0), z.maximum(36_500)) })])),
|
|
40
|
+
approve: z.optional(s.approve),
|
|
41
|
+
}),
|
|
42
|
+
findings(step, check) {
|
|
43
|
+
const { world, said, index } = check;
|
|
44
|
+
const at = `steps.${index}`;
|
|
45
|
+
const out = [];
|
|
46
|
+
const kind = world.kinds.get(step.archive);
|
|
47
|
+
if (!kind) {
|
|
48
|
+
out.push({ code: "workflow-kind-unknown", severity: "error", path: `${at}.archive`, message: `${said} archives "${step.archive}" records, and "${step.archive}" is not a kind of this app.`, fix: `Name one of its kinds: ${quoted(world.kinds.keys())}.` });
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
if (!world.acts.includes(`archive-${step.archive}`)) {
|
|
52
|
+
out.push({ code: "workflow-archive-never", severity: "error", path: `${at}.archive`, message: `${said} archives ${world.noun(step.archive)} records, and the app says they are never archived.`, fix: `Take "archives: false" off "${step.archive}", or let this step go.` });
|
|
53
|
+
}
|
|
54
|
+
if (step.where !== undefined) {
|
|
55
|
+
for (const problem of conditionProblems(step.where, step.archive, kind, world)) {
|
|
56
|
+
out.push({ code: "workflow-where-invalid", severity: "error", path: `${at}.where`, message: `${said} cannot pick its records: ${problem}.`, fix: `Write it in the rule language over the fields of "${step.archive}" (${quoted(Object.keys(kind.fields))}) and its relations.` });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (typeof step.after === "string" && afterMs(step.after) === undefined) {
|
|
60
|
+
out.push({ code: "workflow-archive-after-invalid", severity: "error", path: `${at}.after`, message: `${said} waits "${step.after}", which does not read as how long.`, fix: `Say it as a number and hours, days or weeks — "3 days" — or as { "field": "<a date field>", "days": 3 }.` });
|
|
61
|
+
}
|
|
62
|
+
else if (typeof step.after === "object" && !kind.fields[step.after.field]) {
|
|
63
|
+
out.push({ code: "workflow-archive-after-invalid", severity: "error", path: `${at}.after.field`, message: `${said} counts from "${step.after.field}", and "${step.archive}" has no field called that.`, fix: `Count from one of its fields: ${quoted(Object.keys(kind.fields))}.` });
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
},
|
|
67
|
+
words(step, noun) {
|
|
68
|
+
return `Archive ${noun(step.archive)} records${step.where ? ` where ${step.where}` : ""}${afterWords(step.after)}`;
|
|
69
|
+
},
|
|
70
|
+
touches(step, _world) {
|
|
71
|
+
return { reads: [step.archive], writes: [step.archive] };
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=step-archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-archive.js","sourceRoot":"","sources":["../../src/workflows/step-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ClassifyFloorRule, ClassifyStep } from "../workflow-shape.js";
|
|
2
|
+
import type { KindNoun, StepKind } from "./steps.js";
|
|
3
|
+
/** Whether a step's changes wait for a person: always, unless the step says its own `approve` — and an option in `confirm` always. */
|
|
4
|
+
export declare const classifyAsks: (step: ClassifyStep, option: string) => boolean;
|
|
5
|
+
/** How many links a text holds: http, https and www addresses. */
|
|
6
|
+
export declare const linksIn: (text: string) => number;
|
|
7
|
+
/** A floor rule's verdict on a record: the option, and why, in words a person reads. */
|
|
8
|
+
export interface FloorReading {
|
|
9
|
+
readonly option: string;
|
|
10
|
+
readonly basis: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* THE FLOOR: the first option, in the order the step says them, whose rule
|
|
14
|
+
* holds of a record — its text (every string field, joined) holds at least
|
|
15
|
+
* `links` links, or one of `words` as a whole word in any case, or its
|
|
16
|
+
* `expr` holds (`holds(option)`, the rule language read by the caller).
|
|
17
|
+
* Undefined when none holds: the record is left for a person.
|
|
18
|
+
*/
|
|
19
|
+
export declare function floorLabel(floor: Readonly<Record<string, ClassifyFloorRule>> | undefined, text: string, holds?: (option: string) => boolean): FloorReading | undefined;
|
|
20
|
+
/** One line: "Label each feedback's category as spam, rude or good-to-show; archive spam at 90% sure (asks before good-to-show)". */
|
|
21
|
+
export declare function classifyWords(step: ClassifyStep, noun: KindNoun, options?: readonly string[]): string;
|
|
22
|
+
export declare const classifyStep: StepKind<ClassifyStep>;
|
|
23
|
+
//# sourceMappingURL=step-classify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-classify.d.ts","sourceRoot":"","sources":["../../src/workflows/step-classify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAa,QAAQ,EAA+B,MAAM,YAAY,CAAC;AAyB7F,sIAAsI;AACtI,eAAO,MAAM,YAAY,GAAI,MAAM,YAAY,EAAE,QAAQ,MAAM,KAAG,OAAwG,CAAC;AAI3K,kEAAkE;AAClE,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,MAAuC,CAAC;AAI/E,wFAAwF;AACxF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAqB,GAAG,YAAY,GAAG,SAAS,CAWnL;AAKD,qIAAqI;AACrI,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAKrG;AAED,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,CAgF/C,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import * as z from "../schema/zod.js";
|
|
2
|
+
import { conditionProblems } from "../job-findings.js";
|
|
3
|
+
/*
|
|
4
|
+
* LABEL EACH RECORD (Roadmap f-feedback-triage-agent): a typed judgment
|
|
5
|
+
* per record — "which of these options fits it, and how sure" — asked of
|
|
6
|
+
* the host's System One model one record at a time within the run's
|
|
7
|
+
* budget, and set through the kind's own act with the reason on its
|
|
8
|
+
* lineage ("Jev: 90% sure “Buy now” is spam"). Where no model answers —
|
|
9
|
+
* none lent, it failed, the budget ran out — the step's `floor` decides
|
|
10
|
+
* deterministically (links counted in the record's text, blocklisted
|
|
11
|
+
* words, a rule), and a record no floor rule matches is left for a
|
|
12
|
+
* person. An option whose confidence reaches its `setAside` threshold
|
|
13
|
+
* also archives the record; never removed.
|
|
14
|
+
*
|
|
15
|
+
* Nothing a host means to show the public becomes so without a person's
|
|
16
|
+
* yes: the step's changes are asked of a person unless the step says its
|
|
17
|
+
* own `approve`, and an option named in `confirm` is asked whatever it
|
|
18
|
+
* says. A record already labeled — by a person, or a run before — is
|
|
19
|
+
* never labeled again unless the step says `relabel`. Running it is
|
|
20
|
+
* `@graview/tools/workflows`' (`runClassifyStep`).
|
|
21
|
+
*/
|
|
22
|
+
const quoted = (names) => [...names].map((name) => `"${name}"`).join(", ") || "none";
|
|
23
|
+
/** Whether a step's changes wait for a person: always, unless the step says its own `approve` — and an option in `confirm` always. */
|
|
24
|
+
export const classifyAsks = (step, option) => step.approve === undefined || step.approve === "ask" || (step.confirm ?? []).includes(option);
|
|
25
|
+
const LINK = /\b(?:https?:\/\/|www\.)[^\s<>"')\]]+/gi;
|
|
26
|
+
/** How many links a text holds: http, https and www addresses. */
|
|
27
|
+
export const linksIn = (text) => text.match(LINK)?.length ?? 0;
|
|
28
|
+
const escape = (word) => word.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
29
|
+
/**
|
|
30
|
+
* THE FLOOR: the first option, in the order the step says them, whose rule
|
|
31
|
+
* holds of a record — its text (every string field, joined) holds at least
|
|
32
|
+
* `links` links, or one of `words` as a whole word in any case, or its
|
|
33
|
+
* `expr` holds (`holds(option)`, the rule language read by the caller).
|
|
34
|
+
* Undefined when none holds: the record is left for a person.
|
|
35
|
+
*/
|
|
36
|
+
export function floorLabel(floor, text, holds = () => false) {
|
|
37
|
+
for (const [option, rule] of Object.entries(floor ?? {})) {
|
|
38
|
+
if (rule.links !== undefined) {
|
|
39
|
+
const count = linksIn(text);
|
|
40
|
+
if (count >= rule.links)
|
|
41
|
+
return { option, basis: `${option}, from ${count === 1 ? "one link" : `${count} links`}` };
|
|
42
|
+
}
|
|
43
|
+
const word = (rule.words ?? []).find((one) => one.trim() !== "" && new RegExp(`(?:^|[^\\p{L}\\p{N}])${escape(one.trim())}(?:$|[^\\p{L}\\p{N}])`, "iu").test(text));
|
|
44
|
+
if (word !== undefined)
|
|
45
|
+
return { option, basis: `${option}, from the word “${word.trim()}”` };
|
|
46
|
+
if (rule.expr !== undefined && holds(option))
|
|
47
|
+
return { option, basis: `${option}, from the rule ${rule.expr}` };
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/** A list said as a person says it: "spam, rude or good-to-show". */
|
|
52
|
+
const either = (items) => (items.length <= 1 ? (items[0] ?? "") : `${items.slice(0, -1).join(", ")} or ${items.at(-1)}`);
|
|
53
|
+
/** One line: "Label each feedback's category as spam, rude or good-to-show; archive spam at 90% sure (asks before good-to-show)". */
|
|
54
|
+
export function classifyWords(step, noun, options) {
|
|
55
|
+
const among = step.options ?? options ?? [];
|
|
56
|
+
const aside = Object.entries(step.setAside ?? {}).map(([option, at]) => `${option} at ${Math.round(at * 100)}% sure`);
|
|
57
|
+
const asks = step.approve === undefined || step.approve === "ask" ? " (asks a person first)" : (step.confirm ?? []).length > 0 ? ` (asks before ${either(step.confirm)})` : "";
|
|
58
|
+
return `Label each ${noun(step.classify)}${step.where ? ` where ${step.where}` : ""} by its ${step.field.replace(/([a-z])([A-Z])/g, "$1 $2").toLowerCase()}${among.length > 0 ? ` as ${either(among)}` : ""}${aside.length > 0 ? `; archive ${aside.join(", ")}` : ""}${asks}`;
|
|
59
|
+
}
|
|
60
|
+
export const classifyStep = {
|
|
61
|
+
key: "classify",
|
|
62
|
+
title: "Label each record",
|
|
63
|
+
shape: (s) => z.strictObject({
|
|
64
|
+
classify: s.name("kind"),
|
|
65
|
+
where: z.optional(s.expression),
|
|
66
|
+
field: s.str(1, 120),
|
|
67
|
+
options: z.optional(z.array(s.str(1, 120)).check(z.maxLength(60))),
|
|
68
|
+
instruction: z.optional(s.str(1, 2000)),
|
|
69
|
+
floor: z.optional(z.record(s.str(1, 120), z.strictObject({ links: z.optional(z.number().check(z.int(), z.minimum(1), z.maximum(1000))), words: z.optional(z.array(s.str(1, 120)).check(z.maxLength(500))), expr: z.optional(s.expression) }))),
|
|
70
|
+
setAside: z.optional(z.record(s.str(1, 120), z.number())),
|
|
71
|
+
confirm: z.optional(z.array(s.str(1, 120)).check(z.maxLength(60))),
|
|
72
|
+
relabel: z.optional(z.boolean()),
|
|
73
|
+
model: z.optional(s.str(1, 120)),
|
|
74
|
+
budget: z.optional(z.strictObject({ calls: z.optional(z.number().check(z.int(), z.minimum(1), z.maximum(10_000))), tokens: z.optional(z.number().check(z.int(), z.minimum(1), z.maximum(10_000_000))) })),
|
|
75
|
+
approve: z.optional(s.approve),
|
|
76
|
+
}),
|
|
77
|
+
findings(step, check) {
|
|
78
|
+
const { world, said, index } = check;
|
|
79
|
+
const at = `steps.${index}`;
|
|
80
|
+
const out = [];
|
|
81
|
+
const kind = world.kinds.get(step.classify);
|
|
82
|
+
if (!kind) {
|
|
83
|
+
out.push({ code: "workflow-kind-unknown", severity: "error", path: `${at}.classify`, message: `${said} labels "${step.classify}" records, and "${step.classify}" is not a kind of this app.`, fix: `Name one of its kinds: ${quoted(world.kinds.keys())}.` });
|
|
84
|
+
return out;
|
|
85
|
+
}
|
|
86
|
+
if (step.where !== undefined) {
|
|
87
|
+
for (const problem of conditionProblems(step.where, step.classify, kind, world)) {
|
|
88
|
+
out.push({ code: "workflow-where-invalid", severity: "error", path: `${at}.where`, message: `${said} cannot pick its records: ${problem}.`, fix: `Write it in the rule language over the fields of "${step.classify}" (${quoted(Object.keys(kind.fields))}) and its relations.` });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const field = kind.fields[step.field];
|
|
92
|
+
const choices = Object.entries(kind.fields).filter(([, one]) => one.type === "choice").map(([name]) => name);
|
|
93
|
+
if (!field || field.type !== "choice") {
|
|
94
|
+
out.push({
|
|
95
|
+
code: "workflow-classify-field-not-choice",
|
|
96
|
+
severity: "error",
|
|
97
|
+
path: `${at}.field`,
|
|
98
|
+
message: field ? `${said} keeps its label in "${step.field}", which is not a choice of options, so it has nothing to choose from.` : `${said} keeps its label in "${step.field}", and "${step.classify}" has no field called that.`,
|
|
99
|
+
fix: choices.length > 0 ? `Name one of its choice fields: ${quoted(choices)}.` : `Give "${step.classify}" a choice field whose options are the labels, then name it here.`,
|
|
100
|
+
});
|
|
101
|
+
return out;
|
|
102
|
+
}
|
|
103
|
+
const known = new Set(field.options ?? []);
|
|
104
|
+
const among = new Set(step.options ?? known);
|
|
105
|
+
const unknown = (option, path, how) => {
|
|
106
|
+
out.push({ code: "workflow-classify-option-unknown", severity: "error", path, message: `${said} ${how} "${option}", which is not one of the options of "${step.field}".`, fix: `Name one of ${quoted(known)}, or add "${option}" to the field's options.` });
|
|
107
|
+
};
|
|
108
|
+
(step.options ?? []).forEach((option, i) => (known.has(option) ? undefined : unknown(option, `${at}.options.${i}`, "chooses among")));
|
|
109
|
+
const judged = (option) => known.has(option) && among.has(option);
|
|
110
|
+
for (const option of Object.keys(step.floor ?? {}))
|
|
111
|
+
if (!judged(option))
|
|
112
|
+
unknown(option, `${at}.floor.${option}`, "has a floor rule for");
|
|
113
|
+
for (const [option, rule] of Object.entries(step.floor ?? {})) {
|
|
114
|
+
if (rule.links === undefined && (rule.words ?? []).length === 0 && rule.expr === undefined) {
|
|
115
|
+
out.push({ code: "workflow-classify-floor-empty", severity: "error", path: `${at}.floor.${option}`, message: `${said} has a floor rule for "${option}" that tests nothing, so it would never decide.`, fix: `Say "links", "words" or "expr" for it, or let the rule go.` });
|
|
116
|
+
}
|
|
117
|
+
if (rule.expr !== undefined) {
|
|
118
|
+
for (const problem of conditionProblems(rule.expr, step.classify, kind, world)) {
|
|
119
|
+
out.push({ code: "workflow-where-invalid", severity: "error", path: `${at}.floor.${option}.expr`, message: `${said}'s floor rule for "${option}" does not read: ${problem.replace(/^its where /, "it ")}.`, fix: `Write it in the rule language over the fields of "${step.classify}".` });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
for (const [option, threshold] of Object.entries(step.setAside ?? {})) {
|
|
124
|
+
if (!judged(option))
|
|
125
|
+
unknown(option, `${at}.setAside.${option}`, "sets aside");
|
|
126
|
+
if (!(threshold >= 0 && threshold <= 1)) {
|
|
127
|
+
out.push({ code: "workflow-classify-threshold-invalid", severity: "error", path: `${at}.setAside.${option}`, message: `${said} sets aside "${option}" at ${threshold}, and how sure a judgment is runs from 0 to 1.`, fix: `Say a number from 0 to 1: 0.9 for "90% sure".` });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (Object.keys(step.setAside ?? {}).length > 0 && !world.acts.includes(`archive-${step.classify}`)) {
|
|
131
|
+
out.push({ code: "workflow-archive-never", severity: "error", path: `${at}.setAside`, message: `${said} sets records aside, and the app says ${world.noun(step.classify)} records are never archived.`, fix: `Take "archives: false" off "${step.classify}", or let "setAside" go.` });
|
|
132
|
+
}
|
|
133
|
+
(step.confirm ?? []).forEach((option, i) => (judged(option) ? undefined : unknown(option, `${at}.confirm.${i}`, "asks before")));
|
|
134
|
+
return out;
|
|
135
|
+
},
|
|
136
|
+
words(step, noun) {
|
|
137
|
+
return classifyWords(step, noun);
|
|
138
|
+
},
|
|
139
|
+
touches(step, _world) {
|
|
140
|
+
return { reads: [step.classify], writes: [step.classify] };
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
//# sourceMappingURL=step-classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-classify.js","sourceRoot":"","sources":["../../src/workflows/step-classify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenerateStep } from "../workflow-shape.js";
|
|
2
|
+
import type { StepKind } from "./steps.js";
|
|
3
|
+
import type { WorkflowWorld } from "./world.js";
|
|
4
|
+
/** The acts that make records of a kind, by name. */
|
|
5
|
+
export declare const actsMaking: (world: WorkflowWorld, kind: string) => string[];
|
|
6
|
+
export declare const generateStep: StepKind<GenerateStep>;
|
|
7
|
+
//# sourceMappingURL=step-generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-generate.d.ts","sourceRoot":"","sources":["../../src/workflows/step-generate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,KAAK,EAAuB,QAAQ,EAA+B,MAAM,YAAY,CAAC;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAsBhD,qDAAqD;AACrD,eAAO,MAAM,UAAU,GAAI,OAAO,aAAa,EAAE,MAAM,MAAM,KAAG,MAAM,EAA4E,CAAC;AAuCnJ,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,YAAY,CAkG/C,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import * as z from "../schema/zod.js";
|
|
2
|
+
import { analyzeExpr } from "../document/expr/analyze.js";
|
|
3
|
+
import { ExprSyntaxError, parseExpr } from "../document/expr/parse.js";
|
|
4
|
+
import { conditionProblems } from "../job-findings.js";
|
|
5
|
+
import { nearestAct } from "../mutations/act-spelling.js";
|
|
6
|
+
import { DEFAULT_GENERATE_KEY, GENERATE_REFS, windowWordsProblem } from "./generate-words.js";
|
|
7
|
+
import { keyFields } from "./step-act.js";
|
|
8
|
+
import { withArticle } from "../schema/define-node.js";
|
|
9
|
+
/*
|
|
10
|
+
* MAKE DATED RECORDS FROM A PATTERN (Roadmap f-job-generate-from-pattern):
|
|
11
|
+
*
|
|
12
|
+
* { "generate": "event",
|
|
13
|
+
* "from": [{ "kind": "routine", "where": "active", "dates": "startsAt" },
|
|
14
|
+
* { "kind": "plan-item", "dates": "date" }],
|
|
15
|
+
* "window": "next week",
|
|
16
|
+
* "set": { "name": { "expr": "name" }, "startsAt": "$date" },
|
|
17
|
+
* "link": "source" }
|
|
18
|
+
*
|
|
19
|
+
* For each day of the window a source record's date falls on — a date, a
|
|
20
|
+
* date that repeats, a set of weekdays — one record of the kind made by the
|
|
21
|
+
* act that makes it (`using`, where several do), its fields from `set` read
|
|
22
|
+
* on the source with `date` the occurrence and `source` its record, linked
|
|
23
|
+
* back through `link`, and made once per key (`{source}:{date}` unsaid).
|
|
24
|
+
* What it wants is `generate.ts`'; running it is `@graview/tools/workflows`'.
|
|
25
|
+
*/
|
|
26
|
+
const quoted = (names) => [...names].map((name) => `"${name}"`).join(", ") || "none";
|
|
27
|
+
/** The acts that make records of a kind, by name. */
|
|
28
|
+
export const actsMaking = (world, kind) => world.acts.filter((act) => (world.actMakes(act) ?? []).includes(kind));
|
|
29
|
+
/** A step's set-workflow edit, with one step changed. */
|
|
30
|
+
function withStep(check, change) {
|
|
31
|
+
const steps = check.declared["steps"] ?? [];
|
|
32
|
+
return { op: "set-workflow", name: check.workflow, workflow: { ...check.declared, steps: steps.map((one, i) => (i === check.index ? change(one) : one)) } };
|
|
33
|
+
}
|
|
34
|
+
/** What is wrong with an expression a value reads on a source of a kind, with `date` and `source` beside its fields. */
|
|
35
|
+
function valueProblems(expr, kindName, world) {
|
|
36
|
+
const kind = world.kinds.get(kindName);
|
|
37
|
+
if (!kind)
|
|
38
|
+
return [];
|
|
39
|
+
let shape;
|
|
40
|
+
try {
|
|
41
|
+
shape = analyzeExpr(parseExpr(expr));
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (!(e instanceof ExprSyntaxError))
|
|
45
|
+
throw e;
|
|
46
|
+
return [`"${expr}" does not read: ${e.sentence} (at character ${e.at + 1})`];
|
|
47
|
+
}
|
|
48
|
+
const problems = [];
|
|
49
|
+
for (const fn of shape.unknownFunctions)
|
|
50
|
+
problems.push(`"${expr}" calls "${fn}", which is not a function the rule language knows`);
|
|
51
|
+
for (const name of shape.names) {
|
|
52
|
+
if (name === "date" || name === "source" || name === "id" || name === "label" || kind.fields[name] || kind.edges.has(name) || kind.computed.includes(name))
|
|
53
|
+
continue;
|
|
54
|
+
problems.push(`"${expr}" reads "${name}", and ${world.noun(kindName)} has no field, relation or computed field called that`);
|
|
55
|
+
}
|
|
56
|
+
return problems;
|
|
57
|
+
}
|
|
58
|
+
/** What is wrong with a window's expression: it reads no record, only the clock. */
|
|
59
|
+
function windowProblems(expr) {
|
|
60
|
+
try {
|
|
61
|
+
const shape = analyzeExpr(parseExpr(expr));
|
|
62
|
+
return [...shape.unknownFunctions.map((fn) => `"${expr}" calls "${fn}", which is not a function the rule language knows`), ...[...shape.names].map((name) => `"${expr}" reads "${name}", and a window reads no record — only the day, like startOfWeek(today()) + 7`)];
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
if (!(e instanceof ExprSyntaxError))
|
|
66
|
+
throw e;
|
|
67
|
+
return [`"${expr}" does not read: ${e.sentence} (at character ${e.at + 1})`];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export const generateStep = {
|
|
71
|
+
key: "generate",
|
|
72
|
+
title: "Make dated records from a pattern",
|
|
73
|
+
shape: (s) => z.strictObject({
|
|
74
|
+
generate: s.name("kind"),
|
|
75
|
+
from: z.array(z.strictObject({ kind: s.name("kind"), where: z.optional(s.expression), dates: s.str(1, 80) })).check(z.minLength(1), z.maxLength(12)),
|
|
76
|
+
window: z.union([s.str(1, 40), z.strictObject({ from: s.expression, to: s.expression })]),
|
|
77
|
+
set: z.optional(z.record(z.string(), s.value)),
|
|
78
|
+
key: z.optional(s.str(1, 300)),
|
|
79
|
+
link: z.optional(s.str(1, 80)),
|
|
80
|
+
using: z.optional(s.name("act")),
|
|
81
|
+
overwrite: z.optional(z.boolean()),
|
|
82
|
+
approve: z.optional(s.approve),
|
|
83
|
+
}),
|
|
84
|
+
findings(step, check) {
|
|
85
|
+
const { world, said, index } = check;
|
|
86
|
+
const at = `steps.${index}`;
|
|
87
|
+
const out = [];
|
|
88
|
+
const made = world.kinds.get(step.generate);
|
|
89
|
+
const kinds = quoted(world.kinds.keys());
|
|
90
|
+
if (!made)
|
|
91
|
+
out.push({ code: "workflow-kind-unknown", severity: "error", path: `${at}.generate`, message: `${said} makes "${step.generate}" records, and "${step.generate}" is not a kind of this app.`, fix: `Name one of its kinds: ${kinds}.` });
|
|
92
|
+
else if (step.using !== undefined) {
|
|
93
|
+
if (!world.acts.includes(step.using)) {
|
|
94
|
+
const near = nearestAct(step.using, world.acts);
|
|
95
|
+
out.push({ code: "workflow-act-unknown", severity: "error", path: `${at}.using`, message: `${said} makes its records with "${step.using}", which is not an act of this app.`, fix: near ? `Did you mean "${near}"?` : `Name the act that makes ${world.noun(step.generate)} records.`, ...(near ? { edits: [withStep(check, (one) => ({ ...one, using: near }))] } : {}) });
|
|
96
|
+
}
|
|
97
|
+
else if (!(world.actMakes(step.using) ?? []).includes(step.generate)) {
|
|
98
|
+
const makers = actsMaking(world, step.generate);
|
|
99
|
+
out.push({ code: "workflow-generate-act-makes-other", severity: "error", path: `${at}.using`, message: `${said} makes ${world.noun(step.generate)} records with "${step.using}", and that act makes none.`, fix: makers.length > 0 ? `Name an act that makes one: ${quoted(makers)}.` : `Declare an act that creates "${step.generate}".`, ...(makers.length === 1 ? { edits: [withStep(check, (one) => ({ ...one, using: makers[0] }))] } : {}) });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const makers = actsMaking(world, step.generate);
|
|
104
|
+
if (makers.length === 0)
|
|
105
|
+
out.push({ code: "workflow-generate-no-act", severity: "error", path: `${at}.generate`, message: `${said} makes ${world.noun(step.generate)} records, and no act of this app makes one.`, fix: `Declare an act that creates "${step.generate}", like { "add-${step.generate}": { "creates": "${step.generate}" } }.` });
|
|
106
|
+
else if (makers.length > 1)
|
|
107
|
+
out.push({ code: "workflow-generate-act-ambiguous", severity: "error", path: `${at}.using`, message: `${said} makes ${world.noun(step.generate)} records, and ${makers.length} acts make one (${quoted(makers)}), so it cannot tell which.`, fix: `Say which with "using".`, edits: [withStep(check, (one) => ({ ...one, using: makers[0] }))] });
|
|
108
|
+
}
|
|
109
|
+
step.from.forEach((from, i) => {
|
|
110
|
+
const kind = world.kinds.get(from.kind);
|
|
111
|
+
if (!kind) {
|
|
112
|
+
out.push({ code: "workflow-kind-unknown", severity: "error", path: `${at}.from.${i}.kind`, message: `${said} reads its dates from "${from.kind}" records, and "${from.kind}" is not a kind of this app.`, fix: `Name one of its kinds: ${kinds}.` });
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (!kind.fields[from.dates]) {
|
|
116
|
+
const dated = Object.keys(kind.fields).filter((field) => /date|start|day|at$|when/i.test(field) && !field.endsWith("Repeat"));
|
|
117
|
+
out.push({
|
|
118
|
+
code: "workflow-generate-dates-unknown",
|
|
119
|
+
severity: "error",
|
|
120
|
+
path: `${at}.from.${i}.dates`,
|
|
121
|
+
message: `${said} reads the dates of ${world.noun(from.kind)} records from "${from.dates}", and ${world.noun(from.kind)} has no field called that.`,
|
|
122
|
+
fix: `Name the field that holds its date, its repeating date or its weekdays: ${quoted(dated.length > 0 ? dated : Object.keys(kind.fields))}.`,
|
|
123
|
+
...(dated.length === 1 ? { edits: [withStep(check, (one) => ({ ...one, from: one["from"].map((source, j) => (j === i ? { ...source, dates: dated[0] } : source)) }))] } : {}),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
if (from.where !== undefined) {
|
|
127
|
+
for (const problem of conditionProblems(from.where, from.kind, kind, world))
|
|
128
|
+
out.push({ code: "workflow-where-invalid", severity: "error", path: `${at}.from.${i}.where`, message: `${said} cannot pick its ${world.noun(from.kind)} records: ${problem}.`, fix: `Write it in the rule language over the fields of "${from.kind}" (${quoted(Object.keys(kind.fields))}) and its relations.` });
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
if (typeof step.window === "string") {
|
|
132
|
+
const problem = windowWordsProblem(step.window);
|
|
133
|
+
if (problem)
|
|
134
|
+
out.push({ code: "workflow-generate-window-invalid", severity: "error", path: `${at}.window`, message: `${said}'s window: ${problem}.`, fix: `Say "next week", "this week", "next 7 days", "today" or "tomorrow", or give { "from": "startOfWeek(today()) + 7", "to": "startOfWeek(today()) + 13" }.` });
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
for (const end of ["from", "to"])
|
|
138
|
+
for (const problem of windowProblems(step.window[end]))
|
|
139
|
+
out.push({ code: "workflow-generate-window-invalid", severity: "error", path: `${at}.window.${end}`, message: `${said}'s window cannot be read: ${problem}.`, fix: "Write a day in the rule language, from today() and the date functions." });
|
|
140
|
+
}
|
|
141
|
+
if (made) {
|
|
142
|
+
for (const [field, value] of Object.entries(step.set ?? {})) {
|
|
143
|
+
if (!made.fields[field] && !made.edges.has(field)) {
|
|
144
|
+
out.push({ code: "workflow-generate-set-unknown", severity: "error", path: `${at}.set.${field}`, message: `${said} sets "${field}" on ${world.noun(step.generate)} records, and ${world.noun(step.generate)} has no field called that.`, fix: `Set one of its fields: ${quoted(Object.keys(made.fields))}.` });
|
|
145
|
+
}
|
|
146
|
+
if (typeof value === "string" && value.startsWith("$") && !GENERATE_REFS.includes(value)) {
|
|
147
|
+
out.push({ code: "workflow-generate-value-invalid", severity: "error", path: `${at}.set.${field}`, message: `${said} sets "${field}" to "${value}", which names nothing a generate step gives.`, fix: `Give ${quoted(GENERATE_REFS)}, { "expr": … } read on the source, or a value as it is.` });
|
|
148
|
+
}
|
|
149
|
+
else if (value !== null && typeof value === "object" && !Array.isArray(value) && "expr" in value) {
|
|
150
|
+
for (const from of step.from)
|
|
151
|
+
for (const problem of valueProblems(String(value.expr), from.kind, world))
|
|
152
|
+
out.push({ code: "workflow-generate-value-invalid", severity: "error", path: `${at}.set.${field}`, message: `${said} cannot read "${field}" on ${world.noun(from.kind)} records: ${problem}.`, fix: `Read the fields of "${from.kind}", "date" (the day it falls on) or "source" (its record).` });
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (step.link !== undefined && made) {
|
|
157
|
+
const holders = [step.generate, ...step.from.map((from) => from.kind)].filter((kind) => world.kinds.get(kind)?.edges.has(step.link));
|
|
158
|
+
if (holders.length === 0)
|
|
159
|
+
out.push({ code: "workflow-generate-link-unknown", severity: "error", path: `${at}.link`, message: `${said} links what it makes to its source through "${step.link}", and neither ${world.noun(step.generate)} nor ${step.from.map((from) => world.noun(from.kind)).join(" nor ")} declares a relation called that.`, fix: `Name a relation of "${step.generate}" to its sources (${quoted(made.edges)}), or of a source to "${step.generate}".` });
|
|
160
|
+
}
|
|
161
|
+
const key = step.key ?? DEFAULT_GENERATE_KEY;
|
|
162
|
+
const fields = keyFields(key);
|
|
163
|
+
if (fields.length === 0)
|
|
164
|
+
out.push({ code: "workflow-key-field-unknown", severity: "error", path: `${at}.key`, message: `${said}'s key "${key}" reads no field, so every run would make the same one record.`, fix: `Say what tells two apart in braces, like "${DEFAULT_GENERATE_KEY}".` });
|
|
165
|
+
for (const field of fields) {
|
|
166
|
+
if (["source", "date", "kind", "id"].includes(field))
|
|
167
|
+
continue;
|
|
168
|
+
const lacking = step.from.filter((from) => { const kind = world.kinds.get(from.kind); return kind && !kind.fields[field] && !kind.computed.includes(field) && field !== "label"; });
|
|
169
|
+
if (lacking.length > 0)
|
|
170
|
+
out.push({ code: "workflow-key-field-unknown", severity: "error", path: `${at}.key`, message: `${said}'s key reads "{${field}}", and ${lacking.map((from) => world.noun(from.kind)).join(" and ")} has no field called that.`, fix: `Read "{source}", "{date}" or a field every source kind has.` });
|
|
171
|
+
}
|
|
172
|
+
return out;
|
|
173
|
+
},
|
|
174
|
+
words(step, noun) {
|
|
175
|
+
const window = typeof step.window === "string" ? step.window : `from ${step.window.from} to ${step.window.to}`;
|
|
176
|
+
const sources = step.from.map((from, i) => `${i === 0 ? withArticle(noun(from.kind)) : noun(from.kind)}${from.where ? ` where ${from.where}` : ""}`).join(" or ");
|
|
177
|
+
return `Make ${withArticle(noun(step.generate))} for each day ${window} ${sources} falls on`;
|
|
178
|
+
},
|
|
179
|
+
touches(step, world) {
|
|
180
|
+
const sources = step.from.map((from) => from.kind);
|
|
181
|
+
const linksFromSource = step.link !== undefined && !world.kinds.get(step.generate)?.edges.has(step.link) ? sources.filter((kind) => world.kinds.get(kind)?.edges.has(step.link)) : [];
|
|
182
|
+
return { reads: [...new Set(sources)], writes: [...new Set([step.generate, ...linksFromSource])] };
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=step-generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-generate.js","sourceRoot":"","sources":["../../src/workflows/step-generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as z from "../schema/zod.js";
|
|
2
|
+
import type { WorkflowStep } from "../workflow-shape.js";
|
|
3
|
+
import type { WorkflowWorld } from "./world.js";
|
|
4
|
+
/** What a workflow finding says: its code, how bad, where under the workflow (`steps.0.act`), in a person's words, and the edits that fix it. */
|
|
5
|
+
export interface WorkflowFinding {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly severity: "error" | "warning";
|
|
8
|
+
/** Under the workflow: `steps.1.over.where`, `when.0.every`; "" for the workflow itself. */
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
readonly fix: string;
|
|
12
|
+
/** In `editDocument`'s words, where they can be written down. */
|
|
13
|
+
readonly edits?: readonly Record<string, unknown>[];
|
|
14
|
+
}
|
|
15
|
+
/** What a step kind's checker is handed. */
|
|
16
|
+
export interface StepCheck {
|
|
17
|
+
readonly world: WorkflowWorld;
|
|
18
|
+
/** The workflow's name, and the step's place in it. */
|
|
19
|
+
readonly workflow: string;
|
|
20
|
+
readonly index: number;
|
|
21
|
+
/** "Step 2 of “next-weeks-events”": how a finding names the step. */
|
|
22
|
+
readonly said: string;
|
|
23
|
+
/** The workflow's own declaration, for an edit that fixes it whole (`set-workflow`). */
|
|
24
|
+
readonly declared: Readonly<Record<string, unknown>>;
|
|
25
|
+
}
|
|
26
|
+
/** The helpers a step kind's shape is built with: the same words the document's shape uses. */
|
|
27
|
+
export interface StepShapes {
|
|
28
|
+
readonly str: (min: number, max: number) => z.ZodMiniType<string>;
|
|
29
|
+
/** A kebab-case name: a kind's, an act's. */
|
|
30
|
+
readonly name: (what: string) => z.ZodMiniType<string>;
|
|
31
|
+
/** A line of the rule language. */
|
|
32
|
+
readonly expression: z.ZodMiniType<string>;
|
|
33
|
+
/** A value a step hands an act: a literal, `$subject`, `$now`, `$today`, or `{ expr }`. */
|
|
34
|
+
readonly value: z.ZodMiniType;
|
|
35
|
+
/** "apply", "suggest" or "ask". */
|
|
36
|
+
readonly approve: z.ZodMiniType;
|
|
37
|
+
}
|
|
38
|
+
/** A kind as a person reads it: its noun, as the declaration says it ("grocery list", "car"). */
|
|
39
|
+
export type KindNoun = (kind: string) => string;
|
|
40
|
+
/** A kind's noun when no declaration is at hand: its name, read as words. */
|
|
41
|
+
export declare const kindNoun: KindNoun;
|
|
42
|
+
/** One kind of step. */
|
|
43
|
+
export interface StepKind<Step = never> {
|
|
44
|
+
/** Its one discriminating key: a step that holds it is this kind. */
|
|
45
|
+
readonly key: string;
|
|
46
|
+
/** What it does, as a person reads it: "Run an act". */
|
|
47
|
+
readonly title: string;
|
|
48
|
+
/** Its shape, as the document holds it (a strict object). */
|
|
49
|
+
shape(shapes: StepShapes): z.ZodMiniType;
|
|
50
|
+
/** What the checker says of one, at its place. */
|
|
51
|
+
findings(step: Step, check: StepCheck): WorkflowFinding[];
|
|
52
|
+
/** One line: "Run “add-event” for each routine where active", each kind by its noun. */
|
|
53
|
+
words(step: Step, noun: KindNoun): string;
|
|
54
|
+
/** The kinds it reads and the kinds it may write, by name. */
|
|
55
|
+
touches(step: Step, world: WorkflowWorld): {
|
|
56
|
+
readonly reads: readonly string[];
|
|
57
|
+
readonly writes: readonly string[];
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Every kind of step, by its key. A new kind: its file, and one line here. */
|
|
61
|
+
export declare const STEP_KINDS: {
|
|
62
|
+
readonly act: StepKind<import("../workflow-shape.js").ActStep>;
|
|
63
|
+
readonly agent: StepKind<import("../workflow-shape.js").AgentStep>;
|
|
64
|
+
readonly generate: StepKind<import("../workflow-shape.js").GenerateStep>;
|
|
65
|
+
readonly archive: StepKind<import("../workflow-shape.js").ArchiveStep>;
|
|
66
|
+
readonly classify: StepKind<import("../workflow-shape.js").ClassifyStep>;
|
|
67
|
+
};
|
|
68
|
+
export type StepKindKey = keyof typeof STEP_KINDS;
|
|
69
|
+
/** The kind of a step, by the one key of `STEP_KINDS` it holds; undefined for one that holds none. */
|
|
70
|
+
export declare function stepKindOf(step: unknown): (StepKind<WorkflowStep> & {
|
|
71
|
+
readonly key: StepKindKey;
|
|
72
|
+
}) | undefined;
|
|
73
|
+
/** The shapes a step kind is built with. */
|
|
74
|
+
export declare function stepShapes(): StepShapes;
|
|
75
|
+
//# sourceMappingURL=steps.d.ts.map
|