@botonic/nx-plugin 2.30.0 → 2.31.1-alpha.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 (127) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/executors.json +0 -5
  3. package/index.js +44 -0
  4. package/{src/executors/build-node-app/executor.js → libs/botonic/nx-plugin/src/executors/build-node-app/executor-impl.js} +3 -3
  5. package/libs/botonic/nx-plugin/src/executors/build-node-app/executor.js +27 -0
  6. package/{src/executors/delete-bot/executor.js → libs/botonic/nx-plugin/src/executors/delete-bot/executor-impl.js} +3 -5
  7. package/libs/botonic/nx-plugin/src/executors/delete-bot/executor.js +27 -0
  8. package/{src/executors/deploy-netlify-snapshot/executor.js → libs/botonic/nx-plugin/src/executors/deploy-netlify-snapshot/executor-impl.js} +3 -3
  9. package/libs/botonic/nx-plugin/src/executors/deploy-netlify-snapshot/executor.js +27 -0
  10. package/libs/botonic/nx-plugin/src/executors/deploy-to-hubtype/executor-impl.js +172 -0
  11. package/libs/botonic/nx-plugin/src/executors/deploy-to-hubtype/executor.js +27 -0
  12. package/{src/executors/e2e-webchat/executor.js → libs/botonic/nx-plugin/src/executors/e2e-webchat/executor-impl.js} +5 -5
  13. package/libs/botonic/nx-plugin/src/executors/e2e-webchat/executor.js +27 -0
  14. package/{src/executors/integrate-provider/executor.js → libs/botonic/nx-plugin/src/executors/integrate-provider/executor-impl.js} +3 -5
  15. package/libs/botonic/nx-plugin/src/executors/integrate-provider/executor.js +27 -0
  16. package/{src/executors/login-to-hubtype/executor.js → libs/botonic/nx-plugin/src/executors/login-to-hubtype/executor-impl.js} +3 -5
  17. package/libs/botonic/nx-plugin/src/executors/login-to-hubtype/executor.js +27 -0
  18. package/{src/executors/logout-from-hubtype/executor.js → libs/botonic/nx-plugin/src/executors/logout-from-hubtype/executor-impl.js} +5 -5
  19. package/libs/botonic/nx-plugin/src/executors/logout-from-hubtype/executor.js +27 -0
  20. package/{src/executors/run-lambda/executor.js → libs/botonic/nx-plugin/src/executors/run-lambda/executor-impl.js} +3 -3
  21. package/libs/botonic/nx-plugin/src/executors/run-lambda/executor.js +27 -0
  22. package/{src/executors/serve-bot/executor.js → libs/botonic/nx-plugin/src/executors/serve-bot/executor-impl.js} +145 -27
  23. package/libs/botonic/nx-plugin/src/executors/serve-bot/executor.js +27 -0
  24. package/{src/generators/action/generator.js → libs/botonic/nx-plugin/src/generators/action/generator-impl.js} +5 -5
  25. package/libs/botonic/nx-plugin/src/generators/action/generator.js +27 -0
  26. package/{src/generators/bot-app/generator.js → libs/botonic/nx-plugin/src/generators/bot-app/generator-impl.js} +6 -5
  27. package/libs/botonic/nx-plugin/src/generators/bot-app/generator.js +34 -0
  28. package/{src/generators/custom-message/generator.js → libs/botonic/nx-plugin/src/generators/custom-message/generator-impl.js} +5 -5
  29. package/libs/botonic/nx-plugin/src/generators/custom-message/generator.js +27 -0
  30. package/{src/generators/preset/generator.js → libs/botonic/nx-plugin/src/generators/preset/generator-impl.js} +5 -5
  31. package/libs/botonic/nx-plugin/src/generators/preset/generator.js +34 -0
  32. package/{src/generators/remove-custom-message/generator.js → libs/botonic/nx-plugin/src/generators/remove-custom-message/generator-impl.js} +5 -5
  33. package/libs/botonic/nx-plugin/src/generators/remove-custom-message/generator.js +27 -0
  34. package/{src/generators/webview/generator.js → libs/botonic/nx-plugin/src/generators/webview/generator-impl.js} +5 -5
  35. package/libs/botonic/nx-plugin/src/generators/webview/generator.js +27 -0
  36. package/{src → libs/botonic/nx-plugin/src}/index.js +3 -1
  37. package/{src → libs/botonic/nx-plugin/src}/lib/api-service.js +150 -82
  38. package/{src → libs/botonic/nx-plugin/src}/lib/constants.js +6 -9
  39. package/{src → libs/botonic/nx-plugin/src}/lib/credentials-handler.js +42 -24
  40. package/libs/botonic/nx-plugin/src/lib/delegate/delegate-executor.js +119 -0
  41. package/libs/botonic/nx-plugin/src/lib/delegate/delegate-generator.js +128 -0
  42. package/libs/botonic/nx-plugin/src/lib/serve-mode/index.js +183 -0
  43. package/{src → libs/botonic/nx-plugin/src}/lib/util/executor-helpers.js +494 -106
  44. package/{src → libs/botonic/nx-plugin/src}/plugin.js +5 -14
  45. package/migrations.json +1 -8
  46. package/package.json +7 -4
  47. package/src/executors/build-node-app/executor-impl.d.ts +5 -0
  48. package/src/executors/build-node-app/executor.d.ts +4 -2
  49. package/src/executors/delete-bot/executor-impl.d.ts +5 -0
  50. package/src/executors/delete-bot/executor.d.ts +4 -2
  51. package/src/executors/deploy-netlify-snapshot/executor-impl.d.ts +8 -0
  52. package/src/executors/deploy-netlify-snapshot/executor.d.ts +4 -5
  53. package/src/executors/deploy-to-hubtype/executor-impl.d.ts +5 -0
  54. package/src/executors/deploy-to-hubtype/executor.d.ts +4 -2
  55. package/src/executors/e2e-webchat/botonic-package-publish.spec.ts +7 -11
  56. package/src/executors/e2e-webchat/executor-impl.d.ts +5 -0
  57. package/src/executors/e2e-webchat/executor.d.ts +4 -2
  58. package/src/executors/integrate-provider/executor-impl.d.ts +5 -0
  59. package/src/executors/integrate-provider/executor.d.ts +4 -2
  60. package/src/executors/login-to-hubtype/executor-impl.d.ts +5 -0
  61. package/src/executors/login-to-hubtype/executor.d.ts +4 -2
  62. package/src/executors/logout-from-hubtype/executor-impl.d.ts +3 -0
  63. package/src/executors/logout-from-hubtype/executor.d.ts +5 -1
  64. package/src/executors/run-lambda/executor-impl.d.ts +5 -0
  65. package/src/executors/run-lambda/executor.d.ts +4 -2
  66. package/src/executors/serve-bot/executor-impl.d.ts +5 -0
  67. package/src/executors/serve-bot/executor.d.ts +4 -2
  68. package/src/executors/serve-bot/schema.json +13 -5
  69. package/src/generators/action/generator-impl.d.ts +4 -0
  70. package/src/generators/action/generator.d.ts +2 -3
  71. package/src/generators/bot-app/files/vite/node.config.ts.template +2 -7
  72. package/src/generators/bot-app/files/vite/webchat.config.ts.template +10 -2
  73. package/src/generators/bot-app/generator-impl.d.ts +4 -0
  74. package/src/generators/bot-app/generator.d.ts +2 -4
  75. package/src/generators/custom-message/generator-impl.d.ts +4 -0
  76. package/src/generators/custom-message/generator.d.ts +2 -3
  77. package/src/generators/preset/generator-impl.d.ts +4 -0
  78. package/src/generators/preset/generator.d.ts +2 -4
  79. package/src/generators/remove-custom-message/generator-impl.d.ts +4 -0
  80. package/src/generators/remove-custom-message/generator.d.ts +2 -3
  81. package/src/generators/webview/generator-impl.d.ts +4 -0
  82. package/src/generators/webview/generator.d.ts +2 -3
  83. package/src/index.d.ts +1 -0
  84. package/src/lib/api-service.d.ts +19 -20
  85. package/src/lib/constants.d.ts +2 -3
  86. package/src/lib/credentials-handler.d.ts +9 -18
  87. package/src/lib/delegate/delegate-executor.d.ts +6 -0
  88. package/src/lib/delegate/delegate-generator.d.ts +2 -0
  89. package/src/lib/interfaces.d.ts +10 -13
  90. package/src/lib/serve-mode/index.d.ts +25 -0
  91. package/src/lib/util/executor-helpers.d.ts +52 -23
  92. package/src/executors/deploy-local-runtime/executor.d.ts +0 -5
  93. package/src/executors/deploy-local-runtime/executor.js +0 -148
  94. package/src/executors/deploy-local-runtime/schema.json +0 -34
  95. package/src/executors/deploy-to-hubtype/executor.js +0 -308
  96. package/src/executors/serve-bot/schema.d.js +0 -16
  97. package/src/generators/bot-app/files/vite/botonic-ssr-deps.ts.template +0 -56
  98. package/src/generators/bot-app/files/vite/plugins/dev-log-viewer-html.plugin.ts.template +0 -65
  99. package/src/generators/preset/files/package.json +0 -26
  100. package/src/migrations/install-claude-update-skills/install-claude-update-skills.migration.d.ts +0 -2
  101. package/src/migrations/install-claude-update-skills/install-claude-update-skills.migration.js +0 -290
  102. /package/{src → libs/botonic/nx-plugin/src}/executors/build-node-app/schema.d.js +0 -0
  103. /package/{src → libs/botonic/nx-plugin/src}/executors/delete-bot/schema.d.js +0 -0
  104. /package/{src/executors/deploy-local-runtime → libs/botonic/nx-plugin/src/executors/deploy-netlify-snapshot}/schema.d.js +0 -0
  105. /package/{src/executors/deploy-netlify-snapshot → libs/botonic/nx-plugin/src/executors/deploy-to-hubtype}/schema.d.js +0 -0
  106. /package/{src/executors/deploy-to-hubtype → libs/botonic/nx-plugin/src/executors/e2e-webchat}/schema.d.js +0 -0
  107. /package/{src/executors/e2e-webchat → libs/botonic/nx-plugin/src/executors/integrate-provider}/schema.d.js +0 -0
  108. /package/{src/executors/integrate-provider → libs/botonic/nx-plugin/src/executors/login-to-hubtype}/schema.d.js +0 -0
  109. /package/{src/executors/login-to-hubtype → libs/botonic/nx-plugin/src/executors/logout-from-hubtype}/schema.d.js +0 -0
  110. /package/{src/executors/logout-from-hubtype → libs/botonic/nx-plugin/src/executors/run-lambda}/schema.d.js +0 -0
  111. /package/{src/executors/run-lambda → libs/botonic/nx-plugin/src/executors/serve-bot}/schema.d.js +0 -0
  112. /package/{src → libs/botonic/nx-plugin/src}/generators/action/schema.js +0 -0
  113. /package/{src → libs/botonic/nx-plugin/src}/generators/bot-app/schema.js +0 -0
  114. /package/{src → libs/botonic/nx-plugin/src}/generators/custom-message/schema.js +0 -0
  115. /package/{src → libs/botonic/nx-plugin/src}/generators/preset/schema.js +0 -0
  116. /package/{src → libs/botonic/nx-plugin/src}/generators/remove-custom-message/schema.js +0 -0
  117. /package/{src → libs/botonic/nx-plugin/src}/generators/shared/bot-app-utils.js +0 -0
  118. /package/{src → libs/botonic/nx-plugin/src}/generators/webview/schema.js +0 -0
  119. /package/{src → libs/botonic/nx-plugin/src}/lib/bot-config.js +0 -0
  120. /package/{src → libs/botonic/nx-plugin/src}/lib/cloudflared-tunnel.js +0 -0
  121. /package/{src → libs/botonic/nx-plugin/src}/lib/index.js +0 -0
  122. /package/{src → libs/botonic/nx-plugin/src}/lib/interfaces.js +0 -0
  123. /package/{src → libs/botonic/nx-plugin/src}/lib/util/file-system.js +0 -0
  124. /package/{src → libs/botonic/nx-plugin/src}/lib/util/sam-container-cleanup.js +0 -0
  125. /package/{src → libs/botonic/nx-plugin/src}/lib/util/sam-template.js +0 -0
  126. /package/{src → libs/botonic/nx-plugin/src}/lib/util/system.js +0 -0
  127. /package/{src → libs/botonic/nx-plugin/src}/migrations/utils/migration-utils.js +0 -0
@@ -1,290 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var install_claude_update_skills_migration_exports = {};
20
- __export(install_claude_update_skills_migration_exports, {
21
- default: () => installClaudeUpdateSkills
22
- });
23
- module.exports = __toCommonJS(install_claude_update_skills_migration_exports);
24
- var import_devkit = require("@nx/devkit");
25
- const BOTONIC_BOT_UPDATE_SKILL = `---
26
- name: botonic-bot-update
27
- description: >
28
- Update a single Botonic bot app to the current workspace version \u2014 applies pending bot-app
29
- generators and bumps @botonic/* dependencies. Use when user says "update bot",
30
- "apply bot migrations", or "update <bot-name>". Run /botonic-update first to upgrade the
31
- workspace itself.
32
- ---
33
-
34
- # Update Botonic Bot
35
-
36
- ## Workflow: Update Bot App to Current Workspace Version
37
-
38
- ### Step 0: Detect Package Manager
39
-
40
- Check which package manager the workspace uses:
41
-
42
- - If \`pnpm-lock.yaml\` exists \u2192 use \`pnpm\`
43
- - Else \u2192 use \`npm\`
44
-
45
- Use the detected package manager for all subsequent commands.
46
-
47
- ### Step 1: Get Target Version
48
-
49
- Read \`node_modules/@botonic/nx-plugin/package.json\` \u2192 \`.version\` field.
50
- This is the version the workspace was updated to and the target for this bot.
51
-
52
- If the file does not exist, tell user: "Could not find @botonic/nx-plugin in node_modules. Run /botonic-update first to install the latest version."
53
-
54
- ### Step 2: Discover Bots
55
-
56
- Run \`bash .claude/scripts/update-bot/discover-bots.sh\` from the workspace root.
57
- Expected output: JSON list of bots with name, path, current \`@botonic/core\` version.
58
-
59
- ### Step 3: Ask Which Bot
60
-
61
- Present the bot list to the user. Ask which SINGLE bot to update.
62
- **CRITICAL**: Never accept more than one bot. If user asks for multiple, explain why and ask them to pick one.
63
-
64
- ### Step 4: Check Bot's Current State
65
-
66
- Read the selected bot's \`package.json\` (at \`<bot-path>/package.json\`):
67
- - Extract the current \`@botonic/core\` version (strip \`^\` / \`~\` prefixes for comparison).
68
-
69
- Read \`.botonic/pending-bot-migrations.json\` if it exists:
70
- - Filter entries where \`appliedTo\` does NOT include \`<bot-name>\`.
71
-
72
- Determine:
73
- - \`hasVersionGap\`: bot's \`@botonic/core\` version \u2260 target version
74
- - \`hasPendingMigrations\`: any filtered pending migration entries exist
75
-
76
- If **neither** is true, report: "\`<bot-name>\` is already at v\`<target>\` with no pending migrations. All up to date." and stop.
77
-
78
- ### Step 5: Ask Target Version (only when pending migrations exist)
79
-
80
- If \`hasPendingMigrations\`:
81
- - Show distinct \`version\` values from the pending migrations (sorted ascending).
82
- - Ask the user: "Which version would you like to update to?" (default: latest in list).
83
- - Only apply migrations whose \`version\` \u2264 chosen target version.
84
-
85
- If there are **no** pending migrations (version gap only), skip this step \u2014 use the target version from Step 1.
86
-
87
- ### Step 6: Check Git State
88
-
89
- Run \`git status --porcelain\`. If output is non-empty, STOP.
90
- Tell user: "Please commit or stash changes before updating."
91
-
92
- ### Step 7: Create Branch
93
-
94
- \`git checkout -b update/<bot-name>-to-v<target>\`
95
-
96
- ### Step 8: Apply Pending Migrations (if any)
97
-
98
- For each pending migration (in version order, filtered to \`version\` \u2264 target):
99
-
100
- 1. Run: \`<package-manager> nx g <generator> --project=<bot-name>\`
101
- 2. If \`migrationGuide\` path exists, READ it. Follow verification checklist and manual steps.
102
- 3. \`git add -A && git commit -m "chore(<bot-name>): apply <generator-name>"\`
103
- 4. Mark bot as applied: update \`.botonic/pending-bot-migrations.json\` \u2014 add \`<bot-name>\` to the \`appliedTo\` array for this entry.
104
- 5. \`git add .botonic/pending-bot-migrations.json && git commit --amend --no-edit\`
105
-
106
- ### Step 9: Bump @botonic/* Versions
107
-
108
- Check if the bot's \`@botonic/core\` version (after any migrations) still differs from the target version.
109
-
110
- If it does, edit \`<bot-path>/package.json\`:
111
- - Update **all** \`@botonic/*\` entries in \`dependencies\`, \`devDependencies\`, and \`peerDependencies\` to the exact target version (no \`^\` or \`~\`).
112
-
113
- \`git add <bot-path>/package.json && git commit -m "chore(<bot-name>): bump @botonic/* to v<target>"\`
114
-
115
- Skip this step only if the versions already match.
116
-
117
- ### Step 10: Final Verification
118
-
119
- - \`nx build <bot-name>\`
120
- - Report: list all commits made, any remaining manual steps from migration guides
121
- - Suggest: \`nx serve-bot <bot-name>\` for manual testing
122
-
123
- ## Examples
124
-
125
- ### Example 1: Bot with pending migrations and a version gap
126
-
127
- User says: "Update my-bot" (currently on v2.17.0, workspace on v2.19.0, 2 pending migrations)
128
-
129
- 1. Target version: 2.19.0 (from node_modules)
130
- 2. discover-bots.sh \u2192 my-bot on v2.17.0
131
- 3. Check state: hasVersionGap=true, hasPendingMigrations=true (v2.18.0, v2.19.0)
132
- 4. Ask target: "Available versions: 2.18.0, 2.19.0. Update to which? [default: 2.19.0]"
133
- 5. Branch: update/my-bot-to-v2.19.0
134
- 6. Apply v2.18.0 generator \u2192 commit \u2192 mark applied
135
- 7. Apply v2.19.0 generator \u2192 commit \u2192 mark applied
136
- 8. Bump @botonic/* to 2.19.0 in package.json \u2192 commit
137
- 9. Report: "Done. 2 generators applied + version bumped to v2.19.0."
138
-
139
- ### Example 2: New version with no bot-app migrations (version gap only)
140
-
141
- User says: "Update my-bot" (currently on v2.17.0, workspace on v2.18.0, no pending migrations)
142
-
143
- 1. Target version: 2.18.0 (from node_modules)
144
- 2. discover-bots.sh \u2192 my-bot on v2.17.0
145
- 3. Check state: hasVersionGap=true, hasPendingMigrations=false
146
- 4. No version selection prompt needed
147
- 5. Branch: update/my-bot-to-v2.18.0
148
- 6. Skip Step 8 (no migrations)
149
- 7. Bump @botonic/* to 2.18.0 in package.json \u2192 commit
150
- 8. Report: "Done. No migrations needed \u2014 @botonic/* bumped to v2.18.0."
151
-
152
- ### Example 3: Bot already up to date
153
-
154
- User says: "Update customer-bot" (on v2.19.0, workspace on v2.19.0, no pending migrations)
155
-
156
- 1. Target version: 2.19.0
157
- 2. Check state: hasVersionGap=false, hasPendingMigrations=false
158
- 3. Report: "customer-bot is already at v2.19.0 with no pending migrations. All up to date."
159
-
160
- ### Example 4: Multiple bots requested (refuse)
161
-
162
- User says: "Update all bots"
163
- Response: "I update one bot at a time to ensure each migration is properly verified. Which bot would you like to start with? [list bots]"
164
-
165
- ## Troubleshooting
166
-
167
- ### Error: Generator reports "already up to date"
168
-
169
- Cause: The bot code was already manually updated before running the generator.
170
- Solution: The generator is idempotent and skipped correctly. Mark it as applied and continue to the version bump step.
171
-
172
- ### Error: Build fails after generator
173
-
174
- Cause: Custom bot code uses removed/changed APIs.
175
- Solution:
176
-
177
- 1. Read the migration guide "What it cannot handle" section
178
- 2. Follow "Manual migration steps" for custom patterns
179
- 3. Check TypeScript: \`npx tsc --noEmit\`
180
- `;
181
- const BOTONIC_UPDATE_SKILL = `---
182
- name: botonic-update
183
- description: >
184
- Update the Botonic workspace to the latest version by running nx migrate. Use when user says
185
- "update botonic", "upgrade botonic", "update workspace", or wants to update @botonic/nx-plugin
186
- to the latest version. If pending bot migrations are queued afterward, instruct user to run
187
- /botonic-bot-update per bot.
188
- ---
189
-
190
- # Update Botonic Workspace
191
-
192
- ## Workflow: Update Botonic to Latest Version
193
-
194
- ### Step 0: Detect Package Manager
195
-
196
- Check which package manager the workspace uses:
197
-
198
- - If \`pnpm-lock.yaml\` exists \u2192 use \`pnpm\`
199
- - Else \u2192 use \`npm\`
200
-
201
- Use the detected package manager for all subsequent commands.
202
-
203
- ### Step 1: Check Current State
204
-
205
- Run \`npm view @botonic/nx-plugin version\` to get the latest available version.
206
- Check \`node_modules/@botonic/nx-plugin/package.json\` for the currently installed version.
207
-
208
- If already on latest, report "already up to date" and stop.
209
-
210
- ### Step 2: Check Git State
211
-
212
- Run \`git status --porcelain\`. If output is non-empty, STOP.
213
- Tell user: "Please commit or stash changes before updating."
214
-
215
- ### Step 3: Run Nx Migrate
216
-
217
- \`\`\`
218
- npx nx migrate @botonic/nx-plugin@latest
219
- \`\`\`
220
-
221
- This updates \`package.json\` and creates \`migrations.json\`.
222
-
223
- If output says "no migrations to run" and \`package.json\` was already at the latest version, stop and report "already up to date".
224
-
225
- ### Step 4: Install Dependencies
226
-
227
- \`\`\`
228
- <package-manager> install
229
- \`\`\`
230
-
231
- ### Step 5: Run Workspace Migrations
232
-
233
- \`\`\`
234
- <package-manager> nx migrate --run-migrations
235
- \`\`\`
236
-
237
- This runs any workspace-level migrations shipped by the target \`@botonic/nx-plugin\` version.
238
-
239
- If that version also queues bot-app generators, it may write \`.botonic/pending-bot-migrations.json\` for \`/botonic-bot-update\`.
240
-
241
- ### Step 6: Commit
242
-
243
- \`\`\`
244
- git add -A && git commit -m "chore: update @botonic/nx-plugin to v<version>"
245
- \`\`\`
246
-
247
- ### Step 7: Report
248
-
249
- Report:
250
-
251
- - New version installed
252
- - Any workspace changes applied
253
- - Whether \`.botonic/pending-bot-migrations.json\` was created and how many generators are pending
254
- - If generators are pending, instruct user to run \`/botonic-bot-update\` to apply them per bot
255
- `;
256
- const OLD_FILES = [
257
- ".cursor/commands/update-bot.md",
258
- ".cursor/commands/update-botonic.md",
259
- ".claude/commands/update-bot.md",
260
- ".claude/commands/update-botonic.md"
261
- ];
262
- async function installClaudeUpdateSkills(tree) {
263
- let removedCount = 0;
264
- for (const filePath of OLD_FILES) {
265
- if (tree.exists(filePath)) {
266
- tree.delete(filePath);
267
- removedCount++;
268
- }
269
- }
270
- tree.write(
271
- ".claude/skills/botonic-bot-update/SKILL.md",
272
- BOTONIC_BOT_UPDATE_SKILL
273
- );
274
- tree.write(".claude/skills/botonic-update/SKILL.md", BOTONIC_UPDATE_SKILL);
275
- await (0, import_devkit.formatFiles)(tree);
276
- if (removedCount > 0) {
277
- import_devkit.logger.info(
278
- ` \u2705 Removed ${removedCount} old command stub(s) (.cursor/commands/, .claude/commands/)`
279
- );
280
- }
281
- import_devkit.logger.info(
282
- ` \u2705 Installed .claude/skills/botonic-bot-update/SKILL.md (was /update-bot)`
283
- );
284
- import_devkit.logger.info(
285
- ` \u2705 Installed .claude/skills/botonic-update/SKILL.md (was /update-botonic)`
286
- );
287
- import_devkit.logger.info(
288
- ` \u2139\uFE0F Use /botonic-bot-update to apply pending bot migrations and /botonic-update to upgrade the workspace`
289
- );
290
- }