@tailor-platform/sdk 2.27.0 → 2.28.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 (177) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/agent-skills/tailor/SKILL.md +4 -2
  3. package/dist/{application-DFeuELRo.mjs → application-CgJLyJaF.mjs} +20 -20
  4. package/dist/application-CgJLyJaF.mjs.map +1 -0
  5. package/dist/application-CvmKh5WT.mjs +1 -0
  6. package/dist/cli/commands/executor/get.d.mts +2 -1
  7. package/dist/cli/commands/executor/jobs.d.mts +2 -1
  8. package/dist/cli/commands/executor/trigger.d.mts +2 -1
  9. package/dist/cli/commands/function/get.d.mts +2 -1
  10. package/dist/cli/commands/function/list.d.mts +2 -1
  11. package/dist/cli/commands/organization/folder/create.d.mts +2 -1
  12. package/dist/cli/commands/organization/folder/delete.d.mts +2 -1
  13. package/dist/cli/commands/organization/folder/get.d.mts +2 -1
  14. package/dist/cli/commands/organization/folder/list.d.mts +2 -1
  15. package/dist/cli/commands/organization/folder/update.d.mts +2 -1
  16. package/dist/cli/commands/organization/get.d.mts +2 -1
  17. package/dist/cli/commands/organization/tree.d.mts +2 -1
  18. package/dist/cli/commands/organization/update.d.mts +2 -1
  19. package/dist/cli/commands/show.d.mts +2 -1
  20. package/dist/cli/commands/tailordb/migrate/diff-calculator.d.mts +2 -1
  21. package/dist/cli/commands/tailordb/migrate/snapshot-types.d.mts +3 -1
  22. package/dist/cli/commands/workflow/executions.d.mts +2 -1
  23. package/dist/cli/commands/workflow/get.d.mts +2 -1
  24. package/dist/cli/commands/workflow/start.d.mts +2 -1
  25. package/dist/cli/commands/workspace/app/health.d.mts +2 -1
  26. package/dist/cli/commands/workspace/app/list.d.mts +2 -1
  27. package/dist/cli/commands/workspace/create.d.mts +5 -2
  28. package/dist/cli/commands/workspace/delete.d.mts +2 -1
  29. package/dist/cli/commands/workspace/get.d.mts +2 -1
  30. package/dist/cli/commands/workspace/restore.d.mts +2 -1
  31. package/dist/cli/commands/workspace/user/invite.d.mts +2 -1
  32. package/dist/cli/commands/workspace/user/list.d.mts +2 -1
  33. package/dist/cli/commands/workspace/user/remove.d.mts +2 -1
  34. package/dist/cli/commands/workspace/user/update.d.mts +2 -1
  35. package/dist/cli/lib.d.mts +1 -1
  36. package/dist/cli/lib.mjs +1 -1
  37. package/dist/cli/lib.mjs.map +1 -1
  38. package/dist/cli/main.d.mts +2 -0
  39. package/dist/cli/main.mjs +44 -31
  40. package/dist/cli/main.mjs.map +1 -1
  41. package/dist/cli/query/index.d.mts +2 -1
  42. package/dist/cli/shared/args.d.mts +4 -2
  43. package/dist/cli/shared/client.d.mts +6 -1
  44. package/dist/cli/shared/context.d.mts +2 -1
  45. package/dist/cli/shared/logger.d.mts +5 -2
  46. package/dist/cli/shared/readonly-guard.d.mts +2 -1
  47. package/dist/cli/shared/seed-context.d.mts +5 -0
  48. package/dist/cli/shared/type-generator.d.mts +2 -1
  49. package/dist/completion/zsh-worker.zsh +217 -18
  50. package/dist/configure/config/types.d.mts +23 -1
  51. package/dist/configure/services/aigateway/types.d.mts +2 -1
  52. package/dist/configure/services/auth/types.d.mts +2 -1
  53. package/dist/configure/services/executor/executor.d.mts +2 -1
  54. package/dist/configure/services/executor/operation.d.mts +2 -1
  55. package/dist/configure/services/executor/trigger/event.d.mts +2 -1
  56. package/dist/configure/services/executor/trigger/schedule.d.mts +2 -1
  57. package/dist/configure/services/http-adapter/http-adapter.d.mts +2 -1
  58. package/dist/configure/services/idp/permission.d.mts +2 -1
  59. package/dist/configure/services/idp/types.d.mts +2 -1
  60. package/dist/configure/services/resolver/permission.d.mts +2 -1
  61. package/dist/configure/services/resolver/resolver.d.mts +2 -1
  62. package/dist/configure/services/secrets/types.d.mts +2 -1
  63. package/dist/configure/services/staticwebsite/types.d.mts +2 -1
  64. package/dist/configure/services/tailordb/permission.d.mts +2 -1
  65. package/dist/configure/services/tailordb/schema.d.mts +4 -3
  66. package/dist/configure/services/tailordb/types.d.mts +12 -1
  67. package/dist/configure/services/workflow/execution-policy.types.d.mts +2 -1
  68. package/dist/configure/services/workflow/job.d.mts +2 -1
  69. package/dist/configure/services/workflow/wait-point.d.mts +2 -1
  70. package/dist/configure/types/field.types.d.mts +2 -1
  71. package/dist/configure/types/permission-operand.types.d.mts +2 -1
  72. package/dist/configure/types/type.d.mts +2 -1
  73. package/dist/{crashreport-DFpRn-LS.mjs → crashreport-BAG8c7hB.mjs} +4 -4
  74. package/dist/{crashreport-DFpRn-LS.mjs.map → crashreport-BAG8c7hB.mjs.map} +1 -1
  75. package/dist/crashreport-BcXuocwI.mjs +1 -0
  76. package/dist/{errors-CpvSChyL.mjs → errors-D3qpNHR6.mjs} +2 -2
  77. package/dist/{errors-CpvSChyL.mjs.map → errors-D3qpNHR6.mjs.map} +1 -1
  78. package/dist/kysely-type-BWMfV301.mjs +48 -0
  79. package/dist/kysely-type-BWMfV301.mjs.map +1 -0
  80. package/dist/logger-DuaT2zY3.mjs +9 -0
  81. package/dist/logger-DuaT2zY3.mjs.map +1 -0
  82. package/dist/package-json-D1BRkjtr.mjs +1 -0
  83. package/dist/parser/service/tailordb/types.d.mts +3 -1
  84. package/dist/plugin/builtin/enum-constants/index.d.mts +2 -1
  85. package/dist/plugin/builtin/file-utils/index.d.mts +2 -1
  86. package/dist/plugin/builtin/kysely-type/index.d.mts +2 -1
  87. package/dist/plugin/builtin/kysely-type/index.mjs +1 -1
  88. package/dist/plugin/builtin/seed/index.d.mts +11 -1
  89. package/dist/plugin/builtin/seed/index.mjs +1 -1
  90. package/dist/register-ts-hook-yxshv0LV.mjs +1013 -0
  91. package/dist/register-ts-hook-yxshv0LV.mjs.map +1 -0
  92. package/dist/runtime/aigateway.mjs +1 -1
  93. package/dist/runtime/authconnection.mjs +1 -1
  94. package/dist/runtime/context.d.mts +2 -1
  95. package/dist/runtime/context.mjs +1 -1
  96. package/dist/runtime/date.d.mts +2 -1
  97. package/dist/runtime/field-parse.d.mts +2 -1
  98. package/dist/runtime/file.d.mts +2 -1
  99. package/dist/runtime/file.mjs +1 -1
  100. package/dist/runtime/globals.d.mts +2 -1
  101. package/dist/runtime/iconv.mjs +1 -1
  102. package/dist/runtime/idp.mjs +1 -1
  103. package/dist/runtime/logger.mjs +1 -1
  104. package/dist/runtime/secretmanager.mjs +1 -1
  105. package/dist/runtime/types.d.mts +2 -1
  106. package/dist/runtime/workflow.d.mts +2 -1
  107. package/dist/runtime/workflow.mjs +1 -1
  108. package/dist/schema-B6hJQWp6.mjs.map +1 -1
  109. package/dist/seed/index.d.mts +16 -3
  110. package/dist/seed/index.mjs +6 -6
  111. package/dist/seed/index.mjs.map +1 -1
  112. package/dist/seed-C3P_T_Eh.mjs.map +1 -1
  113. package/dist/{service-Cc7OY0Oh.mjs → service-CETr0AKY.mjs} +3 -3
  114. package/dist/service-CETr0AKY.mjs.map +1 -0
  115. package/dist/service-DREWLYxD.mjs +1 -0
  116. package/dist/{service-DFmt9UJP.mjs → service-b1g22NN9.mjs} +2 -2
  117. package/dist/{service-DFmt9UJP.mjs.map → service-b1g22NN9.mjs.map} +1 -1
  118. package/dist/service_pb-Bbu2QSIr.mjs +2 -0
  119. package/dist/service_pb-Bbu2QSIr.mjs.map +1 -0
  120. package/dist/service_pb-urxAIYHT.mjs +1 -0
  121. package/dist/tailor-proto/src/tailor/v1/events_pb.d.mts +53 -1
  122. package/dist/tailor-proto/src/tailor/v1/events_resource_pb.d.mts +33 -0
  123. package/dist/tailor-proto/src/tailor/v1/function_resource_pb.d.mts +0 -8
  124. package/dist/tailor-proto/src/tailor/v1/service_pb.d.mts +18 -1
  125. package/dist/tailor-proto/src/tailor/v1/tailordb_resource_pb.d.mts +4 -0
  126. package/dist/telemetry-DpkFGBmu.mjs +1 -0
  127. package/dist/{telemetry-Bklv9kQY.mjs → telemetry-Xk7J829P.mjs} +2 -2
  128. package/dist/{telemetry-Bklv9kQY.mjs.map → telemetry-Xk7J829P.mjs.map} +1 -1
  129. package/dist/types/tailordb.generated.d.mts +2 -0
  130. package/dist/vitest/index.mjs +1 -1
  131. package/dist/vitest/index.mjs.map +1 -1
  132. package/dist/vitest/mock-kysely.d.mts +2 -1
  133. package/dist/vitest/mocks/aigateway.d.mts +2 -1
  134. package/dist/vitest/mocks/authconnection.d.mts +2 -1
  135. package/dist/vitest/mocks/file.d.mts +3 -2
  136. package/dist/vitest/mocks/iconv.d.mts +2 -1
  137. package/dist/vitest/mocks/idp.d.mts +2 -1
  138. package/dist/vitest/mocks/logger.d.mts +2 -1
  139. package/dist/vitest/mocks/secretmanager.d.mts +2 -1
  140. package/dist/vitest/mocks/tailordb-pglite.d.mts +2 -1
  141. package/dist/vitest/mocks/tailordb.d.mts +2 -1
  142. package/dist/vitest/mocks/workflow.d.mts +3 -1
  143. package/dist/vitest/pglite-kysely.d.mts +2 -1
  144. package/dist/vitest/workflow-local.d.mts +2 -1
  145. package/dist/{workspace_resource_pb-ChWejcj0.mjs → workspace_resource_pb-CaoM2npP.mjs} +2 -2
  146. package/dist/{workspace_resource_pb-ChWejcj0.mjs.map → workspace_resource_pb-CaoM2npP.mjs.map} +1 -1
  147. package/docs/cli/application.md +13 -0
  148. package/docs/cli/data.md +105 -0
  149. package/docs/cli/secret.md +6 -6
  150. package/docs/cli/tailordb.md +18 -16
  151. package/docs/cli/user.md +37 -7
  152. package/docs/cli/workspace.md +9 -1
  153. package/docs/cli-reference.md +25 -3
  154. package/docs/configuration.md +9 -0
  155. package/docs/github-actions.md +89 -6
  156. package/docs/multi-environment.md +24 -0
  157. package/docs/services/idp.md +1 -1
  158. package/docs/services/tailordb-migration.md +68 -9
  159. package/docs/services/tailordb.md +17 -4
  160. package/docs/testing.md +1 -0
  161. package/package.json +8 -8
  162. package/dist/application-DFeuELRo.mjs.map +0 -1
  163. package/dist/application-nT_4a5HO.mjs +0 -1
  164. package/dist/crashreport-CBaRJl5h.mjs +0 -1
  165. package/dist/kysely-type-RDX59E1j.mjs +0 -48
  166. package/dist/kysely-type-RDX59E1j.mjs.map +0 -1
  167. package/dist/logger-Db-YRTwK.mjs +0 -9
  168. package/dist/logger-Db-YRTwK.mjs.map +0 -1
  169. package/dist/package-json-CmqhDJ__.mjs +0 -1
  170. package/dist/register-ts-hook-D6KXrGrB.mjs +0 -1009
  171. package/dist/register-ts-hook-D6KXrGrB.mjs.map +0 -1
  172. package/dist/service-Cc7OY0Oh.mjs.map +0 -1
  173. package/dist/service-sH2MZ4_W.mjs +0 -1
  174. package/dist/service_pb-Dw2ilc1O.mjs +0 -2
  175. package/dist/service_pb-Dw2ilc1O.mjs.map +0 -1
  176. package/dist/service_pb-GDOqfwb6.mjs +0 -1
  177. package/dist/telemetry-DXHP3VVi.mjs +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,53 @@
1
1
  # @tailor-platform/sdk
2
2
 
3
+ ## 2.28.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2589](https://github.com/tailor-platform/sdk/pull/2589) [`4bf9fd5`](https://github.com/tailor-platform/sdk/commit/4bf9fd5cae3b240f39647002adfdb55b93afb15b) Thanks [@dqn](https://github.com/dqn)! - Default to JSON output when an AI coding agent such as Claude Code, Codex, Cursor, or Gemini CLI runs `tailor`, so the agent reads parseable output even without the bundled agent skill, and start `--help` with guidance for the agent. Pass `--json=false` or set `TAILOR_JSON_OUTPUT=false` to keep table output under an agent, or set `POLITTY_NO_AGENT=1` to turn agent detection off. CLI plugins keep their current output.
8
+
9
+ - [#2595](https://github.com/tailor-platform/sdk/pull/2595) [`928a0cf`](https://github.com/tailor-platform/sdk/commit/928a0cf2d12deeb680f1319ae5cfc90d3c52873d) Thanks [@toiroakr](https://github.com/toiroakr)! - Add `tailor data clone` to copy the data of an application from one workspace to another, and `tailor data operation get` to check on a started clone or wait for it with `--wait`. It copies the TailorDB namespaces registered in the application's subgraph; `--copy-files` and `--copy-idp-users` also copy TailorDB file content and IdP users. `--name` defaults to the application name in the config file. `data clone` waits for the clone to finish; pass `--no-wait` to start it and exit.
10
+
11
+ - [#2595](https://github.com/tailor-platform/sdk/pull/2595) [`a99be0b`](https://github.com/tailor-platform/sdk/commit/a99be0b905bf95a5057e52e19d146b53a78475cc) Thanks [@toiroakr](https://github.com/toiroakr)! - Add `--clone-timeout` to `tailor tailordb migration test` to set how long `--data clone` waits for the data clone to finish, for example `30s` or `10m`. The default is now 30 minutes, up from 5, and the option is rejected with `--data seed`. If your CI job time limit is shorter than 30 minutes, pass a shorter `--clone-timeout` so the command can time out and delete its temporary workspace before the job is stopped.
12
+
13
+ - [#2595](https://github.com/tailor-platform/sdk/pull/2595) [`a99be0b`](https://github.com/tailor-platform/sdk/commit/a99be0b905bf95a5057e52e19d146b53a78475cc) Thanks [@toiroakr](https://github.com/toiroakr)! - Add `--keep-ttl` to `tailor tailordb migration test` to record an expiry, for example `24h` or `7d`, on the temporary workspace that `--keep` retains, so `tailor workspace prune --expired` can delete it later. It requires `--keep`.
14
+
15
+ - [#2586](https://github.com/tailor-platform/sdk/pull/2586) [`65b793b`](https://github.com/tailor-platform/sdk/commit/65b793b86896b939946851a49cbf65f6465fbee7) Thanks [@dqn](https://github.com/dqn)! - Keep scenario and per-environment seed data side by side as datasets: directories under `<distPath>/data/` holding JSONL rows for some of the tables. `tailor seed apply`, `validate`, and `fill` take `--dataset <name>` (repeatable) to use datasets on top of the base seed data, and `tailor seed dump --dataset <name>` writes into one. `--all-datasets` selects every dataset directory in name order for `apply`, `validate`, and `fill`, including gitignored local datasets and directories added later; it cannot be combined with `--dataset`, and fails if no dataset directories exist. `apply --truncate --all-datasets` keeps the existing truncate scope and confirmation. `validate` checks foreign keys across the base data and the selected datasets and reports an id defined in more than one of them at its own file and line; `apply` rejects such an id before it changes anything. `--no-base` applies or validates the selected datasets alone, so a dump written with `--dataset` restores on its own. Name the combinations you use in the new `datasets` option of `seedPlugin` (for example `datasets: { preview: ["cogs", "shipments"] }`) to select them with one `--dataset`. Projects without datasets work as before, except that `tailor seed apply` now reads all seed rows before truncating or seeding anything, so a malformed file stops the run with the workspace untouched. Naming a dataset directory, or a file in one, as the path of `tailor seed validate` or `fill` points you at `--dataset`.
16
+
17
+ - [#2600](https://github.com/tailor-platform/sdk/pull/2600) [`ea634ba`](https://github.com/tailor-platform/sdk/commit/ea634ba08df767730a1e8f415c87e60dfc4c0300) Thanks [@ikawaha](https://github.com/ikawaha)! - Add the `gapless` option to `.serial()` (preview), which numbers records without gaps: a number is used only by a create that commits.
18
+
19
+ - [#2583](https://github.com/tailor-platform/sdk/pull/2583) [`23b3b36`](https://github.com/tailor-platform/sdk/commit/23b3b363cc09bbf6c48e7d84d8b32068898062dd) Thanks [@dqn](https://github.com/dqn)! - Add `maintenanceMode` to `defineConfig()` to choose whether `tailor deploy` restricts the TailorDB namespaces it migrates while pending migrations run. `"migration"` restricts them (no generated GraphQL create, update, delete, or bulk upsert, and no record events) until the migrations complete, as every deploy did before; `"deploy"` keeps them restricted until the deploy has also applied resolvers, executors, and workflows, so executors from the previous deploy do not receive events from the migrated tables while the deploy replaces them; `false` does not restrict them.
20
+
21
+ Tables that a deploy left restricted after its migrations completed, for example because the deploy was interrupted, no longer make the next deploy stop with remote schema drift; that deploy releases them when it applies its TailorDB changes.
22
+
23
+ Restoring table settings after a failed migration no longer fails for a table whose checkpoint sets `publishEvents: false` while an executor in the same deploy subscribes to it, which left that table restricted.
24
+
25
+ - [#2577](https://github.com/tailor-platform/sdk/pull/2577) [`eab2d88`](https://github.com/tailor-platform/sdk/commit/eab2d8867b4e74c79a31a7f47eaeb958c6381370) Thanks [@dqn](https://github.com/dqn)! - Show how long `tailor deploy` keeps tables in maintenance mode while it applies TailorDB migrations. Deploy now tells waiting for a migration job to start apart from the script running: it reports when the script starts running, how long it waited and ran, and a summary of the whole maintenance window by phase. `tailor deploy --json` returns the same breakdown under `tailordbMaintenance`. Each migration job now logs `[tailor-sdk] migration script started` before the script runs.
26
+
27
+ - [#2579](https://github.com/tailor-platform/sdk/pull/2579) [`a139e89`](https://github.com/tailor-platform/sdk/commit/a139e899b087858677aa9e4cc03bf54e49dba95b) Thanks [@dqn](https://github.com/dqn)! - Add `tailor user update --default-organization-id <id> [--default-folder-id <id>]` to store where `tailor workspace create`, workspace creation during `deploy`, and the programmatic `createWorkspace()` put new workspaces when neither organization nor folder is given. The defaults are kept per user and platform, and any explicit organization or folder, including through `TAILOR_PLATFORM_ORGANIZATION_ID` / `TAILOR_PLATFORM_FOLDER_ID` for CLI commands, replaces both. `deploy --create-workspace` also uses the resolved default location when checking whether an existing workspace matches. `workspace create`, `deploy --create-workspace`, and the programmatic `createWorkspace()` now reject a folder ID without an organization ID with a clear error instead of failing with an internal error.
28
+
29
+ `workspace create` and `deploy` now use organization and folder IDs from `--env-file`, even when no user defaults are stored. Previously these values were ignored; a folder-only env file now fails unless an organization is also given. Command-line options take precedence, and empty env-file values are treated as not given.
30
+
31
+ ### Patch Changes
32
+
33
+ - [#2609](https://github.com/tailor-platform/sdk/pull/2609) [`1c36c61`](https://github.com/tailor-platform/sdk/commit/1c36c618e9c4ad2ee4373a5962c8ea278e9aac07) Thanks [@toiroakr](https://github.com/toiroakr)! - `tailor deploy` now warns when an IdP `permission` rule allows every authenticated user (a condition on `_loggedIn`, such as `[{ user: "_loggedIn" }, "=", true]`, as its only condition). Such a rule lets any signed-in user run that operation against any IdP user, for example reading and changing login information such as email addresses or sending password reset emails to anyone. The deploy still succeeds; restrict the rule to an administrator role unless every user who can sign in is trusted.
34
+
35
+ - [#2588](https://github.com/tailor-platform/sdk/pull/2588) [`3de270f`](https://github.com/tailor-platform/sdk/commit/3de270f6bb1d75b74ed4d277593f0e70ecc2b59b) Thanks [@dqn](https://github.com/dqn)! - Update `@politty/zod` to 0.4.3. A positional argument is no longer accepted under its own name as an option, so pass the value positionally: `tailor profile create dev`, not `tailor profile create --name dev`. Most commands report such an option as unknown; a few, such as `tailor completion` and `npm create @tailor-platform/sdk`, only warn and ignore it. `tailor secret vault create --name`, `tailor secret vault delete --name`, and `tailor tailordb truncate --tables`, which the documentation and earlier release notes use, still accept both forms. Mixing the two forms, as in `tailor tailordb truncate --tables User Order`, is rejected; repeat the option for each table, as in `--tables User --tables Order`.
36
+
37
+ - [#2578](https://github.com/tailor-platform/sdk/pull/2578) [`b57a21f`](https://github.com/tailor-platform/sdk/commit/b57a21f9b6e16d6e3a87e19f7504429a41988a9c) Thanks [@dqn](https://github.com/dqn)! - Keep settings that a newer SDK version wrote to the CLI config file (`~/.config/tailor-platform/config.yaml`) when this version rewrites the file, for example after logging in or refreshing a token, instead of silently dropping them.
38
+
39
+ - [#2580](https://github.com/tailor-platform/sdk/pull/2580) [`9c54e51`](https://github.com/tailor-platform/sdk/commit/9c54e516264276dd453d6ad3b546452c830b4006) Thanks [@dqn](https://github.com/dqn)! - Clarify in `tailor workspace prune --help` and error suggestions that location options must be given on the command line and that the defaults from `tailor user update` are not used. Warn before an unscoped sweep that every visible workspace is a candidate for the name and age filters, including with `--yes` or `--dry-run`.
40
+
41
+ - [#2612](https://github.com/tailor-platform/sdk/pull/2612) [`34a67e3`](https://github.com/tailor-platform/sdk/commit/34a67e33a34533bd62f34b7e5bc358c2448eb038) Thanks [@toiroakr](https://github.com/toiroakr)! - Reject `.serial()` on fields inside `db.object()`. TailorDB cannot number a serial field nested in an object, so a create that omitted the value failed with an internal error. It is now a type error, and a build that still defines one fails; remove `.serial()` from the nested field (or move the field out of the object) to upgrade.
42
+
43
+ - [#2556](https://github.com/tailor-platform/sdk/pull/2556) [`56abcc9`](https://github.com/tailor-platform/sdk/commit/56abcc9a063ca90c4561d908c1975296227a3480) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update @​inquirer
44
+
45
+ - [#2604](https://github.com/tailor-platform/sdk/pull/2604) [`4dde6ea`](https://github.com/tailor-platform/sdk/commit/4dde6ea565c97b1bfbdc8606bd0c565d25af6623) Thanks [@renovate](https://github.com/apps/renovate)! - chore(deps): update dependency @​types/node to v24.19.2
46
+
47
+ - [#2607](https://github.com/tailor-platform/sdk/pull/2607) [`b517e0a`](https://github.com/tailor-platform/sdk/commit/b517e0aeede87d34eb518b79c5cfdd8378eb0e50) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency @​napi-rs/keyring to v2.1.1
48
+
49
+ - [#2611](https://github.com/tailor-platform/sdk/pull/2611) [`938f418`](https://github.com/tailor-platform/sdk/commit/938f418c4d847402e579f458f1e3ef3941906288) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update rolldown
50
+
3
51
  ## 2.27.0
4
52
 
5
53
  ### Minor Changes
@@ -26,8 +26,10 @@ Use these files as the single source of truth:
26
26
  1. Prefer SDK docs above assumptions. If behavior is unclear, cite the exact doc path used.
27
27
  2. Keep examples compatible with Node.js 22+.
28
28
  3. For CLI questions, verify command and option names from `docs/cli-reference.md` and `docs/cli/*.md`.
29
- 4. When running CLI commands, set `TAILOR_JSON_OUTPUT=true` (or pass `--json`) and parse the JSON
30
- instead of the table output, which is formatted for humans and may change.
29
+ 4. When running CLI commands, parse the JSON instead of the table output, which is formatted for
30
+ humans and may change. The CLI defaults to JSON when it detects an AI coding agent; if a command
31
+ still prints a table (an undetected agent, or a CLI plugin command), set `TAILOR_JSON_OUTPUT=true`
32
+ or pass `--json`. Use `--help-json` for machine-readable help.
31
33
  5. For configuration questions, validate examples against `docs/configuration.md` and related service docs.
32
34
 
33
35
  ## Quick Navigation