@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,385 @@
1
+ import chalk from 'chalk';
2
+ import { confirm, input, select } from '@inquirer/prompts';
3
+ import { fileURLToPath } from 'url';
4
+ import { join, dirname } from 'path';
5
+ import { SPECIES, EYES, RARITIES, HATS, STAT_NAMES, ORIGINAL_SALT } from '../../constants.js';
6
+ import { roll } from '../../generation/index.js';
7
+ import { findSalt, estimateAttempts } from '../../finder/index.js';
8
+ import { isNodeRuntime, verifySalt, getCurrentSalt, isClaudeRunning, getMinSaltCount, } from '../../patcher/salt-ops.js';
9
+ import { patchBinary } from '../../patcher/patch.js';
10
+ import { runPreflight } from '../../patcher/preflight.js';
11
+ import { loadPetConfig, loadPetConfigV2, savePetConfigV2, saveProfile, isHookInstalled, installHook, getCompanionName, renameCompanion, getCompanionPersonality, setCompanionPersonality, } from '../../config/index.js';
12
+ import { DEFAULT_PERSONALITIES } from '../../personalities.js';
13
+ import { banner, showPet, warnCodesign } from "../display.js";
14
+ import { progressBar, formatCount } from "../format.js";
15
+ import { validateFlag, selectSpecies, selectEyes, selectRarity, selectHat, selectStat, } from "../prompts.js";
16
+ import { PRESETS } from '../../presets.js';
17
+ import { allTraitsFlagged } from "../builder/state.js";
18
+ function resolvePreset(presetName) {
19
+ const match = PRESETS.find((p) => p.name.toLowerCase() === presetName.toLowerCase());
20
+ if (!match) {
21
+ const names = PRESETS.map((p) => `"${p.name}"`).join(', ');
22
+ throw new Error(`Unknown preset "${presetName}". Available: ${names}`);
23
+ }
24
+ return { species: match.species, eye: match.eye, rarity: match.rarity, hat: match.hat };
25
+ }
26
+ async function selectCoreTraits(flags) {
27
+ // --preset flag: resolve by name
28
+ if (flags.preset) {
29
+ return resolvePreset(flags.preset);
30
+ }
31
+ // Manual selection
32
+ const species = validateFlag('species', flags.species, SPECIES) ?? (await selectSpecies());
33
+ const eye = validateFlag('eye', flags.eye, EYES) ?? (await selectEyes(species));
34
+ const rarity = validateFlag('rarity', flags.rarity, RARITIES) ?? (await selectRarity());
35
+ const hat = rarity === 'common'
36
+ ? 'none'
37
+ : (validateFlag('hat', flags.hat, HATS) ?? (await selectHat(species, eye, rarity)));
38
+ return { species, eye, rarity, hat };
39
+ }
40
+ async function runSequentialSelection(flags) {
41
+ console.log(chalk.bold(' Choose your new pet:\n'));
42
+ const { species, eye, rarity, hat } = await selectCoreTraits(flags);
43
+ const shiny = flags.shiny ??
44
+ (await confirm({
45
+ message: 'Shiny? (1% normally — search takes ~100x longer)',
46
+ default: false,
47
+ }));
48
+ const wantStats = flags.peak ||
49
+ flags.dump ||
50
+ (await confirm({
51
+ message: 'Customize stats? (best/worst stat — search takes ~20x longer)',
52
+ default: false,
53
+ }));
54
+ let peak = null;
55
+ let dump = null;
56
+ if (wantStats) {
57
+ peak = validateFlag('peak', flags.peak, STAT_NAMES) ?? (await selectStat('Best stat'));
58
+ dump =
59
+ validateFlag('dump', flags.dump, STAT_NAMES) ??
60
+ (await selectStat('Worst stat', peak ?? undefined));
61
+ }
62
+ return { species, eye, hat, rarity, shiny, peak, dump };
63
+ }
64
+ function buildDesiredFromFlags(flags) {
65
+ const species = validateFlag('species', flags.species, SPECIES);
66
+ const eye = validateFlag('eye', flags.eye, EYES);
67
+ const rarity = validateFlag('rarity', flags.rarity, RARITIES);
68
+ const hat = rarity === 'common' ? 'none' : (validateFlag('hat', flags.hat, HATS) ?? 'crown');
69
+ return {
70
+ species: species ?? SPECIES[0],
71
+ eye: eye ?? EYES[0],
72
+ rarity: rarity ?? RARITIES[0],
73
+ hat: hat ?? 'crown',
74
+ shiny: flags.shiny ?? false,
75
+ peak: validateFlag('peak', flags.peak, STAT_NAMES) ?? null,
76
+ dump: validateFlag('dump', flags.dump, STAT_NAMES) ?? null,
77
+ };
78
+ }
79
+ async function selectTraits(flags) {
80
+ if (allTraitsFlagged(flags) && flags.yes) {
81
+ return buildDesiredFromFlags(flags);
82
+ }
83
+ // Try the OpenTUI builder
84
+ try {
85
+ const { canUseBuilder, runBuilder } = await import("../builder/index.js");
86
+ if (await canUseBuilder()) {
87
+ const result = await runBuilder(flags);
88
+ if (result === null) {
89
+ throw new CancelledError();
90
+ }
91
+ return result;
92
+ }
93
+ }
94
+ catch (err) {
95
+ if (err instanceof CancelledError)
96
+ throw err;
97
+ // OpenTUI import failed (e.g. running on Node) — fall through to sequential
98
+ }
99
+ // Show warning if Bun is not available
100
+ if (typeof globalThis.Bun === 'undefined') {
101
+ console.log(chalk.yellow(' \u26A0 Bun is not installed — using basic prompts.\n' +
102
+ ' Install Bun (https://bun.sh) for the interactive builder\n' +
103
+ ' with live preview, and for correct hash cracking.\n'));
104
+ }
105
+ // Fallback: sequential prompts
106
+ return runSequentialSelection(flags);
107
+ }
108
+ class CancelledError extends Error {
109
+ constructor() {
110
+ super('Cancelled');
111
+ this.name = 'CancelledError';
112
+ }
113
+ }
114
+ function runSetup() {
115
+ const preflight = runPreflight({ requireBinary: true });
116
+ if (!preflight.ok || !preflight.binaryPath) {
117
+ process.exit(1);
118
+ }
119
+ const userId = preflight.userId;
120
+ const binaryPath = preflight.binaryPath;
121
+ console.log(chalk.dim(` User ID: ${userId.slice(0, 12)}...`));
122
+ console.log(chalk.dim(` Binary: ${binaryPath} (salt found ${preflight.saltCount}x)`));
123
+ const useNodeHash = isNodeRuntime(binaryPath);
124
+ if (useNodeHash) {
125
+ console.log(chalk.dim(' Runtime: Node (using FNV-1a hash — npm install detected)'));
126
+ }
127
+ else if (preflight.bunVersion) {
128
+ console.log(chalk.dim(` Bun: v${preflight.bunVersion}`));
129
+ }
130
+ console.log();
131
+ const currentBones = roll(userId, ORIGINAL_SALT, { useNodeHash }).bones;
132
+ showPet(currentBones, 'Your current default pet');
133
+ const existingConfig = loadPetConfig();
134
+ if (existingConfig?.salt && existingConfig.salt !== ORIGINAL_SALT) {
135
+ const patchedBones = roll(userId, existingConfig.salt, { useNodeHash }).bones;
136
+ showPet(patchedBones, 'Your active patched pet');
137
+ }
138
+ return { userId, binaryPath, useNodeHash };
139
+ }
140
+ export async function runInteractive(flags = {}, { skipBanner = false } = {}) {
141
+ if (!skipBanner)
142
+ banner();
143
+ const { userId, binaryPath, useNodeHash } = runSetup();
144
+ let desired;
145
+ try {
146
+ desired = await selectTraits(flags);
147
+ }
148
+ catch (err) {
149
+ if (err instanceof CancelledError) {
150
+ console.log(chalk.dim('\n Cancelled.\n'));
151
+ return;
152
+ }
153
+ throw err;
154
+ }
155
+ await applyDesiredTraits(desired, flags, { userId, binaryPath, useNodeHash });
156
+ }
157
+ export async function runInteractiveWithTraits(desired, flags = {}) {
158
+ const { userId, binaryPath, useNodeHash } = runSetup();
159
+ await applyDesiredTraits(desired, flags, { userId, binaryPath, useNodeHash });
160
+ }
161
+ async function applyDesiredTraits(desired, flags, setup) {
162
+ // Try the OpenTUI apply flow
163
+ try {
164
+ const { canUseBuilder } = await import("../builder/index.js");
165
+ if (await canUseBuilder()) {
166
+ const { runApplyTUI } = await import("../apply/index.js");
167
+ await runApplyTUI(desired, flags, setup);
168
+ return;
169
+ }
170
+ }
171
+ catch {
172
+ // OpenTUI unavailable — fall through to sequential
173
+ }
174
+ await applyDesiredTraitsSequential(desired, flags, setup);
175
+ }
176
+ async function applyDesiredTraitsSequential(desired, flags, { userId, binaryPath, useNodeHash }) {
177
+ const existingConfig = loadPetConfig();
178
+ // Show preview of what was selected
179
+ const previewBones = { ...desired, stats: {} };
180
+ showPet(previewBones, 'Your selection');
181
+ const proceed = flags.yes ||
182
+ (await confirm({
183
+ message: 'Find a matching salt and apply?',
184
+ default: true,
185
+ }));
186
+ if (!proceed) {
187
+ console.log(chalk.dim('\n Cancelled.\n'));
188
+ return;
189
+ }
190
+ // Find salt
191
+ const expected = estimateAttempts(desired);
192
+ console.log(chalk.dim(`\n Searching (~${formatCount(expected)} expected attempts)...`));
193
+ const result = await findSalt(userId, desired, {
194
+ binaryPath,
195
+ onProgress: ({ attempts, rate, pct, eta, workers }) => {
196
+ const bar = progressBar(pct, 20);
197
+ const etaStr = eta < 1 ? '<1s' : eta < 60 ? `${Math.ceil(eta)}s` : `${(eta / 60).toFixed(1)}m`;
198
+ const rateStr = rate > 1e6 ? `${(rate / 1e6).toFixed(1)}M/s` : `${(rate / 1e3).toFixed(0)}k/s`;
199
+ const workerStr = workers > 1 ? chalk.dim(` [${workers} cores]`) : '';
200
+ process.stdout.write(`\r ${bar} ${chalk.dim(`${Math.min(99, Math.floor(pct))}%`)} ${chalk.cyan(formatCount(attempts))} tried ${chalk.dim(rateStr)} ${chalk.dim(`ETA ${etaStr}`)}${workerStr} `);
201
+ },
202
+ });
203
+ process.stdout.write('\r' + ' '.repeat(100) + '\r');
204
+ const totalStr = result.totalAttempts
205
+ ? ` (${result.totalAttempts.toLocaleString()} total across ${result.workers} cores)`
206
+ : '';
207
+ console.log(chalk.green(` Found in ${result.attempts.toLocaleString()} attempts${totalStr} (${(result.elapsed / 1000).toFixed(1)}s)`));
208
+ const foundBones = roll(userId, result.salt, { useNodeHash }).bones;
209
+ showPet(foundBones, 'Your new pet');
210
+ // Patch binary
211
+ const current = getCurrentSalt(binaryPath);
212
+ let oldSalt;
213
+ if (!current.patched) {
214
+ oldSalt = ORIGINAL_SALT;
215
+ }
216
+ else if (existingConfig?.salt) {
217
+ oldSalt = existingConfig.salt;
218
+ const check = verifySalt(binaryPath, oldSalt);
219
+ if (check.found < getMinSaltCount(binaryPath)) {
220
+ console.error(chalk.red(' Cannot find current salt in binary. Try restoring first.'));
221
+ return;
222
+ }
223
+ }
224
+ else {
225
+ console.error(chalk.red(' Binary appears patched but no previous salt on record. Try restoring first.'));
226
+ return;
227
+ }
228
+ // --- Save as profile (before patch decision — the salt search is the expensive part) ---
229
+ const profileName = (await input({
230
+ message: 'Save this buddy? (name, or blank to skip)',
231
+ default: '',
232
+ })).trim();
233
+ if (profileName) {
234
+ saveProfile({
235
+ salt: result.salt,
236
+ species: foundBones.species,
237
+ rarity: foundBones.rarity,
238
+ eye: foundBones.eye,
239
+ hat: foundBones.hat,
240
+ shiny: foundBones.shiny,
241
+ stats: foundBones.stats,
242
+ name: profileName,
243
+ personality: DEFAULT_PERSONALITIES[foundBones.species] ?? null,
244
+ createdAt: new Date().toISOString(),
245
+ });
246
+ console.log(chalk.green(` Saved buddy "${profileName}"`));
247
+ }
248
+ // --- Apply now? ---
249
+ const running = isClaudeRunning(binaryPath);
250
+ if (running) {
251
+ console.log(chalk.yellow('\n Claude Code is currently running.'));
252
+ console.log(chalk.yellow(' The patch is safe (uses atomic rename — the running process'));
253
+ console.log(chalk.yellow(" keeps using the old binary in memory), but the change won't"));
254
+ console.log(chalk.yellow(' take effect until you restart Claude Code.\n'));
255
+ }
256
+ const applyNow = flags.yes ||
257
+ (await confirm({
258
+ message: running
259
+ ? "Patch binary? (you'll need to restart Claude Code after)"
260
+ : 'Patch binary? (backup will be created)',
261
+ default: true,
262
+ }));
263
+ if (!applyNow) {
264
+ if (profileName) {
265
+ console.log(chalk.dim(' Use buddy-mcp-build buddies to activate it later.\n'));
266
+ }
267
+ else {
268
+ console.log(chalk.dim(' Not saved. Run buddy-mcp-build again to find another.\n'));
269
+ }
270
+ return;
271
+ }
272
+ const patchResult = patchBinary(binaryPath, oldSalt, result.salt);
273
+ console.log(chalk.green(` Patched! ${patchResult.replacements} replacements, verified: ${patchResult.verified}`));
274
+ if (patchResult.codesigned) {
275
+ console.log(chalk.dim(' Re-signed for macOS.'));
276
+ }
277
+ else {
278
+ warnCodesign(patchResult, binaryPath);
279
+ }
280
+ console.log(chalk.dim(` Backup: ${patchResult.backupPath}`));
281
+ // Persist as v2 config (preserves existing profiles)
282
+ const configV2 = loadPetConfigV2() ?? {
283
+ version: 2,
284
+ activeProfile: null,
285
+ salt: ORIGINAL_SALT,
286
+ profiles: {},
287
+ };
288
+ configV2.salt = result.salt;
289
+ configV2.previousSalt = oldSalt;
290
+ configV2.appliedTo = binaryPath;
291
+ configV2.appliedAt = new Date().toISOString();
292
+ if (profileName) {
293
+ configV2.activeProfile = result.salt;
294
+ }
295
+ savePetConfigV2(configV2);
296
+ // Auto-install hook so the buddy survives Claude Code auto-updates
297
+ if (!isHookInstalled() && !flags.noHook) {
298
+ const mcpPath = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'mcp', 'index.js');
299
+ installHook(mcpPath);
300
+ console.log(chalk.dim(' SessionStart hook installed — pet auto-re-applies after Claude Code updates.'));
301
+ console.log(chalk.dim(' (To remove: edit ~/.claude/settings.json)'));
302
+ }
303
+ else if (isHookInstalled()) {
304
+ console.log(chalk.dim(' SessionStart hook active.'));
305
+ }
306
+ // Rename & Personality
307
+ const currentName = getCompanionName();
308
+ const currentPersonality = getCompanionPersonality();
309
+ const hasCompanion = !!(currentName && currentPersonality);
310
+ if (hasCompanion) {
311
+ const newName = flags.name ??
312
+ (await input({
313
+ message: `Rename your companion? (current: "${currentName}", leave blank to keep)`,
314
+ default: '',
315
+ }));
316
+ if (newName && newName !== currentName) {
317
+ try {
318
+ renameCompanion(newName);
319
+ console.log(chalk.green(` Renamed "${currentName}" → "${newName}"`));
320
+ }
321
+ catch (err) {
322
+ console.log(chalk.yellow(` Could not rename: ${err.message}`));
323
+ }
324
+ }
325
+ console.log(chalk.dim(`\n Current personality: "${currentPersonality}"`));
326
+ const speciesDefault = DEFAULT_PERSONALITIES[foundBones.species] || null;
327
+ let newPersonality = flags.personality;
328
+ if (!newPersonality) {
329
+ const choices = [{ name: 'Keep current', value: 'keep' }];
330
+ if (speciesDefault) {
331
+ choices.push({
332
+ name: `Use ${foundBones.species} default: "${speciesDefault.slice(0, 60)}..."`,
333
+ value: 'default',
334
+ });
335
+ }
336
+ choices.push({ name: 'Write custom', value: 'custom' });
337
+ const choice = await select({ message: 'Personality', choices });
338
+ if (choice === 'default') {
339
+ newPersonality = speciesDefault ?? undefined;
340
+ }
341
+ else if (choice === 'custom') {
342
+ newPersonality = await input({
343
+ message: "Describe your companion's personality",
344
+ });
345
+ }
346
+ }
347
+ if (newPersonality && newPersonality !== currentPersonality) {
348
+ try {
349
+ setCompanionPersonality(newPersonality);
350
+ console.log(chalk.green(' Personality updated.'));
351
+ }
352
+ catch (err) {
353
+ console.log(chalk.yellow(` Could not update personality: ${err.message}`));
354
+ }
355
+ }
356
+ }
357
+ else {
358
+ console.log(chalk.dim('\n No companion hatched yet — the visual patch has been applied.'));
359
+ console.log(chalk.dim(' Run /buddy in Claude Code to hatch your companion and get a name & personality.'));
360
+ console.log(chalk.dim(' Then run buddy-mcp-build again to customize the name and personality.'));
361
+ if (flags.name || flags.personality) {
362
+ console.log(chalk.yellow(' --name and --personality are ignored until after hatching.'));
363
+ }
364
+ }
365
+ // Update profile with final companion identity (now that rename/personality are done).
366
+ // Reload fresh so we don't overwrite concurrent profile writes with a stale snapshot.
367
+ if (profileName) {
368
+ const freshConfig = loadPetConfigV2();
369
+ const saved = freshConfig?.profiles[result.salt];
370
+ if (saved) {
371
+ saved.name = profileName || getCompanionName() || saved.name;
372
+ saved.personality = getCompanionPersonality() ?? saved.personality;
373
+ saveProfile(saved, { activate: true });
374
+ }
375
+ }
376
+ if (running) {
377
+ console.log(chalk.bold.yellow('\n Done! Quit all Claude Code sessions and relaunch to see your new pet.'));
378
+ console.log(chalk.dim(' Then run /buddy to meet your new companion.'));
379
+ }
380
+ else {
381
+ console.log(chalk.bold.green('\n Done! Launch Claude Code and run /buddy to see your new pet.'));
382
+ }
383
+ console.log(chalk.dim('\n If you enjoyed this, star the repo: https://github.com/lyellr88/buddy-mcpp\n'));
384
+ }
385
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/tui/commands/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CliFlags } from '../../types.js';
2
+ export declare function runPreview(flags?: CliFlags): Promise<void>;
3
+ //# sourceMappingURL=preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/preview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkE3C,wBAAsB,UAAU,CAAC,KAAK,GAAE,QAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDpE"}
@@ -0,0 +1,94 @@
1
+ import chalk from 'chalk';
2
+ import { SPECIES, EYES, RARITIES, HATS, RARITY_STARS } from '../../constants.js';
3
+ import { runPreflight } from '../../patcher/preflight.js';
4
+ import { banner, showPet } from "../display.js";
5
+ import { validateFlag, selectSpecies, selectEyes, selectRarity, selectHat } from "../prompts.js";
6
+ import { allTraitsFlagged } from "../builder/state.js";
7
+ import { PRESETS } from '../../presets.js';
8
+ import { renderSprite } from '../../sprites/index.js';
9
+ import { RARITY_CHALK } from "../format.js";
10
+ function runPreviewAll() {
11
+ const cols = process.stdout.columns ?? 80;
12
+ const rule = chalk.dim(' ' + '─'.repeat(Math.min(Math.max(0, cols - 4), 60)));
13
+ console.log(chalk.bold(`\n Preset gallery `) + chalk.dim(`(${PRESETS.length} presets)\n`));
14
+ for (let i = 0; i < PRESETS.length; i++) {
15
+ const p = PRESETS[i];
16
+ const color = RARITY_CHALK[p.rarity] ?? chalk.white;
17
+ const stars = RARITY_STARS[p.rarity] ?? '';
18
+ const bones = {
19
+ species: p.species,
20
+ eye: p.eye,
21
+ hat: p.hat,
22
+ rarity: p.rarity,
23
+ shiny: false,
24
+ stats: {},
25
+ };
26
+ const spriteLines = renderSprite(bones, 0);
27
+ console.log(color(` ${p.name} · ${p.rarity} ${p.species} ${stars}`));
28
+ console.log(chalk.dim(` eyes: ${p.eye} hat: ${p.hat} "${p.description}"`));
29
+ console.log();
30
+ for (const line of spriteLines) {
31
+ console.log(color(' ' + line));
32
+ }
33
+ console.log();
34
+ if (i < PRESETS.length - 1) {
35
+ console.log(rule);
36
+ console.log();
37
+ }
38
+ }
39
+ console.log(chalk.dim(` ${PRESETS.length} presets total. Run 'buddy-mcp-build --preset "<name>"' to apply one.\n`));
40
+ }
41
+ async function runSequentialPreview(flags) {
42
+ const species = validateFlag('species', flags.species, SPECIES) ?? (await selectSpecies());
43
+ const eye = validateFlag('eye', flags.eye, EYES) ?? (await selectEyes(species));
44
+ const rarity = validateFlag('rarity', flags.rarity, RARITIES) ?? (await selectRarity());
45
+ const hat = rarity === 'common'
46
+ ? 'none'
47
+ : (validateFlag('hat', flags.hat, HATS) ?? (await selectHat(species, eye, rarity)));
48
+ const shiny = flags.shiny ?? false;
49
+ const bones = { species, eye, hat, rarity, shiny, stats: {} };
50
+ showPet(bones, 'Preview');
51
+ console.log(chalk.dim(' (Preview only - no changes made)\n'));
52
+ }
53
+ export async function runPreview(flags = {}) {
54
+ banner();
55
+ if (flags.all) {
56
+ runPreviewAll();
57
+ return;
58
+ }
59
+ const preflight = runPreflight({ requireBinary: false });
60
+ if (!preflight.ok)
61
+ process.exit(1);
62
+ if (allTraitsFlagged(flags)) {
63
+ // All traits specified via flags -- just render directly
64
+ const species = validateFlag('species', flags.species, SPECIES) ?? SPECIES[0];
65
+ const eye = validateFlag('eye', flags.eye, EYES) ?? EYES[0];
66
+ const rarity = validateFlag('rarity', flags.rarity, RARITIES) ?? RARITIES[0];
67
+ const hat = rarity === 'common' ? 'none' : (validateFlag('hat', flags.hat, HATS) ?? 'crown');
68
+ const bones = { species, eye, hat, rarity, shiny: flags.shiny ?? false, stats: {} };
69
+ showPet(bones, 'Preview');
70
+ console.log(chalk.dim(' (Preview only - no changes made)\n'));
71
+ return;
72
+ }
73
+ // Try the OpenTUI builder in browse-only mode
74
+ try {
75
+ const { canUseBuilder, runBuilder } = await import("../builder/index.js");
76
+ if (await canUseBuilder()) {
77
+ await runBuilder(flags, true);
78
+ console.log(chalk.dim(' (Preview only - no changes made)\n'));
79
+ return;
80
+ }
81
+ }
82
+ catch {
83
+ // OpenTUI unavailable -- fall through
84
+ }
85
+ // Show warning if Bun is not available
86
+ if (typeof globalThis.Bun === 'undefined') {
87
+ console.log(chalk.yellow(' \u26A0 Bun is not installed — using basic prompts.\n' +
88
+ ' Install Bun (https://bun.sh) for the interactive builder\n' +
89
+ ' with live preview.\n'));
90
+ }
91
+ // Fallback: sequential prompts
92
+ await runSequentialPreview(flags);
93
+ }
94
+ //# sourceMappingURL=preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview.js","sourceRoot":"","sources":["../../../src/tui/commands/preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runRehatch(): Promise<void>;
2
+ //# sourceMappingURL=rehatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehatch.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/rehatch.ts"],"names":[],"mappings":"AAKA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BhD"}
@@ -0,0 +1,30 @@
1
+ import chalk from 'chalk';
2
+ import { confirm } from '@inquirer/prompts';
3
+ import { getCompanionName, getCompanionPersonality, deleteCompanion } from '../../config/index.js';
4
+ import { banner } from "../display.js";
5
+ export async function runRehatch() {
6
+ banner();
7
+ const name = getCompanionName();
8
+ if (!name) {
9
+ console.log(chalk.dim(' No companion found — nothing to delete.\n'));
10
+ return;
11
+ }
12
+ const personality = getCompanionPersonality();
13
+ console.log(chalk.dim(` Current companion: "${name}"`));
14
+ if (personality) {
15
+ console.log(chalk.dim(` Personality: "${personality}"`));
16
+ }
17
+ console.log();
18
+ const proceed = await confirm({
19
+ message: `Delete "${name}" so Claude Code generates a fresh companion on next /buddy?`,
20
+ default: false,
21
+ });
22
+ if (!proceed) {
23
+ console.log(chalk.dim('\n Cancelled.\n'));
24
+ return;
25
+ }
26
+ deleteCompanion();
27
+ console.log(chalk.green(`\n Companion "${name}" deleted.`));
28
+ console.log(chalk.dim(' Run /buddy in Claude Code to hatch a new one.\n'));
29
+ }
30
+ //# sourceMappingURL=rehatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rehatch.js","sourceRoot":"","sources":["../../../src/tui/commands/rehatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,CAAC;IAET,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,IAAI,GAAG,CAAC,CAAC,CAAC;IACzD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,WAAW,GAAG,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC;QAC5B,OAAO,EAAE,WAAW,IAAI,8DAA8D;QACtF,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,eAAe,EAAE,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runRestore(): Promise<void>;
2
+ //# sourceMappingURL=restore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/restore.ts"],"names":[],"mappings":"AAcA,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA+ChD"}
@@ -0,0 +1,52 @@
1
+ import chalk from 'chalk';
2
+ import { ORIGINAL_SALT } from '../../constants.js';
3
+ import { findClaudeBinary } from '../../patcher/binary-finder.js';
4
+ import { verifySalt, getMinSaltCount } from '../../patcher/salt-ops.js';
5
+ import { patchBinary, restoreBinary } from '../../patcher/patch.js';
6
+ import { loadPetConfig, loadPetConfigV2, savePetConfigV2, isHookInstalled, removeHook, } from '../../config/index.js';
7
+ import { banner, warnCodesign } from "../display.js";
8
+ export async function runRestore() {
9
+ banner();
10
+ const binaryPath = findClaudeBinary();
11
+ const config = loadPetConfig();
12
+ if (config?.salt && config.salt !== ORIGINAL_SALT) {
13
+ const check = verifySalt(binaryPath, config.salt);
14
+ if (check.found >= getMinSaltCount(binaryPath)) {
15
+ const restoreResult = patchBinary(binaryPath, config.salt, ORIGINAL_SALT);
16
+ console.log(chalk.green(' Restored original pet salt.'));
17
+ warnCodesign(restoreResult, binaryPath);
18
+ }
19
+ else {
20
+ try {
21
+ restoreBinary(binaryPath);
22
+ console.log(chalk.green(' Restored from backup.'));
23
+ }
24
+ catch (err) {
25
+ console.error(err.message);
26
+ process.exit(1);
27
+ }
28
+ }
29
+ }
30
+ else {
31
+ console.log(chalk.dim(' Already using original salt.'));
32
+ }
33
+ if (isHookInstalled()) {
34
+ removeHook();
35
+ console.log(chalk.dim(' Removed SessionStart hook.'));
36
+ }
37
+ // Preserve saved profiles for future use
38
+ const existingV2 = loadPetConfigV2();
39
+ const profiles = existingV2?.profiles ?? {};
40
+ savePetConfigV2({
41
+ version: 2,
42
+ salt: ORIGINAL_SALT,
43
+ activeProfile: null,
44
+ profiles,
45
+ restored: true,
46
+ });
47
+ if (Object.keys(profiles).length > 0) {
48
+ console.log(chalk.dim(` Buddies preserved (${Object.keys(profiles).length} saved). Use buddy-mcp-build buddies to reactivate.`));
49
+ }
50
+ console.log();
51
+ }
52
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/tui/commands/restore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,EAAE,CAAC;IACT,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAEtC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/C,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;YAC1D,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACtD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,eAAe,EAAE,EAAE,CAAC;QACtB,UAAU,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,eAAe,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC;IAC5C,eAAe,CAAC;QACd,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,aAAa;QACnB,aAAa,EAAE,IAAI;QACnB,QAAQ;QACR,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,wBAAwB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,qDAAqD,CAC1G,CACF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runShare(): Promise<void>;
2
+ //# sourceMappingURL=share.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../../src/tui/commands/share.ts"],"names":[],"mappings":"AA+EA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC9C"}