@elevasis/sdk 1.44.3 → 1.46.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 (259) hide show
  1. package/dist/cli.cjs +35026 -30226
  2. package/dist/index.d.ts +1786 -808
  3. package/dist/index.js +789 -739
  4. package/dist/node/index.d.ts +105 -181
  5. package/dist/node/index.js +2 -2
  6. package/dist/test-utils/index.d.ts +901 -359
  7. package/dist/test-utils/index.js +587 -824
  8. package/dist/worker/index.d.ts +12685 -0
  9. package/dist/worker/index.js +188 -216
  10. package/package.json +4 -7
  11. package/reference/_navigation.md +161 -22
  12. package/reference/_reference-manifest.json +228 -4
  13. package/reference/claude-config.md +8 -0
  14. package/reference/core/exports.mdx +2 -0
  15. package/reference/core/index.mdx +3 -3
  16. package/reference/examples/organization-model.ts +117 -111
  17. package/reference/index.mdx +4 -4
  18. package/reference/packages/core/src/business/README.md +4 -1
  19. package/reference/packages/core/src/content/README.md +19 -0
  20. package/reference/packages/core/src/organization-model/README.md +148 -149
  21. package/reference/packages/core/src/organization-model/readiness/README.md +42 -0
  22. package/reference/packages/ui/src/features/README.md +28 -28
  23. package/reference/rules/active-change-index.md +40 -54
  24. package/reference/rules/agent-runtime.md +81 -0
  25. package/reference/rules/agent-start-here.md +71 -163
  26. package/reference/rules/deployment.md +33 -10
  27. package/reference/rules/error-handling.md +26 -0
  28. package/reference/rules/execution.md +13 -0
  29. package/reference/rules/frontend.md +10 -3
  30. package/reference/rules/observability.md +9 -1
  31. package/reference/rules/operations.md +26 -17
  32. package/reference/rules/organization-model.md +74 -88
  33. package/reference/rules/organization-os.md +71 -88
  34. package/reference/rules/package-taxonomy.md +11 -2
  35. package/reference/rules/platform.md +13 -7
  36. package/reference/rules/shared-types.md +36 -0
  37. package/reference/rules/task-tracking.md +30 -5
  38. package/reference/rules/ui.md +145 -3
  39. package/reference/rules/vibe-intents.md +271 -0
  40. package/reference/rules/vibe.md +17 -243
  41. package/reference/scaffold/core/organization-graph.mdx +112 -99
  42. package/reference/scaffold/core/organization-model.mdx +231 -215
  43. package/reference/scaffold/operations/propagation-pipeline.md +16 -17
  44. package/reference/scaffold/operations/scaffold-maintenance.md +22 -20
  45. package/reference/scaffold/operations/workflow-recipes.md +72 -20
  46. package/reference/scaffold/recipes/add-a-feature.md +156 -146
  47. package/reference/scaffold/recipes/add-a-resource.md +123 -117
  48. package/reference/scaffold/recipes/customize-crm-actions.md +28 -13
  49. package/reference/scaffold/recipes/customize-knowledge-browser.md +52 -117
  50. package/reference/scaffold/recipes/customize-organization-model.md +161 -149
  51. package/reference/scaffold/recipes/extend-a-base-entity.md +156 -140
  52. package/reference/scaffold/recipes/extend-content.md +265 -0
  53. package/reference/scaffold/recipes/extend-crm.md +16 -11
  54. package/reference/scaffold/recipes/extend-lead-gen.md +37 -21
  55. package/reference/scaffold/recipes/gate-by-feature-or-admin.md +160 -118
  56. package/reference/scaffold/recipes/index.md +6 -3
  57. package/reference/scaffold/recipes/query-the-knowledge-graph.md +23 -23
  58. package/reference/scaffold/reference/contracts.md +30 -56
  59. package/reference/scaffold/reference/feature-registry.md +3 -0
  60. package/reference/scaffold/reference/glossary.md +4 -4
  61. package/reference/scaffold/reference/system-interface-capabilities.md +5 -4
  62. package/reference/scaffold/ui/composition-extensibility.mdx +271 -232
  63. package/reference/scaffold/ui/customization.md +2 -2
  64. package/reference/scaffold/ui/feature-flags-and-gating.md +14 -6
  65. package/reference/scaffold/ui/feature-shell.mdx +277 -62
  66. package/reference/scaffold/ui/recipes.md +229 -197
  67. package/reference/sdk/cli-management.mdx +166 -33
  68. package/reference/sdk/cli.mdx +90 -13
  69. package/reference/sdk/concepts.mdx +2 -0
  70. package/reference/sdk/define-builders.mdx +76 -0
  71. package/reference/sdk/deployment/command-center.mdx +6 -2
  72. package/reference/sdk/deployment/execution-reference.mdx +64 -186
  73. package/reference/sdk/deployment/index.mdx +2 -0
  74. package/reference/sdk/exports.mdx +4 -4
  75. package/reference/sdk/framework/agent.mdx +52 -116
  76. package/reference/sdk/framework/index.mdx +46 -65
  77. package/reference/sdk/framework/project-structure.mdx +150 -205
  78. package/reference/sdk/framework/tutorial-system.mdx +2 -2
  79. package/reference/sdk/human-in-the-loop.mdx +152 -0
  80. package/reference/sdk/index.mdx +6 -7
  81. package/reference/sdk/platform-tools/adapters-platform.mdx +3 -1
  82. package/reference/sdk/platform-tools/index.mdx +12 -0
  83. package/reference/sdk/platform-tools/type-safety.mdx +4 -0
  84. package/reference/sdk/project-deployment-spec.mdx +131 -0
  85. package/reference/sdk/resources/index.mdx +21 -7
  86. package/reference/sdk/resources/patterns.mdx +54 -24
  87. package/reference/sdk/resources/types.mdx +7 -4
  88. package/reference/sdk/templates/data-enrichment.mdx +7 -3
  89. package/reference/sdk/templates/email-sender.mdx +139 -135
  90. package/reference/sdk/templates/lead-scorer.mdx +5 -1
  91. package/reference/sdk/templates/pdf-generator.mdx +155 -151
  92. package/reference/sdk/templates/recurring-job.mdx +195 -189
  93. package/reference/sdk/templates/text-classifier.mdx +4 -0
  94. package/reference/sdk/templates/web-scraper.mdx +139 -135
  95. package/reference/spine/spine-primer.md +135 -96
  96. package/reference/ui/exports.mdx +1 -0
  97. package/reference/ui/index.mdx +14 -7
  98. package/dist/types/worker/adapters/anymailfinder.d.ts +0 -14
  99. package/dist/types/worker/adapters/apify.d.ts +0 -14
  100. package/dist/types/worker/adapters/approval.d.ts +0 -23
  101. package/dist/types/worker/adapters/attio.d.ts +0 -22
  102. package/dist/types/worker/adapters/clickup.d.ts +0 -22
  103. package/dist/types/worker/adapters/create-adapter.d.ts +0 -41
  104. package/dist/types/worker/adapters/crm.d.ts +0 -20
  105. package/dist/types/worker/adapters/dropbox.d.ts +0 -14
  106. package/dist/types/worker/adapters/email.d.ts +0 -25
  107. package/dist/types/worker/adapters/execution.d.ts +0 -22
  108. package/dist/types/worker/adapters/gmail.d.ts +0 -14
  109. package/dist/types/worker/adapters/google-sheets.d.ts +0 -14
  110. package/dist/types/worker/adapters/index.d.ts +0 -33
  111. package/dist/types/worker/adapters/instantly.d.ts +0 -14
  112. package/dist/types/worker/adapters/lead.d.ts +0 -28
  113. package/dist/types/worker/adapters/list.d.ts +0 -9
  114. package/dist/types/worker/adapters/llm.d.ts +0 -45
  115. package/dist/types/worker/adapters/millionverifier.d.ts +0 -14
  116. package/dist/types/worker/adapters/notification.d.ts +0 -28
  117. package/dist/types/worker/adapters/pdf.d.ts +0 -22
  118. package/dist/types/worker/adapters/projects.d.ts +0 -20
  119. package/dist/types/worker/adapters/resend.d.ts +0 -14
  120. package/dist/types/worker/adapters/scheduler.d.ts +0 -25
  121. package/dist/types/worker/adapters/signature-api.d.ts +0 -14
  122. package/dist/types/worker/adapters/storage.d.ts +0 -33
  123. package/dist/types/worker/adapters/stripe.d.ts +0 -14
  124. package/dist/types/worker/adapters/tomba.d.ts +0 -14
  125. package/dist/types/worker/index.d.ts +0 -60
  126. package/dist/types/worker/platform.d.ts +0 -90
  127. package/dist/types/worker/utils.d.ts +0 -9
  128. package/reference/claude-config/Overview.md +0 -230
  129. package/reference/claude-config/hooks/post-edit-validate.mjs +0 -98
  130. package/reference/claude-config/hooks/scaffold-registry-reminder.mjs +0 -187
  131. package/reference/claude-config/hooks/tool-failure-recovery.mjs +0 -73
  132. package/reference/claude-config/registries/graph-skills.json +0 -4
  133. package/reference/claude-config/registries/knowledge-flags.json +0 -154
  134. package/reference/claude-config/registries/skill-coverage.json +0 -20
  135. package/reference/claude-config/rules/active-change-index.md +0 -22
  136. package/reference/claude-config/rules/agent-start-here.md +0 -22
  137. package/reference/claude-config/rules/deployment.md +0 -22
  138. package/reference/claude-config/rules/error-handling.md +0 -22
  139. package/reference/claude-config/rules/execution.md +0 -22
  140. package/reference/claude-config/rules/frontend.md +0 -22
  141. package/reference/claude-config/rules/observability.md +0 -22
  142. package/reference/claude-config/rules/operations.md +0 -22
  143. package/reference/claude-config/rules/organization-model.md +0 -22
  144. package/reference/claude-config/rules/organization-os.md +0 -22
  145. package/reference/claude-config/rules/package-taxonomy.md +0 -22
  146. package/reference/claude-config/rules/platform.md +0 -22
  147. package/reference/claude-config/rules/shared-types.md +0 -22
  148. package/reference/claude-config/rules/task-tracking.md +0 -22
  149. package/reference/claude-config/rules/topbar-actions.md +0 -70
  150. package/reference/claude-config/rules/ui.md +0 -22
  151. package/reference/claude-config/rules/vibe.md +0 -22
  152. package/reference/claude-config/scripts/statusline-command.js +0 -18
  153. package/reference/claude-config/settings.json +0 -30
  154. package/reference/claude-config/skills/client/SKILL.md +0 -201
  155. package/reference/claude-config/skills/deploy/SKILL.md +0 -159
  156. package/reference/claude-config/skills/dsp/SKILL.md +0 -66
  157. package/reference/claude-config/skills/elevasis/SKILL.md +0 -251
  158. package/reference/claude-config/skills/explore/SKILL.md +0 -78
  159. package/reference/claude-config/skills/git-sync/SKILL.md +0 -166
  160. package/reference/claude-config/skills/om/SKILL.md +0 -475
  161. package/reference/claude-config/skills/om/operations/build.md +0 -237
  162. package/reference/claude-config/skills/om/operations/codify-level-a.md +0 -109
  163. package/reference/claude-config/skills/om/operations/codify-level-b.md +0 -159
  164. package/reference/claude-config/skills/om/operations/customers.md +0 -114
  165. package/reference/claude-config/skills/om/operations/features.md +0 -88
  166. package/reference/claude-config/skills/om/operations/goals.md +0 -123
  167. package/reference/claude-config/skills/om/operations/identity.md +0 -97
  168. package/reference/claude-config/skills/om/operations/labels.md +0 -110
  169. package/reference/claude-config/skills/om/operations/offerings.md +0 -114
  170. package/reference/claude-config/skills/om/operations/roles.md +0 -104
  171. package/reference/claude-config/skills/om/operations/scaffold.md +0 -163
  172. package/reference/claude-config/skills/om/operations/techStack.md +0 -38
  173. package/reference/claude-config/skills/project/SKILL.md +0 -1114
  174. package/reference/claude-config/skills/run-ui/SKILL.md +0 -73
  175. package/reference/claude-config/skills/save/SKILL.md +0 -183
  176. package/reference/claude-config/skills/setup/SKILL.md +0 -290
  177. package/reference/claude-config/skills/status/SKILL.md +0 -59
  178. package/reference/claude-config/skills/submit-request/SKILL.md +0 -180
  179. package/reference/claude-config/skills/sync/SKILL.md +0 -47
  180. package/reference/claude-config/skills/tutorial/SKILL.md +0 -259
  181. package/reference/claude-config/skills/tutorial/progress-template.md +0 -74
  182. package/reference/claude-config/skills/tutorial/technical.md +0 -1303
  183. package/reference/claude-config/skills/tutorial/vibe-coder.md +0 -890
  184. package/reference/claude-config/sync-notes/2026-04-22-git-sync-and-sync-notes.md +0 -27
  185. package/reference/claude-config/sync-notes/2026-04-22-lead-gen-deliverability-removal.md +0 -30
  186. package/reference/claude-config/sync-notes/2026-04-24-test-utils-and-template-tests.md +0 -73
  187. package/reference/claude-config/sync-notes/2026-04-24-ui-consolidation-and-sdk-cli-train.md +0 -86
  188. package/reference/claude-config/sync-notes/2026-04-25-auth-role-system-and-settings-roles.md +0 -55
  189. package/reference/claude-config/sync-notes/2026-04-27-crm-hitl-action-layer-cutover.md +0 -97
  190. package/reference/claude-config/sync-notes/2026-04-27-lead-gen-substrate-train.md +0 -112
  191. package/reference/claude-config/sync-notes/2026-04-29-crm-state-and-lead-gen-processing-status.md +0 -93
  192. package/reference/claude-config/sync-notes/2026-05-02-crm-ownership-next-action.md +0 -58
  193. package/reference/claude-config/sync-notes/2026-05-02-template-hardcode-workos-config.md +0 -56
  194. package/reference/claude-config/sync-notes/2026-05-04-elevasis-workspace.md +0 -71
  195. package/reference/claude-config/sync-notes/2026-05-04-knowledge-bundle.md +0 -83
  196. package/reference/claude-config/sync-notes/2026-05-04-template-skills-run-ui-and-tutorial.md +0 -59
  197. package/reference/claude-config/sync-notes/2026-05-05-list-builder.md +0 -42
  198. package/reference/claude-config/sync-notes/2026-05-06-crm-spine.md +0 -60
  199. package/reference/claude-config/sync-notes/2026-05-06-sdk-changes-release-train.md +0 -37
  200. package/reference/claude-config/sync-notes/2026-05-07-sdk-changes-release-train.md +0 -34
  201. package/reference/claude-config/sync-notes/2026-05-08-resource-governance-scaffold-guidance.md +0 -38
  202. package/reference/claude-config/sync-notes/2026-05-09-clients-domain.md +0 -32
  203. package/reference/claude-config/sync-notes/2026-05-09-command-system.md +0 -33
  204. package/reference/claude-config/sync-notes/2026-05-09-resource-governance-and-misc.md +0 -69
  205. package/reference/claude-config/sync-notes/2026-05-12-sdk-ready-release-train.md +0 -30
  206. package/reference/claude-config/sync-notes/2026-05-14-organization-model-ontology-refactor.md +0 -45
  207. package/reference/claude-config/sync-notes/2026-05-15-om-skill-rename-and-write-family.md +0 -52
  208. package/reference/claude-config/sync-notes/2026-05-17-sdk-boundary-consolidation.md +0 -33
  209. package/reference/claude-config/sync-notes/2026-05-20-om-define-helpers.md +0 -32
  210. package/reference/claude-config/sync-notes/2026-05-22-access-model-and-right-panel.md +0 -43
  211. package/reference/claude-config/sync-notes/2026-05-22-lead-gen-tenant-config.md +0 -40
  212. package/reference/claude-config/sync-notes/2026-05-22-org-model-multi-file-split.md +0 -61
  213. package/reference/claude-config/sync-notes/2026-05-23-branding-names-to-identity.md +0 -49
  214. package/reference/claude-config/sync-notes/2026-05-23-lead-gen-manage-access.md +0 -31
  215. package/reference/claude-config/sync-notes/2026-05-23-om-deployment-drift-detection.md +0 -42
  216. package/reference/claude-config/sync-notes/2026-05-23-om-full-model-deploy-contract.md +0 -33
  217. package/reference/claude-config/sync-notes/2026-05-23-ui-sdk-package-fixes.md +0 -37
  218. package/reference/claude-config/sync-notes/2026-05-24-platform-invite-router-core-baseline.md +0 -28
  219. package/reference/claude-config/sync-notes/2026-05-24-system-interface-readiness.md +0 -43
  220. package/reference/claude-config/sync-notes/2026-05-25-invitation-login-loader.md +0 -26
  221. package/reference/claude-config/sync-notes/2026-05-25-om-topbar-requests.md +0 -33
  222. package/reference/claude-config/sync-notes/2026-05-25-system-interface-profile-registry-and-substrate.md +0 -35
  223. package/reference/claude-config/sync-notes/2026-05-25-tenant-om-scaffold-cli.md +0 -49
  224. package/reference/claude-config/sync-notes/2026-05-25-vibe-operate-intent.md +0 -47
  225. package/reference/claude-config/sync-notes/2026-05-28-om-snapshot-sdk-workflow-config.md +0 -33
  226. package/reference/claude-config/sync-notes/2026-05-30-client-source-and-om-profiles.md +0 -39
  227. package/reference/claude-config/sync-notes/2026-06-02-knowledge-nested-group-routing.md +0 -27
  228. package/reference/claude-config/sync-notes/2026-06-02-nest-projects-under-platform.md +0 -45
  229. package/reference/claude-config/sync-notes/2026-06-03-skill-autogen-and-client-skill.md +0 -34
  230. package/reference/claude-config/sync-notes/2026-06-04-scaffold-registry-lane-severity.md +0 -34
  231. package/reference/claude-config/sync-notes/2026-06-05-appearance-app-mode-decouple.md +0 -29
  232. package/reference/claude-config/sync-notes/2026-06-05-ontology-endpoint-rename-and-knowledge-browser-ui.md +0 -86
  233. package/reference/claude-config/sync-notes/2026-06-06-om-build-systems-scaffold.md +0 -47
  234. package/reference/claude-config/sync-notes/2026-06-06-om-item-copy-references.md +0 -50
  235. package/reference/claude-config/sync-notes/2026-06-08-knowledge-base-page-not-found-fix.md +0 -76
  236. package/reference/claude-config/sync-notes/2026-06-09-agent-sessions-public-agent-chat-route.md +0 -75
  237. package/reference/claude-config/sync-notes/2026-06-09-sdk-cli-load-org-model-resolution.md +0 -42
  238. package/reference/claude-config/sync-notes/2026-06-12-agent-grants-visualizer-operations.md +0 -30
  239. package/reference/claude-config/sync-notes/2026-06-14-session-ux-and-project-cli-json.md +0 -33
  240. package/reference/claude-config/sync-notes/2026-06-14-shared-session-conversation-view.md +0 -26
  241. package/reference/claude-config/sync-notes/2026-06-15-session-chat-zero-wiring.md +0 -46
  242. package/reference/claude-config/sync-notes/2026-06-17-agent-session-ux-features.md +0 -34
  243. package/reference/claude-config/sync-notes/2026-06-25-shared-page-scroll-contract-guard.md +0 -52
  244. package/reference/claude-config/sync-notes/2026-06-26-leadgen-overview-om-telemetry.md +0 -47
  245. package/reference/claude-config/sync-notes/2026-07-21-agent-scaffold-hardening.md +0 -75
  246. package/reference/claude-config/sync-notes/2026-07-23-agent-session-memory.md +0 -49
  247. package/reference/claude-config/sync-notes/2026-07-23-workos-org-marker.md +0 -50
  248. package/reference/claude-config/sync-notes/2026-07-24-claude-5-models-and-session-surface-fixes.md +0 -116
  249. package/reference/claude-config/sync-notes/2026-07-27-agent-strict-output-and-turn-drift.md +0 -73
  250. package/reference/claude-config/sync-notes/2026-07-28-agent-reply-is-its-own-field.md +0 -84
  251. package/reference/claude-config/sync-notes/2026-07-30-login-screen-and-member-provisioning-state.md +0 -114
  252. package/reference/claude-config/sync-notes/2026-08-02-auth-guard-defaults-and-truncation-fix.md +0 -122
  253. package/reference/claude-config/sync-notes/2026-08-03-agent-prose-escape-normalization.md +0 -88
  254. package/reference/claude-config/sync-notes/2026-08-03-cli-gateway-errors-and-request-timeout.md +0 -120
  255. package/reference/claude-config/sync-notes/README.md +0 -43
  256. package/reference/sdk/framework/interaction-guidance.mdx +0 -182
  257. package/reference/sdk/framework/memory.mdx +0 -326
  258. package/reference/sdk/framework/resource-documentation.mdx +0 -90
  259. 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