@elevasis/sdk 1.44.2 → 1.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. package/dist/cli.cjs +1001 -652
  2. package/dist/index.d.ts +1045 -509
  3. package/dist/index.js +748 -690
  4. package/dist/node/index.d.ts +105 -97
  5. package/dist/test-utils/index.d.ts +42 -28
  6. package/dist/test-utils/index.js +549 -732
  7. package/dist/worker/index.d.ts +12112 -0
  8. package/dist/worker/index.js +211 -186
  9. package/package.json +6 -9
  10. package/reference/_navigation.md +151 -21
  11. package/reference/_reference-manifest.json +186 -4
  12. package/reference/claude-config.md +8 -0
  13. package/reference/core/index.mdx +3 -3
  14. package/reference/examples/organization-model.ts +117 -111
  15. package/reference/index.mdx +4 -4
  16. package/reference/rules/active-change-index.md +40 -54
  17. package/reference/rules/agent-runtime.md +81 -0
  18. package/reference/rules/agent-start-here.md +71 -163
  19. package/reference/rules/deployment.md +33 -10
  20. package/reference/rules/error-handling.md +26 -0
  21. package/reference/rules/execution.md +13 -0
  22. package/reference/rules/frontend.md +10 -3
  23. package/reference/rules/observability.md +9 -1
  24. package/reference/rules/operations.md +26 -17
  25. package/reference/rules/organization-model.md +74 -88
  26. package/reference/rules/organization-os.md +71 -88
  27. package/reference/rules/package-taxonomy.md +11 -2
  28. package/reference/rules/platform.md +13 -7
  29. package/reference/rules/shared-types.md +15 -0
  30. package/reference/rules/task-tracking.md +30 -5
  31. package/reference/rules/ui.md +145 -3
  32. package/reference/rules/vibe-intents.md +271 -0
  33. package/reference/rules/vibe.md +17 -243
  34. package/reference/scaffold/core/organization-graph.mdx +111 -97
  35. package/reference/scaffold/core/organization-model.mdx +234 -214
  36. package/reference/scaffold/operations/propagation-pipeline.md +1 -1
  37. package/reference/scaffold/operations/scaffold-maintenance.md +19 -18
  38. package/reference/scaffold/operations/workflow-recipes.md +71 -19
  39. package/reference/scaffold/recipes/add-a-feature.md +156 -146
  40. package/reference/scaffold/recipes/add-a-resource.md +123 -117
  41. package/reference/scaffold/recipes/customize-crm-actions.md +25 -10
  42. package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
  43. package/reference/scaffold/recipes/customize-organization-model.md +161 -149
  44. package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
  45. package/reference/scaffold/recipes/extend-crm.md +16 -11
  46. package/reference/scaffold/recipes/extend-lead-gen.md +25 -7
  47. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
  48. package/reference/scaffold/recipes/index.md +2 -2
  49. package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
  50. package/reference/scaffold/reference/contracts.md +12 -1
  51. package/reference/scaffold/reference/glossary.md +3 -3
  52. package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
  53. package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
  54. package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
  55. package/reference/scaffold/ui/feature-shell.mdx +279 -62
  56. package/reference/scaffold/ui/recipes.md +229 -197
  57. package/reference/sdk/cli-management.mdx +77 -29
  58. package/reference/sdk/concepts.mdx +2 -0
  59. package/reference/sdk/define-builders.mdx +76 -0
  60. package/reference/sdk/deployment/command-center.mdx +6 -2
  61. package/reference/sdk/deployment/execution-reference.mdx +64 -186
  62. package/reference/sdk/deployment/index.mdx +2 -0
  63. package/reference/sdk/exports.mdx +4 -4
  64. package/reference/sdk/framework/agent.mdx +49 -119
  65. package/reference/sdk/framework/index.mdx +46 -65
  66. package/reference/sdk/framework/project-structure.mdx +150 -205
  67. package/reference/sdk/framework/tutorial-system.mdx +2 -2
  68. package/reference/sdk/human-in-the-loop.mdx +152 -0
  69. package/reference/sdk/index.mdx +6 -7
  70. package/reference/sdk/platform-tools/index.mdx +12 -0
  71. package/reference/sdk/platform-tools/type-safety.mdx +4 -0
  72. package/reference/sdk/project-deployment-spec.mdx +131 -0
  73. package/reference/sdk/resources/index.mdx +23 -7
  74. package/reference/sdk/resources/patterns.mdx +54 -24
  75. package/reference/sdk/resources/types.mdx +7 -4
  76. package/reference/sdk/templates/data-enrichment.mdx +7 -3
  77. package/reference/sdk/templates/email-sender.mdx +139 -135
  78. package/reference/sdk/templates/lead-scorer.mdx +5 -1
  79. package/reference/sdk/templates/pdf-generator.mdx +155 -151
  80. package/reference/sdk/templates/recurring-job.mdx +195 -189
  81. package/reference/sdk/templates/text-classifier.mdx +4 -0
  82. package/reference/sdk/templates/web-scraper.mdx +139 -135
  83. package/reference/spine/spine-primer.md +135 -96
  84. package/reference/ui/index.mdx +14 -7
  85. package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
  86. package/dist/types/worker/adapters/apify.d.ts +0 -14
  87. package/dist/types/worker/adapters/approval.d.ts +0 -23
  88. package/dist/types/worker/adapters/attio.d.ts +0 -22
  89. package/dist/types/worker/adapters/clickup.d.ts +0 -22
  90. package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
  91. package/dist/types/worker/adapters/crm.d.ts +0 -20
  92. package/dist/types/worker/adapters/dropbox.d.ts +0 -14
  93. package/dist/types/worker/adapters/email.d.ts +0 -25
  94. package/dist/types/worker/adapters/execution.d.ts +0 -22
  95. package/dist/types/worker/adapters/gmail.d.ts +0 -14
  96. package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
  97. package/dist/types/worker/adapters/index.d.ts +0 -33
  98. package/dist/types/worker/adapters/instantly.d.ts +0 -14
  99. package/dist/types/worker/adapters/lead.d.ts +0 -28
  100. package/dist/types/worker/adapters/list.d.ts +0 -9
  101. package/dist/types/worker/adapters/llm.d.ts +0 -45
  102. package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
  103. package/dist/types/worker/adapters/notification.d.ts +0 -28
  104. package/dist/types/worker/adapters/pdf.d.ts +0 -22
  105. package/dist/types/worker/adapters/projects.d.ts +0 -20
  106. package/dist/types/worker/adapters/resend.d.ts +0 -14
  107. package/dist/types/worker/adapters/scheduler.d.ts +0 -25
  108. package/dist/types/worker/adapters/signature-api.d.ts +0 -14
  109. package/dist/types/worker/adapters/storage.d.ts +0 -33
  110. package/dist/types/worker/adapters/stripe.d.ts +0 -14
  111. package/dist/types/worker/adapters/tomba.d.ts +0 -14
  112. package/dist/types/worker/index.d.ts +0 -60
  113. package/dist/types/worker/platform.d.ts +0 -90
  114. package/dist/types/worker/utils.d.ts +0 -9
  115. package/reference/claude-config/Overview.md +0 -230
  116. package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
  117. package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
  118. package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
  119. package/reference/claude-config/registries/graph-skills.json +0 -4
  120. package/reference/claude-config/registries/knowledge-flags.json +0 -154
  121. package/reference/claude-config/registries/skill-coverage.json +0 -20
  122. package/reference/claude-config/rules/active-change-index.md +0 -22
  123. package/reference/claude-config/rules/agent-start-here.md +0 -22
  124. package/reference/claude-config/rules/deployment.md +0 -22
  125. package/reference/claude-config/rules/error-handling.md +0 -22
  126. package/reference/claude-config/rules/execution.md +0 -22
  127. package/reference/claude-config/rules/frontend.md +0 -22
  128. package/reference/claude-config/rules/observability.md +0 -22
  129. package/reference/claude-config/rules/operations.md +0 -22
  130. package/reference/claude-config/rules/organization-model.md +0 -22
  131. package/reference/claude-config/rules/organization-os.md +0 -22
  132. package/reference/claude-config/rules/package-taxonomy.md +0 -22
  133. package/reference/claude-config/rules/platform.md +0 -22
  134. package/reference/claude-config/rules/shared-types.md +0 -22
  135. package/reference/claude-config/rules/task-tracking.md +0 -22
  136. package/reference/claude-config/rules/topbar-actions.md +0 -70
  137. package/reference/claude-config/rules/ui.md +0 -22
  138. package/reference/claude-config/rules/vibe.md +0 -22
  139. package/reference/claude-config/scripts/statusline-command.js +0 -18
  140. package/reference/claude-config/settings.json +0 -30
  141. package/reference/claude-config/skills/client/SKILL.md +0 -201
  142. package/reference/claude-config/skills/deploy/SKILL.md +0 -159
  143. package/reference/claude-config/skills/dsp/SKILL.md +0 -66
  144. package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
  145. package/reference/claude-config/skills/explore/SKILL.md +0 -78
  146. package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
  147. package/reference/claude-config/skills/om/SKILL.md +0 -475
  148. package/reference/claude-config/skills/om/operations/build.md +0 -237
  149. package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
  150. package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
  151. package/reference/claude-config/skills/om/operations/customers.md +0 -114
  152. package/reference/claude-config/skills/om/operations/features.md +0 -88
  153. package/reference/claude-config/skills/om/operations/goals.md +0 -123
  154. package/reference/claude-config/skills/om/operations/identity.md +0 -97
  155. package/reference/claude-config/skills/om/operations/labels.md +0 -110
  156. package/reference/claude-config/skills/om/operations/offerings.md +0 -114
  157. package/reference/claude-config/skills/om/operations/roles.md +0 -104
  158. package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
  159. package/reference/claude-config/skills/om/operations/techStack.md +0 -38
  160. package/reference/claude-config/skills/project/SKILL.md +0 -1114
  161. package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
  162. package/reference/claude-config/skills/save/SKILL.md +0 -183
  163. package/reference/claude-config/skills/setup/SKILL.md +0 -290
  164. package/reference/claude-config/skills/status/SKILL.md +0 -59
  165. package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
  166. package/reference/claude-config/skills/sync/SKILL.md +0 -47
  167. package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
  168. package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
  169. package/reference/claude-config/skills/tutorial/technical.md +0 -1303
  170. package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
  171. package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
  172. package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
  173. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
  174. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
  175. package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
  176. package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
  177. package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
  178. package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
  179. package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
  180. package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
  181. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
  182. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
  183. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
  184. package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
  185. package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
  186. package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
  187. package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
  188. package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
  189. package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
  190. package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
  191. package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
  192. package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
  193. package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
  194. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
  195. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
  196. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
  197. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
  198. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
  199. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
  200. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
  201. package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
  202. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
  203. package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
  204. package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
  205. package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
  206. package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
  207. package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
  208. package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
  209. package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
  210. package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
  211. package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
  212. package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
  213. package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
  214. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
  215. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
  216. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
  217. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
  218. package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
  219. package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
  220. package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
  221. package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
  222. package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
  223. package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
  224. package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
  225. package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
  226. package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
  227. package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
  228. package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
  229. package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
  230. package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
  231. package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
  232. package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
  233. package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
  234. package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
  235. package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
  236. package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
  237. package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
  238. package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
  239. package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
  240. package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
  241. package/reference/claude-config/sync-notes/README.md +0 -43
  242. package/reference/sdk/framework/interaction-guidance.mdx +0 -182
  243. package/reference/sdk/framework/memory.mdx +0 -326
  244. package/reference/sdk/framework/resource-documentation.mdx +0 -90
  245. package/reference/sdk/roadmap.mdx +0 -164
@@ -1,189 +1,195 @@
1
- ---
2
- title: "Template: Recurring Job"
3
- description: "Scheduler-triggered periodic workflow -- run a task on a schedule (daily, weekly, hourly, or custom cron)"
4
- loadWhen: "Applying the recurring-job workflow template"
5
- ---
6
-
7
- **Category:** Scheduling
8
-
9
- **Platform Tools:** `scheduler` (create/manage schedule)
10
-
11
- **Credentials Required:**
12
-
13
- - None required (scheduler is a platform service, not an integration)
14
-
15
- ---
16
-
17
- ## What This Workflow Does
18
-
19
- Two-part pattern for recurring jobs:
20
-
21
- 1. **Setup workflow** (`recurring-job-setup`): Creates a schedule entry that triggers the main job workflow on a recurring basis. Run once to activate.
22
- 2. **Main job workflow** (`recurring-job`): The actual work executed on each scheduled trigger.
23
-
24
- The job workflow and setup workflow share a schedule key for idempotent schedule management.
25
-
26
- ---
27
-
28
- ## Input Schema (Setup)
29
-
30
- ```typescript
31
- z.object({
32
- cronExpression: z.string(), // Cron expression (e.g., '0 9 * * 1-5' for weekdays at 9am)
33
- timezone: z.string().optional(), // Timezone (default: 'UTC')
34
- jobInput: z.record(z.unknown()).optional(), // Input to pass to each job execution
35
- })
36
- ```
37
-
38
- ## Input Schema (Job)
39
-
40
- ```typescript
41
- z.object({
42
- scheduledAt: z.string(), // ISO timestamp of the scheduled trigger
43
- jobInput: z.record(z.unknown()).optional(), // Passed through from schedule creation
44
- })
45
- ```
46
-
47
- ## Output Schema (Job)
48
-
49
- ```typescript
50
- z.object({
51
- completed: z.boolean(),
52
- processedAt: z.string(),
53
- summary: z.string(),
54
- })
55
- ```
56
-
57
- ---
58
-
59
- ## Workflow Code Pattern
60
-
61
- ```typescript
62
- import type { WorkflowDefinition } from '@elevasis/sdk'
63
- import { platform } from '@elevasis/sdk/worker'
64
- import { z } from 'zod'
65
-
66
- // Setup workflow -- run once to create the schedule
67
- export const recurringJobSetup: WorkflowDefinition = {
68
- config: {
69
- resourceId: 'recurring-job-setup',
70
- name: 'Recurring Job Setup',
71
- type: 'workflow',
72
- description: 'Creates or updates the schedule for the recurring job',
73
- version: '1.0.0',
74
- status: 'dev',
75
- },
76
- contract: {
77
- inputSchema: z.object({
78
- cronExpression: z.string(),
79
- timezone: z.string().optional(),
80
- jobInput: z.record(z.unknown()).optional(),
81
- }),
82
- outputSchema: z.object({
83
- scheduleId: z.string(),
84
- active: z.boolean(),
85
- }),
86
- },
87
- steps: {
88
- createSchedule: {
89
- id: 'createSchedule',
90
- name: 'Create Schedule',
91
- description: 'Set up the recurring schedule',
92
- inputSchema: z.object({ cronExpression: z.string(), timezone: z.string().optional(), jobInput: z.record(z.unknown()).optional() }),
93
- outputSchema: z.object({ scheduleId: z.string(), active: z.boolean() }),
94
- handler: async (input, context) => {
95
- const { cronExpression, timezone, jobInput } = input as { cronExpression: string; timezone?: string; jobInput?: Record<string, unknown> }
96
-
97
- const result = await platform.call({
98
- tool: 'scheduler',
99
- method: 'createSchedule',
100
- params: {
101
- resourceId: 'recurring-job',
102
- cronExpression,
103
- timezone: timezone ?? 'UTC',
104
- input: { scheduledAt: new Date().toISOString(), jobInput: jobInput ?? {} },
105
- idempotencyKey: 'recurring-job-schedule',
106
- },
107
- }) as { id: string }
108
-
109
- context.logger.info('Schedule created', { scheduleId: result.id, cronExpression })
110
- return { scheduleId: result.id, active: true }
111
- },
112
- next: null,
113
- },
114
- },
115
- entryPoint: 'createSchedule',
116
- }
117
-
118
- // Main job workflow -- triggered by the scheduler on each run
119
- export const recurringJob: WorkflowDefinition = {
120
- config: {
121
- resourceId: 'recurring-job',
122
- name: 'Recurring Job',
123
- type: 'workflow',
124
- description: 'Executes on each scheduled trigger',
125
- version: '1.0.0',
126
- status: 'dev',
127
- },
128
- contract: {
129
- inputSchema: z.object({
130
- scheduledAt: z.string(),
131
- jobInput: z.record(z.unknown()).optional(),
132
- }),
133
- outputSchema: z.object({
134
- completed: z.boolean(),
135
- processedAt: z.string(),
136
- summary: z.string(),
137
- }),
138
- },
139
- steps: {
140
- run: {
141
- id: 'run',
142
- name: 'Run Job',
143
- description: 'Execute the recurring job logic',
144
- inputSchema: z.object({ scheduledAt: z.string(), jobInput: z.record(z.unknown()).optional() }),
145
- outputSchema: z.object({ completed: z.boolean(), processedAt: z.string(), summary: z.string() }),
146
- handler: async (input, context) => {
147
- const { scheduledAt, jobInput } = input as { scheduledAt: string; jobInput?: Record<string, unknown> }
148
-
149
- context.logger.info('Recurring job started', { scheduledAt, jobInput })
150
-
151
- // === REPLACE THIS SECTION WITH THE ACTUAL JOB LOGIC ===
152
- // Example: fetch data, process it, send a report
153
- const summary = `Job completed at ${new Date().toISOString()}`
154
- // ======================================================
155
-
156
- return { completed: true, processedAt: new Date().toISOString(), summary }
157
- },
158
- next: null,
159
- },
160
- },
161
- entryPoint: 'run',
162
- }
163
- ```
164
-
165
- ---
166
-
167
- ## Common Cron Expressions
168
-
169
- | Schedule | Expression | Notes |
170
- | --- | --- | --- |
171
- | Every day at 9am (weekdays) | `0 9 * * 1-5` | Monday-Friday |
172
- | Every day at midnight | `0 0 * * *` | UTC unless timezone set |
173
- | Every hour | `0 * * * *` | On the hour |
174
- | Every Monday at 8am | `0 8 * * 1` | |
175
- | First of each month | `0 0 1 * *` | Midnight UTC |
176
- | Every 15 minutes | `*/15 * * * *` | Frequent polling |
177
-
178
- ---
179
-
180
- ## Adaptation Notes
181
-
182
- - **Job logic:** Replace the placeholder comment in the `run` handler with the actual job logic. Ask the user what the job should do before generating the full workflow.
183
- - **Both workflows needed:** Remind the user to add both `recurringJob` and `recurringJobSetup` to their `src/index.ts` registry. Run `setup` once to activate; only `recurring-job` runs automatically thereafter.
184
- - **Idempotency key:** The `recurring-job-schedule` key ensures re-running setup does not create duplicate schedules.
185
- - **Timezone:** Always ask the user their preferred timezone. Defaults to UTC which may cause unexpected run times.
186
-
187
- ---
188
-
189
- **Last Updated:** 2026-02-26
1
+ ---
2
+ title: "Template: Recurring Job"
3
+ description: "Scheduler-triggered periodic workflow -- run a task on a schedule (daily, weekly, hourly, or custom cron)"
4
+ loadWhen: "Applying the recurring-job workflow template"
5
+ ---
6
+
7
+ **Category:** Scheduling
8
+
9
+ **Platform Tools:** `scheduler` (create/manage schedule)
10
+
11
+ **Credentials Required:**
12
+
13
+ - None required (scheduler is a platform service, not an integration)
14
+
15
+ ---
16
+
17
+ ## What This Workflow Does
18
+
19
+ Two-part pattern for recurring jobs:
20
+
21
+ 1. **Setup workflow** (`recurring-job-setup`): Creates a schedule entry that triggers the main job workflow on a recurring basis. Run once to activate.
22
+ 2. **Main job workflow** (`recurring-job`): The actual work executed on each scheduled trigger.
23
+
24
+ The job workflow and setup workflow share a schedule key for idempotent schedule management.
25
+
26
+ ---
27
+
28
+ ## Input Schema (Setup)
29
+
30
+ {/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
31
+
32
+ ```typescript
33
+ z.object({
34
+ cronExpression: z.string(), // Cron expression (e.g., '0 9 * * 1-5' for weekdays at 9am)
35
+ timezone: z.string().optional(), // Timezone (default: 'UTC')
36
+ jobInput: z.record(z.string(), z.unknown()).optional(), // Input to pass to each job execution
37
+ })
38
+ ```
39
+
40
+ ## Input Schema (Job)
41
+
42
+ {/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
43
+
44
+ ```typescript
45
+ z.object({
46
+ scheduledAt: z.string(), // ISO timestamp of the scheduled trigger
47
+ jobInput: z.record(z.string(), z.unknown()).optional(), // Passed through from schedule creation
48
+ })
49
+ ```
50
+
51
+ ## Output Schema (Job)
52
+
53
+ {/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
54
+
55
+ ```typescript
56
+ z.object({
57
+ completed: z.boolean(),
58
+ processedAt: z.string(),
59
+ summary: z.string(),
60
+ })
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Workflow Code Pattern
66
+
67
+ ```typescript
68
+ import type { WorkflowDefinition } from '@elevasis/sdk'
69
+ import { platform } from '@elevasis/sdk/worker'
70
+ import { z } from 'zod'
71
+
72
+ // Setup workflow -- run once to create the schedule
73
+ export const recurringJobSetup: WorkflowDefinition = {
74
+ config: {
75
+ resourceId: 'recurring-job-setup',
76
+ name: 'Recurring Job Setup',
77
+ type: 'workflow',
78
+ description: 'Creates or updates the schedule for the recurring job',
79
+ version: '1.0.0',
80
+ status: 'dev',
81
+ },
82
+ contract: {
83
+ inputSchema: z.object({
84
+ cronExpression: z.string(),
85
+ timezone: z.string().optional(),
86
+ jobInput: z.record(z.string(), z.unknown()).optional(),
87
+ }),
88
+ outputSchema: z.object({
89
+ scheduleId: z.string(),
90
+ active: z.boolean(),
91
+ }),
92
+ },
93
+ steps: {
94
+ createSchedule: {
95
+ id: 'createSchedule',
96
+ name: 'Create Schedule',
97
+ description: 'Set up the recurring schedule',
98
+ inputSchema: z.object({ cronExpression: z.string(), timezone: z.string().optional(), jobInput: z.record(z.string(), z.unknown()).optional() }),
99
+ outputSchema: z.object({ scheduleId: z.string(), active: z.boolean() }),
100
+ handler: async (input, context) => {
101
+ const { cronExpression, timezone, jobInput } = input as { cronExpression: string; timezone?: string; jobInput?: Record<string, unknown> }
102
+
103
+ const result = await platform.call({
104
+ tool: 'scheduler',
105
+ method: 'createSchedule',
106
+ params: {
107
+ resourceId: 'recurring-job',
108
+ cronExpression,
109
+ timezone: timezone ?? 'UTC',
110
+ input: { scheduledAt: new Date().toISOString(), jobInput: jobInput ?? {} },
111
+ idempotencyKey: 'recurring-job-schedule',
112
+ },
113
+ }) as { id: string }
114
+
115
+ context.logger.info(`Schedule created: ${result.id} (${cronExpression})`)
116
+ return { scheduleId: result.id, active: true }
117
+ },
118
+ next: null,
119
+ },
120
+ },
121
+ entryPoint: 'createSchedule',
122
+ }
123
+
124
+ // Main job workflow -- triggered by the scheduler on each run
125
+ export const recurringJob: WorkflowDefinition = {
126
+ config: {
127
+ resourceId: 'recurring-job',
128
+ name: 'Recurring Job',
129
+ type: 'workflow',
130
+ description: 'Executes on each scheduled trigger',
131
+ version: '1.0.0',
132
+ status: 'dev',
133
+ },
134
+ contract: {
135
+ inputSchema: z.object({
136
+ scheduledAt: z.string(),
137
+ jobInput: z.record(z.string(), z.unknown()).optional(),
138
+ }),
139
+ outputSchema: z.object({
140
+ completed: z.boolean(),
141
+ processedAt: z.string(),
142
+ summary: z.string(),
143
+ }),
144
+ },
145
+ steps: {
146
+ run: {
147
+ id: 'run',
148
+ name: 'Run Job',
149
+ description: 'Execute the recurring job logic',
150
+ inputSchema: z.object({ scheduledAt: z.string(), jobInput: z.record(z.string(), z.unknown()).optional() }),
151
+ outputSchema: z.object({ completed: z.boolean(), processedAt: z.string(), summary: z.string() }),
152
+ handler: async (input, context) => {
153
+ const { scheduledAt, jobInput } = input as { scheduledAt: string; jobInput?: Record<string, unknown> }
154
+
155
+ context.logger.info(`Recurring job started at ${scheduledAt}`)
156
+
157
+ // === REPLACE THIS SECTION WITH THE ACTUAL JOB LOGIC ===
158
+ // Example: fetch data, process it, send a report
159
+ const summary = `Job completed at ${new Date().toISOString()}`
160
+ // ======================================================
161
+
162
+ return { completed: true, processedAt: new Date().toISOString(), summary }
163
+ },
164
+ next: null,
165
+ },
166
+ },
167
+ entryPoint: 'run',
168
+ }
169
+ ```
170
+
171
+ ---
172
+
173
+ ## Common Cron Expressions
174
+
175
+ | Schedule | Expression | Notes |
176
+ | --------------------------- | -------------- | ----------------------- |
177
+ | Every day at 9am (weekdays) | `0 9 * * 1-5` | Monday-Friday |
178
+ | Every day at midnight | `0 0 * * *` | UTC unless timezone set |
179
+ | Every hour | `0 * * * *` | On the hour |
180
+ | Every Monday at 8am | `0 8 * * 1` | |
181
+ | First of each month | `0 0 1 * *` | Midnight UTC |
182
+ | Every 15 minutes | `*/15 * * * *` | Frequent polling |
183
+
184
+ ---
185
+
186
+ ## Adaptation Notes
187
+
188
+ - **Job logic:** Replace the placeholder comment in the `run` handler with the actual job logic. Ask the user what the job should do before generating the full workflow.
189
+ - **Both workflows needed:** Remind the user to add both `recurringJob` and `recurringJobSetup` to their `src/index.ts` registry. Run `setup` once to activate; only `recurring-job` runs automatically thereafter.
190
+ - **Idempotency key:** The `recurring-job-schedule` key ensures re-running setup does not create duplicate schedules.
191
+ - **Timezone:** Always ask the user their preferred timezone. Defaults to UTC which may cause unexpected run times.
192
+
193
+ ---
194
+
195
+ **Last Updated:** 2026-02-26
@@ -22,6 +22,8 @@ Classifies input text into one or more predefined categories using an LLM. Retur
22
22
 
23
23
  ## Input Schema
24
24
 
25
+ {/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
26
+
25
27
  ```typescript
26
28
  z.object({
27
29
  text: z.string(), // Text to classify
@@ -33,6 +35,8 @@ z.object({
33
35
 
34
36
  ## Output Schema
35
37
 
38
+ {/* doc-snippet:skip: illustrative excerpt -- shows the schema shape in isolation, omits the `import { z } from 'zod'` shown in Workflow Code Pattern below */}
39
+
36
40
  ```typescript
37
41
  z.object({
38
42
  categories: z.array(z.string()), // Assigned category labels