@tailor-platform/sdk 1.46.0 → 1.47.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 (90) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{actor-BmxQeMFP.d.mts → actor-jk4-f0yp.d.mts} +3 -3
  3. package/dist/{application-B4zVVNRS.mjs → application-C7H7y0hS.mjs} +66 -103
  4. package/dist/application-C7H7y0hS.mjs.map +1 -0
  5. package/dist/application-Csq5jxYP.mjs +4 -0
  6. package/dist/{brand-Ll48SMXe.mjs → brand-D-d15jx3.mjs} +1 -1
  7. package/dist/{brand-Ll48SMXe.mjs.map → brand-D-d15jx3.mjs.map} +1 -1
  8. package/dist/cli/index.mjs +36 -18
  9. package/dist/cli/index.mjs.map +1 -1
  10. package/dist/cli/lib.d.mts +6 -6
  11. package/dist/cli/lib.mjs +3 -3
  12. package/dist/cli/lib.mjs.map +1 -1
  13. package/dist/cli/skills.mjs.map +1 -1
  14. package/dist/{client-DTaArWQr.mjs → client-DCqdtFte.mjs} +1 -1
  15. package/dist/client-DbyKSN1F.mjs +1061 -0
  16. package/dist/client-DbyKSN1F.mjs.map +1 -0
  17. package/dist/configure/index.d.mts +4 -4
  18. package/dist/configure/index.mjs +8 -47
  19. package/dist/configure/index.mjs.map +1 -1
  20. package/dist/{crashreport-DGeGj9BF.mjs → crashreport-CNSw_BrJ.mjs} +2 -2
  21. package/dist/{crashreport-DGeGj9BF.mjs.map → crashreport-CNSw_BrJ.mjs.map} +1 -1
  22. package/dist/{crashreport-6mcMyWu4.mjs → crashreport-DXGFd16F.mjs} +1 -1
  23. package/dist/enum-constants-C3KSpsYj.mjs.map +1 -1
  24. package/dist/errors-wNQxQQBH.mjs.map +1 -1
  25. package/dist/{field-BY2vbJ8f.mjs → field-DLSIuMTu.mjs} +1 -1
  26. package/dist/{field-BY2vbJ8f.mjs.map → field-DLSIuMTu.mjs.map} +1 -1
  27. package/dist/file-utils-DjNi_3U_.mjs.map +1 -1
  28. package/dist/{index-DV-5OIEv.d.mts → index-BRvNi5q9.d.mts} +2 -2
  29. package/dist/{index-BBvPd9Uv.d.mts → index-BXyS7xKC.d.mts} +2 -2
  30. package/dist/{index-Dxe6alSZ.d.mts → index-BbOTbZFf.d.mts} +2 -2
  31. package/dist/{index-PB0otrDj.d.mts → index-DB8EapT-.d.mts} +7 -15
  32. package/dist/{index-B5_4Tzm2.d.mts → index-iy-hNfGp.d.mts} +2 -2
  33. package/dist/{interceptor-CrcDfLPq.mjs → interceptor-CBsqEWDK.mjs} +1 -1
  34. package/dist/{interceptor-CrcDfLPq.mjs.map → interceptor-CBsqEWDK.mjs.map} +1 -1
  35. package/dist/{job-BOvKyNdT.mjs → job-R5C2Hfcc.mjs} +2 -3
  36. package/dist/job-R5C2Hfcc.mjs.map +1 -0
  37. package/dist/kysely/index.mjs.map +1 -1
  38. package/dist/kysely-type-B8aRz_oC.mjs.map +1 -1
  39. package/dist/logger-DTNAMYGy.mjs.map +1 -1
  40. package/dist/mock-BP-9O5On.mjs +796 -0
  41. package/dist/mock-BP-9O5On.mjs.map +1 -0
  42. package/dist/multiline-e3IpANmS.mjs.map +1 -1
  43. package/dist/package-json-6Px8bDpG.mjs.map +1 -1
  44. package/dist/plugin/builtin/enum-constants/index.d.mts +1 -1
  45. package/dist/plugin/builtin/file-utils/index.d.mts +1 -1
  46. package/dist/plugin/builtin/kysely-type/index.d.mts +1 -1
  47. package/dist/plugin/builtin/seed/index.d.mts +1 -1
  48. package/dist/plugin/index.d.mts +2 -2
  49. package/dist/plugin/index.mjs.map +1 -1
  50. package/dist/{repl-editor-BlT2dFtm.mjs → repl-editor-CZpLlOBj.mjs} +1 -1
  51. package/dist/{repl-editor-BlT2dFtm.mjs.map → repl-editor-CZpLlOBj.mjs.map} +1 -1
  52. package/dist/{runtime-B67skpW-.mjs → runtime-XjP6JMmP.mjs} +91 -10
  53. package/dist/runtime-XjP6JMmP.mjs.map +1 -0
  54. package/dist/seed/index.mjs.map +1 -1
  55. package/dist/seed-DrKY5yIF.mjs.map +1 -1
  56. package/dist/{service-CCgw66c6.mjs → service-obEU5gSM.mjs} +1 -1
  57. package/dist/{service-CCgw66c6.mjs.map → service-obEU5gSM.mjs.map} +1 -1
  58. package/dist/{tailor-db-field-Hx9OqPWY.d.mts → tailor-db-field-Bn8ZC5lK.d.mts} +1 -1
  59. package/dist/{schema-DBq6hr6h.mjs → tailordb-DjlNUV6u.mjs} +44 -4
  60. package/dist/tailordb-DjlNUV6u.mjs.map +1 -0
  61. package/dist/telemetry-DcL8Fsm_.mjs.map +1 -1
  62. package/dist/types-DoIG6Nij.mjs +5 -0
  63. package/dist/{types-Duhhsx3R.mjs → types-sir9UPht.mjs} +2 -2
  64. package/dist/{types-Duhhsx3R.mjs.map → types-sir9UPht.mjs.map} +1 -1
  65. package/dist/utils/test/index.d.mts +13 -4
  66. package/dist/utils/test/index.mjs +13 -4
  67. package/dist/utils/test/index.mjs.map +1 -1
  68. package/dist/vitest/environment.d.mts +12 -0
  69. package/dist/vitest/environment.mjs +44 -0
  70. package/dist/vitest/environment.mjs.map +1 -0
  71. package/dist/vitest/index.d.mts +345 -0
  72. package/dist/vitest/index.mjs +350 -0
  73. package/dist/vitest/index.mjs.map +1 -0
  74. package/dist/vitest/setup.d.mts +64 -0
  75. package/dist/vitest/setup.mjs +141 -0
  76. package/dist/vitest/setup.mjs.map +1 -0
  77. package/dist/{workflow.generated-DFljpJh7.d.mts → workflow.generated-i7PK4fg-.d.mts} +2 -2
  78. package/docs/cli/setup.md +1 -0
  79. package/docs/services/tailordb.md +43 -12
  80. package/docs/services/workflow.md +1 -6
  81. package/docs/testing.md +530 -243
  82. package/package.json +37 -10
  83. package/dist/application-B4zVVNRS.mjs.map +0 -1
  84. package/dist/application-Boa_11Nv.mjs +0 -4
  85. package/dist/client-BwXkoiMq.mjs +0 -16536
  86. package/dist/client-BwXkoiMq.mjs.map +0 -1
  87. package/dist/job-BOvKyNdT.mjs.map +0 -1
  88. package/dist/runtime-B67skpW-.mjs.map +0 -1
  89. package/dist/schema-DBq6hr6h.mjs.map +0 -1
  90. package/dist/types-BnphjkIJ.mjs +0 -5
@@ -0,0 +1,4 @@
1
+
2
+ import { n as generatePluginFilesIfNeeded, r as loadApplication, t as defineApplication } from "./application-C7H7y0hS.mjs";
3
+
4
+ export { defineApplication };
@@ -34,4 +34,4 @@ function isSdkBranded(value, kind) {
34
34
 
35
35
  //#endregion
36
36
  export { isSdkBranded as n, brandValue as t };
37
- //# sourceMappingURL=brand-Ll48SMXe.mjs.map
37
+ //# sourceMappingURL=brand-D-d15jx3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"brand-Ll48SMXe.mjs","names":[],"sources":["../src/utils/brand.ts"],"sourcesContent":["// Symbol.for ensures the same symbol is returned across different ESM module instances,\n// avoiding identity mismatches when multiple copies of the SDK are loaded.\nexport const SDK_BRAND: unique symbol = Symbol.for(\"tailor-platform/sdk\");\n\nexport type SdkBrandKind =\n | \"tailordb-type\"\n | \"resolver\"\n | \"executor\"\n | \"workflow\"\n | \"workflow-job\"\n | \"wait-point\";\n\n/**\n * Adds a non-enumerable SDK brand symbol to the given object (in-place).\n * The brand stores the kind so service loaders can distinguish between\n * different SDK object types (e.g. a type loader skips executors).\n * @param value - The object to brand\n * @param kind - The kind of SDK object\n * @returns The same object with the brand applied\n */\nexport function brandValue<T extends object>(value: T, kind: SdkBrandKind): T {\n Object.defineProperty(value, SDK_BRAND, {\n value: kind,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return value;\n}\n\n/**\n * Checks whether the given value has been branded by the SDK.\n * When kind is specified, only returns true if the brand matches that kind.\n * Accepts a single kind or an array of kinds for multi-kind matching.\n * @param value - The value to check\n * @param kind - Optional kind or kinds to match against\n * @returns True if the value has the SDK brand symbol (and matches kind if specified)\n */\nexport function isSdkBranded(\n value: unknown,\n kind?: SdkBrandKind | readonly SdkBrandKind[],\n): boolean {\n if (value === null || typeof value !== \"object\" || !(SDK_BRAND in value)) return false;\n const stored = (value as Record<symbol, unknown>)[SDK_BRAND];\n // No kind filter → any brand matches. Legacy `true` brand → matches any kind.\n return (\n kind === undefined ||\n stored === true ||\n (Array.isArray(kind) ? kind.includes(stored as SdkBrandKind) : stored === kind)\n );\n}\n"],"mappings":";;AAEA,MAAa,YAA2B,OAAO,IAAI,sBAAsB;;;;;;;;;AAkBzE,SAAgB,WAA6B,OAAU,MAAuB;AAC5E,QAAO,eAAe,OAAO,WAAW;EACtC,OAAO;EACP,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;AACF,QAAO;;;;;;;;;;AAWT,SAAgB,aACd,OACA,MACS;AACT,KAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,EAAE,aAAa,OAAQ,QAAO;CACjF,MAAM,SAAU,MAAkC;AAElD,QACE,SAAS,UACT,WAAW,SACV,MAAM,QAAQ,KAAK,GAAG,KAAK,SAAS,OAAuB,GAAG,WAAW"}
1
+ {"version":3,"file":"brand-D-d15jx3.mjs","names":[],"sources":["../src/utils/brand.ts"],"sourcesContent":["// Symbol.for ensures the same symbol is returned across different ESM module instances,\n// avoiding identity mismatches when multiple copies of the SDK are loaded.\nexport const SDK_BRAND: unique symbol = Symbol.for(\"tailor-platform/sdk\");\n\nexport type SdkBrandKind =\n | \"tailordb-type\"\n | \"resolver\"\n | \"executor\"\n | \"workflow\"\n | \"workflow-job\"\n | \"wait-point\";\n\n/**\n * Adds a non-enumerable SDK brand symbol to the given object (in-place).\n * The brand stores the kind so service loaders can distinguish between\n * different SDK object types (e.g. a type loader skips executors).\n * @param value - The object to brand\n * @param kind - The kind of SDK object\n * @returns The same object with the brand applied\n */\nexport function brandValue<T extends object>(value: T, kind: SdkBrandKind): T {\n Object.defineProperty(value, SDK_BRAND, {\n value: kind,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return value;\n}\n\n/**\n * Checks whether the given value has been branded by the SDK.\n * When kind is specified, only returns true if the brand matches that kind.\n * Accepts a single kind or an array of kinds for multi-kind matching.\n * @param value - The value to check\n * @param kind - Optional kind or kinds to match against\n * @returns True if the value has the SDK brand symbol (and matches kind if specified)\n */\nexport function isSdkBranded(\n value: unknown,\n kind?: SdkBrandKind | readonly SdkBrandKind[],\n): boolean {\n if (value === null || typeof value !== \"object\" || !(SDK_BRAND in value)) return false;\n const stored = (value as Record<symbol, unknown>)[SDK_BRAND];\n // No kind filter → any brand matches. Legacy `true` brand → matches any kind.\n return (\n kind === undefined ||\n stored === true ||\n (Array.isArray(kind) ? kind.includes(stored as SdkBrandKind) : stored === kind)\n );\n}\n"],"mappings":";;AAEA,MAAa,YAA2B,OAAO,IAAI,sBAAsB;;;;;;;;;AAkBzE,SAAgB,WAA6B,OAAU,MAAuB;CAC5E,OAAO,eAAe,OAAO,WAAW;EACtC,OAAO;EACP,YAAY;EACZ,cAAc;EACd,UAAU;EACX,CAAC;CACF,OAAO;;;;;;;;;;AAWT,SAAgB,aACd,OACA,MACS;CACT,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,EAAE,aAAa,QAAQ,OAAO;CACjF,MAAM,SAAU,MAAkC;CAElD,OACE,SAAS,UACT,WAAW,SACV,MAAM,QAAQ,KAAK,GAAG,KAAK,SAAS,OAAuB,GAAG,WAAW"}
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { G as PATScope, R as AuthInvokerSchema, c as fetchUserInfo, d as initOperatorClient, h as userAgent, i as fetchAll, j as FunctionExecution_Type, n as closeConnectionPool, o as fetchPaged, s as fetchPlatformMachineUserToken, u as initOAuth2Client } from "../client-BwXkoiMq.mjs";
3
+ import { G as PATScope, R as AuthInvokerSchema, c as fetchUserInfo, d as initOperatorClient, h as userAgent, i as fetchAll, j as FunctionExecution_Type, n as closeConnectionPool, o as fetchPaged, s as fetchPlatformMachineUserToken, u as initOAuth2Client } from "../client-DbyKSN1F.mjs";
4
4
  import { n as logger, r as styles } from "../logger-DTNAMYGy.mjs";
5
- import { $ as deleteCommand$3, At as executionsCommand, C as listCommand$13, Cn as toPageDirection, Ct as jobsCommand, E as resumeCommand, Et as startCommand, F as showCommand, Ft as getCommand$1, G as getCommand$5, H as treeCommand, I as logBetaWarning, Lt as deploy, N as generateCommand$1, Nt as functionExecutionStatusToString, O as listCommand$12, Ot as getCommand$6, Pt as formatKeyValueTable, R as removeCommand$1, Rt as executeScript, Sn as paginationArgs, T as healthCommand, U as listCommand$11, Vt as parseMigrationLabelNumber, Y as listCommand$10, Z as getCommand$4, Zt as formatMigrationNumber, _n as commonArgs, _t as webhookCommand, at as getCommand$3, b as createCommand$4, bn as isVerbose, bt as listCommand$6, c as listCommand$14, ct as tokenCommand, dn as trnPrefix, dt as generate, en as getMigrationFilePath, f as restoreCommand, ft as listCommand$7, g as getCommand$7, gn as defineAppCommand, i as updateCommand$4, in as loadDiff, j as truncateCommand, ln as getNamespacesWithMigrations, lt as listCommand$8, m as listCommand$15, mn as apiCommand, mt as getCommand$2, o as removeCommand, pn as prompt, q as updateCommand$2, r as queryCommand, rn as isValidMigrationNumber, rt as listCommand$9, t as isNativeTypeScriptRuntime, tn as getMigrationFiles, tt as createCommand$3, u as inviteCommand, un as sdkNameLabelKey, v as deleteCommand$4, vn as confirmationArgs, vt as triggerCommand, wn as workspaceArgs, xn as pagedLogArgs, yn as deploymentArgs, z as updateCommand$3 } from "../runtime-B67skpW-.mjs";
6
- import { C as loadWorkspaceId, D as writePlatformConfig, E as saveUserTokens, S as loadAccessToken, T as resolveTokens, _ as getDistDir, a as WorkflowJobSchema, b as deleteUserTokens, c as ExecutorSchema, i as resolveInlineSourcemap, l as INVOKER_EXPR, o as ResolverSchema, w as readPlatformConfig, x as fetchLatestToken, y as loadConfig } from "../application-B4zVVNRS.mjs";
5
+ import { $ as deleteCommand$3, At as executionsCommand, C as listCommand$13, Cn as toPageDirection, Ct as jobsCommand, E as resumeCommand, Et as startCommand, F as showCommand, Ft as getCommand$1, G as getCommand$5, H as treeCommand, I as logBetaWarning, Lt as deploy, N as generateCommand$1, Nt as functionExecutionStatusToString, O as listCommand$12, Ot as getCommand$6, Pt as formatKeyValueTable, R as removeCommand$1, Rt as executeScript, Sn as paginationArgs, T as healthCommand, U as listCommand$11, Vt as parseMigrationLabelNumber, Y as listCommand$10, Z as getCommand$4, Zt as formatMigrationNumber, _n as commonArgs, _t as webhookCommand, at as getCommand$3, b as createCommand$4, bn as isVerbose, bt as listCommand$6, c as listCommand$14, ct as tokenCommand, dn as trnPrefix, dt as generate, en as getMigrationFilePath, f as restoreCommand, ft as listCommand$7, g as getCommand$7, gn as defineAppCommand, i as updateCommand$4, in as loadDiff, j as truncateCommand, ln as getNamespacesWithMigrations, lt as listCommand$8, m as listCommand$15, mn as apiCommand, mt as getCommand$2, o as removeCommand, pn as prompt, q as updateCommand$2, r as queryCommand, rn as isValidMigrationNumber, rt as listCommand$9, t as isNativeTypeScriptRuntime, tn as getMigrationFiles, tt as createCommand$3, u as inviteCommand, un as sdkNameLabelKey, v as deleteCommand$4, vn as confirmationArgs, vt as triggerCommand, wn as workspaceArgs, xn as pagedLogArgs, yn as deploymentArgs, z as updateCommand$3 } from "../runtime-XjP6JMmP.mjs";
6
+ import { C as loadWorkspaceId, D as writePlatformConfig, E as saveUserTokens, S as loadAccessToken, T as resolveTokens, _ as getDistDir, a as WorkflowJobSchema, b as deleteUserTokens, c as ExecutorSchema, i as resolveInlineSourcemap, l as INVOKER_EXPR, o as ResolverSchema, w as readPlatformConfig, x as fetchLatestToken, y as loadConfig } from "../application-C7H7y0hS.mjs";
7
7
  import { t as multiline } from "../multiline-e3IpANmS.mjs";
8
8
  import { t as readPackageJson } from "../package-json-6Px8bDpG.mjs";
9
9
  import { n as isCLIError } from "../errors-wNQxQQBH.mjs";
10
- import { a as JSON_FOOTER_MARKER, i as CRASH_LOG_EXTENSION, o as parseCrashReportConfig, r as sendCrashReport, t as initCrashReporting } from "../crashreport-DGeGj9BF.mjs";
10
+ import { a as JSON_FOOTER_MARKER, i as CRASH_LOG_EXTENSION, o as parseCrashReportConfig, r as sendCrashReport, t as initCrashReporting } from "../crashreport-CNSw_BrJ.mjs";
11
11
  import { createRequire } from "node:module";
12
12
  import { arg, defineCommand, runCommand, runMain } from "politty";
13
13
  import { withCompletionCommand } from "politty/completion";
@@ -19,10 +19,10 @@ import { dirname, resolve } from "pathe";
19
19
  import { pathToFileURL } from "node:url";
20
20
  import { generateCodeVerifier } from "@badgateway/oauth2-client";
21
21
  import { Code, ConnectError } from "@connectrpc/connect";
22
- import * as http from "node:http";
23
- import * as crypto from "node:crypto";
24
22
  import { resolvePackageJSON, resolveTSConfig } from "pkg-types";
25
23
  import { create } from "@bufbuild/protobuf";
24
+ import * as crypto from "node:crypto";
25
+ import * as http from "node:http";
26
26
  import open from "open";
27
27
  import * as rolldown from "rolldown";
28
28
  import { TraceMap, generatedPositionFor, originalPositionFor } from "@jridgewell/trace-mapping";
@@ -1192,7 +1192,7 @@ async function detectFunctionType(options) {
1192
1192
  const rawInput = module.default.input;
1193
1193
  let inputSchema;
1194
1194
  if (rawInput) {
1195
- const { t } = await import("../types-BnphjkIJ.mjs");
1195
+ const { t } = await import("../types-DoIG6Nij.mjs");
1196
1196
  inputSchema = t.object(rawInput);
1197
1197
  }
1198
1198
  return {
@@ -2458,7 +2458,7 @@ const secretCommand = defineCommand({
2458
2458
 
2459
2459
  //#endregion
2460
2460
  //#region src/cli/commands/setup/github/deploy.workflow.yml
2461
- var deploy_workflow_default = "name: Deploy\n\non:\n push:\n branches:\n - main\n workflow_dispatch:\n\nconcurrency:\n group: deploy-__WORKSPACE_NAME__\n cancel-in-progress: false\n\njobs:\n deploy:\n runs-on: ubuntu-latest\n permissions:\n contents: read\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n # __SETUP_STEPS__\n - uses: tailor-platform/actions/deploy@980aeba08963f4322b2b48ca7a920f4e14876842 # v1.0.0\n with:\n workspace-name: __WORKSPACE_NAME__\n workspace-region: __WORKSPACE_REGION__\n organization-id: __ORGANIZATION_ID__\n folder-id: __FOLDER_ID__\n # __WORKING_DIRECTORY__\n platform-client-id: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_ID }}\n platform-client-secret: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_SECRET }}\n";
2461
+ var deploy_workflow_default = "name: Tailor Platform\n\non:\n pull_request:\n branches:\n - main\n push:\n branches:\n - main\n workflow_dispatch:\n\nconcurrency:\n group: tailor-__WORKSPACE_NAME__-${{ github.head_ref || github.ref }}\n cancel-in-progress: ${{ github.event_name == 'pull_request' }}\n\njobs:\n # __PLAN_JOB_START__\n plan:\n if: github.event_name == 'pull_request'\n runs-on: ubuntu-latest\n permissions:\n contents: read\n pull-requests: write\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n with:\n fetch-depth: 0\n # __SETUP_STEPS__\n - uses: tailor-platform/actions/plan@e63ed98630a23fa21ee0636abf0f7fb75fcdce40 # v1.1.0\n with:\n workspace-id: ${{ vars.TAILOR_PLATFORM_WORKSPACE_ID }}\n # __WORKING_DIRECTORY__\n platform-client-id: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_ID }}\n platform-client-secret: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_SECRET }}\n github-token: ${{ secrets.GITHUB_TOKEN }}\n # __PLAN_JOB_END__\n deploy:\n if: github.event_name != 'pull_request'\n runs-on: ubuntu-latest\n permissions:\n contents: read\n steps:\n - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2\n # __SETUP_STEPS__\n - uses: tailor-platform/actions/deploy@e63ed98630a23fa21ee0636abf0f7fb75fcdce40 # v1.1.0\n with:\n workspace-name: __WORKSPACE_NAME__\n workspace-region: __WORKSPACE_REGION__\n organization-id: __ORGANIZATION_ID__\n folder-id: __FOLDER_ID__\n # __WORKING_DIRECTORY__\n platform-client-id: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_ID }}\n platform-client-secret: ${{ secrets.PLATFORM_MACHINE_USER_CLIENT_SECRET }}\n";
2462
2462
 
2463
2463
  //#endregion
2464
2464
  //#region src/cli/commands/setup/github/setup-bun.yml
@@ -2501,19 +2501,24 @@ function detectPackageManager(dir) {
2501
2501
  return "npm";
2502
2502
  }
2503
2503
  /**
2504
- * Render the deploy caller workflow YAML.
2504
+ * Render the deploy workflow YAML.
2505
2505
  *
2506
- * Generates a thin workflow that calls the composite deploy action
2506
+ * Generates a workflow that calls the composite deploy action
2507
2507
  * from tailor-platform/actions. The environment setup steps (Node.js,
2508
2508
  * package manager, dependency install) are generated based on the
2509
2509
  * detected package manager.
2510
+ *
2511
+ * If withPlan is true, also includes a plan job that runs on pull requests.
2512
+ * Otherwise, the plan job section delimited by __PLAN_JOB_START__ /
2513
+ * __PLAN_JOB_END__ markers is stripped from the template.
2510
2514
  * @param params - Workspace and deployment configuration
2511
2515
  * @returns Workflow YAML content
2512
2516
  */
2513
2517
  function renderDeploy(params) {
2514
- const { workspaceName, workspaceRegion, organizationId, folderId, workingDirectory, packageManager } = params;
2518
+ const { workspaceName, workspaceRegion, organizationId, folderId, workingDirectory, packageManager, withPlan } = params;
2515
2519
  const workingDirectoryLine = workingDirectory ? ` working-directory: ${workingDirectory}\n` : "";
2516
- return deploy_workflow_default.replaceAll("__WORKSPACE_NAME__", () => workspaceName).replaceAll("__WORKSPACE_REGION__", () => workspaceRegion).replaceAll("__ORGANIZATION_ID__", () => organizationId).replaceAll("__FOLDER_ID__", () => folderId).replace(/ *# __WORKING_DIRECTORY__\n/, () => workingDirectoryLine).replace(/^ *# __SETUP_STEPS__$/m, () => indentSnippet(setupSteps[packageManager], 6));
2520
+ const stripPlanSection = (content) => withPlan ? content.replace(/^ *# __PLAN_JOB_(?:START|END)__\n/gm, "") : content.replace(/^ *# __PLAN_JOB_START__\n[\s\S]*?^ *# __PLAN_JOB_END__\n/m, "");
2521
+ return stripPlanSection(deploy_workflow_default).replaceAll("__WORKSPACE_NAME__", () => workspaceName).replaceAll("__WORKSPACE_REGION__", () => workspaceRegion).replaceAll("__ORGANIZATION_ID__", () => organizationId).replaceAll("__FOLDER_ID__", () => folderId).replace(/ *# __WORKING_DIRECTORY__\n/g, () => workingDirectoryLine).replace(/^ *# __SETUP_STEPS__$/gm, () => indentSnippet(setupSteps[packageManager], 6));
2517
2522
  }
2518
2523
 
2519
2524
  //#endregion
@@ -2525,15 +2530,18 @@ function renderDeploy(params) {
2525
2530
  */
2526
2531
  function buildFiles(options) {
2527
2532
  const githubDir = path.join(options.outputDir, ".github");
2533
+ const packageManager = detectPackageManager(options.outputDir);
2534
+ const workingDirectory = options.dir !== "." ? options.dir : void 0;
2528
2535
  return [{
2529
- path: path.join(githubDir, `workflows/deploy-${options.workspaceName}.yml`),
2536
+ path: path.join(githubDir, `workflows/tailor-${options.workspaceName}.yml`),
2530
2537
  content: renderDeploy({
2531
2538
  workspaceName: options.workspaceName,
2532
2539
  workspaceRegion: options.workspaceRegion,
2533
2540
  organizationId: options.organizationId,
2534
2541
  folderId: options.folderId,
2535
- workingDirectory: options.dir !== "." ? options.dir : void 0,
2536
- packageManager: detectPackageManager(options.outputDir)
2542
+ workingDirectory,
2543
+ packageManager,
2544
+ withPlan: options.withPlan
2537
2545
  })
2538
2546
  }];
2539
2547
  }
@@ -2578,6 +2586,11 @@ function setupGitHub(options) {
2578
2586
  logger.info("Next steps - set GitHub secrets:");
2579
2587
  logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_ID`);
2580
2588
  logger.log(` gh secret set PLATFORM_MACHINE_USER_CLIENT_SECRET`);
2589
+ if (options.withPlan) {
2590
+ logger.newline();
2591
+ logger.info("For plan job - set GitHub variable with your workspace ID:");
2592
+ logger.log(` gh variable set TAILOR_PLATFORM_WORKSPACE_ID`);
2593
+ }
2581
2594
  }
2582
2595
 
2583
2596
  //#endregion
@@ -2605,6 +2618,10 @@ const githubCommand = defineAppCommand({
2605
2618
  dir: arg(z.string().default("."), {
2606
2619
  alias: "d",
2607
2620
  description: "App directory (for monorepo setups)"
2621
+ }),
2622
+ "with-plan": arg(z.boolean().default(false), {
2623
+ alias: "p",
2624
+ description: "Include plan job for PR previews"
2608
2625
  })
2609
2626
  }).strict(),
2610
2627
  run: (args) => {
@@ -2614,7 +2631,8 @@ const githubCommand = defineAppCommand({
2614
2631
  organizationId: args["organization-id"],
2615
2632
  folderId: args["folder-id"],
2616
2633
  dir: args.dir,
2617
- outputDir: process.cwd()
2634
+ outputDir: process.cwd(),
2635
+ withPlan: args["with-plan"]
2618
2636
  });
2619
2637
  }
2620
2638
  });
@@ -3755,7 +3773,7 @@ const upgradeCommand = defineAppCommand({
3755
3773
  run: async (args) => {
3756
3774
  const { initTelemetry } = await import("../telemetry-21afNV9_.mjs");
3757
3775
  await initTelemetry();
3758
- const { upgrade } = await import("../service-CCgw66c6.mjs");
3776
+ const { upgrade } = await import("../service-obEU5gSM.mjs");
3759
3777
  await upgrade({
3760
3778
  from: args.from,
3761
3779
  dryRun: args["dry-run"],
@@ -4171,7 +4189,7 @@ runMain(mainCommand, {
4171
4189
  if (isVerbose() && error.stack) logger.debug(`\nStack trace:\n${error.stack}`);
4172
4190
  } else logger.error(`Unknown error: ${error}`);
4173
4191
  if (!isCLIError(error) && (!(error instanceof Error) || error instanceof TypeError || error instanceof RangeError)) {
4174
- const { reportCrash } = await import("../crashreport-6mcMyWu4.mjs");
4192
+ const { reportCrash } = await import("../crashreport-DXGFd16F.mjs");
4175
4193
  await reportCrash(error, "handledError");
4176
4194
  }
4177
4195
  }