@tailor-platform/sdk 2.0.0-next.0 → 2.0.0-next.1

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 (200) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/dist/application-DB2r36Et.mjs +3 -0
  3. package/dist/{application-76hhIhnJ.mjs → application-DqS1yBg3.mjs} +217 -131
  4. package/dist/application-DqS1yBg3.mjs.map +1 -0
  5. package/dist/{assert-CKfwrmCV.mjs → assert-DBxo8jPo.mjs} +1 -2
  6. package/dist/{assert-CKfwrmCV.mjs.map → assert-DBxo8jPo.mjs.map} +1 -1
  7. package/dist/{authconnection-D8SJGMpj.mjs → authconnection-D2MhtTN5.mjs} +2 -3
  8. package/dist/{authconnection-D8SJGMpj.mjs.map → authconnection-D2MhtTN5.mjs.map} +1 -1
  9. package/dist/{authconnection-BIYzEh2p.d.mts → authconnection-DvUQAjQS.d.mts} +1 -1
  10. package/dist/{brand-DlnJ375c.mjs → brand-Eo4pLXPJ.mjs} +1 -2
  11. package/dist/{brand-DlnJ375c.mjs.map → brand-Eo4pLXPJ.mjs.map} +1 -1
  12. package/dist/cli/index.mjs +78 -131
  13. package/dist/cli/index.mjs.map +1 -1
  14. package/dist/cli/lib.d.mts +619 -751
  15. package/dist/cli/lib.mjs +9 -10
  16. package/dist/cli/lib.mjs.map +1 -1
  17. package/dist/{client-C68VWo4g.mjs → client-Dbohmtkv.mjs} +1 -2
  18. package/dist/{client-CobIRHl-.mjs → client-z_oHGVNy.mjs} +10 -7
  19. package/dist/client-z_oHGVNy.mjs.map +1 -0
  20. package/dist/completion/zsh-worker.zsh +4029 -0
  21. package/dist/configure/index.d.mts +8 -7
  22. package/dist/configure/index.mjs +27 -28
  23. package/dist/configure/index.mjs.map +1 -1
  24. package/dist/{context-s0lxhu8_.mjs → context-Bd266-ru.mjs} +2 -3
  25. package/dist/{context-s0lxhu8_.mjs.map → context-Bd266-ru.mjs.map} +1 -1
  26. package/dist/{context-CUBwSBq4.d.mts → context-BuuIb8CC.d.mts} +1 -1
  27. package/dist/{crashreport-BhD0y14F.mjs → crashreport-BsjAkFWw.mjs} +19 -10
  28. package/dist/{crashreport-BhD0y14F.mjs.map → crashreport-BsjAkFWw.mjs.map} +1 -1
  29. package/dist/{crashreport-D1wKBJ8N.mjs → crashreport-pr6Rhvza.mjs} +1 -2
  30. package/dist/{enum-constants-C7DaWeQo.mjs → enum-constants-j9QBF0cB.mjs} +1 -2
  31. package/dist/enum-constants-j9QBF0cB.mjs.map +1 -0
  32. package/dist/{errors-EsY4XO6O.mjs → errors-Dtf2WPaW.mjs} +1 -2
  33. package/dist/{errors-EsY4XO6O.mjs.map → errors-Dtf2WPaW.mjs.map} +1 -1
  34. package/dist/{field-C4zdJLW5.mjs → field-DOsJCPFa.mjs} +1 -2
  35. package/dist/field-DOsJCPFa.mjs.map +1 -0
  36. package/dist/{file-BzK8z3X-.d.mts → file-BB8Vs9O_.d.mts} +1 -1
  37. package/dist/{file-B58Dm-2P.mjs → file-_oUZo76X.mjs} +2 -3
  38. package/dist/{file-B58Dm-2P.mjs.map → file-_oUZo76X.mjs.map} +1 -1
  39. package/dist/{file-utils-BHPxPXmn.mjs → file-utils-DcyIPFQh.mjs} +2 -3
  40. package/dist/{file-utils-BHPxPXmn.mjs.map → file-utils-DcyIPFQh.mjs.map} +1 -1
  41. package/dist/{globals-ByrCoDip.mjs → globals-Crz8o65k.mjs} +53 -5
  42. package/dist/globals-Crz8o65k.mjs.map +1 -0
  43. package/dist/http-adapter.generated-WgMnb7Sb.d.mts +580 -0
  44. package/dist/{iconv-kwrmd1U_.d.mts → iconv-Co-TOPuH.d.mts} +1 -1
  45. package/dist/{iconv-DreIffeM.mjs → iconv-D2vi8G36.mjs} +2 -3
  46. package/dist/{iconv-DreIffeM.mjs.map → iconv-D2vi8G36.mjs.map} +1 -1
  47. package/dist/{idp-Ch95ag8h.mjs → idp-BDbK5gjm.mjs} +2 -3
  48. package/dist/{idp-Ch95ag8h.mjs.map → idp-BDbK5gjm.mjs.map} +1 -1
  49. package/dist/{idp-BlBPtXJ-.d.mts → idp-DrhVrLmV.d.mts} +1 -1
  50. package/dist/{index-CQZVJ5SX.d.mts → index-5vPyRu1y.d.mts} +2 -2
  51. package/dist/{index-CfRFkXIO.d.mts → index-B7AKc18V.d.mts} +2 -2
  52. package/dist/{index-CLxubakC.d.mts → index-BlpzXncY.d.mts} +38 -247
  53. package/dist/{index-DRhMpdnA.d.mts → index-CK7u9isy.d.mts} +8 -8
  54. package/dist/{index-DUupuPhZ.d.mts → index-CNYe5lnW.d.mts} +2 -2
  55. package/dist/{index-CPRnOjjt.d.mts → index-DjUdWlzf.d.mts} +2 -2
  56. package/dist/index-ZePLwxw7.d.mts +208 -0
  57. package/dist/{interceptor-DOqRkCya.mjs → interceptor-D-q1rvRl.mjs} +1 -2
  58. package/dist/{interceptor-DOqRkCya.mjs.map → interceptor-D-q1rvRl.mjs.map} +1 -1
  59. package/dist/{job-BpsFXPbi.mjs → job-fuc3j1Ma.mjs} +9 -10
  60. package/dist/job-fuc3j1Ma.mjs.map +1 -0
  61. package/dist/kysely/index.mjs +0 -1
  62. package/dist/kysely/index.mjs.map +1 -1
  63. package/dist/{kysely-type-D1e0Vwkd.mjs → kysely-type-DR8uzZTA.mjs} +2 -3
  64. package/dist/kysely-type-DR8uzZTA.mjs.map +1 -0
  65. package/dist/{logger-DpJyJvNz.mjs → logger-CxF-Ex5d.mjs} +1 -2
  66. package/dist/{logger-DpJyJvNz.mjs.map → logger-CxF-Ex5d.mjs.map} +1 -1
  67. package/dist/{mock-DMgIygjE.mjs → mock-BjFj5o1I.mjs} +9 -11
  68. package/dist/mock-BjFj5o1I.mjs.map +1 -0
  69. package/dist/{multiline-Cf9ODpr1.mjs → multiline-sfHpTZZK.mjs} +1 -2
  70. package/dist/{multiline-Cf9ODpr1.mjs.map → multiline-sfHpTZZK.mjs.map} +1 -1
  71. package/dist/{package-json-DcQApfPQ.mjs → package-json-8b0O9TlX.mjs} +1 -2
  72. package/dist/{package-json-DcQApfPQ.mjs.map → package-json-8b0O9TlX.mjs.map} +1 -1
  73. package/dist/package-json-Cv2Z-TqQ.mjs +3 -0
  74. package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
  75. package/dist/plugin/builtin/enum-constants/index.mjs +1 -2
  76. package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
  77. package/dist/plugin/builtin/file-utils/index.mjs +1 -2
  78. package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
  79. package/dist/plugin/builtin/kysely-type/index.mjs +1 -2
  80. package/dist/plugin/builtin/seed/index.d.mts +1 -1
  81. package/dist/plugin/builtin/seed/index.mjs +1 -2
  82. package/dist/plugin/index.d.mts +1 -3
  83. package/dist/plugin/index.mjs +0 -1
  84. package/dist/plugin/index.mjs.map +1 -1
  85. package/dist/registry-DdsYlL_P.mjs +51 -0
  86. package/dist/registry-DdsYlL_P.mjs.map +1 -0
  87. package/dist/{repl-editor-CJG3sz7A.mjs → repl-editor-DmGr9zMw.mjs} +2 -3
  88. package/dist/{repl-editor-CJG3sz7A.mjs.map → repl-editor-DmGr9zMw.mjs.map} +1 -1
  89. package/dist/{chunk-BkoGK1jX.mjs → rolldown-runtime-DXywRVcq.mjs} +0 -1
  90. package/dist/runtime/authconnection.d.mts +1 -1
  91. package/dist/runtime/authconnection.mjs +1 -2
  92. package/dist/runtime/context.d.mts +1 -1
  93. package/dist/runtime/context.mjs +1 -2
  94. package/dist/runtime/file.d.mts +1 -1
  95. package/dist/runtime/file.mjs +1 -2
  96. package/dist/runtime/globals.d.mts +6 -39
  97. package/dist/runtime/globals.mjs +0 -1
  98. package/dist/runtime/iconv.d.mts +1 -1
  99. package/dist/runtime/iconv.mjs +1 -2
  100. package/dist/runtime/idp.d.mts +1 -1
  101. package/dist/runtime/idp.mjs +1 -2
  102. package/dist/runtime/index.d.mts +8 -8
  103. package/dist/runtime/index.mjs +7 -8
  104. package/dist/runtime/secretmanager.d.mts +1 -1
  105. package/dist/runtime/secretmanager.mjs +1 -2
  106. package/dist/runtime/workflow.d.mts +1 -1
  107. package/dist/runtime/workflow.mjs +1 -2
  108. package/dist/{runtime-C7qTBDD2.mjs → runtime-n9NCkjee.mjs} +301 -317
  109. package/dist/runtime-n9NCkjee.mjs.map +1 -0
  110. package/dist/{schema-1msIhXwA.mjs → schema-BhkpP5Hw.mjs} +3 -4
  111. package/dist/schema-BhkpP5Hw.mjs.map +1 -0
  112. package/dist/{secret-file-CWzF8rry.mjs → secret-file-DBqZhjFQ.mjs} +1 -2
  113. package/dist/{secret-file-CWzF8rry.mjs.map → secret-file-DBqZhjFQ.mjs.map} +1 -1
  114. package/dist/{secretmanager-CKLB3wAQ.d.mts → secretmanager-B3n4KHfm.d.mts} +1 -1
  115. package/dist/{secretmanager-B9h-U_8U.mjs → secretmanager-BVxw3ih_.mjs} +2 -3
  116. package/dist/{secretmanager-B9h-U_8U.mjs.map → secretmanager-BVxw3ih_.mjs.map} +1 -1
  117. package/dist/seed/index.mjs +0 -1
  118. package/dist/seed/index.mjs.map +1 -1
  119. package/dist/{seed-BH2FbrPV.mjs → seed-jf3008-h.mjs} +5 -16
  120. package/dist/seed-jf3008-h.mjs.map +1 -0
  121. package/dist/{service-wI3Hvrgx.mjs → service-CCL8ruDf.mjs} +3 -4
  122. package/dist/service-CCL8ruDf.mjs.map +1 -0
  123. package/dist/service-D6yonf2I.mjs +3 -0
  124. package/dist/{service-DMohAx8a2.mjs → service-DU1mVzri.mjs} +3 -4
  125. package/dist/service-DU1mVzri.mjs.map +1 -0
  126. package/dist/{telemetry-BQbbVo2t.mjs → telemetry-CdqJEzkj.mjs} +2 -3
  127. package/dist/{telemetry-BQbbVo2t.mjs.map → telemetry-CdqJEzkj.mjs.map} +1 -1
  128. package/dist/telemetry-ClwW5ohF.mjs +3 -0
  129. package/dist/test-env-key-D9kM6ETE.mjs +49 -0
  130. package/dist/test-env-key-D9kM6ETE.mjs.map +1 -0
  131. package/dist/type-source-DH_LH20p.mjs +13 -0
  132. package/dist/type-source-DH_LH20p.mjs.map +1 -0
  133. package/dist/{types-CmzfQP_m.mjs → types-B2RpYyA_.mjs} +2 -3
  134. package/dist/types-B2RpYyA_.mjs.map +1 -0
  135. package/dist/types-ClhIrW_C.mjs +4 -0
  136. package/dist/{tailordb-BlBGmQK-.d.mts → types-DCUhgpyI.d.mts} +142 -221
  137. package/dist/{plugin-C_FyVSdl.d.mts → types-DhO_VEZd.d.mts} +119 -179
  138. package/dist/types-DwDgacni.d.mts +338 -0
  139. package/dist/utils/test/index.d.mts +4 -3
  140. package/dist/utils/test/index.mjs +1 -2
  141. package/dist/utils/test/index.mjs.map +1 -1
  142. package/dist/vitest/environment.mjs +1 -2
  143. package/dist/vitest/environment.mjs.map +1 -1
  144. package/dist/vitest/index.d.mts +42 -5
  145. package/dist/vitest/index.mjs +133 -4
  146. package/dist/vitest/index.mjs.map +1 -1
  147. package/dist/vitest/setup.mjs +2 -3
  148. package/dist/vitest/setup.mjs.map +1 -1
  149. package/dist/{workflow-CMamswkK.d.mts → workflow-BbKvGLQg.d.mts} +1 -1
  150. package/dist/{workflow--aPbA8Uq.mjs → workflow-DgemCAz3.mjs} +2 -3
  151. package/dist/{workflow--aPbA8Uq.mjs.map → workflow-DgemCAz3.mjs.map} +1 -1
  152. package/dist/workflow.generated-DtQwEo-x.d.mts +671 -0
  153. package/docs/cli/application.md +0 -2
  154. package/docs/cli/completion.md +3 -0
  155. package/docs/cli/crashreport.md +0 -2
  156. package/docs/cli/function.md +1 -1
  157. package/docs/cli/user.md +3 -3
  158. package/docs/cli/workspace.md +3 -3
  159. package/docs/configuration.md +0 -2
  160. package/docs/plugin/custom.md +2 -2
  161. package/docs/plugin/index.md +1 -1
  162. package/docs/runtime.md +3 -3
  163. package/docs/services/aigateway.md +97 -0
  164. package/docs/services/auth.md +19 -2
  165. package/docs/services/executor.md +0 -2
  166. package/docs/services/resolver.md +2 -4
  167. package/docs/services/tailordb.md +1 -1
  168. package/docs/services/workflow.md +13 -15
  169. package/docs/testing.md +18 -11
  170. package/package.json +13 -12
  171. package/dist/actor-J2gJ0eK5.d.mts +0 -24
  172. package/dist/application-76hhIhnJ.mjs.map +0 -1
  173. package/dist/application-av2raLs6.mjs +0 -4
  174. package/dist/cli/skills.d.mts +0 -1
  175. package/dist/cli/skills.mjs +0 -22
  176. package/dist/cli/skills.mjs.map +0 -1
  177. package/dist/client-CobIRHl-.mjs.map +0 -1
  178. package/dist/enum-constants-C7DaWeQo.mjs.map +0 -1
  179. package/dist/env-B-g-qgE4.d.mts +0 -7
  180. package/dist/field-C4zdJLW5.mjs.map +0 -1
  181. package/dist/globals-ByrCoDip.mjs.map +0 -1
  182. package/dist/job-BpsFXPbi.mjs.map +0 -1
  183. package/dist/kysely-type-D1e0Vwkd.mjs.map +0 -1
  184. package/dist/mock-DMgIygjE.mjs.map +0 -1
  185. package/dist/package-json-wzO6nV9O.mjs +0 -4
  186. package/dist/registry-D0uB0OrK.mjs +0 -178
  187. package/dist/registry-D0uB0OrK.mjs.map +0 -1
  188. package/dist/runtime-C7qTBDD2.mjs.map +0 -1
  189. package/dist/schema-1msIhXwA.mjs.map +0 -1
  190. package/dist/seed-BH2FbrPV.mjs.map +0 -1
  191. package/dist/service-BHQIerYh.mjs +0 -4
  192. package/dist/service-DMohAx8a2.mjs.map +0 -1
  193. package/dist/service-wI3Hvrgx.mjs.map +0 -1
  194. package/dist/telemetry-w92bvGdC.mjs +0 -4
  195. package/dist/types-2Be3wSMc.mjs +0 -5
  196. package/dist/types-CmzfQP_m.mjs.map +0 -1
  197. package/dist/workflow.generated-Bf1tWylx.d.mts +0 -1416
  198. package/docs/generator/builtin.md +0 -257
  199. package/docs/generator/custom.md +0 -147
  200. package/docs/generator/index.md +0 -66
@@ -41,6 +41,9 @@ tailor-sdk completion [options] [shell]
41
41
  | `--instructions` | `-i` | Show installation instructions | No | `false` |
42
42
  | `--loader` | - | Print just the rc loader snippet (bash/zsh). Add it to ~/.bashrc or ~/.zshrc; it auto-regenerates the cache when the binary changes. | No | `false` |
43
43
  | `--install` | - | Write the completion script to its on-disk cache (bash/zsh) or autoload location (fish) instead of printing it. | No | `false` |
44
+ | `--static` | - | Generate the legacy static completion script with command metadata baked in. | No | `false` |
45
+ | `--dispatcher` | - | Generate the runtime dispatcher completion script. This is the default. | No | `false` |
46
+ | `--worker` | - | Generate an internal static worker artifact for dispatcher mode. | No | `false` |
44
47
 
45
48
  <!-- politty:command:completion:options:end -->
46
49
 
@@ -12,8 +12,6 @@ Commands for managing crash reports.
12
12
 
13
13
  Manage crash reports.
14
14
 
15
- **Aliases:** `crash-report`
16
-
17
15
  <!-- politty:command:crashreport:description:end -->
18
16
 
19
17
  <!-- politty:command:crashreport:usage:start -->
@@ -209,7 +209,7 @@ $ tailor-sdk function logs <execution-id> --json
209
209
 
210
210
  When viewing a specific execution that failed, the command displays error details with the stack trace mapped back to your original source files (clickable file links and code snippets, matching `function test-run` output).
211
211
 
212
- Stack traces stay accurate even after later redeploys, because the trace is resolved against the exact build that produced the execution. If that build is no longer available, the command falls back to a plain-text error display.
212
+ Stack traces are mapped only when the execution includes a content hash for the exact build that ran. If the content hash is missing or the build is no longer available, the command falls back to a plain-text error display.
213
213
 
214
214
  <!-- politty:command:function logs:notes:end -->
215
215
 
package/docs/cli/user.md CHANGED
@@ -201,9 +201,9 @@ tailor-sdk user switch <user>
201
201
 
202
202
  **Arguments**
203
203
 
204
- | Argument | Description | Required |
205
- | -------- | ----------- | -------- |
206
- | `user` | User email | Yes |
204
+ | Argument | Description | Required |
205
+ | -------- | -------------------------------------------- | -------- |
206
+ | `user` | User email address or machine user client ID | Yes |
207
207
 
208
208
  <!-- politty:command:user switch:arguments:end -->
209
209
 
@@ -79,7 +79,7 @@ tailor-sdk workspace create [options]
79
79
  | `--organization-id <ORGANIZATION_ID>` | `-o` | Organization ID to workspace associate with | No | - | `TAILOR_PLATFORM_ORGANIZATION_ID` |
80
80
  | `--folder-id <FOLDER_ID>` | `-f` | Folder ID to workspace associate with | No | - | `TAILOR_PLATFORM_FOLDER_ID` |
81
81
  | `--profile-name <PROFILE_NAME>` | `-p` | Profile name to create | No | - | - |
82
- | `--profile-user <PROFILE_USER>` | - | User email for the profile (defaults to current user) | No | - | - |
82
+ | `--profile-user <PROFILE_USER>` | - | User email address or machine user client ID for the profile (defaults to current user) | No | - | - |
83
83
  | `--permission <PERMISSION>` | - | Profile permission (requires --profile-name). 'read' blocks all write commands while the profile is active. | No | `"write"` | - |
84
84
 
85
85
  <!-- politty:command:workspace create:options:end -->
@@ -243,7 +243,7 @@ tailor-sdk profile create [options] <name>
243
243
 
244
244
  | Option | Alias | Description | Required | Default |
245
245
  | ------------------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------- | -------- | --------- |
246
- | `--user <USER>` | `-u` | User email | Yes | - |
246
+ | `--user <USER>` | `-u` | User email address or machine user client ID | Yes | - |
247
247
  | `--workspace-id <WORKSPACE_ID>` | `-w` | Workspace ID | Yes | - |
248
248
  | `--permission <PERMISSION>` | - | Profile permission. 'read' blocks all write commands while the profile is active. | No | `"write"` |
249
249
  | `--machine-user <MACHINE_USER>` | `-m` | Default machine user name for application-data commands (query, workflow start, function test-run, machineuser token). | No | - |
@@ -324,7 +324,7 @@ tailor-sdk profile update [options] <name>
324
324
 
325
325
  | Option | Alias | Description | Required | Default |
326
326
  | ------------------------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |
327
- | `--user <USER>` | `-u` | New user email | No | - |
327
+ | `--user <USER>` | `-u` | New user email address or machine user client ID | No | - |
328
328
  | `--workspace-id <WORKSPACE_ID>` | `-w` | New workspace ID | No | - |
329
329
  | `--permission <PERMISSION>` | - | Profile permission. 'read' blocks all write commands; 'write' lifts the restriction. | No | - |
330
330
  | `--machine-user <MACHINE_USER>` | `-m` | Default machine user name for application-data commands (query, workflow start, function test-run, machineuser token). Pass an empty string to clear. | No | - |
@@ -294,5 +294,3 @@ export const plugins = definePlugins(
294
294
  enumConstantsPlugin({ distPath: "./generated/enums.ts" }),
295
295
  );
296
296
  ```
297
-
298
- See [Generators](./generator/index.md) for legacy `defineGenerators()` documentation.
@@ -18,7 +18,7 @@ const myPlugin: Plugin = {
18
18
  export default myPlugin; // Required: must be default export
19
19
  ```
20
20
 
21
- This is required so that generators can use plugin-generated TailorDB types via `getGeneratedType()`.
21
+ This is required so that other plugins and generation-time hooks can use plugin-generated TailorDB types via `getGeneratedType()`.
22
22
 
23
23
  ## Plugin Interface
24
24
 
@@ -276,7 +276,7 @@ import type {
276
276
 
277
277
  ## getGeneratedType Helper
278
278
 
279
- The SDK provides an async `getGeneratedType()` helper function to retrieve plugin-generated TailorDB types. This enables generators and other tools to work with types generated by plugins.
279
+ The SDK provides an async `getGeneratedType()` helper function to retrieve plugin-generated TailorDB types. This enables plugins and other tools to work with types generated by plugins.
280
280
 
281
281
  ```typescript
282
282
  import { join } from "node:path";
@@ -149,7 +149,7 @@ These hooks produce TailorDB types, resolvers, and executors that become part of
149
149
  | `onResolverReady` | TailorDB types, Resolvers, Auth | Write output files |
150
150
  | `onExecutorReady` | TailorDB types, Resolvers, Executors, Auth | Write output files |
151
151
 
152
- These hooks receive all finalized data and produce output files (TypeScript code, etc.). They replace the previous standalone `defineGenerators()` approach. No `importPath` required.
152
+ These hooks receive all finalized data and produce output files (TypeScript code, etc.). No `importPath` required.
153
153
 
154
154
  A plugin can implement hooks from either or both phases.
155
155
 
package/docs/runtime.md CHANGED
@@ -50,9 +50,7 @@ import type { ListUsersResponse, ClientConfig } from "@tailor-platform/sdk/runti
50
50
 
51
51
  Most users do not need to touch the globals entry — `@tailor-platform/sdk/runtime` (and its subpath modules) cover the same surface without depending on any ambient declaration.
52
52
 
53
- For backwards compatibility with the previous `@tailor-platform/function-types`-based setup, the SDK still activates the ambient `tailor.*` / `tailordb.*` types automatically when you import from `@tailor-platform/sdk`. **This implicit activation will be removed in v2.0**; new code should prefer the typed wrappers from `@tailor-platform/sdk/runtime`.
54
-
55
- If you want to opt into the globals explicitly (or you are migrating ahead of v2.0), add a single side-effect import anywhere in your project:
53
+ Importing from `@tailor-platform/sdk` does not activate the ambient `tailor.*` / `tailordb.*` declarations. If you want to opt into the globals, add a single side-effect import anywhere in your project:
56
54
 
57
55
  ```ts
58
56
  import "@tailor-platform/sdk/runtime/globals";
@@ -68,6 +66,8 @@ Or register the entry in `tsconfig.json`:
68
66
  }
69
67
  ```
70
68
 
69
+ The globals entry exposes the lowercase `tailordb.*` namespace only. If your project still references the removed capital-cased `Tailordb.*` namespace from `@tailor-platform/function-types`, migrate before upgrading in two steps: run `pnpm dlx @tailor-platform/sdk-codemod v2/tailordb-namespace` to rewrite `Tailordb.*` references to lowercase `tailordb.*`, then add the `import "@tailor-platform/sdk/runtime/globals"` opt-in above so the rewritten references resolve.
70
+
71
71
  ## Namespaces
72
72
 
73
73
  The runtime entry re-exports the following namespaces. Detailed signatures, parameters, and return types live in the JSDoc next to each export — hover the symbol in your IDE or browse the source.
@@ -0,0 +1,97 @@
1
+ # AI Gateway
2
+
3
+ AI Gateway provides a unified endpoint for accessing multiple LLM providers (Azure OpenAI, Google Vertex AI Gemini, Anthropic via Vertex AI) through a single OpenAI-compatible API, with platform-managed credentials and workspace-scoped authentication.
4
+
5
+ ## Overview
6
+
7
+ AI Gateway provides:
8
+
9
+ - A unified, OpenAI-compatible endpoint for multiple LLM providers
10
+ - Mandatory authentication via your workspace's auth (request tokens are resolved against the configured auth namespace)
11
+ - Per-workspace isolation: each gateway is provisioned with its own platform-assigned URL
12
+ - Optional CORS allow-list for browser-based clients
13
+ - Built-in usage tracking and rate limiting (configured platform-side)
14
+
15
+ ## Configuration
16
+
17
+ Configure an AI Gateway using `defineAIGateway()`:
18
+
19
+ **Definition Rules:**
20
+
21
+ - **Multiple gateways allowed**: You can define multiple AI Gateways in your config file
22
+ - **Configuration location**: Define in `tailor.config.ts` and add to the `aiGateways` array
23
+ - **Uniqueness**: Gateway names must be unique across all AI Gateways
24
+ - **Name pattern**: `name` must match `^[a-z0-9][a-z0-9-]{1,28}[a-z0-9]$` (lowercase alphanumeric and hyphens, 3-30 characters)
25
+
26
+ ```typescript
27
+ import { defineAIGateway, defineConfig } from "@tailor-platform/sdk";
28
+
29
+ const aiGateway = defineAIGateway("my-aigateway", {
30
+ authNamespace: "default",
31
+ });
32
+
33
+ export default defineConfig({
34
+ aiGateways: [aiGateway],
35
+ });
36
+ ```
37
+
38
+ ## Options
39
+
40
+ ### authNamespace
41
+
42
+ The auth namespace used to resolve request tokens against your workspace's auth configuration. Must match an existing auth namespace.
43
+
44
+ ```typescript
45
+ defineAIGateway("my-aigateway", {
46
+ authNamespace: "default",
47
+ });
48
+ ```
49
+
50
+ ### cors
51
+
52
+ Optional list of allowed origins for browser-based clients. Each entry is one of:
53
+
54
+ - `*` — any origin (any scheme, any host)
55
+ - `http(s)://*` — any host on the given scheme
56
+ - `http(s)://*.example.com` — any subdomain of `example.com` on the given scheme
57
+ - `http(s)://app.example.com` — an exact origin
58
+
59
+ An optional `:port` may be appended in all URL forms. Omitting `cors` (or passing `[]`) disables cross-origin access — browsers will block any cross-origin reads.
60
+
61
+ ```typescript
62
+ defineAIGateway("my-aigateway", {
63
+ authNamespace: "default",
64
+ cors: ["https://app.example.com", "https://*.example.com"],
65
+ });
66
+ ```
67
+
68
+ ## Complete Example
69
+
70
+ ```typescript
71
+ import {
72
+ defineAIGateway,
73
+ defineAuth,
74
+ defineConfig,
75
+ defineStaticWebSite,
76
+ } from "@tailor-platform/sdk";
77
+
78
+ const website = defineStaticWebSite("my-frontend", {
79
+ description: "Frontend application",
80
+ });
81
+
82
+ const aiGateway = defineAIGateway("my-aigateway", {
83
+ authNamespace: "default",
84
+ cors: [website.url],
85
+ });
86
+
87
+ const auth = defineAuth("my-auth", {
88
+ // ...auth configuration...
89
+ });
90
+
91
+ export default defineConfig({
92
+ name: "my-app",
93
+ auth,
94
+ staticWebsites: [website],
95
+ aiGateways: [aiGateway],
96
+ });
97
+ ```
@@ -310,8 +310,6 @@ export default createResolver({
310
310
 
311
311
  Type narrowing is provided by the generated `tailor.d.ts` (the `MachineUserNameRegistry` interface). Run `tailor-sdk generate` (or `apply`) after defining new machine users to refresh it.
312
312
 
313
- > **Deprecated:** The `auth.invoker("<name>")` helper is still available for backward compatibility. Prefer the string form — it does not require importing `auth` from `tailor.config.ts` into runtime files, avoiding bundling config-layer (Node-only) dependencies.
314
-
315
313
  ## OAuth 2.0 Clients
316
314
 
317
315
  Configure OAuth 2.0 clients for third-party applications:
@@ -515,6 +513,25 @@ export const auth = defineAuth("my-auth", {
515
513
 
516
514
  **invoker**: The machine user whose permissions are used to execute the hook. Must reference a machine user defined in the same auth configuration.
517
515
 
516
+ ### Federated identity claims
517
+
518
+ When a user signs in through a Built-in IdP OAuth provider (Google or Microsoft), the upstream provider's profile is available on `claims.federated_identity`. It is `undefined` for password logins, so guard before reading it. Commonly present claims (`name`, `given_name`, `family_name`, `picture`, `locale`) are typed; any other claim the provider issues is forwarded as-is. Availability varies by provider (for example, Microsoft does not issue `picture`).
519
+
520
+ ```typescript
521
+ hooks: {
522
+ beforeLogin: {
523
+ handler: async ({ claims }) => {
524
+ const federated = claims.federated_identity;
525
+ if (federated?.provider === "google") {
526
+ // Populate the user record from the upstream profile
527
+ const avatarUrl = federated.claims.picture;
528
+ }
529
+ },
530
+ invoker: "hook-invoker",
531
+ },
532
+ }
533
+ ```
534
+
518
535
  ## CLI Commands
519
536
 
520
537
  Manage Auth resources using the CLI:
@@ -347,8 +347,6 @@ export default createExecutor({
347
347
  });
348
348
  ```
349
349
 
350
- > **Deprecated:** `auth.invoker("batch-processor")` still works, but is deprecated. Prefer the string form to avoid importing config-layer modules into runtime files.
351
-
352
350
  ## Event Payloads
353
351
 
354
352
  Each trigger type provides specific context data in the callback functions.
@@ -240,7 +240,7 @@ Define actual resolver logic in the `body` function. Function arguments include:
240
240
 
241
241
  ### Using Kysely for Database Access
242
242
 
243
- If you're generating Kysely types with a generator, you can use `getDB` to execute typed queries:
243
+ If you're generating Kysely types with `kyselyTypePlugin`, you can use `getDB` to execute typed queries:
244
244
 
245
245
  ```typescript
246
246
  import { getDB } from "../generated/tailordb";
@@ -306,7 +306,7 @@ createResolver({
306
306
 
307
307
  - When `publishEvents: true`, resolver execution events are published
308
308
  - When not specified, it is **automatically set to `true`** if an executor uses this resolver with `resolverExecutedTrigger`
309
- - When explicitly set to `false` while an executor uses this resolver, an error is thrown during `tailor apply`
309
+ - When explicitly set to `false` while an executor uses this resolver, an error is thrown during `tailor-sdk deploy`
310
310
 
311
311
  **Use cases:**
312
312
 
@@ -371,6 +371,4 @@ export default createResolver({
371
371
 
372
372
  The machine user name is looked up in the auth service configured on your app (`machineUsers` in `defineAuth`). The namespace is resolved automatically — no need to import `auth` from `tailor.config.ts` in resolver files.
373
373
 
374
- > **Deprecated:** `auth.invoker("batch-processor")` still works, but is deprecated. Importing `auth` into runtime files pulls config-layer (Node-only) dependencies into the bundle.
375
-
376
374
  **Note:** `authInvoker` controls the permissions for database operations and other platform actions. The `user` object passed to `body` still reflects the original caller, while `invoker` reflects the principal actually running the body.
@@ -461,7 +461,7 @@ db.type("User", {
461
461
 
462
462
  - When `publishEvents: true`, record creation/update/deletion events are published
463
463
  - When not specified, it is **automatically set to `true`** if an executor uses this type with `recordCreatedTrigger`, `recordUpdatedTrigger`, or `recordDeletedTrigger`
464
- - When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor apply`
464
+ - When explicitly set to `false` while an executor uses this type, an error is thrown during `tailor-sdk deploy`
465
465
 
466
466
  **Use cases:**
467
467
 
@@ -105,11 +105,11 @@ import { sendNotification } from "./jobs/send-notification";
105
105
 
106
106
  export const mainJob = createWorkflowJob({
107
107
  name: "main-job",
108
- body: async (input: { customerId: string }) => {
109
- const customer = await fetchCustomer.trigger({
108
+ body: (input: { customerId: string }) => {
109
+ const customer = fetchCustomer.trigger({
110
110
  customerId: input.customerId,
111
111
  });
112
- const notification = await sendNotification.trigger({
112
+ const notification = sendNotification.trigger({
113
113
  message: "Order processed",
114
114
  recipient: customer.email,
115
115
  });
@@ -130,31 +130,31 @@ Using `.trigger()` inside a loop works correctly, as long as the loop is determi
130
130
  // ✅ OK: deterministic loop — same calls in the same order on every execution
131
131
  const regions = ["us", "eu", "ap"];
132
132
  for (const region of regions) {
133
- const result = await fetchData.trigger({ region });
133
+ const result = fetchData.trigger({ region });
134
134
  results.push(result);
135
135
  }
136
136
  ```
137
137
 
138
138
  ```typescript
139
139
  // ❌ Bad: non-deterministic — argument changes between executions
140
- await processJob.trigger({ timestamp: Date.now() });
140
+ processJob.trigger({ timestamp: Date.now() });
141
141
 
142
142
  // ✅ OK: call Date.now() in separated job
143
- const timestamp = await timestampJob.trigger();
144
- await processJob.trigger({ timestamp });
143
+ const timestamp = timestampJob.trigger();
144
+ processJob.trigger({ timestamp });
145
145
  ```
146
146
 
147
147
  ```typescript
148
148
  // ❌ Bad: non-deterministic — external data may change between executions
149
149
  const items = await fetch("https://api.example.com/items").then((r) => r.json());
150
150
  for (const item of items) {
151
- await processItem.trigger({ id: item.id });
151
+ processItem.trigger({ id: item.id });
152
152
  }
153
153
 
154
154
  // ✅ OK: call fetch("https://api.example.com/items").then((r) => r.json()); in separated job
155
- const items = await fetchItemsJob.trigger();
155
+ const items = fetchItemsJob.trigger();
156
156
  for (const item of items) {
157
- await processItem.trigger({ id: item.id });
157
+ processItem.trigger({ id: item.id });
158
158
  }
159
159
  ```
160
160
 
@@ -178,15 +178,15 @@ import { sendNotification } from "./jobs/send-notification";
178
178
  // Jobs must be named exports
179
179
  export const processOrder = createWorkflowJob({
180
180
  name: "process-order",
181
- body: async (input: { customerId: string }, { env, invoker }) => {
181
+ body: (input: { customerId: string }, { env, invoker }) => {
182
182
  // `env` contains values from `tailor.config.ts` -> `env`.
183
183
  // `invoker` is the principal running this job, overridden by `authInvoker`
184
184
  // when set; `null` for anonymous calls.
185
185
  // Trigger other jobs by calling .trigger() on the job object.
186
- const customer = await fetchCustomer.trigger({
186
+ const customer = fetchCustomer.trigger({
187
187
  customerId: input.customerId,
188
188
  });
189
- await sendNotification.trigger({
189
+ sendNotification.trigger({
190
190
  message: "Order processed",
191
191
  recipient: customer.email,
192
192
  });
@@ -383,8 +383,6 @@ export default createResolver({
383
383
  });
384
384
  ```
385
385
 
386
- > **Deprecated:** `auth.invoker("manager-machine-user")` still works but is deprecated. Using the string form avoids importing `auth` into runtime code.
387
-
388
386
  See the full working example in the repository: [example/resolvers/triggerWorkflow.ts](https://github.com/tailor-platform/sdk/blob/main/example/resolvers/triggerWorkflow.ts).
389
387
 
390
388
  ## File Organization
package/docs/testing.md CHANGED
@@ -12,7 +12,9 @@ Lean on unit tests for the day-to-day feedback loop — they run fast and exerci
12
12
  Unit-test entrypoints exposed by the SDK:
13
13
 
14
14
  - `resolver.body({ input, user, env })` — invoke a resolver
15
- - `workflowJob.body(input, { env })` / `workflowJob.trigger(input)` — invoke or chain a workflow job
15
+ - `workflowJob.body(input, { env })` — invoke a workflow job body directly
16
+ - `workflowJob.trigger(input)` — chain a workflow job through the workflow runtime
17
+ - `runWorkflowLocally(workflow, args)` — run a workflow chain locally with real job bodies
16
18
  - `executor.operation.body(args)` — invoke a function-kind executor
17
19
 
18
20
  Helpers under `@tailor-platform/sdk/test`:
@@ -23,6 +25,7 @@ Platform API mocks under `@tailor-platform/sdk/vitest` (for use with the [`tailo
23
25
 
24
26
  - `mockTailordb` — TailorDB query stubs and call recording
25
27
  - `mockWorkflow` — `tailor.workflow` job / wait / resolve mocks
28
+ - `runWorkflowLocally` — local full-chain workflow runner
26
29
  - `mockSecretmanager`, `mockAuthconnection`, `mockIdp`, `mockFile`, `mockIconv` — corresponding platform API mocks
27
30
 
28
31
  For tighter alignment with the production runtime — Node.js module blocking, Web-only globals, and platform API mocks — pair the resolver helpers with the [`tailor-runtime` Vitest environment](#runtime-environment-emulation-beta) below.
@@ -126,7 +129,7 @@ test("content-based mock", async () => {
126
129
 
127
130
  ### Workflow Mock
128
131
 
129
- `.trigger()` runs the real job bodies locally out of the box (see [Running a full workflow locally](#running-a-full-workflow-locally)). Acquire `mockWorkflow()` when you want to override responses with `setJobHandler` / `enqueueResult` or assert on `triggeredJobs`:
132
+ Workflow job `.trigger()` calls use the platform workflow runtime. Acquire `mockWorkflow()` when you want to provide trigger responses with `setJobHandler` / `enqueueResult` or assert on `triggeredJobs`. If no response is configured, the mock throws so missing job mocks fail loudly:
130
133
 
131
134
  ```typescript
132
135
  import { mockWorkflow } from "@tailor-platform/sdk/vitest";
@@ -645,16 +648,16 @@ import { fulfillOrder, processPayment, sendConfirmation, validateOrder } from ".
645
648
 
646
649
  describe("fulfillOrder", () => {
647
650
  test("chains validate → pay → confirm", async () => {
648
- using _validateSpy = vi.spyOn(validateOrder, "trigger").mockResolvedValue({
651
+ using _validateSpy = vi.spyOn(validateOrder, "trigger").mockReturnValue({
649
652
  valid: true,
650
653
  orderId: "order-1",
651
654
  });
652
- using _paymentSpy = vi.spyOn(processPayment, "trigger").mockResolvedValue({
655
+ using _paymentSpy = vi.spyOn(processPayment, "trigger").mockReturnValue({
653
656
  transactionId: "txn-order-1",
654
657
  amount: 100,
655
658
  status: "completed",
656
659
  });
657
- using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockResolvedValue({
660
+ using _confirmSpy = vi.spyOn(sendConfirmation, "trigger").mockReturnValue({
658
661
  orderId: "order-1",
659
662
  transactionId: "txn-order-1",
660
663
  confirmed: true,
@@ -708,22 +711,27 @@ describe("processWithApproval", () => {
708
711
 
709
712
  #### Running a full workflow locally
710
713
 
711
- To exercise the full chain with real job bodies, just call `workflow.mainJob.trigger()` — no `mockWorkflow()` needed. Dependent jobs run their real `.body()` functions, and trigger args/results cross the same JSON boundary as the platform, so a non-serializable payload fails the test exactly as it would in production:
714
+ To exercise the full chain with real job bodies, call `runWorkflowLocally(workflow, args)`. Dependent jobs run their real `.body()` functions, and trigger args/results cross the same JSON boundary as the platform, so a non-serializable payload fails the test exactly as it would in production:
712
715
 
713
716
  ```typescript
717
+ import { runWorkflowLocally } from "@tailor-platform/sdk/vitest";
714
718
  import { describe, expect, test } from "vitest";
715
719
  import workflow from "./order-fulfillment";
716
720
 
717
721
  describe("order-fulfillment workflow", () => {
718
- test("mainJob.trigger() executes all jobs", async () => {
719
- const result = await workflow.mainJob.trigger({ orderId: "order-3", amount: 300 });
722
+ test("runWorkflowLocally() executes all jobs", async () => {
723
+ const result = await runWorkflowLocally(workflow, { orderId: "order-3", amount: 300 });
720
724
 
721
725
  expect(result).toMatchObject({ confirmed: true, paymentStatus: "completed" });
722
726
  });
723
727
  });
724
728
  ```
725
729
 
726
- Acquire `mockWorkflow()` only when you need to override a dependent job with `wf.setJobHandler(...)` / `wf.enqueueResult(...)` (the rest still run their real bodies), control the env via `wf.setEnv(...)`, or assert on `wf.triggeredJobs`.
730
+ Pass `{ env }` as the third argument when job bodies need configuration values during the local run.
731
+
732
+ Like the platform runtime, the local runner re-runs the orchestrator body once per `.trigger()` call (N triggers means N+1 passes), so any side effects outside the trigger results fire on every pass. Keep the body deterministic and move repeatable side effects into the triggered jobs.
733
+
734
+ This helper is still a local runner. Use E2E tests when you need to verify deployed workflow scheduling, suspension, or replay behavior.
727
735
 
728
736
  **Use when:** you want to verify orchestration end to end without the cost of a real deployment.
729
737
 
@@ -823,14 +831,13 @@ Use `startWorkflow` from the CLI helpers. It starts the workflow on the deployed
823
831
  import { randomUUID } from "node:crypto";
824
832
  import { startWorkflow } from "@tailor-platform/sdk/cli";
825
833
  import { describe, expect, test } from "vitest";
826
- import config from "../tailor.config";
827
834
  import userProfileSync from "../src/workflow/sync-profile";
828
835
 
829
836
  describe("user-profile-sync workflow", () => {
830
837
  test("executes end to end", { timeout: 180_000 }, async () => {
831
838
  const { executionId, wait } = await startWorkflow({
832
839
  workflow: userProfileSync,
833
- authInvoker: config.auth.invoker("admin"),
840
+ authInvoker: "admin",
834
841
  arg: {
835
842
  name: "workflow-test",
836
843
  email: `wf-${randomUUID()}@example.com`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailor-platform/sdk",
3
- "version": "2.0.0-next.0",
3
+ "version": "2.0.0-next.1",
4
4
  "description": "Tailor Platform SDK - The SDK to work with Tailor Platform",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -9,8 +9,7 @@
9
9
  "directory": "packages/sdk"
10
10
  },
11
11
  "bin": {
12
- "tailor-sdk": "./dist/cli/index.mjs",
13
- "tailor-sdk-skills": "./dist/cli/skills.mjs"
12
+ "tailor-sdk": "./dist/cli/index.mjs"
14
13
  },
15
14
  "files": [
16
15
  "CHANGELOG.md",
@@ -139,8 +138,8 @@
139
138
  "@badgateway/oauth2-client": "3.3.1",
140
139
  "@bufbuild/protobuf": "2.12.0",
141
140
  "@bufbuild/protovalidate": "1.2.0",
142
- "@connectrpc/connect": "2.1.1",
143
- "@connectrpc/connect-node": "2.1.1",
141
+ "@connectrpc/connect": "2.1.2",
142
+ "@connectrpc/connect-node": "2.1.2",
144
143
  "@inquirer/core": "11.2.1",
145
144
  "@inquirer/prompts": "8.5.2",
146
145
  "@jridgewell/trace-mapping": "0.3.31",
@@ -160,10 +159,10 @@
160
159
  "chokidar": "5.0.0",
161
160
  "confbox": "0.2.4",
162
161
  "date-fns": "4.4.0",
163
- "es-toolkit": "1.47.0",
162
+ "es-toolkit": "1.47.1",
164
163
  "find-up-simple": "1.0.1",
165
164
  "globals": "17.6.0",
166
- "graphql": "16.14.1",
165
+ "graphql": "16.14.2",
167
166
  "inflection": "3.0.2",
168
167
  "kysely": "0.29.2",
169
168
  "madge": "8.0.0",
@@ -174,9 +173,9 @@
174
173
  "pathe": "2.0.3",
175
174
  "pgsql-ast-parser": "12.0.2",
176
175
  "pkg-types": "2.3.1",
177
- "politty": "0.5.1",
178
- "rolldown": "1.1.0",
179
- "semver": "7.8.3",
176
+ "politty": "0.6.0",
177
+ "rolldown": "1.1.1",
178
+ "semver": "7.8.4",
180
179
  "sql-highlight": "6.1.0",
181
180
  "std-env": "4.1.0",
182
181
  "table": "6.9.0",
@@ -191,7 +190,7 @@
191
190
  "@opentelemetry/sdk-trace-base": "2.8.0",
192
191
  "@types/madge": "5.0.3",
193
192
  "@types/mime-types": "3.0.1",
194
- "@types/node": "24.13.1",
193
+ "@types/node": "24.13.2",
195
194
  "@types/semver": "7.7.1",
196
195
  "@typescript/native-preview": "7.0.0-dev.20260612.1",
197
196
  "@vitest/coverage-v8": "4.1.8",
@@ -227,9 +226,11 @@
227
226
  "test:coverage": "vitest --coverage",
228
227
  "docs:check": "vitest run --project=unit* src/cli/docs.test.ts",
229
228
  "docs:update": "POLITTY_DOCS_UPDATE=true vitest run --project=unit* src/cli/docs.test.ts",
230
- "build": "tsdown",
229
+ "build": "tsdown && politty generate-worker --bin dist/cli/index.mjs --program tailor-sdk --shell zsh --verify",
231
230
  "lint": "oxlint --type-aware .",
232
231
  "check:public-api-jsdoc": "tsx scripts/check-public-api-jsdoc.ts",
232
+ "check:zod-isolation": "tsx scripts/check-zod-isolation.ts",
233
+ "check:import-cycles": "tsx scripts/check-import-cycles.ts",
233
234
  "lint:fix": "oxlint --type-aware . --fix",
234
235
  "typecheck": "tsc --noEmit",
235
236
  "typecheck:go": "tsgo",
@@ -1,24 +0,0 @@
1
- import { A as InferredAttributeList, j as InferredAttributeMap } from "./tailordb-BlBGmQK-.mjs";
2
-
3
- //#region src/types/actor.d.ts
4
- /** User type enum values from the Tailor Platform server. */
5
- type TailorActorType = "USER_TYPE_USER" | "USER_TYPE_MACHINE_USER" | "USER_TYPE_UNSPECIFIED";
6
- /** Represents an actor in event triggers. */
7
- type TailorActor = {
8
- /** The ID of the workspace the user belongs to. */workspaceId: string; /** The ID of the user. */
9
- userId: string;
10
- /**
11
- * A map of the user's attributes.
12
- * Maps from server's `attributeMap` field.
13
- */
14
- attributes: InferredAttributeMap | null;
15
- /**
16
- * A list of the user's attributes.
17
- * Maps from server's `attributes` field.
18
- */
19
- attributeList: InferredAttributeList; /** The type of the user. */
20
- userType: TailorActorType;
21
- };
22
- //#endregion
23
- export { TailorActor as t };
24
- //# sourceMappingURL=actor-J2gJ0eK5.d.mts.map