@sprinterai/runtime 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/heartbeat-scheduler.d.ts +36 -0
- package/dist/agent/heartbeat-scheduler.d.ts.map +1 -0
- package/dist/agent/heartbeat-scheduler.js +57 -0
- package/dist/agent/heartbeat-scheduler.js.map +1 -0
- package/dist/agent/heartbeat-scheduler.test.d.ts +2 -0
- package/dist/agent/heartbeat-scheduler.test.d.ts.map +1 -0
- package/dist/agent/heartbeat-scheduler.test.js +216 -0
- package/dist/agent/heartbeat-scheduler.test.js.map +1 -0
- package/dist/agent/index.d.ts +3 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/versioning.d.ts +22 -0
- package/dist/agent/versioning.d.ts.map +1 -0
- package/dist/agent/versioning.js +47 -0
- package/dist/agent/versioning.js.map +1 -0
- package/dist/agent/versioning.test.d.ts +2 -0
- package/dist/agent/versioning.test.d.ts.map +1 -0
- package/dist/agent/versioning.test.js +147 -0
- package/dist/agent/versioning.test.js.map +1 -0
- package/dist/analytics/analytics-recorder.d.ts +12 -0
- package/dist/analytics/analytics-recorder.d.ts.map +1 -0
- package/dist/analytics/analytics-recorder.js +27 -0
- package/dist/analytics/analytics-recorder.js.map +1 -0
- package/dist/analytics/analytics-recorder.test.d.ts +2 -0
- package/dist/analytics/analytics-recorder.test.d.ts.map +1 -0
- package/dist/analytics/analytics-recorder.test.js +98 -0
- package/dist/analytics/analytics-recorder.test.js.map +1 -0
- package/dist/analytics/analytics-types.d.ts +13 -0
- package/dist/analytics/analytics-types.d.ts.map +1 -0
- package/dist/analytics/analytics-types.js +2 -0
- package/dist/analytics/analytics-types.js.map +1 -0
- package/dist/analytics/index.d.ts +4 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +2 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/automation/index.d.ts +77 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +119 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/index.test.d.ts +2 -0
- package/dist/automation/index.test.d.ts.map +1 -0
- package/dist/automation/index.test.js +135 -0
- package/dist/automation/index.test.js.map +1 -0
- package/dist/capture/capture-parser.d.ts +13 -0
- package/dist/capture/capture-parser.d.ts.map +1 -0
- package/dist/capture/capture-parser.js +55 -0
- package/dist/capture/capture-parser.js.map +1 -0
- package/dist/capture/capture-parser.test.d.ts +2 -0
- package/dist/capture/capture-parser.test.d.ts.map +1 -0
- package/dist/capture/capture-parser.test.js +134 -0
- package/dist/capture/capture-parser.test.js.map +1 -0
- package/dist/capture/capture-schema.d.ts +38 -0
- package/dist/capture/capture-schema.d.ts.map +1 -0
- package/dist/capture/capture-schema.js +16 -0
- package/dist/capture/capture-schema.js.map +1 -0
- package/dist/capture/capture-schema.test.d.ts +2 -0
- package/dist/capture/capture-schema.test.d.ts.map +1 -0
- package/dist/capture/capture-schema.test.js +72 -0
- package/dist/capture/capture-schema.test.js.map +1 -0
- package/dist/capture/create-from-capture.d.ts +14 -0
- package/dist/capture/create-from-capture.d.ts.map +1 -0
- package/dist/capture/create-from-capture.js +30 -0
- package/dist/capture/create-from-capture.js.map +1 -0
- package/dist/capture/create-from-capture.test.d.ts +2 -0
- package/dist/capture/create-from-capture.test.d.ts.map +1 -0
- package/dist/capture/create-from-capture.test.js +148 -0
- package/dist/capture/create-from-capture.test.js.map +1 -0
- package/dist/capture/index.d.ts +7 -0
- package/dist/capture/index.d.ts.map +1 -0
- package/dist/capture/index.js +4 -0
- package/dist/capture/index.js.map +1 -0
- package/dist/chat/inbox.d.ts +96 -0
- package/dist/chat/inbox.d.ts.map +1 -0
- package/dist/chat/inbox.js +170 -0
- package/dist/chat/inbox.js.map +1 -0
- package/dist/chat/inbox.test.d.ts +2 -0
- package/dist/chat/inbox.test.d.ts.map +1 -0
- package/dist/chat/inbox.test.js +520 -0
- package/dist/chat/inbox.test.js.map +1 -0
- package/dist/chat/index.d.ts +5 -3
- package/dist/chat/index.d.ts.map +1 -1
- package/dist/chat/index.js +3 -2
- package/dist/chat/index.js.map +1 -1
- package/dist/context/context-keys.d.ts +7 -0
- package/dist/context/context-keys.d.ts.map +1 -0
- package/dist/context/context-keys.js +6 -0
- package/dist/context/context-keys.js.map +1 -0
- package/dist/context/format-context.d.ts +14 -0
- package/dist/context/format-context.d.ts.map +1 -0
- package/dist/context/format-context.js +82 -0
- package/dist/context/format-context.js.map +1 -0
- package/dist/context/format-context.test.d.ts +2 -0
- package/dist/context/format-context.test.d.ts.map +1 -0
- package/dist/context/format-context.test.js +130 -0
- package/dist/context/format-context.test.js.map +1 -0
- package/dist/context/index.d.ts +6 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +5 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/load-context.d.ts +8 -0
- package/dist/context/load-context.d.ts.map +1 -0
- package/dist/context/load-context.js +22 -0
- package/dist/context/load-context.js.map +1 -0
- package/dist/context/load-context.test.d.ts +2 -0
- package/dist/context/load-context.test.d.ts.map +1 -0
- package/dist/context/load-context.test.js +111 -0
- package/dist/context/load-context.test.js.map +1 -0
- package/dist/context/shared-context.d.ts +11 -0
- package/dist/context/shared-context.d.ts.map +1 -0
- package/dist/context/shared-context.js +14 -0
- package/dist/context/shared-context.js.map +1 -0
- package/dist/context/shared-context.test.d.ts +2 -0
- package/dist/context/shared-context.test.d.ts.map +1 -0
- package/dist/context/shared-context.test.js +90 -0
- package/dist/context/shared-context.test.js.map +1 -0
- package/dist/document/deletion.d.ts +17 -0
- package/dist/document/deletion.d.ts.map +1 -0
- package/dist/document/deletion.js +11 -0
- package/dist/document/deletion.js.map +1 -0
- package/dist/document/deletion.test.d.ts +2 -0
- package/dist/document/deletion.test.d.ts.map +1 -0
- package/dist/document/deletion.test.js +33 -0
- package/dist/document/deletion.test.js.map +1 -0
- package/dist/document/index.d.ts +12 -0
- package/dist/document/index.d.ts.map +1 -1
- package/dist/document/index.js +7 -0
- package/dist/document/index.js.map +1 -1
- package/dist/document/linking.d.ts +42 -0
- package/dist/document/linking.d.ts.map +1 -0
- package/dist/document/linking.js +49 -0
- package/dist/document/linking.js.map +1 -0
- package/dist/document/linking.test.d.ts +2 -0
- package/dist/document/linking.test.d.ts.map +1 -0
- package/dist/document/linking.test.js +86 -0
- package/dist/document/linking.test.js.map +1 -0
- package/dist/document/pagination.d.ts +24 -0
- package/dist/document/pagination.d.ts.map +1 -0
- package/dist/document/pagination.js +24 -0
- package/dist/document/pagination.js.map +1 -0
- package/dist/document/pagination.test.d.ts +2 -0
- package/dist/document/pagination.test.d.ts.map +1 -0
- package/dist/document/pagination.test.js +84 -0
- package/dist/document/pagination.test.js.map +1 -0
- package/dist/document/search.d.ts +37 -0
- package/dist/document/search.d.ts.map +1 -0
- package/dist/document/search.js +37 -0
- package/dist/document/search.js.map +1 -0
- package/dist/document/search.test.d.ts +2 -0
- package/dist/document/search.test.d.ts.map +1 -0
- package/dist/document/search.test.js +97 -0
- package/dist/document/search.test.js.map +1 -0
- package/dist/document/upload.d.ts +15 -0
- package/dist/document/upload.d.ts.map +1 -0
- package/dist/document/upload.js +12 -0
- package/dist/document/upload.js.map +1 -0
- package/dist/document/upload.test.d.ts +2 -0
- package/dist/document/upload.test.d.ts.map +1 -0
- package/dist/document/upload.test.js +70 -0
- package/dist/document/upload.test.js.map +1 -0
- package/dist/document/url-generation.d.ts +21 -0
- package/dist/document/url-generation.d.ts.map +1 -0
- package/dist/document/url-generation.js +14 -0
- package/dist/document/url-generation.js.map +1 -0
- package/dist/document/url-generation.test.d.ts +2 -0
- package/dist/document/url-generation.test.d.ts.map +1 -0
- package/dist/document/url-generation.test.js +38 -0
- package/dist/document/url-generation.test.js.map +1 -0
- package/dist/email/engine.d.ts +19 -0
- package/dist/email/engine.d.ts.map +1 -0
- package/dist/email/engine.js +30 -0
- package/dist/email/engine.js.map +1 -0
- package/dist/email/engine.test.d.ts +2 -0
- package/dist/email/engine.test.d.ts.map +1 -0
- package/dist/email/engine.test.js +128 -0
- package/dist/email/engine.test.js.map +1 -0
- package/dist/email/index.d.ts +5 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +3 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/templates.d.ts +33 -0
- package/dist/email/templates.d.ts.map +1 -0
- package/dist/email/templates.js +132 -0
- package/dist/email/templates.js.map +1 -0
- package/dist/email/templates.test.d.ts +2 -0
- package/dist/email/templates.test.d.ts.map +1 -0
- package/dist/email/templates.test.js +158 -0
- package/dist/email/templates.test.js.map +1 -0
- package/dist/entity/bulk-operations.d.ts +39 -0
- package/dist/entity/bulk-operations.d.ts.map +1 -0
- package/dist/entity/bulk-operations.js +127 -0
- package/dist/entity/bulk-operations.js.map +1 -0
- package/dist/entity/bulk-operations.test.d.ts +2 -0
- package/dist/entity/bulk-operations.test.d.ts.map +1 -0
- package/dist/entity/bulk-operations.test.js +212 -0
- package/dist/entity/bulk-operations.test.js.map +1 -0
- package/dist/entity/collections.d.ts +17 -0
- package/dist/entity/collections.d.ts.map +1 -0
- package/dist/entity/collections.js +22 -0
- package/dist/entity/collections.js.map +1 -0
- package/dist/entity/collections.test.d.ts +2 -0
- package/dist/entity/collections.test.d.ts.map +1 -0
- package/dist/entity/collections.test.js +92 -0
- package/dist/entity/collections.test.js.map +1 -0
- package/dist/entity/index.d.ts +9 -0
- package/dist/entity/index.d.ts.map +1 -0
- package/dist/entity/index.js +6 -0
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/relations.d.ts +65 -0
- package/dist/entity/relations.d.ts.map +1 -0
- package/dist/entity/relations.js +110 -0
- package/dist/entity/relations.js.map +1 -0
- package/dist/entity/relations.test.d.ts +2 -0
- package/dist/entity/relations.test.d.ts.map +1 -0
- package/dist/entity/relations.test.js +202 -0
- package/dist/entity/relations.test.js.map +1 -0
- package/dist/entity/resolve-relation-columns.d.ts +31 -0
- package/dist/entity/resolve-relation-columns.d.ts.map +1 -0
- package/dist/entity/resolve-relation-columns.js +156 -0
- package/dist/entity/resolve-relation-columns.js.map +1 -0
- package/dist/entity/resolve-relation-columns.test.d.ts +2 -0
- package/dist/entity/resolve-relation-columns.test.d.ts.map +1 -0
- package/dist/entity/resolve-relation-columns.test.js +281 -0
- package/dist/entity/resolve-relation-columns.test.js.map +1 -0
- package/dist/entity/sharing.d.ts +41 -0
- package/dist/entity/sharing.d.ts.map +1 -0
- package/dist/entity/sharing.js +52 -0
- package/dist/entity/sharing.js.map +1 -0
- package/dist/entity/sharing.test.d.ts +2 -0
- package/dist/entity/sharing.test.d.ts.map +1 -0
- package/dist/entity/sharing.test.js +178 -0
- package/dist/entity/sharing.test.js.map +1 -0
- package/dist/external-data/external-data-receiver.d.ts +43 -0
- package/dist/external-data/external-data-receiver.d.ts.map +1 -0
- package/dist/external-data/external-data-receiver.js +81 -0
- package/dist/external-data/external-data-receiver.js.map +1 -0
- package/dist/external-data/external-data-receiver.test.d.ts +2 -0
- package/dist/external-data/external-data-receiver.test.d.ts.map +1 -0
- package/dist/external-data/external-data-receiver.test.js +189 -0
- package/dist/external-data/external-data-receiver.test.js.map +1 -0
- package/dist/external-data/extract-by-path.d.ts +13 -0
- package/dist/external-data/extract-by-path.d.ts.map +1 -0
- package/dist/external-data/extract-by-path.js +25 -0
- package/dist/external-data/extract-by-path.js.map +1 -0
- package/dist/external-data/extract-by-path.test.d.ts +2 -0
- package/dist/external-data/extract-by-path.test.d.ts.map +1 -0
- package/dist/external-data/extract-by-path.test.js +47 -0
- package/dist/external-data/extract-by-path.test.js.map +1 -0
- package/dist/external-data/index.d.ts +4 -0
- package/dist/external-data/index.d.ts.map +1 -0
- package/dist/external-data/index.js +3 -0
- package/dist/external-data/index.js.map +1 -0
- package/dist/feed/digest.d.ts +35 -0
- package/dist/feed/digest.d.ts.map +1 -0
- package/dist/feed/digest.js +273 -0
- package/dist/feed/digest.js.map +1 -0
- package/dist/feed/filters.d.ts +41 -0
- package/dist/feed/filters.d.ts.map +1 -0
- package/dist/feed/filters.js +97 -0
- package/dist/feed/filters.js.map +1 -0
- package/dist/feed/index.d.ts +20 -0
- package/dist/feed/index.d.ts.map +1 -0
- package/dist/feed/index.js +23 -0
- package/dist/feed/index.js.map +1 -0
- package/dist/feed/ranking.d.ts +42 -0
- package/dist/feed/ranking.d.ts.map +1 -0
- package/dist/feed/ranking.js +133 -0
- package/dist/feed/ranking.js.map +1 -0
- package/dist/feed/resolver.d.ts +76 -0
- package/dist/feed/resolver.d.ts.map +1 -0
- package/dist/feed/resolver.js +173 -0
- package/dist/feed/resolver.js.map +1 -0
- package/dist/feed/transformers.d.ts +80 -0
- package/dist/feed/transformers.d.ts.map +1 -0
- package/dist/feed/transformers.js +179 -0
- package/dist/feed/transformers.js.map +1 -0
- package/dist/feed/types.d.ts +131 -0
- package/dist/feed/types.d.ts.map +1 -0
- package/dist/feed/types.js +6 -0
- package/dist/feed/types.js.map +1 -0
- package/dist/import/batch-upsert.d.ts +18 -0
- package/dist/import/batch-upsert.d.ts.map +1 -0
- package/dist/import/batch-upsert.js +67 -0
- package/dist/import/batch-upsert.js.map +1 -0
- package/dist/import/index.d.ts +7 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +4 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/merge-content.d.ts +8 -0
- package/dist/import/merge-content.d.ts.map +1 -0
- package/dist/import/merge-content.js +20 -0
- package/dist/import/merge-content.js.map +1 -0
- package/dist/import/merge-content.test.d.ts +2 -0
- package/dist/import/merge-content.test.d.ts.map +1 -0
- package/dist/import/merge-content.test.js +53 -0
- package/dist/import/merge-content.test.js.map +1 -0
- package/dist/import/types.d.ts +20 -0
- package/dist/import/types.d.ts.map +1 -0
- package/dist/import/types.js +2 -0
- package/dist/import/types.js.map +1 -0
- package/dist/import/upsert-matcher.d.ts +39 -0
- package/dist/import/upsert-matcher.d.ts.map +1 -0
- package/dist/import/upsert-matcher.js +67 -0
- package/dist/import/upsert-matcher.js.map +1 -0
- package/dist/import/upsert-matcher.test.d.ts +2 -0
- package/dist/import/upsert-matcher.test.d.ts.map +1 -0
- package/dist/import/upsert-matcher.test.js +77 -0
- package/dist/import/upsert-matcher.test.js.map +1 -0
- package/dist/index.d.ts +77 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -1
- package/dist/index.js.map +1 -1
- package/dist/inngest/create-extraction-functions.d.ts +71 -0
- package/dist/inngest/create-extraction-functions.d.ts.map +1 -0
- package/dist/inngest/create-extraction-functions.js +71 -0
- package/dist/inngest/create-extraction-functions.js.map +1 -0
- package/dist/inngest/event-names.d.ts +20 -0
- package/dist/inngest/event-names.d.ts.map +1 -0
- package/dist/inngest/event-names.js +19 -0
- package/dist/inngest/event-names.js.map +1 -0
- package/dist/inngest/index.d.ts +5 -0
- package/dist/inngest/index.d.ts.map +1 -0
- package/dist/inngest/index.js +3 -0
- package/dist/inngest/index.js.map +1 -0
- package/dist/memory/index.d.ts +4 -3
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +3 -2
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/user-memory.d.ts +15 -0
- package/dist/memory/user-memory.d.ts.map +1 -0
- package/dist/memory/user-memory.js +20 -0
- package/dist/memory/user-memory.js.map +1 -0
- package/dist/memory/user-memory.test.d.ts +2 -0
- package/dist/memory/user-memory.test.d.ts.map +1 -0
- package/dist/memory/user-memory.test.js +74 -0
- package/dist/memory/user-memory.test.js.map +1 -0
- package/dist/module/create-runtime.d.ts +4 -1
- package/dist/module/create-runtime.d.ts.map +1 -1
- package/dist/module/create-runtime.js.map +1 -1
- package/dist/module/map-supabase-stores.d.ts +3 -0
- package/dist/module/map-supabase-stores.d.ts.map +1 -1
- package/dist/module/map-supabase-stores.js +3 -0
- package/dist/module/map-supabase-stores.js.map +1 -1
- package/dist/package-exports.test.d.ts +2 -0
- package/dist/package-exports.test.d.ts.map +1 -0
- package/dist/package-exports.test.js +36 -0
- package/dist/package-exports.test.js.map +1 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/model-resolver.d.ts +11 -3
- package/dist/providers/model-resolver.d.ts.map +1 -1
- package/dist/providers/model-resolver.js +166 -11
- package/dist/providers/model-resolver.js.map +1 -1
- package/dist/providers/model-resolver.test.js +10 -10
- package/dist/providers/model-resolver.test.js.map +1 -1
- package/dist/providers/provider-interfaces.d.ts +0 -20
- package/dist/providers/provider-interfaces.d.ts.map +1 -1
- package/dist/providers/provider-interfaces.js +1 -0
- package/dist/providers/provider-interfaces.js.map +1 -1
- package/dist/scoring/index.d.ts +4 -2
- package/dist/scoring/index.d.ts.map +1 -1
- package/dist/scoring/index.js +2 -1
- package/dist/scoring/index.js.map +1 -1
- package/dist/scoring/promotion.d.ts +20 -0
- package/dist/scoring/promotion.d.ts.map +1 -0
- package/dist/scoring/promotion.js +39 -0
- package/dist/scoring/promotion.js.map +1 -0
- package/dist/scoring/promotion.test.d.ts +2 -0
- package/dist/scoring/promotion.test.d.ts.map +1 -0
- package/dist/scoring/promotion.test.js +141 -0
- package/dist/scoring/promotion.test.js.map +1 -0
- package/dist/settings/index.d.ts +15 -0
- package/dist/settings/index.d.ts.map +1 -0
- package/dist/settings/index.js +47 -0
- package/dist/settings/index.js.map +1 -0
- package/dist/settings/index.test.d.ts +2 -0
- package/dist/settings/index.test.d.ts.map +1 -0
- package/dist/settings/index.test.js +75 -0
- package/dist/settings/index.test.js.map +1 -0
- package/dist/skill/index.d.ts +4 -0
- package/dist/skill/index.d.ts.map +1 -0
- package/dist/skill/index.js +3 -0
- package/dist/skill/index.js.map +1 -0
- package/dist/skill/skill-loader.d.ts +18 -0
- package/dist/skill/skill-loader.d.ts.map +1 -0
- package/dist/skill/skill-loader.js +31 -0
- package/dist/skill/skill-loader.js.map +1 -0
- package/dist/skill/skill-loader.test.d.ts +2 -0
- package/dist/skill/skill-loader.test.d.ts.map +1 -0
- package/dist/skill/skill-loader.test.js +64 -0
- package/dist/skill/skill-loader.test.js.map +1 -0
- package/dist/skill/skill-prompt.d.ts +7 -0
- package/dist/skill/skill-prompt.d.ts.map +1 -0
- package/dist/skill/skill-prompt.js +17 -0
- package/dist/skill/skill-prompt.js.map +1 -0
- package/dist/skill/skill-prompt.test.d.ts +2 -0
- package/dist/skill/skill-prompt.test.d.ts.map +1 -0
- package/dist/skill/skill-prompt.test.js +44 -0
- package/dist/skill/skill-prompt.test.js.map +1 -0
- package/dist/source/index.d.ts +5 -0
- package/dist/source/index.d.ts.map +1 -0
- package/dist/source/index.js +3 -0
- package/dist/source/index.js.map +1 -0
- package/dist/source/source-poller.d.ts +66 -0
- package/dist/source/source-poller.d.ts.map +1 -0
- package/dist/source/source-poller.js +64 -0
- package/dist/source/source-poller.js.map +1 -0
- package/dist/source/source-poller.test.d.ts +2 -0
- package/dist/source/source-poller.test.d.ts.map +1 -0
- package/dist/source/source-poller.test.js +184 -0
- package/dist/source/source-poller.test.js.map +1 -0
- package/dist/source/source-status.d.ts +41 -0
- package/dist/source/source-status.d.ts.map +1 -0
- package/dist/source/source-status.js +73 -0
- package/dist/source/source-status.js.map +1 -0
- package/dist/source/source-status.test.d.ts +2 -0
- package/dist/source/source-status.test.d.ts.map +1 -0
- package/dist/source/source-status.test.js +116 -0
- package/dist/source/source-status.test.js.map +1 -0
- package/dist/template/index.d.ts +61 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +100 -0
- package/dist/template/index.js.map +1 -0
- package/dist/template/index.test.d.ts +2 -0
- package/dist/template/index.test.d.ts.map +1 -0
- package/dist/template/index.test.js +167 -0
- package/dist/template/index.test.js.map +1 -0
- package/dist/testing/in-memory-agent-version-store.d.ts +13 -0
- package/dist/testing/in-memory-agent-version-store.d.ts.map +1 -0
- package/dist/testing/in-memory-agent-version-store.js +36 -0
- package/dist/testing/in-memory-agent-version-store.js.map +1 -0
- package/dist/testing/in-memory-chat-store.d.ts +11 -1
- package/dist/testing/in-memory-chat-store.d.ts.map +1 -1
- package/dist/testing/in-memory-chat-store.js +66 -0
- package/dist/testing/in-memory-chat-store.js.map +1 -1
- package/dist/testing/in-memory-entity-store.d.ts +2 -0
- package/dist/testing/in-memory-entity-store.d.ts.map +1 -1
- package/dist/testing/in-memory-entity-store.js +8 -3
- package/dist/testing/in-memory-entity-store.js.map +1 -1
- package/dist/testing/in-memory-entity-store.test.js +2 -1
- package/dist/testing/in-memory-entity-store.test.js.map +1 -1
- package/dist/testing/in-memory-heartbeat-run-store.d.ts +21 -0
- package/dist/testing/in-memory-heartbeat-run-store.d.ts.map +1 -0
- package/dist/testing/in-memory-heartbeat-run-store.js +107 -0
- package/dist/testing/in-memory-heartbeat-run-store.js.map +1 -0
- package/dist/testing/index.d.ts +9 -7
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +9 -7
- package/dist/testing/index.js.map +1 -1
- package/dist/tool/gallery/gallery-module.d.ts +4 -0
- package/dist/tool/gallery/gallery-module.d.ts.map +1 -0
- package/dist/tool/gallery/gallery-module.js +10 -0
- package/dist/tool/gallery/gallery-module.js.map +1 -0
- package/dist/tool/gallery/gallery-tool-definitions.d.ts +17 -0
- package/dist/tool/gallery/gallery-tool-definitions.d.ts.map +1 -0
- package/dist/tool/gallery/gallery-tool-definitions.js +748 -0
- package/dist/tool/gallery/gallery-tool-definitions.js.map +1 -0
- package/dist/tool/gallery/gallery-tools.d.ts +11 -0
- package/dist/tool/gallery/gallery-tools.d.ts.map +1 -0
- package/dist/tool/gallery/gallery-tools.js +971 -0
- package/dist/tool/gallery/gallery-tools.js.map +1 -0
- package/dist/tool/gallery/gallery-tools.test.d.ts +2 -0
- package/dist/tool/gallery/gallery-tools.test.d.ts.map +1 -0
- package/dist/tool/gallery/gallery-tools.test.js +75 -0
- package/dist/tool/gallery/gallery-tools.test.js.map +1 -0
- package/dist/tool/gallery/index.d.ts +5 -0
- package/dist/tool/gallery/index.d.ts.map +1 -0
- package/dist/tool/gallery/index.js +4 -0
- package/dist/tool/gallery/index.js.map +1 -0
- package/dist/tool/index.d.ts +11 -7
- package/dist/tool/index.d.ts.map +1 -1
- package/dist/tool/index.js +7 -5
- package/dist/tool/index.js.map +1 -1
- package/dist/tool/session-manager.d.ts +35 -0
- package/dist/tool/session-manager.d.ts.map +1 -0
- package/dist/tool/session-manager.js +40 -0
- package/dist/tool/session-manager.js.map +1 -0
- package/dist/tool/session-manager.test.d.ts +2 -0
- package/dist/tool/session-manager.test.d.ts.map +1 -0
- package/dist/tool/session-manager.test.js +139 -0
- package/dist/tool/session-manager.test.js.map +1 -0
- package/dist/tool/tool-registry.d.ts +1 -1
- package/dist/tool/tool-registry.d.ts.map +1 -1
- package/dist/tool/tool-registry.js +1 -0
- package/dist/tool/tool-registry.js.map +1 -1
- package/dist/tool/tool-registry.test.js +7 -0
- package/dist/tool/tool-registry.test.js.map +1 -1
- package/dist/workflow/claim-manager.d.ts +24 -0
- package/dist/workflow/claim-manager.d.ts.map +1 -0
- package/dist/workflow/claim-manager.js +31 -0
- package/dist/workflow/claim-manager.js.map +1 -0
- package/dist/workflow/claim-manager.test.d.ts +2 -0
- package/dist/workflow/claim-manager.test.d.ts.map +1 -0
- package/dist/workflow/claim-manager.test.js +124 -0
- package/dist/workflow/claim-manager.test.js.map +1 -0
- package/dist/workflow/create-node-executor.d.ts +40 -0
- package/dist/workflow/create-node-executor.d.ts.map +1 -0
- package/dist/workflow/create-node-executor.js +234 -0
- package/dist/workflow/create-node-executor.js.map +1 -0
- package/dist/workflow/field-recovery.d.ts +12 -0
- package/dist/workflow/field-recovery.d.ts.map +1 -0
- package/dist/workflow/field-recovery.js +86 -0
- package/dist/workflow/field-recovery.js.map +1 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +7 -0
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/run-entity-workflow.d.ts +53 -0
- package/dist/workflow/run-entity-workflow.d.ts.map +1 -0
- package/dist/workflow/run-entity-workflow.js +72 -0
- package/dist/workflow/run-entity-workflow.js.map +1 -0
- package/dist/workflow/run-queries.d.ts +45 -0
- package/dist/workflow/run-queries.d.ts.map +1 -0
- package/dist/workflow/run-queries.js +80 -0
- package/dist/workflow/run-queries.js.map +1 -0
- package/dist/workflow/run-queries.test.d.ts +2 -0
- package/dist/workflow/run-queries.test.d.ts.map +1 -0
- package/dist/workflow/run-queries.test.js +177 -0
- package/dist/workflow/run-queries.test.js.map +1 -0
- package/package.json +227 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-manager.js","sourceRoot":"","sources":["../../src/workflow/claim-manager.ts"],"names":[],"mappings":"AAEA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,aAAa;AAElE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAAsD,EACtD,gBAAwB,wBAAwB;IAEhD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACjE,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAiC;IAC/D,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;AAC/E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAiC,EACjC,gBAAwB,wBAAwB;IAEhD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,UAAU,GAAG,MAAM,CAChF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-manager.test.d.ts","sourceRoot":"","sources":["../../src/workflow/claim-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { expireStaleWorkflowNodeClaims, hasActiveClaims, findStaleNodeRuns, DEFAULT_CLAIM_TIMEOUT_MS, } from './claim-manager.js';
|
|
3
|
+
function makeNodeRun(overrides) {
|
|
4
|
+
return {
|
|
5
|
+
workflow_run_id: 'run-1',
|
|
6
|
+
entity_id: 'entity-1',
|
|
7
|
+
tenant_id: 'tenant-1',
|
|
8
|
+
node_key: 'node-1',
|
|
9
|
+
node_type: 'agent_task',
|
|
10
|
+
label: 'Test Node',
|
|
11
|
+
field_name: null,
|
|
12
|
+
block_id: null,
|
|
13
|
+
output_type: 'field',
|
|
14
|
+
assignee_type: null,
|
|
15
|
+
assignee_agent_slug: null,
|
|
16
|
+
depends_on: [],
|
|
17
|
+
instructions: null,
|
|
18
|
+
metadata: null,
|
|
19
|
+
error_message: null,
|
|
20
|
+
claimed_by: null,
|
|
21
|
+
claimed_at: null,
|
|
22
|
+
attempt_count: 0,
|
|
23
|
+
started_at: null,
|
|
24
|
+
completed_at: null,
|
|
25
|
+
duration_ms: null,
|
|
26
|
+
created_at: '2026-01-01T10:00:00Z',
|
|
27
|
+
...overrides,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
describe('DEFAULT_CLAIM_TIMEOUT_MS', () => {
|
|
31
|
+
it('is 15 minutes', () => {
|
|
32
|
+
expect(DEFAULT_CLAIM_TIMEOUT_MS).toBe(15 * 60_000);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('expireStaleWorkflowNodeClaims', () => {
|
|
36
|
+
it('calls expireStaleNodeClaims with provided timeout', async () => {
|
|
37
|
+
const expired = [makeNodeRun({ id: 'n1', status: 'running' })];
|
|
38
|
+
const store = { expireStaleNodeClaims: vi.fn(async () => expired) };
|
|
39
|
+
const count = await expireStaleWorkflowNodeClaims(store, 30_000);
|
|
40
|
+
expect(store.expireStaleNodeClaims).toHaveBeenCalledWith(30_000);
|
|
41
|
+
expect(count).toBe(1);
|
|
42
|
+
});
|
|
43
|
+
it('uses default timeout when not provided', async () => {
|
|
44
|
+
const store = { expireStaleNodeClaims: vi.fn(async () => []) };
|
|
45
|
+
await expireStaleWorkflowNodeClaims(store);
|
|
46
|
+
expect(store.expireStaleNodeClaims).toHaveBeenCalledWith(DEFAULT_CLAIM_TIMEOUT_MS);
|
|
47
|
+
});
|
|
48
|
+
it('returns 0 when no claims were expired', async () => {
|
|
49
|
+
const store = { expireStaleNodeClaims: vi.fn(async () => []) };
|
|
50
|
+
const count = await expireStaleWorkflowNodeClaims(store, 60_000);
|
|
51
|
+
expect(count).toBe(0);
|
|
52
|
+
});
|
|
53
|
+
it('returns the count of expired claims', async () => {
|
|
54
|
+
const store = {
|
|
55
|
+
expireStaleNodeClaims: vi.fn(async () => [
|
|
56
|
+
makeNodeRun({ id: 'n1', status: 'running' }),
|
|
57
|
+
makeNodeRun({ id: 'n2', status: 'running' }),
|
|
58
|
+
makeNodeRun({ id: 'n3', status: 'running' }),
|
|
59
|
+
]),
|
|
60
|
+
};
|
|
61
|
+
const count = await expireStaleWorkflowNodeClaims(store, 60_000);
|
|
62
|
+
expect(count).toBe(3);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('hasActiveClaims', () => {
|
|
66
|
+
it('returns true when a running node is claimed', () => {
|
|
67
|
+
const nodes = [makeNodeRun({ id: 'n1', status: 'running', claimed_by: 'agent-1' })];
|
|
68
|
+
expect(hasActiveClaims(nodes)).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
it('returns false when no nodes are claimed', () => {
|
|
71
|
+
const nodes = [
|
|
72
|
+
makeNodeRun({ id: 'n1', status: 'pending' }),
|
|
73
|
+
makeNodeRun({ id: 'n2', status: 'completed' }),
|
|
74
|
+
];
|
|
75
|
+
expect(hasActiveClaims(nodes)).toBe(false);
|
|
76
|
+
});
|
|
77
|
+
it('returns false when running but claimed_by is null', () => {
|
|
78
|
+
const nodes = [makeNodeRun({ id: 'n1', status: 'running', claimed_by: null })];
|
|
79
|
+
expect(hasActiveClaims(nodes)).toBe(false);
|
|
80
|
+
});
|
|
81
|
+
it('returns false for empty array', () => {
|
|
82
|
+
expect(hasActiveClaims([])).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe('findStaleNodeRuns', () => {
|
|
86
|
+
it('returns nodes claimed before the cutoff', () => {
|
|
87
|
+
const staleAt = new Date(Date.now() - 20 * 60_000).toISOString(); // 20 min ago
|
|
88
|
+
const recentAt = new Date(Date.now() - 5 * 60_000).toISOString(); // 5 min ago
|
|
89
|
+
const nodes = [
|
|
90
|
+
makeNodeRun({ id: 'n1', status: 'running', claimed_by: 'agent-1', claimed_at: staleAt }),
|
|
91
|
+
makeNodeRun({ id: 'n2', status: 'running', claimed_by: 'agent-1', claimed_at: recentAt }),
|
|
92
|
+
];
|
|
93
|
+
const stale = findStaleNodeRuns(nodes, 15 * 60_000);
|
|
94
|
+
expect(stale).toHaveLength(1);
|
|
95
|
+
expect(stale[0].id).toBe('n1');
|
|
96
|
+
});
|
|
97
|
+
it('excludes non-running nodes', () => {
|
|
98
|
+
const oldAt = new Date(Date.now() - 60 * 60_000).toISOString();
|
|
99
|
+
const nodes = [
|
|
100
|
+
makeNodeRun({ id: 'n1', status: 'pending', claimed_at: oldAt }),
|
|
101
|
+
makeNodeRun({ id: 'n2', status: 'completed', claimed_at: oldAt }),
|
|
102
|
+
makeNodeRun({ id: 'n3', status: 'running', claimed_by: 'agent-1', claimed_at: oldAt }),
|
|
103
|
+
];
|
|
104
|
+
const stale = findStaleNodeRuns(nodes);
|
|
105
|
+
expect(stale).toHaveLength(1);
|
|
106
|
+
expect(stale[0].id).toBe('n3');
|
|
107
|
+
});
|
|
108
|
+
it('returns empty array when no stale nodes', () => {
|
|
109
|
+
const recentAt = new Date(Date.now() - 1000).toISOString();
|
|
110
|
+
const nodes = [
|
|
111
|
+
makeNodeRun({ id: 'n1', status: 'running', claimed_by: 'agent-1', claimed_at: recentAt }),
|
|
112
|
+
];
|
|
113
|
+
const stale = findStaleNodeRuns(nodes, 15 * 60_000);
|
|
114
|
+
expect(stale).toHaveLength(0);
|
|
115
|
+
});
|
|
116
|
+
it('uses DEFAULT_CLAIM_TIMEOUT_MS when not specified', () => {
|
|
117
|
+
const staleAt = new Date(Date.now() - 20 * 60_000).toISOString();
|
|
118
|
+
const nodes = [
|
|
119
|
+
makeNodeRun({ id: 'n1', status: 'running', claimed_by: 'agent-1', claimed_at: staleAt }),
|
|
120
|
+
];
|
|
121
|
+
expect(findStaleNodeRuns(nodes)).toHaveLength(1);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=claim-manager.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-manager.test.js","sourceRoot":"","sources":["../../src/workflow/claim-manager.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { EntityStore, ToolDefinition } from '@sprinterai/core';
|
|
2
|
+
import type { LanguageModel } from 'ai';
|
|
3
|
+
import type { ResolveAgentOptions } from '../agent/agent-resolver.js';
|
|
4
|
+
import type { NodeExecutorFn } from './node-executor.js';
|
|
5
|
+
/**
|
|
6
|
+
* Dependencies injected into the node executor factory.
|
|
7
|
+
*
|
|
8
|
+
* This keeps the executor decoupled from concrete AI SDK providers,
|
|
9
|
+
* store implementations, and tool registries.
|
|
10
|
+
*/
|
|
11
|
+
export interface CreateNodeExecutorOptions {
|
|
12
|
+
/** Language model to use for agent tasks. */
|
|
13
|
+
model: LanguageModel;
|
|
14
|
+
/** Entity store for writing extracted values back. */
|
|
15
|
+
entityStore: EntityStore;
|
|
16
|
+
/** Options for resolving agents by slug. */
|
|
17
|
+
agentResolverOptions?: ResolveAgentOptions;
|
|
18
|
+
/** All available tools the agent may use (filtered per-node). */
|
|
19
|
+
availableTools?: ToolDefinition[];
|
|
20
|
+
/**
|
|
21
|
+
* Per-field extraction config.
|
|
22
|
+
* Keys are field names; values contain extraction instructions,
|
|
23
|
+
* custom tool slugs, schema properties, and max steps.
|
|
24
|
+
*/
|
|
25
|
+
fieldExtractionConfigs?: Record<string, {
|
|
26
|
+
instructions?: string;
|
|
27
|
+
customTools?: string[];
|
|
28
|
+
schemaProperty?: Record<string, unknown>;
|
|
29
|
+
maxSteps?: number;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create a NodeExecutorFn that bridges the workflow runner to the agent system.
|
|
34
|
+
*
|
|
35
|
+
* For `wait_human` nodes: returns success immediately (no-op).
|
|
36
|
+
* For `agent_task` nodes: resolves an agent, builds a submitValue tool,
|
|
37
|
+
* calls executeAgentGenerate, and writes the extracted value to the entity store.
|
|
38
|
+
*/
|
|
39
|
+
export declare function createNodeExecutor(options: CreateNodeExecutorOptions): NodeExecutorFn;
|
|
40
|
+
//# sourceMappingURL=create-node-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-node-executor.d.ts","sourceRoot":"","sources":["../../src/workflow/create-node-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,IAAI,CAAC;AAItD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAKnE,OAAO,KAAK,EAA6C,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjG;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,6CAA6C;IAC7C,KAAK,EAAE,aAAa,CAAC;IACrB,sDAAsD;IACtD,WAAW,EAAE,WAAW,CAAC;IACzB,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;IAC3C,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAC7B,MAAM,EACN;QACE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CACF,CAAC;CACH;AAID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,cAAc,CA0JrF"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { defineTool } from '@sprinterai/core';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { resolveAgent } from '../agent/agent-resolver.js';
|
|
4
|
+
import { executeAgentGenerate } from '../agent/execute-agent.js';
|
|
5
|
+
import { extractValueFromText, isEmptyFieldValue } from './field-recovery.js';
|
|
6
|
+
// ─── Factory ──────────────────────────────────────────────────
|
|
7
|
+
/**
|
|
8
|
+
* Create a NodeExecutorFn that bridges the workflow runner to the agent system.
|
|
9
|
+
*
|
|
10
|
+
* For `wait_human` nodes: returns success immediately (no-op).
|
|
11
|
+
* For `agent_task` nodes: resolves an agent, builds a submitValue tool,
|
|
12
|
+
* calls executeAgentGenerate, and writes the extracted value to the entity store.
|
|
13
|
+
*/
|
|
14
|
+
export function createNodeExecutor(options) {
|
|
15
|
+
const { model, entityStore, agentResolverOptions, availableTools = [], fieldExtractionConfigs = {}, } = options;
|
|
16
|
+
return async (context) => {
|
|
17
|
+
const { node, entityId, entityContent, fieldOverrides } = context;
|
|
18
|
+
// ── wait_human: no-op ────────────────────────────────────
|
|
19
|
+
if (node.node_type === 'wait_human' || node.node_type === 'human_input') {
|
|
20
|
+
return { success: true, fieldsExtracted: [] };
|
|
21
|
+
}
|
|
22
|
+
// ── agent_task (and legacy extract_field) ────────────────
|
|
23
|
+
const fieldName = node.field_name;
|
|
24
|
+
if (!fieldName) {
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
fieldsExtracted: [],
|
|
28
|
+
error: `Node ${node.node_key} has no field_name assigned`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
// 1. Resolve the agent
|
|
33
|
+
const agentSlug = node.assignee_agent_slug ?? 'assistant';
|
|
34
|
+
const agent = await resolveAgent(agentSlug, agentResolverOptions ?? {});
|
|
35
|
+
// 2. Build the submitValue tool — captures the extracted value
|
|
36
|
+
let submittedValue = undefined;
|
|
37
|
+
let submitCalled = false;
|
|
38
|
+
const fieldConfig = fieldExtractionConfigs[fieldName];
|
|
39
|
+
const schemaProperty = fieldConfig?.schemaProperty;
|
|
40
|
+
// Build a Zod schema for the submitValue tool based on the field schema
|
|
41
|
+
const valueSchema = buildValueSchema(schemaProperty);
|
|
42
|
+
const submitValueTool = defineTool({
|
|
43
|
+
slug: 'submitValue',
|
|
44
|
+
name: 'Submit Value',
|
|
45
|
+
description: `Submit the extracted value for the "${fieldName}" field. Call this tool with the value you have determined.`,
|
|
46
|
+
category: 'workflow',
|
|
47
|
+
icon: 'check',
|
|
48
|
+
inputSchema: z.object({
|
|
49
|
+
value: valueSchema.describe(`The extracted value for "${fieldName}"`),
|
|
50
|
+
}),
|
|
51
|
+
execute: async (input) => {
|
|
52
|
+
const typed = input;
|
|
53
|
+
submittedValue = typed.value;
|
|
54
|
+
submitCalled = true;
|
|
55
|
+
return { success: true, field: fieldName, value: typed.value };
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
// 3. Assemble tools: submitValue + optionally filtered available tools
|
|
59
|
+
const tools = [submitValueTool];
|
|
60
|
+
if (fieldConfig?.customTools && fieldConfig.customTools.length > 0) {
|
|
61
|
+
// Only include tools matching the field's customTools list
|
|
62
|
+
const customToolSlugs = new Set(fieldConfig.customTools);
|
|
63
|
+
for (const tool of availableTools) {
|
|
64
|
+
if (customToolSlugs.has(tool.slug)) {
|
|
65
|
+
tools.push(tool);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Include all available tools
|
|
71
|
+
tools.push(...availableTools);
|
|
72
|
+
}
|
|
73
|
+
// 4. Build system prompt sections
|
|
74
|
+
const systemSections = [
|
|
75
|
+
{
|
|
76
|
+
label: 'Role',
|
|
77
|
+
content: agent.systemPrompt,
|
|
78
|
+
priority: 100,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
label: 'Field Context',
|
|
82
|
+
content: buildFieldContextPrompt(fieldName, schemaProperty),
|
|
83
|
+
priority: 80,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
label: 'Task Instructions',
|
|
87
|
+
content: buildTaskInstructions(fieldName, node.instructions, fieldConfig?.instructions, fieldOverrides?.[fieldName]),
|
|
88
|
+
priority: 60,
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
// 5. Build user message with entity content
|
|
92
|
+
const userMessage = buildUserMessage(fieldName, entityContent);
|
|
93
|
+
const messages = [{ role: 'user', content: userMessage }];
|
|
94
|
+
// 6. Call the agent
|
|
95
|
+
const maxSteps = fieldConfig?.maxSteps ?? 5;
|
|
96
|
+
const result = await executeAgentGenerate({
|
|
97
|
+
model,
|
|
98
|
+
systemSections,
|
|
99
|
+
tools,
|
|
100
|
+
messages,
|
|
101
|
+
maxSteps,
|
|
102
|
+
temperature: 0,
|
|
103
|
+
});
|
|
104
|
+
// 7. Determine the extracted value
|
|
105
|
+
let extractedValue;
|
|
106
|
+
if (submitCalled) {
|
|
107
|
+
// Agent called submitValue — use that value
|
|
108
|
+
extractedValue = submittedValue;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
// Fallback: extract from text response
|
|
112
|
+
extractedValue = extractValueFromText(result.text, schemaProperty);
|
|
113
|
+
}
|
|
114
|
+
// 8. Write to entity store if we have a value
|
|
115
|
+
if (!isEmptyFieldValue(extractedValue)) {
|
|
116
|
+
const updatedContent = { ...entityContent, [fieldName]: extractedValue };
|
|
117
|
+
await entityStore.updateEntity(entityId, {
|
|
118
|
+
content: updatedContent,
|
|
119
|
+
});
|
|
120
|
+
return {
|
|
121
|
+
success: true,
|
|
122
|
+
fieldsExtracted: [fieldName],
|
|
123
|
+
updatedContent: { [fieldName]: extractedValue },
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// No value extracted — still succeed but with empty fields
|
|
127
|
+
return {
|
|
128
|
+
success: true,
|
|
129
|
+
fieldsExtracted: [],
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
fieldsExtracted: [],
|
|
137
|
+
error: `Failed to extract field "${fieldName}": ${errorMessage}`,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
// ─── Helpers ──────────────────────────────────────────────────
|
|
143
|
+
/**
|
|
144
|
+
* Build a Zod schema for the submitValue tool's value parameter.
|
|
145
|
+
* Adapts to the field's JSON schema type when available.
|
|
146
|
+
*/
|
|
147
|
+
function buildValueSchema(schemaProperty) {
|
|
148
|
+
if (!schemaProperty)
|
|
149
|
+
return z.unknown();
|
|
150
|
+
const type = schemaProperty.type;
|
|
151
|
+
switch (type) {
|
|
152
|
+
case 'string': {
|
|
153
|
+
const enumValues = schemaProperty.enum;
|
|
154
|
+
if (enumValues && enumValues.length > 0) {
|
|
155
|
+
return z.enum(enumValues);
|
|
156
|
+
}
|
|
157
|
+
return z.string();
|
|
158
|
+
}
|
|
159
|
+
case 'number':
|
|
160
|
+
case 'integer':
|
|
161
|
+
return z.number();
|
|
162
|
+
case 'boolean':
|
|
163
|
+
return z.boolean();
|
|
164
|
+
case 'array':
|
|
165
|
+
return z.array(z.unknown());
|
|
166
|
+
case 'object':
|
|
167
|
+
return z.record(z.unknown());
|
|
168
|
+
default:
|
|
169
|
+
return z.unknown();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Build the field context prompt section.
|
|
174
|
+
* Tells the agent what field it is extracting and any schema constraints.
|
|
175
|
+
*/
|
|
176
|
+
function buildFieldContextPrompt(fieldName, schemaProperty) {
|
|
177
|
+
const parts = [`You are extracting a value for the field: "${fieldName}".`];
|
|
178
|
+
if (schemaProperty) {
|
|
179
|
+
const type = schemaProperty.type;
|
|
180
|
+
if (type) {
|
|
181
|
+
parts.push(`Expected type: ${type}`);
|
|
182
|
+
}
|
|
183
|
+
const enumValues = schemaProperty.enum;
|
|
184
|
+
if (enumValues && enumValues.length > 0) {
|
|
185
|
+
parts.push(`Allowed values: ${enumValues.join(', ')}`);
|
|
186
|
+
}
|
|
187
|
+
const title = schemaProperty.title;
|
|
188
|
+
if (title) {
|
|
189
|
+
parts.push(`Field description: ${title}`);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
parts.push('', 'When you have determined the value, call the `submitValue` tool with the result.', 'If you cannot determine the value, respond with your best assessment and call submitValue anyway.');
|
|
193
|
+
return parts.join('\n');
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Build the task instructions prompt from multiple sources.
|
|
197
|
+
* Priority: field override instructions > node instructions > extraction config instructions.
|
|
198
|
+
*/
|
|
199
|
+
function buildTaskInstructions(fieldName, nodeInstructions, extractionInstructions, fieldOverride) {
|
|
200
|
+
const parts = [];
|
|
201
|
+
// Field override instructions take highest priority
|
|
202
|
+
if (fieldOverride?.instructions) {
|
|
203
|
+
parts.push(fieldOverride.instructions);
|
|
204
|
+
}
|
|
205
|
+
// Node instructions from the workflow definition
|
|
206
|
+
if (nodeInstructions) {
|
|
207
|
+
parts.push(nodeInstructions);
|
|
208
|
+
}
|
|
209
|
+
// Extraction config instructions (from entity type field config)
|
|
210
|
+
if (extractionInstructions && extractionInstructions !== nodeInstructions) {
|
|
211
|
+
parts.push(extractionInstructions);
|
|
212
|
+
}
|
|
213
|
+
if (parts.length === 0) {
|
|
214
|
+
parts.push(`Extract the value for the "${fieldName}" field from the provided entity data.`);
|
|
215
|
+
}
|
|
216
|
+
return parts.join('\n\n');
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Build the user message containing the entity's current content.
|
|
220
|
+
* The agent uses this as context for extraction.
|
|
221
|
+
*/
|
|
222
|
+
function buildUserMessage(fieldName, entityContent) {
|
|
223
|
+
const contentJson = JSON.stringify(entityContent, null, 2);
|
|
224
|
+
return [
|
|
225
|
+
`Extract the value for the "${fieldName}" field from the following entity data.`,
|
|
226
|
+
'',
|
|
227
|
+
'```json',
|
|
228
|
+
contentJson,
|
|
229
|
+
'```',
|
|
230
|
+
'',
|
|
231
|
+
'Analyze the data above and call the `submitValue` tool with the extracted value.',
|
|
232
|
+
].join('\n');
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=create-node-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-node-executor.js","sourceRoot":"","sources":["../../src/workflow/create-node-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attempt to parse a structured value from an agent's text response.
|
|
3
|
+
* Used as a fallback when the agent completes without calling submitValue.
|
|
4
|
+
*
|
|
5
|
+
* Handles: JSON code blocks, raw JSON, enum matching, number/boolean extraction.
|
|
6
|
+
*/
|
|
7
|
+
export declare function extractValueFromText(text: string, schemaProperty?: Record<string, unknown>): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* Check if a field value is "empty" for workflow purposes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isEmptyFieldValue(value: unknown): boolean;
|
|
12
|
+
//# sourceMappingURL=field-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-recovery.d.ts","sourceRoot":"","sources":["../../src/workflow/field-recovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAoET;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIzD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attempt to parse a structured value from an agent's text response.
|
|
3
|
+
* Used as a fallback when the agent completes without calling submitValue.
|
|
4
|
+
*
|
|
5
|
+
* Handles: JSON code blocks, raw JSON, enum matching, number/boolean extraction.
|
|
6
|
+
*/
|
|
7
|
+
export function extractValueFromText(text, schemaProperty) {
|
|
8
|
+
const trimmed = text.trim();
|
|
9
|
+
// Try JSON code block first
|
|
10
|
+
const jsonBlockMatch = trimmed.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
11
|
+
if (jsonBlockMatch) {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(jsonBlockMatch[1].trim());
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Fall through
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Try parsing whole response as JSON
|
|
20
|
+
try {
|
|
21
|
+
const parsed = JSON.parse(trimmed);
|
|
22
|
+
if (parsed !== null && typeof parsed !== 'undefined') {
|
|
23
|
+
if (typeof parsed === 'object' &&
|
|
24
|
+
!Array.isArray(parsed) &&
|
|
25
|
+
schemaProperty?.type !== 'object') {
|
|
26
|
+
const wrapper = parsed;
|
|
27
|
+
const scalarKey = ['value', 'result', 'answer', 'response'].find((k) => k in wrapper);
|
|
28
|
+
if (scalarKey !== undefined)
|
|
29
|
+
return wrapper[scalarKey];
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Not JSON
|
|
38
|
+
}
|
|
39
|
+
// Enum matching
|
|
40
|
+
const enumValues = schemaProperty?.enum;
|
|
41
|
+
if (enumValues && enumValues.length > 0) {
|
|
42
|
+
const lowerText = trimmed.toLowerCase();
|
|
43
|
+
for (const enumVal of enumValues) {
|
|
44
|
+
if (lowerText.includes(enumVal.toLowerCase()))
|
|
45
|
+
return enumVal;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Number extraction
|
|
49
|
+
const schemaType = schemaProperty?.type;
|
|
50
|
+
if (schemaType === 'number' || schemaType === 'integer') {
|
|
51
|
+
const numberMatch = trimmed.match(/-?\d[\d,]*\.?\d*/);
|
|
52
|
+
if (numberMatch) {
|
|
53
|
+
const num = Number(numberMatch[0].replace(/,/g, ''));
|
|
54
|
+
if (!isNaN(num))
|
|
55
|
+
return num;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Boolean extraction
|
|
59
|
+
if (schemaType === 'boolean') {
|
|
60
|
+
const lower = trimmed.toLowerCase();
|
|
61
|
+
if (/\b(false|no)\b/.test(lower))
|
|
62
|
+
return false;
|
|
63
|
+
if (/\b(true|yes)\b/.test(lower))
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
// Short text — use as string value
|
|
67
|
+
if (trimmed.length <= 2000)
|
|
68
|
+
return trimmed;
|
|
69
|
+
// Long text — try last line
|
|
70
|
+
const lines = trimmed.split('\n').filter((l) => l.trim());
|
|
71
|
+
const lastLine = lines[lines.length - 1]?.trim();
|
|
72
|
+
if (lastLine && lastLine.length <= 500)
|
|
73
|
+
return lastLine;
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if a field value is "empty" for workflow purposes.
|
|
78
|
+
*/
|
|
79
|
+
export function isEmptyFieldValue(value) {
|
|
80
|
+
if (value === null || value === undefined || value === '')
|
|
81
|
+
return true;
|
|
82
|
+
if (Array.isArray(value) && value.length === 0)
|
|
83
|
+
return true;
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=field-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-recovery.js","sourceRoot":"","sources":["../../src/workflow/field-recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/workflow/index.d.ts
CHANGED
|
@@ -6,4 +6,12 @@ export type { NodeStatusUpdate } from './evaluate-nodes.js';
|
|
|
6
6
|
export { runWorkflow } from './workflow-runner.js';
|
|
7
7
|
export type { RunWorkflowOptions, RunWorkflowResult } from './workflow-runner.js';
|
|
8
8
|
export type { NodeExecutionContext, NodeExecutionResult, NodeExecutorFn } from './node-executor.js';
|
|
9
|
+
export { extractValueFromText, isEmptyFieldValue } from './field-recovery.js';
|
|
10
|
+
export { createNodeExecutor } from './create-node-executor.js';
|
|
11
|
+
export type { CreateNodeExecutorOptions } from './create-node-executor.js';
|
|
12
|
+
export { runEntityWorkflow } from './run-entity-workflow.js';
|
|
13
|
+
export type { RunEntityWorkflowOptions } from './run-entity-workflow.js';
|
|
14
|
+
export { getWorkflowRunHistory, getActiveWorkflowRuns, getRecentWorkflowRuns, getWorkflowActivitySummary, } from './run-queries.js';
|
|
15
|
+
export type { WorkflowActivitySummary } from './run-queries.js';
|
|
16
|
+
export { expireStaleWorkflowNodeClaims, hasActiveClaims, findStaleNodeRuns, DEFAULT_CLAIM_TIMEOUT_MS, } from './claim-manager.js';
|
|
9
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}
|
package/dist/workflow/index.js
CHANGED
|
@@ -2,4 +2,11 @@ export { compileEntityWorkflowDefinition, getWorkflowLayers } from './compile.js
|
|
|
2
2
|
export { computeWorkflowProgress, deriveWorkflowStatus } from './status.js';
|
|
3
3
|
export { evaluateNodeStatuses } from './evaluate-nodes.js';
|
|
4
4
|
export { runWorkflow } from './workflow-runner.js';
|
|
5
|
+
export { extractValueFromText, isEmptyFieldValue } from './field-recovery.js';
|
|
6
|
+
export { createNodeExecutor } from './create-node-executor.js';
|
|
7
|
+
export { runEntityWorkflow } from './run-entity-workflow.js';
|
|
8
|
+
// ─── Run Queries ────────────────────────────────────────────
|
|
9
|
+
export { getWorkflowRunHistory, getActiveWorkflowRuns, getRecentWorkflowRuns, getWorkflowActivitySummary, } from './run-queries.js';
|
|
10
|
+
// ─── Claim Manager ──────────────────────────────────────────
|
|
11
|
+
export { expireStaleWorkflowNodeClaims, hasActiveClaims, findStaleNodeRuns, DEFAULT_CLAIM_TIMEOUT_MS, } from './claim-manager.js';
|
|
5
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,GAC3B,MAAM,eAAe,CAAC;AAGvB,+DAA+D;AAC/D,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { EntityStore, EntityTypeRecord, ToolDefinition, WorkflowFieldOverride, WorkflowRunStore, WorkflowTriggerType, EventBus } from '@sprinterai/core';
|
|
2
|
+
import type { LanguageModel } from 'ai';
|
|
3
|
+
import type { ResolveAgentOptions } from '../agent/agent-resolver.js';
|
|
4
|
+
import type { RunWorkflowResult } from './workflow-runner.js';
|
|
5
|
+
/** Options for the high-level entity workflow convenience wrapper. */
|
|
6
|
+
export interface RunEntityWorkflowOptions {
|
|
7
|
+
/** Entity being processed. */
|
|
8
|
+
entityId: string;
|
|
9
|
+
/** Tenant scope. */
|
|
10
|
+
tenantId: string;
|
|
11
|
+
/** The entity type record (provides field configs, json_schema, etc.). */
|
|
12
|
+
entityType: EntityTypeRecord;
|
|
13
|
+
/** Current entity field values. */
|
|
14
|
+
entityContent: Record<string, unknown>;
|
|
15
|
+
/** Store for persisting workflow and node run state. */
|
|
16
|
+
workflowRunStore: WorkflowRunStore;
|
|
17
|
+
/** Entity store for writing extracted values back. */
|
|
18
|
+
entityStore: EntityStore;
|
|
19
|
+
/** Function to resolve a model ID to a LanguageModel instance. */
|
|
20
|
+
resolveModel: (modelId?: string) => LanguageModel;
|
|
21
|
+
/** Options for resolving agents by slug. */
|
|
22
|
+
agentResolverOptions?: ResolveAgentOptions;
|
|
23
|
+
/** All available tools the agent may use. */
|
|
24
|
+
allTools?: ToolDefinition[];
|
|
25
|
+
/** Optional event bus for emitting workflow events. */
|
|
26
|
+
eventBus?: EventBus;
|
|
27
|
+
/** Subset of fields to process. If empty/undefined, process all. */
|
|
28
|
+
fields?: string[];
|
|
29
|
+
/** Force re-extraction even if fields are already populated. */
|
|
30
|
+
force?: boolean;
|
|
31
|
+
/** How this workflow was triggered. */
|
|
32
|
+
triggerType?: WorkflowTriggerType;
|
|
33
|
+
/** Who triggered this workflow (userId, agentSlug, etc.). */
|
|
34
|
+
triggeredBy?: string;
|
|
35
|
+
/** Per-field instruction overrides. */
|
|
36
|
+
fieldOverrides?: Record<string, WorkflowFieldOverride>;
|
|
37
|
+
/** Max agent loop iterations per field (default: 5). */
|
|
38
|
+
maxSteps?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Run an entity extraction workflow end-to-end.
|
|
42
|
+
*
|
|
43
|
+
* This is a high-level convenience wrapper that:
|
|
44
|
+
* 1. Reads field configs from the entity type record
|
|
45
|
+
* 2. Gets schema properties from the entity type's json_schema
|
|
46
|
+
* 3. Compiles the workflow definition via compileEntityWorkflowDefinition()
|
|
47
|
+
* 4. Creates a node executor via createNodeExecutor()
|
|
48
|
+
* 5. Calls runWorkflow() with everything assembled
|
|
49
|
+
*
|
|
50
|
+
* Consumers call one function instead of assembling 5 pieces.
|
|
51
|
+
*/
|
|
52
|
+
export declare function runEntityWorkflow(options: RunEntityWorkflowOptions): Promise<RunWorkflowResult>;
|
|
53
|
+
//# sourceMappingURL=run-entity-workflow.d.ts.map
|