@lyellr88/buddy-mcp 1.1.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 (258) hide show
  1. package/README.md +219 -0
  2. package/dist/config/claude-config.d.ts +7 -0
  3. package/dist/config/claude-config.d.ts.map +1 -0
  4. package/dist/config/claude-config.js +107 -0
  5. package/dist/config/claude-config.js.map +1 -0
  6. package/dist/config/hooks.d.ts +22 -0
  7. package/dist/config/hooks.d.ts.map +1 -0
  8. package/dist/config/hooks.js +58 -0
  9. package/dist/config/hooks.js.map +1 -0
  10. package/dist/config/index.d.ts +4 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +6 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/config/pet-config.d.ts +12 -0
  15. package/dist/config/pet-config.d.ts.map +1 -0
  16. package/dist/config/pet-config.js +150 -0
  17. package/dist/config/pet-config.js.map +1 -0
  18. package/dist/constants.d.ts +24 -0
  19. package/dist/constants.d.ts.map +1 -0
  20. package/dist/constants.js +94 -0
  21. package/dist/constants.js.map +1 -0
  22. package/dist/finder/estimator.d.ts +3 -0
  23. package/dist/finder/estimator.d.ts.map +1 -0
  24. package/dist/finder/estimator.js +27 -0
  25. package/dist/finder/estimator.js.map +1 -0
  26. package/dist/finder/index.d.ts +3 -0
  27. package/dist/finder/index.d.ts.map +1 -0
  28. package/dist/finder/index.js +3 -0
  29. package/dist/finder/index.js.map +1 -0
  30. package/dist/finder/orchestrator.d.ts +8 -0
  31. package/dist/finder/orchestrator.d.ts.map +1 -0
  32. package/dist/finder/orchestrator.js +163 -0
  33. package/dist/finder/orchestrator.js.map +1 -0
  34. package/dist/finder/worker.d.ts +3 -0
  35. package/dist/finder/worker.d.ts.map +1 -0
  36. package/dist/finder/worker.js +130 -0
  37. package/dist/finder/worker.js.map +1 -0
  38. package/dist/generation/hash.d.ts +5 -0
  39. package/dist/generation/hash.d.ts.map +1 -0
  40. package/dist/generation/hash.js +37 -0
  41. package/dist/generation/hash.js.map +1 -0
  42. package/dist/generation/index.d.ts +4 -0
  43. package/dist/generation/index.d.ts.map +1 -0
  44. package/dist/generation/index.js +4 -0
  45. package/dist/generation/index.js.map +1 -0
  46. package/dist/generation/rng.d.ts +4 -0
  47. package/dist/generation/rng.d.ts.map +1 -0
  48. package/dist/generation/rng.js +14 -0
  49. package/dist/generation/rng.js.map +1 -0
  50. package/dist/generation/roll.d.ts +7 -0
  51. package/dist/generation/roll.d.ts.map +1 -0
  52. package/dist/generation/roll.js +51 -0
  53. package/dist/generation/roll.js.map +1 -0
  54. package/dist/mcp/index.d.ts +5 -0
  55. package/dist/mcp/index.d.ts.map +1 -0
  56. package/dist/mcp/index.js +273 -0
  57. package/dist/mcp/index.js.map +1 -0
  58. package/dist/mcp/persistence.d.ts +6 -0
  59. package/dist/mcp/persistence.d.ts.map +1 -0
  60. package/dist/mcp/persistence.js +129 -0
  61. package/dist/mcp/persistence.js.map +1 -0
  62. package/dist/mcp/state.d.ts +74 -0
  63. package/dist/mcp/state.d.ts.map +1 -0
  64. package/dist/mcp/state.js +20 -0
  65. package/dist/mcp/state.js.map +1 -0
  66. package/dist/mcp/tools/auto.d.ts +4 -0
  67. package/dist/mcp/tools/auto.d.ts.map +1 -0
  68. package/dist/mcp/tools/auto.js +15 -0
  69. package/dist/mcp/tools/auto.js.map +1 -0
  70. package/dist/mcp/tools/core.d.ts +2 -0
  71. package/dist/mcp/tools/core.d.ts.map +1 -0
  72. package/dist/mcp/tools/core.js +350 -0
  73. package/dist/mcp/tools/core.js.map +1 -0
  74. package/dist/mcp/tools/export.d.ts +2 -0
  75. package/dist/mcp/tools/export.d.ts.map +1 -0
  76. package/dist/mcp/tools/export.js +161 -0
  77. package/dist/mcp/tools/export.js.map +1 -0
  78. package/dist/mcp/tools/interact.d.ts +2 -0
  79. package/dist/mcp/tools/interact.d.ts.map +1 -0
  80. package/dist/mcp/tools/interact.js +56 -0
  81. package/dist/mcp/tools/interact.js.map +1 -0
  82. package/dist/mcp/tools/stats.d.ts +4 -0
  83. package/dist/mcp/tools/stats.d.ts.map +1 -0
  84. package/dist/mcp/tools/stats.js +87 -0
  85. package/dist/mcp/tools/stats.js.map +1 -0
  86. package/dist/mcp/watcher.d.ts +3 -0
  87. package/dist/mcp/watcher.d.ts.map +1 -0
  88. package/dist/mcp/watcher.js +117 -0
  89. package/dist/mcp/watcher.js.map +1 -0
  90. package/dist/patcher/binary-finder.d.ts +3 -0
  91. package/dist/patcher/binary-finder.d.ts.map +1 -0
  92. package/dist/patcher/binary-finder.js +169 -0
  93. package/dist/patcher/binary-finder.js.map +1 -0
  94. package/dist/patcher/index.d.ts +5 -0
  95. package/dist/patcher/index.d.ts.map +1 -0
  96. package/dist/patcher/index.js +5 -0
  97. package/dist/patcher/index.js.map +1 -0
  98. package/dist/patcher/patch.d.ts +5 -0
  99. package/dist/patcher/patch.d.ts.map +1 -0
  100. package/dist/patcher/patch.js +148 -0
  101. package/dist/patcher/patch.js.map +1 -0
  102. package/dist/patcher/preflight.d.ts +5 -0
  103. package/dist/patcher/preflight.d.ts.map +1 -0
  104. package/dist/patcher/preflight.js +145 -0
  105. package/dist/patcher/preflight.js.map +1 -0
  106. package/dist/patcher/salt-ops.d.ts +18 -0
  107. package/dist/patcher/salt-ops.d.ts.map +1 -0
  108. package/dist/patcher/salt-ops.js +93 -0
  109. package/dist/patcher/salt-ops.js.map +1 -0
  110. package/dist/personalities.d.ts +10 -0
  111. package/dist/personalities.d.ts.map +1 -0
  112. package/dist/personalities.js +295 -0
  113. package/dist/personalities.js.map +1 -0
  114. package/dist/presets.d.ts +11 -0
  115. package/dist/presets.d.ts.map +1 -0
  116. package/dist/presets.js +207 -0
  117. package/dist/presets.js.map +1 -0
  118. package/dist/sprites/data.d.ts +4 -0
  119. package/dist/sprites/data.d.ts.map +1 -0
  120. package/dist/sprites/data.js +103 -0
  121. package/dist/sprites/data.js.map +1 -0
  122. package/dist/sprites/index.d.ts +3 -0
  123. package/dist/sprites/index.d.ts.map +1 -0
  124. package/dist/sprites/index.js +3 -0
  125. package/dist/sprites/index.js.map +1 -0
  126. package/dist/sprites/render.d.ts +15 -0
  127. package/dist/sprites/render.d.ts.map +1 -0
  128. package/dist/sprites/render.js +77 -0
  129. package/dist/sprites/render.js.map +1 -0
  130. package/dist/tui/animator.d.ts +13 -0
  131. package/dist/tui/animator.d.ts.map +1 -0
  132. package/dist/tui/animator.js +39 -0
  133. package/dist/tui/animator.js.map +1 -0
  134. package/dist/tui/apply/index.d.ts +9 -0
  135. package/dist/tui/apply/index.d.ts.map +1 -0
  136. package/dist/tui/apply/index.js +553 -0
  137. package/dist/tui/apply/index.js.map +1 -0
  138. package/dist/tui/builder/colors.d.ts +15 -0
  139. package/dist/tui/builder/colors.d.ts.map +1 -0
  140. package/dist/tui/builder/colors.js +20 -0
  141. package/dist/tui/builder/colors.js.map +1 -0
  142. package/dist/tui/builder/index.d.ts +6 -0
  143. package/dist/tui/builder/index.d.ts.map +1 -0
  144. package/dist/tui/builder/index.js +172 -0
  145. package/dist/tui/builder/index.js.map +1 -0
  146. package/dist/tui/builder/keyboard.d.ts +17 -0
  147. package/dist/tui/builder/keyboard.d.ts.map +1 -0
  148. package/dist/tui/builder/keyboard.js +76 -0
  149. package/dist/tui/builder/keyboard.js.map +1 -0
  150. package/dist/tui/builder/preview-panel.d.ts +9 -0
  151. package/dist/tui/builder/preview-panel.d.ts.map +1 -0
  152. package/dist/tui/builder/preview-panel.js +103 -0
  153. package/dist/tui/builder/preview-panel.js.map +1 -0
  154. package/dist/tui/builder/selection-panel.d.ts +11 -0
  155. package/dist/tui/builder/selection-panel.d.ts.map +1 -0
  156. package/dist/tui/builder/selection-panel.js +446 -0
  157. package/dist/tui/builder/selection-panel.js.map +1 -0
  158. package/dist/tui/builder/stat-bars.d.ts +4 -0
  159. package/dist/tui/builder/stat-bars.d.ts.map +1 -0
  160. package/dist/tui/builder/stat-bars.js +46 -0
  161. package/dist/tui/builder/stat-bars.js.map +1 -0
  162. package/dist/tui/builder/state.d.ts +22 -0
  163. package/dist/tui/builder/state.d.ts.map +1 -0
  164. package/dist/tui/builder/state.js +92 -0
  165. package/dist/tui/builder/state.js.map +1 -0
  166. package/dist/tui/cli.d.ts +3 -0
  167. package/dist/tui/cli.d.ts.map +1 -0
  168. package/dist/tui/cli.js +26 -0
  169. package/dist/tui/cli.js.map +1 -0
  170. package/dist/tui/commands/buddies.d.ts +2 -0
  171. package/dist/tui/commands/buddies.d.ts.map +1 -0
  172. package/dist/tui/commands/buddies.js +172 -0
  173. package/dist/tui/commands/buddies.js.map +1 -0
  174. package/dist/tui/commands/current.d.ts +2 -0
  175. package/dist/tui/commands/current.d.ts.map +1 -0
  176. package/dist/tui/commands/current.js +35 -0
  177. package/dist/tui/commands/current.js.map +1 -0
  178. package/dist/tui/commands/interactive.d.ts +6 -0
  179. package/dist/tui/commands/interactive.d.ts.map +1 -0
  180. package/dist/tui/commands/interactive.js +385 -0
  181. package/dist/tui/commands/interactive.js.map +1 -0
  182. package/dist/tui/commands/preview.d.ts +3 -0
  183. package/dist/tui/commands/preview.d.ts.map +1 -0
  184. package/dist/tui/commands/preview.js +94 -0
  185. package/dist/tui/commands/preview.js.map +1 -0
  186. package/dist/tui/commands/rehatch.d.ts +2 -0
  187. package/dist/tui/commands/rehatch.d.ts.map +1 -0
  188. package/dist/tui/commands/rehatch.js +30 -0
  189. package/dist/tui/commands/rehatch.js.map +1 -0
  190. package/dist/tui/commands/restore.d.ts +2 -0
  191. package/dist/tui/commands/restore.d.ts.map +1 -0
  192. package/dist/tui/commands/restore.js +52 -0
  193. package/dist/tui/commands/restore.js.map +1 -0
  194. package/dist/tui/commands/share.d.ts +2 -0
  195. package/dist/tui/commands/share.d.ts.map +1 -0
  196. package/dist/tui/commands/share.js +105 -0
  197. package/dist/tui/commands/share.js.map +1 -0
  198. package/dist/tui/commands/start-screen.d.ts +3 -0
  199. package/dist/tui/commands/start-screen.d.ts.map +1 -0
  200. package/dist/tui/commands/start-screen.js +93 -0
  201. package/dist/tui/commands/start-screen.js.map +1 -0
  202. package/dist/tui/display.d.ts +5 -0
  203. package/dist/tui/display.d.ts.map +1 -0
  204. package/dist/tui/display.js +33 -0
  205. package/dist/tui/display.js.map +1 -0
  206. package/dist/tui/format.d.ts +5 -0
  207. package/dist/tui/format.d.ts.map +1 -0
  208. package/dist/tui/format.js +21 -0
  209. package/dist/tui/format.js.map +1 -0
  210. package/dist/tui/gallery/index.d.ts +12 -0
  211. package/dist/tui/gallery/index.d.ts.map +1 -0
  212. package/dist/tui/gallery/index.js +153 -0
  213. package/dist/tui/gallery/index.js.map +1 -0
  214. package/dist/tui/gallery/keyboard.d.ts +15 -0
  215. package/dist/tui/gallery/keyboard.d.ts.map +1 -0
  216. package/dist/tui/gallery/keyboard.js +41 -0
  217. package/dist/tui/gallery/keyboard.js.map +1 -0
  218. package/dist/tui/gallery/profile-list-panel.d.ts +10 -0
  219. package/dist/tui/gallery/profile-list-panel.d.ts.map +1 -0
  220. package/dist/tui/gallery/profile-list-panel.js +66 -0
  221. package/dist/tui/gallery/profile-list-panel.js.map +1 -0
  222. package/dist/tui/gallery/profile-preview-panel.d.ts +9 -0
  223. package/dist/tui/gallery/profile-preview-panel.d.ts.map +1 -0
  224. package/dist/tui/gallery/profile-preview-panel.js +121 -0
  225. package/dist/tui/gallery/profile-preview-panel.js.map +1 -0
  226. package/dist/tui/gallery/state.d.ts +13 -0
  227. package/dist/tui/gallery/state.d.ts.map +1 -0
  228. package/dist/tui/gallery/state.js +33 -0
  229. package/dist/tui/gallery/state.js.map +1 -0
  230. package/dist/tui/index.d.ts +9 -0
  231. package/dist/tui/index.d.ts.map +1 -0
  232. package/dist/tui/index.js +9 -0
  233. package/dist/tui/index.js.map +1 -0
  234. package/dist/tui/launcher.d.ts +3 -0
  235. package/dist/tui/launcher.d.ts.map +1 -0
  236. package/dist/tui/launcher.js +24 -0
  237. package/dist/tui/launcher.js.map +1 -0
  238. package/dist/tui/presets/index.d.ts +3 -0
  239. package/dist/tui/presets/index.d.ts.map +1 -0
  240. package/dist/tui/presets/index.js +202 -0
  241. package/dist/tui/presets/index.js.map +1 -0
  242. package/dist/tui/presets/preset-list-panel.d.ts +9 -0
  243. package/dist/tui/presets/preset-list-panel.d.ts.map +1 -0
  244. package/dist/tui/presets/preset-list-panel.js +52 -0
  245. package/dist/tui/presets/preset-list-panel.js.map +1 -0
  246. package/dist/tui/prompts.d.ts +13 -0
  247. package/dist/tui/prompts.d.ts.map +1 -0
  248. package/dist/tui/prompts.js +126 -0
  249. package/dist/tui/prompts.js.map +1 -0
  250. package/dist/tui/start/index.d.ts +3 -0
  251. package/dist/tui/start/index.d.ts.map +1 -0
  252. package/dist/tui/start/index.js +170 -0
  253. package/dist/tui/start/index.js.map +1 -0
  254. package/dist/types.d.ts +113 -0
  255. package/dist/types.d.ts.map +1 -0
  256. package/dist/types.js +2 -0
  257. package/dist/types.js.map +1 -0
  258. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/tui/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import { runStartScreen } from './commands/start-screen.js';
3
+ import { runRestore } from './commands/restore.js';
4
+ import { runRehatch } from './commands/rehatch.js';
5
+ import { runCurrent } from './commands/current.js';
6
+ import { runPreview } from './commands/preview.js';
7
+ import { runShare } from './commands/share.js';
8
+ const cmd = process.argv[2];
9
+ const dispatch = {
10
+ restore: runRestore,
11
+ rehatch: runRehatch,
12
+ current: runCurrent,
13
+ preview: () => runPreview({}),
14
+ share: runShare,
15
+ };
16
+ const handler = cmd ? dispatch[cmd] : null;
17
+ if (cmd && !handler) {
18
+ console.error(`Unknown command: ${cmd}`);
19
+ console.error('Available commands: restore, rehatch, current, preview, share');
20
+ process.exit(1);
21
+ }
22
+ (handler ?? runStartScreen)().catch((err) => {
23
+ console.error(err.message);
24
+ process.exit(1);
25
+ });
26
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/tui/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE5B,MAAM,QAAQ,GAAwC;IACpD,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAC7B,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAE3C,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,CAAC,OAAO,IAAI,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACnD,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runBuddies(): Promise<void>;
2
+ //# sourceMappingURL=buddies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buddies.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/buddies.ts"],"names":[],"mappings":"AAiDA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAmKhD"}
@@ -0,0 +1,172 @@
1
+ import chalk from 'chalk';
2
+ import { select } from '@inquirer/prompts';
3
+ import { fileURLToPath } from 'url';
4
+ import { join, dirname } from 'path';
5
+ import { ORIGINAL_SALT, RARITY_STARS } from '../../constants.js';
6
+ import { roll } from '../../generation/index.js';
7
+ import { DEFAULT_PERSONALITIES } from '../../personalities.js';
8
+ import { isNodeRuntime, verifySalt, isClaudeRunning, getMinSaltCount } from '../../patcher/salt-ops.js';
9
+ import { patchBinary } from '../../patcher/patch.js';
10
+ import { runPreflight } from '../../patcher/preflight.js';
11
+ import { loadPetConfigV2, savePetConfigV2, switchToProfile, saveProfile, deleteProfile, isHookInstalled, installHook, getCompanionName, renameCompanion, getCompanionPersonality, setCompanionPersonality, } from '../../config/index.js';
12
+ import { banner, showPet, warnCodesign } from '../../tui/display.js';
13
+ import { buildGalleryEntries, activeEntryIndex, DEFAULT_PROFILE, } from '../../tui/gallery/state.js';
14
+ async function selectBuddyFallback(entries) {
15
+ const choices = entries.map((entry) => {
16
+ const dot = entry.isActive ? '●' : '○';
17
+ const stars = RARITY_STARS[entry.bones.rarity];
18
+ return {
19
+ name: `${dot} ${entry.name} — ${entry.bones.species} ${stars}`,
20
+ value: entry.salt,
21
+ };
22
+ });
23
+ const choice = await select({
24
+ message: 'Choose a buddy',
25
+ choices,
26
+ });
27
+ return choice;
28
+ }
29
+ export async function runBuddies() {
30
+ banner();
31
+ const preflight = runPreflight({ requireBinary: true });
32
+ if (!preflight.ok || !preflight.binaryPath) {
33
+ process.exit(1);
34
+ }
35
+ const config = loadPetConfigV2();
36
+ const profiles = config?.profiles ?? {};
37
+ if (Object.keys(profiles).length === 0) {
38
+ console.log(chalk.dim(' No saved buddies. Run buddy-mcp-build to create one.\n'));
39
+ return;
40
+ }
41
+ const userId = preflight.userId;
42
+ const binaryPath = preflight.binaryPath;
43
+ const entries = buildGalleryEntries(userId, binaryPath);
44
+ const startIndex = activeEntryIndex(entries);
45
+ // Try OpenTUI gallery, fallback to sequential
46
+ let selectedName = null;
47
+ try {
48
+ const { canUseGalleryTUI, runGalleryTUI } = await import("../gallery/index.js");
49
+ if (await canUseGalleryTUI()) {
50
+ const result = await runGalleryTUI(entries, startIndex, (name) => {
51
+ deleteProfile(name);
52
+ return buildGalleryEntries(userId, binaryPath);
53
+ });
54
+ if (result.action === 'cancel') {
55
+ console.log(chalk.dim('\n Cancelled.\n'));
56
+ return;
57
+ }
58
+ selectedName = result.profileName;
59
+ }
60
+ }
61
+ catch {
62
+ // OpenTUI not available — fall through
63
+ }
64
+ if (selectedName === null) {
65
+ try {
66
+ selectedName = await selectBuddyFallback(entries);
67
+ }
68
+ catch {
69
+ console.log(chalk.dim('\n Cancelled.\n'));
70
+ return;
71
+ }
72
+ }
73
+ if (!selectedName) {
74
+ console.log(chalk.dim('\n Cancelled.\n'));
75
+ return;
76
+ }
77
+ // selectedName is now a salt (or DEFAULT_PROFILE)
78
+ const selectedSalt = selectedName;
79
+ // Skip if already active
80
+ const selectedEntry = entries.find((e) => e.salt === selectedSalt);
81
+ if (selectedEntry?.isActive) {
82
+ console.log(chalk.dim('\n Already active.\n'));
83
+ return;
84
+ }
85
+ // Snapshot outgoing profile's companion identity
86
+ const activeSalt = config?.activeProfile;
87
+ if (activeSalt && config?.profiles[activeSalt]) {
88
+ const outgoing = config.profiles[activeSalt];
89
+ outgoing.name = getCompanionName() ?? outgoing.name;
90
+ outgoing.personality = getCompanionPersonality() ?? outgoing.personality;
91
+ saveProfile(outgoing);
92
+ }
93
+ // Find the old salt in binary
94
+ const oldSalt = config?.salt ?? ORIGINAL_SALT;
95
+ const isDefault = selectedSalt === DEFAULT_PROFILE;
96
+ const newSalt = isDefault ? ORIGINAL_SALT : selectedSalt;
97
+ if (!isDefault && !config?.profiles[selectedSalt]) {
98
+ console.error(chalk.red('\n Buddy not found.\n'));
99
+ return;
100
+ }
101
+ // Patch binary
102
+ let patched = false;
103
+ for (const trySalt of [oldSalt, ORIGINAL_SALT]) {
104
+ if (!trySalt)
105
+ continue;
106
+ const check = verifySalt(binaryPath, trySalt);
107
+ if (check.found >= getMinSaltCount(binaryPath)) {
108
+ const patchResult = patchBinary(binaryPath, trySalt, newSalt);
109
+ const displayName = selectedEntry?.name ?? 'Unknown';
110
+ console.log(chalk.green(`\n Switched to "${displayName}"! (${patchResult.replacements} replacements)`));
111
+ warnCodesign(patchResult, binaryPath);
112
+ patched = true;
113
+ break;
114
+ }
115
+ }
116
+ if (!patched) {
117
+ console.error(chalk.red('\n Could not find known salt in binary. Try running: buddy-mcp-build restore'));
118
+ return;
119
+ }
120
+ // Update config — reload fresh before writing to avoid clobbering saveProfile(outgoing) above
121
+ if (isDefault) {
122
+ // Reload fresh so we don't clobber profile writes made by saveProfile(outgoing) above
123
+ const freshConfig = loadPetConfigV2();
124
+ if (freshConfig) {
125
+ freshConfig.previousSalt = freshConfig.salt;
126
+ freshConfig.activeProfile = null;
127
+ freshConfig.salt = newSalt;
128
+ freshConfig.appliedAt = new Date().toISOString();
129
+ savePetConfigV2(freshConfig);
130
+ }
131
+ }
132
+ else {
133
+ switchToProfile(selectedSalt);
134
+ }
135
+ // Auto-install hook so the buddy survives Claude Code auto-updates
136
+ if (!isHookInstalled()) {
137
+ const mcpPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'mcp', 'index.js');
138
+ installHook(mcpPath);
139
+ console.log(chalk.dim(' SessionStart hook installed — pet auto-re-applies after Claude Code updates.'));
140
+ }
141
+ // Restore incoming profile's companion identity — reload fresh to get switchToProfile's write
142
+ if (!isDefault) {
143
+ const freshConfig = loadPetConfigV2();
144
+ const incoming = freshConfig?.profiles[selectedSalt];
145
+ if (incoming?.name) {
146
+ try {
147
+ renameCompanion(incoming.name);
148
+ }
149
+ catch (err) {
150
+ console.log(chalk.dim(` Could not restore name: ${err.message}`));
151
+ }
152
+ }
153
+ const personality = incoming?.personality ?? DEFAULT_PERSONALITIES[incoming?.species ?? 'duck'] ?? null;
154
+ if (personality) {
155
+ try {
156
+ setCompanionPersonality(personality);
157
+ }
158
+ catch (err) {
159
+ console.log(chalk.dim(` Could not restore personality: ${err.message}`));
160
+ }
161
+ }
162
+ }
163
+ // Show the new pet
164
+ const useNodeHash = isNodeRuntime(binaryPath);
165
+ const newBones = roll(userId, newSalt, { useNodeHash }).bones;
166
+ showPet(newBones, 'Active pet');
167
+ if (isClaudeRunning(binaryPath)) {
168
+ console.log(chalk.yellow(' Restart Claude Code for the change to take effect.'));
169
+ }
170
+ console.log();
171
+ }
172
+ //# sourceMappingURL=buddies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buddies.js","sourceRoot":"","sources":["../../../src/tui/commands/buddies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runCurrent(): Promise<void>;
2
+ //# sourceMappingURL=current.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/current.ts"],"names":[],"mappings":"AASA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BhD"}
@@ -0,0 +1,35 @@
1
+ import chalk from 'chalk';
2
+ import { ORIGINAL_SALT } from '../../constants.js';
3
+ import { roll } from '../../generation/index.js';
4
+ import { findClaudeBinary } from '../../patcher/binary-finder.js';
5
+ import { isNodeRuntime } from '../../patcher/salt-ops.js';
6
+ import { runPreflight } from '../../patcher/preflight.js';
7
+ import { loadPetConfig } from '../../config/index.js';
8
+ import { banner, showPet } from "../display.js";
9
+ export async function runCurrent() {
10
+ banner();
11
+ const preflight = runPreflight({ requireBinary: false });
12
+ if (!preflight.ok)
13
+ process.exit(1);
14
+ const userId = preflight.userId;
15
+ console.log(chalk.dim(` User ID: ${userId.slice(0, 12)}...`));
16
+ let useNodeHash = false;
17
+ try {
18
+ const bp = findClaudeBinary();
19
+ useNodeHash = isNodeRuntime(bp);
20
+ }
21
+ catch {
22
+ /* ignore — binary not required for current */
23
+ }
24
+ if (useNodeHash) {
25
+ console.log(chalk.dim(' Runtime: Node (FNV-1a hash)'));
26
+ }
27
+ const origResult = roll(userId, ORIGINAL_SALT, { useNodeHash });
28
+ showPet(origResult.bones, 'Default pet (original salt)');
29
+ const config = loadPetConfig();
30
+ if (config?.salt && config.salt !== ORIGINAL_SALT) {
31
+ const patchedResult = roll(userId, config.salt, { useNodeHash });
32
+ showPet(patchedResult.bones, 'Active pet (patched)');
33
+ }
34
+ }
35
+ //# sourceMappingURL=current.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current.js","sourceRoot":"","sources":["../../../src/tui/commands/current.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,CAAC;IACT,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAE/D,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC9B,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;IAEzD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { CliFlags, DesiredTraits } from '../../types.js';
2
+ export declare function runInteractive(flags?: CliFlags, { skipBanner }?: {
3
+ skipBanner?: boolean;
4
+ }): Promise<void>;
5
+ export declare function runInteractiveWithTraits(desired: DesiredTraits, flags?: CliFlags): Promise<void>;
6
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/interactive.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoM1D,wBAAsB,cAAc,CAClC,KAAK,GAAE,QAAa,EACpB,EAAE,UAAkB,EAAE,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GACpD,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,aAAa,EACtB,KAAK,GAAE,QAAa,GACnB,OAAO,CAAC,IAAI,CAAC,CAGf"}