hackshop-mcp 0.0.3 → 0.0.5

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 (74) hide show
  1. package/README.md +88 -34
  2. package/catalog.json +1584 -25
  3. package/dist/build-plan/index.d.ts +10 -0
  4. package/dist/build-plan/index.js +550 -0
  5. package/dist/build-plan/index.js.map +1 -0
  6. package/dist/build-plan/types.d.ts +153 -0
  7. package/dist/build-plan/types.js +2 -0
  8. package/dist/build-plan/types.js.map +1 -0
  9. package/dist/catalog/schema.d.ts +523 -7
  10. package/dist/catalog/schema.js +49 -0
  11. package/dist/catalog/schema.js.map +1 -1
  12. package/dist/core/assess.d.ts +36 -0
  13. package/dist/core/assess.js +100 -0
  14. package/dist/core/assess.js.map +1 -0
  15. package/dist/core/errors.d.ts +2 -0
  16. package/dist/core/errors.js +70 -0
  17. package/dist/core/errors.js.map +1 -0
  18. package/dist/core/links.d.ts +3 -0
  19. package/dist/core/links.js +19 -0
  20. package/dist/core/links.js.map +1 -0
  21. package/dist/core/plan-gadget.d.ts +85 -0
  22. package/dist/core/plan-gadget.js +619 -0
  23. package/dist/core/plan-gadget.js.map +1 -0
  24. package/dist/core/resources.d.ts +37 -0
  25. package/dist/core/resources.js +143 -0
  26. package/dist/core/resources.js.map +1 -0
  27. package/dist/core/safety.d.ts +7 -0
  28. package/dist/core/safety.js +28 -0
  29. package/dist/core/safety.js.map +1 -0
  30. package/dist/core/tools.d.ts +247 -0
  31. package/dist/core/tools.js +164 -0
  32. package/dist/core/tools.js.map +1 -0
  33. package/dist/core/types.d.ts +163 -0
  34. package/dist/core/types.js +17 -0
  35. package/dist/core/types.js.map +1 -0
  36. package/dist/platforms/index.d.ts +26 -0
  37. package/dist/platforms/index.js +52 -0
  38. package/dist/platforms/index.js.map +1 -0
  39. package/dist/platforms/load.d.ts +4 -0
  40. package/dist/platforms/load.js +78 -0
  41. package/dist/platforms/load.js.map +1 -0
  42. package/dist/platforms/schema.d.ts +587 -0
  43. package/dist/platforms/schema.js +64 -0
  44. package/dist/platforms/schema.js.map +1 -0
  45. package/dist/sampling.d.ts +5 -0
  46. package/dist/sampling.js +44 -21
  47. package/dist/sampling.js.map +1 -1
  48. package/dist/server.d.ts +14 -1
  49. package/dist/server.js +164 -40
  50. package/dist/server.js.map +1 -1
  51. package/dist/site-url.d.ts +1 -0
  52. package/dist/site-url.js +4 -0
  53. package/dist/site-url.js.map +1 -0
  54. package/dist/telemetry.d.ts +29 -0
  55. package/dist/telemetry.js +100 -0
  56. package/dist/telemetry.js.map +1 -0
  57. package/dist/tools/assess_hackability.d.ts +2 -29
  58. package/dist/tools/assess_hackability.js +11 -43
  59. package/dist/tools/assess_hackability.js.map +1 -1
  60. package/dist/tools/get_build_plan.d.ts +6 -0
  61. package/dist/tools/get_build_plan.js +16 -0
  62. package/dist/tools/get_build_plan.js.map +1 -0
  63. package/dist/tools/plan_gadget.d.ts +4 -0
  64. package/dist/tools/plan_gadget.js +14 -0
  65. package/dist/tools/plan_gadget.js.map +1 -0
  66. package/dist/tools/propose_hardware.d.ts +5 -0
  67. package/dist/tools/propose_hardware.js +57 -8
  68. package/dist/tools/propose_hardware.js.map +1 -1
  69. package/dist/tools/simulate_assembly.d.ts +315 -0
  70. package/dist/tools/simulate_assembly.js +145 -0
  71. package/dist/tools/simulate_assembly.js.map +1 -0
  72. package/package.json +4 -1
  73. package/platforms.json +779 -0
  74. package/tags.md +1 -0
@@ -0,0 +1,10 @@
1
+ import type { BuildPlan, DeviceEntry, Platform, PlatformBoard, Printable } from "./types.js";
2
+ export declare function buildPlan(input: {
3
+ device: DeviceEntry;
4
+ platform: Platform | null;
5
+ board: PlatformBoard | null;
6
+ printables: Printable[];
7
+ siteUrl: string;
8
+ }): BuildPlan;
9
+ export declare function buildUrls(deviceId: string, siteUrl: string, includeMusePage: boolean): BuildPlan["urls"];
10
+ export declare function platformCaveatsFor(platform: Platform, board: PlatformBoard): string[];
@@ -0,0 +1,550 @@
1
+ export function buildPlan(input) {
2
+ const urls = buildUrls(input.device.id, input.siteUrl, input.platform !== null);
3
+ const tierLabel = input.platform && input.board
4
+ ? tierLabelFor(input.platform, input.board)
5
+ : null;
6
+ const parts = buildParts(input.device, input.board, input.printables);
7
+ const shopping_list = buildShoppingList(parts);
8
+ const trySaying = input.board?.try_saying ?? [];
9
+ const caveats = input.platform && input.board
10
+ ? platformCaveatsFor(input.platform, input.board)
11
+ : [];
12
+ const terms = input.platform
13
+ ? { summary: input.platform.terms.summary, url: input.platform.terms.url }
14
+ : null;
15
+ const summary = buildSummary(input.device, input.platform, tierLabel);
16
+ const steps = buildSteps({
17
+ device: input.device,
18
+ platform: input.platform,
19
+ board: input.board,
20
+ parts,
21
+ printables: input.printables,
22
+ trySaying,
23
+ urls,
24
+ });
25
+ const assembly = buildAssembly({
26
+ device: input.device,
27
+ platform: input.platform,
28
+ board: input.board,
29
+ parts,
30
+ printables: input.printables,
31
+ });
32
+ const planBase = {
33
+ device_id: input.device.id,
34
+ name: input.device.name,
35
+ platform_id: input.platform?.id ?? null,
36
+ tier_label: tierLabel,
37
+ summary,
38
+ est_cost_label: moneyRange(input.device.est_used_price_usd_min, input.device.est_used_price_usd_max),
39
+ est_time_label: hoursRange(input.device.est_setup_hours_min, input.device.est_setup_hours_max),
40
+ parts,
41
+ shopping_list,
42
+ steps,
43
+ assembly,
44
+ try_saying: trySaying,
45
+ caveats,
46
+ terms,
47
+ urls,
48
+ };
49
+ return {
50
+ ...planBase,
51
+ agent_brief_md: buildAgentBrief({
52
+ ...planBase,
53
+ device: input.device,
54
+ platform: input.platform,
55
+ }),
56
+ };
57
+ }
58
+ export function buildUrls(deviceId, siteUrl, includeMusePage) {
59
+ const base = normalizeSiteUrl(siteUrl);
60
+ return {
61
+ build_page: `${base}/build/${deviceId}`,
62
+ build_md: `${base}/build/${deviceId}/build.md`,
63
+ muse_page: includeMusePage ? `${base}/muse` : null,
64
+ };
65
+ }
66
+ export function platformCaveatsFor(platform, board) {
67
+ const homeTunnel = board.features.home_tunnel;
68
+ const caveats = platform.caveats.filter((caveat) => {
69
+ const lower = caveat.toLowerCase();
70
+ const psramNoTunnel = lower.includes("without psram") ||
71
+ lower.includes("without the home-network tunnel");
72
+ const tunnelFoothold = lower.includes("home-network tunnel lets") ||
73
+ lower.includes("foothold on your network");
74
+ if (psramNoTunnel)
75
+ return homeTunnel === false;
76
+ if (tunnelFoothold)
77
+ return homeTunnel === true;
78
+ return true;
79
+ });
80
+ if (board.eol)
81
+ caveats.push("End of life at the vendor");
82
+ if (board.support === "possible")
83
+ caveats.push(board.note);
84
+ return caveats;
85
+ }
86
+ function buildParts(device, board, printables) {
87
+ const parts = [{
88
+ id: "board",
89
+ name: device.name,
90
+ qty: 1,
91
+ required: true,
92
+ note: "Main board or device for this build.",
93
+ buy_url: device.buy_url ?? null,
94
+ search_url: device.buy_url ? null : ebaySearchUrl(device.name),
95
+ kind: "board",
96
+ est_price_usd: device.est_used_price_usd_min ?? null,
97
+ }];
98
+ for (const [index, part] of (board?.parts ?? []).entries()) {
99
+ parts.push(partToBuildPlanPart(part, index));
100
+ }
101
+ for (const printable of printables) {
102
+ parts.push({
103
+ id: `printed-${printable.part}`,
104
+ name: printable.part === "desk-stand" ? "Printed desk stand" : "Printed enclosure",
105
+ qty: 1,
106
+ required: false,
107
+ note: "Print it yourself (STL) or order it from a print service; files in step Print the stand.",
108
+ buy_url: null,
109
+ search_url: null,
110
+ kind: "printed",
111
+ est_price_usd: null,
112
+ });
113
+ }
114
+ return parts;
115
+ }
116
+ function partToBuildPlanPart(part, index) {
117
+ return {
118
+ id: `part-${index + 1}-${slugify(part.name)}`,
119
+ name: part.name,
120
+ qty: part.qty,
121
+ required: part.required,
122
+ note: part.note,
123
+ buy_url: part.buy_url ?? null,
124
+ search_url: !part.buy_url && part.search ? amazonSearchUrl(part.search) : null,
125
+ kind: "part",
126
+ est_price_usd: part.est_price_usd ?? null,
127
+ };
128
+ }
129
+ function buildShoppingList(parts) {
130
+ const items = parts.map((part) => {
131
+ const url = part.buy_url ?? part.search_url;
132
+ return {
133
+ part_id: part.id,
134
+ name: part.name,
135
+ qty: part.qty,
136
+ url,
137
+ url_kind: part.buy_url ? "buy" : "search",
138
+ est_price_usd: part.est_price_usd,
139
+ required: part.required,
140
+ };
141
+ });
142
+ const requiredPrices = items
143
+ .filter((item) => item.required)
144
+ .map((item) => item.est_price_usd === null ? null : item.est_price_usd * item.qty);
145
+ const est_total_usd = requiredPrices.some((price) => price === null)
146
+ ? null
147
+ : requiredPrices.reduce((sum, price) => sum + price, 0);
148
+ return {
149
+ items,
150
+ est_total_usd,
151
+ currency: "USD",
152
+ purchase_policy: "Show the human this list and get explicit approval for the exact items and total before buying anything. If you can use a browser, you may add items to a cart, but stop before checkout.",
153
+ };
154
+ }
155
+ function buildSteps(args) {
156
+ if (!args.platform || !args.board) {
157
+ return [
158
+ partsStep(args.parts),
159
+ researchStep(args.device),
160
+ assembleStep(args.platform, args.board, args.printables),
161
+ tryStep(args.trySaying, false),
162
+ ];
163
+ }
164
+ if (args.platform.sdk_path === "linux") {
165
+ return [
166
+ partsStep(args.parts),
167
+ assembleStep(args.platform, args.board, args.printables),
168
+ tokenStep(args.platform),
169
+ linuxInstallStep(args.platform),
170
+ linuxPairStep(args.platform),
171
+ tryStep(args.trySaying, true),
172
+ ];
173
+ }
174
+ const steps = [
175
+ partsStep(args.parts),
176
+ tokenStep(args.platform),
177
+ esp32FlashStep(args.platform, args.board, args.urls),
178
+ esp32PairStep(args.platform),
179
+ ];
180
+ if (args.printables.length > 0)
181
+ steps.push(printStep(args.printables));
182
+ steps.push(assembleStep(args.platform, args.board, args.printables));
183
+ steps.push(tryStep(args.trySaying, true));
184
+ return steps;
185
+ }
186
+ function partsStep(parts) {
187
+ return {
188
+ id: "parts",
189
+ title: "Get the parts",
190
+ why: "You need the board and any build-specific accessories before flashing or pairing.",
191
+ body_md: parts.map(partMarkdownLine).join("\n"),
192
+ commands: [],
193
+ links: partLinks(parts),
194
+ };
195
+ }
196
+ function tokenStep(platform) {
197
+ return {
198
+ id: "token",
199
+ title: "Get your Muse SDK token",
200
+ why: "Muse gadgets pair with your account by using a private SDK token.",
201
+ body_md: "Create a token at gadgets.muse.ai > Account > SDK tokens (it starts with `mgst_`). ESP32 builds read it from `idf.py menuconfig` > ESP32 Device SDK > Muse Gadgets SDK token (or `CONFIG_GADGET_SDK_TOKEN` in the build's sdkconfig); the Linux installer takes it as `--sdk-token`. Use `mgst_YOUR_TOKEN` as the placeholder in docs, scripts and prompts; never commit the real token or paste it anywhere public.",
202
+ commands: [],
203
+ links: [
204
+ { label: "Muse SDK tokens", url: "https://gadgets.muse.ai/settings/sdk-tokens" },
205
+ { label: `${platform.name} terms`, url: platform.terms.url },
206
+ ],
207
+ };
208
+ }
209
+ function esp32FlashStep(platform, board, urls) {
210
+ return {
211
+ id: "flash",
212
+ title: "Flash the firmware",
213
+ why: "The board needs the Muse ESP32 firmware configured with your SDK token.",
214
+ body_md: "### Let your agent do it\n" +
215
+ `Give your coding agent the build brief at ${urls.build_md}. Tell it to keep the token private, use \`mgst_YOUR_TOKEN\` as the placeholder, and ask you to confirm the serial port before flashing.\n\n` +
216
+ "### Do it yourself\n" +
217
+ "Install ESP-IDF v6.0.1, clone the Muse Gadget SDK, run `idf.py menuconfig`, set the SDK token under ESP32 Device SDK, then build and flash. If flashing cannot connect, hold BOOT, tap RESET, then release BOOT.",
218
+ commands: [
219
+ "git clone -b v6.0.1 --recursive https://github.com/espressif/esp-idf.git ~/esp/esp-idf-v6",
220
+ "~/esp/esp-idf-v6/install.sh esp32c5,esp32s3,esp32c6,esp32",
221
+ ". ~/esp/esp-idf-v6/export.sh",
222
+ "git clone https://github.com/facebookincubator/muse-gadget-sdk",
223
+ "cd muse-gadget-sdk/esp32",
224
+ "idf.py menuconfig",
225
+ board.build,
226
+ "idf.py -p PORT flash monitor",
227
+ ],
228
+ links: [
229
+ { label: "Muse Gadget SDK", url: platform.sdk_repo },
230
+ { label: "ESP32 SDK docs", url: platform.docs_url },
231
+ ],
232
+ };
233
+ }
234
+ function esp32PairStep(platform) {
235
+ return {
236
+ id: "pair",
237
+ title: "Pair it with the Muse app",
238
+ why: "Pairing links the freshly flashed board to your Muse account.",
239
+ body_md: "In the Muse app, turn on Settings > Devices > Developer mode, then Settings > Devices > Add Device (+). Pick `MuseGadget-XXXXXX` and press the board's button (BOOT on dev kits) when the light breathes blue. Green = connected. Status lights: orange = ready for setup, blue breathing = press the button, green = connected, yellow blinking = reconnecting, red blinking = error. Hold the button for 5 seconds to reset pairing.",
240
+ commands: [],
241
+ links: [
242
+ { label: "Muse Gadgets", url: platform.homepage },
243
+ { label: "Community help", url: "https://discord.gg/3bhjCkZdd6" },
244
+ ],
245
+ };
246
+ }
247
+ function printStep(printables) {
248
+ return {
249
+ id: "print",
250
+ title: "Print the stand",
251
+ why: "The printable files keep the gadget visible, stable, and easy to reach.",
252
+ body_md: "Print the stand from the STL, or send the STEP/STL to a print service. Test fit before leaving the device unattended.",
253
+ commands: [],
254
+ links: printables.flatMap((printable) => [
255
+ { label: `${printable.title} STL`, url: printable.stl_url },
256
+ { label: `${printable.title} STEP`, url: printable.step_url },
257
+ { label: `${printable.title} SVG`, url: printable.svg_url },
258
+ { label: `${printable.title} fab.json`, url: printable.fab_url },
259
+ ]),
260
+ };
261
+ }
262
+ function assembleStep(platform, board, printables) {
263
+ if (platform?.sdk_path === "linux") {
264
+ return {
265
+ id: "assemble",
266
+ title: "Put it together",
267
+ why: "The Linux gadget needs storage, power and Bluetooth ready before pairing.",
268
+ body_md: "Put the board in its case, insert the flashed SD card if it uses one, connect the power supply and attach a USB Bluetooth LE adapter if the machine does not have Bluetooth built in.",
269
+ commands: [],
270
+ links: [],
271
+ };
272
+ }
273
+ const printable = printables[0];
274
+ const fabCue = printable?.fab?.print?.orientation
275
+ ? `The printable was designed to print ${printable.fab.print.orientation}. `
276
+ : "";
277
+ const placement = printable
278
+ ? `Put the board in the printed ${printable.part.replace("-", " ")}. `
279
+ : "Put the board in its stand, case or a stable spot on the desk. ";
280
+ const cable = board
281
+ ? "Route the USB-C cable through the slot or open edge, power it, and check that the buttons and display are reachable."
282
+ : "Route the cable neatly, power it, and check the fit.";
283
+ return {
284
+ id: "assemble",
285
+ title: "Put it together",
286
+ why: "A physical agent body needs to sit safely, keep the cable clear and leave controls reachable.",
287
+ body_md: `${fabCue}${placement}${cable}`,
288
+ commands: [],
289
+ links: printable
290
+ ? [
291
+ { label: `${printable.title} fab.json`, url: printable.fab_url },
292
+ { label: `${printable.title} STL`, url: printable.stl_url },
293
+ ]
294
+ : [],
295
+ };
296
+ }
297
+ function linuxInstallStep(platform) {
298
+ return {
299
+ id: "install",
300
+ title: "Install the Linux SDK",
301
+ why: "The installer creates the Muse gadget service and gives Muse a bounded command surface on the machine.",
302
+ body_md: "Download `install.sh`, read it, then run it with `mgst_YOUR_TOKEN`. Use `--run-as USER` with a dedicated low-privilege user unless you intentionally want Muse to have the install account's permissions.",
303
+ commands: [
304
+ "curl -fsSL https://raw.githubusercontent.com/facebookincubator/muse-gadget-sdk/main/linux/install.sh -o install.sh",
305
+ "less install.sh",
306
+ "bash install.sh --sdk-token mgst_YOUR_TOKEN",
307
+ ],
308
+ links: [
309
+ { label: "Linux SDK docs", url: platform.docs_url },
310
+ { label: "Muse Gadget SDK", url: platform.sdk_repo },
311
+ ],
312
+ };
313
+ }
314
+ function linuxPairStep(platform) {
315
+ return {
316
+ id: "pair",
317
+ title: "Pair it with the Muse app",
318
+ why: "The Linux device needs to pair with your Muse account before it can receive commands.",
319
+ body_md: "In the Muse app, turn on Settings > Devices > Developer mode, then Settings > Devices > Add Device (+). Pick `MuseGadget-XXXXXX` within 10 minutes of install. Green = connected. If you miss the window, run `sudo musegadget pair`, then add the device from the app again.",
320
+ commands: ["sudo musegadget pair"],
321
+ links: [{ label: "Muse Gadgets", url: platform.homepage }],
322
+ };
323
+ }
324
+ function researchStep(device) {
325
+ return {
326
+ id: "research",
327
+ title: "Research the firmware path",
328
+ why: "This device is not mapped to a Muse platform board yet, so the safe next step is reading the existing firmware and community resources.",
329
+ body_md: "Review the firmware and community links before buying accessories, flashing firmware, or changing bootloaders. Confirm recovery instructions for your exact hardware revision.",
330
+ commands: [],
331
+ links: device.firmware_links.map((url, index) => ({
332
+ label: `Firmware reference ${index + 1}`,
333
+ url,
334
+ })),
335
+ };
336
+ }
337
+ function tryStep(trySaying, musePlatform) {
338
+ const body = trySaying.length > 0
339
+ ? trySaying.map((prompt) => `- ${prompt}`).join("\n")
340
+ : musePlatform
341
+ ? "No board-specific prompts are curated yet. Ask it to report status, then try your project prompt."
342
+ : "Once it boots with the firmware you chose, verify basic input/output and then try your project prompt manually.";
343
+ return {
344
+ id: "try",
345
+ title: "Try it",
346
+ why: "A first prompt proves the device is paired, reachable, and useful for the project.",
347
+ body_md: body,
348
+ commands: [],
349
+ links: [],
350
+ };
351
+ }
352
+ function buildAssembly(args) {
353
+ if (!args.platform || !args.board) {
354
+ return [
355
+ assemblyStep(1, "verify", ["board"], [], "Verify the device powers on before changing firmware.", "Device boots and has a documented recovery path.", false, "Requires human judgment about firmware safety."),
356
+ ];
357
+ }
358
+ if (args.platform.sdk_path === "linux") {
359
+ const hasBluetoothAdapter = args.parts.some((part) => /bluetooth|ble/i.test(part.name));
360
+ const steps = [
361
+ assemblyStep(1, "insert", partIdsMatching(args.parts, /microsd|sd card/i), [], "Insert the prepared SD card or boot storage into the board.", "Storage is fully seated.", true, "Simple insertion if the slot is exposed and the card is oriented."),
362
+ assemblyStep(2, "place", ["board"], ["case screwdriver if needed"], "Put the Linux board in its case or stable enclosure.", "Board is supported, vents are clear and ports are accessible.", true, "Simple placement; fastening depends on the case."),
363
+ ];
364
+ if (hasBluetoothAdapter) {
365
+ steps.push(assemblyStep(3, "connect", partIdsMatching(args.parts, /bluetooth|ble/i), [], "Plug in the USB Bluetooth LE adapter if the device does not have Bluetooth built in.", "Adapter is fully seated in a USB port.", true, "USB insertion is feasible with a known port pose."));
366
+ }
367
+ steps.push(assemblyStep(steps.length + 1, "power", partIdsMatching(args.parts, /power|supply/i), [], "Connect power to the board.", "Power LED is on and the board starts booting.", true, "Simple cable insertion if the connector is visible."), assemblyStep(steps.length + 2, "pair", ["board"], ["Muse app"], "Pair from the Muse app within 10 minutes, or run sudo musegadget pair and add the device again.", "Muse app shows the gadget as connected.", false, "Pairing requires app access and account confirmation."), assemblyStep(steps.length + 3, "verify", ["board"], [], "Ask Muse to check the device health or run a simple command.", "The service responds and reports healthy status.", false, "Requires software verification through Muse."));
368
+ return renumber(steps);
369
+ }
370
+ const steps = [];
371
+ if (args.printables.length > 0) {
372
+ const printable = args.printables[0];
373
+ const printInstruction = printable.fab?.print?.orientation
374
+ ? `Print ${printable.title} ${printable.fab.print.orientation}.`
375
+ : `Print ${printable.title} from the STL.`;
376
+ steps.push(assemblyStep(1, "print", [`printed-${printable.part}`], ["3D printer or print service"], printInstruction, "Part is clean, stable and matches the board before final assembly.", false, "Printing is a fabrication job, not a dexterous assembly move."));
377
+ steps.push(assemblyStep(2, "place", ["board", `printed-${printable.part}`], [], "Put the board into the printed stand or case and keep buttons, screen and ports exposed.", "Board sits flush without forcing and does not wobble.", true, `Clearance should allow placement; check fab.json before automating.`));
378
+ steps.push(assemblyStep(3, "route_cable", ["board", `printed-${printable.part}`], [], "Route the USB-C cable through the cable slot or open edge.", "Cable exits without lifting the board or blocking buttons.", true, "Cable routing is feasible when the cable path is unobstructed."));
379
+ }
380
+ else {
381
+ steps.push(assemblyStep(1, "place", ["board"], [], "Place the board in its stand, case or a stable spot on the desk.", "Board is stable and ports are reachable.", true, "Simple placement."));
382
+ }
383
+ steps.push(assemblyStep(steps.length + 1, "power", ["board"], ["USB-C data cable"], "Connect USB-C power/data.", "Board powers on or appears on the serial port.", true, "USB-C insertion is feasible with a known connector pose."), assemblyStep(steps.length + 2, "flash", ["board"], ["computer", "USB-C data cable"], "Build and flash the Muse firmware with the selected board command.", "Flash completes and serial monitor shows startup logs.", false, "Requires a computer, serial-port selection and software commands."), assemblyStep(steps.length + 3, "pair", ["board"], ["Muse app"], "In the Muse app, turn on Developer mode, add MuseGadget-XXXXXX and press the board button when the light breathes blue.", "Status turns green and the app shows connected.", false, "Pairing requires the human's Muse app and account."), assemblyStep(steps.length + 4, "verify", ["board"], [], "Try the first board-specific prompt.", "The gadget responds in Muse or displays the expected status.", false, "Requires semantic verification."));
384
+ return renumber(steps);
385
+ }
386
+ function assemblyStep(order, action, part_ids, tools, instruction, check, feasible, notes) {
387
+ return {
388
+ id: `${order}-${action}`,
389
+ order,
390
+ action,
391
+ part_ids: part_ids.filter(Boolean),
392
+ tools,
393
+ instruction,
394
+ check,
395
+ robot: { feasible, notes },
396
+ };
397
+ }
398
+ function renumber(steps) {
399
+ return steps.map((step, index) => ({
400
+ ...step,
401
+ id: `${index + 1}-${step.action}`,
402
+ order: index + 1,
403
+ }));
404
+ }
405
+ function partIdsMatching(parts, pattern) {
406
+ return parts
407
+ .filter((part) => pattern.test(part.name))
408
+ .map((part) => part.id);
409
+ }
410
+ function buildAgentBrief(args) {
411
+ const lines = [
412
+ `# Build: ${args.name} as a Muse gadget`,
413
+ "",
414
+ "## Goal",
415
+ args.summary,
416
+ "",
417
+ "## Hardware",
418
+ ...args.parts.map((part) => `- ${hardwareBriefLine(part)}`),
419
+ "",
420
+ "## Shopping list (ask before buying)",
421
+ ...args.shopping_list.items.map((item) => `- ${shoppingBriefLine(item)}`),
422
+ `- Estimated total: ${args.shopping_list.est_total_usd === null ? "unknown" : `$${args.shopping_list.est_total_usd}`}`,
423
+ `- Purchase policy: ${args.shopping_list.purchase_policy}`,
424
+ "",
425
+ "## Constraints",
426
+ "- Ask the human before any purchase.",
427
+ "- Use `mgst_YOUR_TOKEN` as the placeholder; never commit a real token.",
428
+ "- ESP-IDF v6.0.1 only for ESP32 builds; do not substitute another ESP-IDF version.",
429
+ "- Confirm the serial port before flashing; ask the human which `PORT` to use.",
430
+ args.terms
431
+ ? `- Terms: ${args.terms.summary} (${args.terms.url})`
432
+ : "- No Muse platform terms apply yet; verify upstream firmware licenses before distributing.",
433
+ "",
434
+ "## Steps",
435
+ ...args.steps.flatMap((step, index) => [
436
+ `${index + 1}. ${step.title}`,
437
+ step.why,
438
+ ...briefStepBody(step).map((line) => ` ${line}`),
439
+ ...step.commands.map((command) => ` - \`${command}\``),
440
+ ]),
441
+ "",
442
+ "## Assemble",
443
+ ...args.assembly.map((step) => `${step.order}. ${step.instruction} Check: ${step.check} Robot feasible: ${step.robot.feasible ? "yes" : "no"} (${step.robot.notes})`),
444
+ "",
445
+ "## Verify",
446
+ args.platform
447
+ ? "- Status light is green, or the Linux service is paired and healthy."
448
+ : "- Device boots and the selected firmware path has a documented recovery route.",
449
+ ...(args.try_saying.length > 0
450
+ ? args.try_saying.map((prompt) => `- Try: ${prompt}`)
451
+ : ["- Try the project prompt manually after the basic bring-up works."]),
452
+ "",
453
+ "## References",
454
+ args.platform ? `- SDK repo: ${args.platform.sdk_repo}` : "- SDK repo: n/a",
455
+ args.platform
456
+ ? `- AGENTS.md (read this first): ${args.platform.sdk_repo}/blob/main/${args.platform.sdk_path}/AGENTS.md`
457
+ : "- AGENTS.md path: n/a",
458
+ args.platform ? `- Platform docs: ${args.platform.docs_url}` : "- Platform docs: n/a",
459
+ ...args.device.firmware_links
460
+ .filter((url) => !args.platform || url !== args.platform.docs_url)
461
+ .map((url) => `- Board docs or firmware: ${url}`),
462
+ `- Build page: ${args.urls.build_page}`,
463
+ "- Save it: tell the human to click Start a build on the build page so their progress is saved.",
464
+ ];
465
+ return lines.join("\n");
466
+ }
467
+ // The brief is read by a coding agent, so the human-facing "let your agent do
468
+ // it" subsection of the flash step is replaced with the facts the agent needs.
469
+ function briefStepBody(step) {
470
+ if (step.id === "flash") {
471
+ return [
472
+ "Set the SDK token with `idf.py menuconfig` (ESP32 Device SDK > Muse Gadgets SDK token) before building; never print the full token.",
473
+ "If flashing cannot connect: hold BOOT, tap RESET, release BOOT, retry.",
474
+ ];
475
+ }
476
+ if (step.id === "parts")
477
+ return [];
478
+ return step.body_md
479
+ .split("\n")
480
+ .map((line) => line.trim())
481
+ .filter((line) => line.length > 0 && !line.startsWith("#"));
482
+ }
483
+ function hardwareBriefLine(part) {
484
+ const link = part.buy_url ?? part.search_url;
485
+ const prefix = link ? `[${part.name}](${link})` : part.name;
486
+ const required = part.required ? "required" : "optional";
487
+ return `${prefix} x${part.qty} (${required}, ${part.kind}): ${part.note}`;
488
+ }
489
+ function shoppingBriefLine(item) {
490
+ const required = item.required ? "required" : "optional";
491
+ const price = item.est_price_usd === null ? "price unknown" : `est. $${item.est_price_usd}`;
492
+ const url = item.url ? `${item.url_kind}: ${item.url}` : "no URL";
493
+ return `${item.name} x${item.qty} (${required}, ${price}; ${url})`;
494
+ }
495
+ function buildSummary(device, platform, tierLabel) {
496
+ if (!platform) {
497
+ return `A research-first build path for ${device.name}, with firmware references and buying links in one place.`;
498
+ }
499
+ const tier = tierLabel ? ` (${tierLabel})` : "";
500
+ return `A working ${platform.name}${tier} build on ${device.name}, paired to your Muse account and ready for first prompts.`;
501
+ }
502
+ function partMarkdownLine(part) {
503
+ const required = part.required ? "required" : "optional";
504
+ const link = part.buy_url ?? part.search_url;
505
+ const suffix = link ? ` [link](${link})` : "";
506
+ return `- ${part.name} x${part.qty} (${required}): ${part.note}${suffix}`;
507
+ }
508
+ function partLinks(parts) {
509
+ return parts.flatMap((part) => {
510
+ const url = part.buy_url ?? part.search_url;
511
+ return url ? [{ label: part.name, url }] : [];
512
+ });
513
+ }
514
+ function tierLabelFor(platform, board) {
515
+ return platform.tiers.find((tier) => tier.id === board.tier)?.label ?? board.tier;
516
+ }
517
+ function moneyRange(min, max) {
518
+ if (min === undefined && max === undefined)
519
+ return null;
520
+ if (min !== undefined && max !== undefined && min !== max)
521
+ return `$${min}-${max}`;
522
+ return `~$${min ?? max}`;
523
+ }
524
+ function hoursRange(min, max) {
525
+ if (min === undefined && max === undefined)
526
+ return null;
527
+ if (min !== undefined && max !== undefined && min !== max) {
528
+ return `${formatNumber(min)}-${formatNumber(max)} hr setup`;
529
+ }
530
+ return `~${formatNumber(min ?? max ?? 0)} hr setup`;
531
+ }
532
+ function formatNumber(value) {
533
+ return Number.isInteger(value) ? String(value) : String(value);
534
+ }
535
+ function ebaySearchUrl(name) {
536
+ return `https://www.ebay.com/sch/i.html?_nkw=${encodeURIComponent(name)}`;
537
+ }
538
+ function amazonSearchUrl(search) {
539
+ return `https://www.amazon.com/s?k=${encodeURIComponent(search)}`;
540
+ }
541
+ function normalizeSiteUrl(siteUrl) {
542
+ return siteUrl.replace(/\/+$/, "");
543
+ }
544
+ function slugify(text) {
545
+ return text
546
+ .toLowerCase()
547
+ .replace(/[^a-z0-9]+/g, "-")
548
+ .replace(/^-+|-+$/g, "") || "item";
549
+ }
550
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/build-plan/index.ts"],"names":[],"mappings":"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"}