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.
- package/README.md +88 -34
- package/catalog.json +1584 -25
- package/dist/build-plan/index.d.ts +10 -0
- package/dist/build-plan/index.js +550 -0
- package/dist/build-plan/index.js.map +1 -0
- package/dist/build-plan/types.d.ts +153 -0
- package/dist/build-plan/types.js +2 -0
- package/dist/build-plan/types.js.map +1 -0
- package/dist/catalog/schema.d.ts +523 -7
- package/dist/catalog/schema.js +49 -0
- package/dist/catalog/schema.js.map +1 -1
- package/dist/core/assess.d.ts +36 -0
- package/dist/core/assess.js +100 -0
- package/dist/core/assess.js.map +1 -0
- package/dist/core/errors.d.ts +2 -0
- package/dist/core/errors.js +70 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/links.d.ts +3 -0
- package/dist/core/links.js +19 -0
- package/dist/core/links.js.map +1 -0
- package/dist/core/plan-gadget.d.ts +85 -0
- package/dist/core/plan-gadget.js +619 -0
- package/dist/core/plan-gadget.js.map +1 -0
- package/dist/core/resources.d.ts +37 -0
- package/dist/core/resources.js +143 -0
- package/dist/core/resources.js.map +1 -0
- package/dist/core/safety.d.ts +7 -0
- package/dist/core/safety.js +28 -0
- package/dist/core/safety.js.map +1 -0
- package/dist/core/tools.d.ts +247 -0
- package/dist/core/tools.js +164 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/types.d.ts +163 -0
- package/dist/core/types.js +17 -0
- package/dist/core/types.js.map +1 -0
- package/dist/platforms/index.d.ts +26 -0
- package/dist/platforms/index.js +52 -0
- package/dist/platforms/index.js.map +1 -0
- package/dist/platforms/load.d.ts +4 -0
- package/dist/platforms/load.js +78 -0
- package/dist/platforms/load.js.map +1 -0
- package/dist/platforms/schema.d.ts +587 -0
- package/dist/platforms/schema.js +64 -0
- package/dist/platforms/schema.js.map +1 -0
- package/dist/sampling.d.ts +5 -0
- package/dist/sampling.js +44 -21
- package/dist/sampling.js.map +1 -1
- package/dist/server.d.ts +14 -1
- package/dist/server.js +164 -40
- package/dist/server.js.map +1 -1
- package/dist/site-url.d.ts +1 -0
- package/dist/site-url.js +4 -0
- package/dist/site-url.js.map +1 -0
- package/dist/telemetry.d.ts +29 -0
- package/dist/telemetry.js +100 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tools/assess_hackability.d.ts +2 -29
- package/dist/tools/assess_hackability.js +11 -43
- package/dist/tools/assess_hackability.js.map +1 -1
- package/dist/tools/get_build_plan.d.ts +6 -0
- package/dist/tools/get_build_plan.js +16 -0
- package/dist/tools/get_build_plan.js.map +1 -0
- package/dist/tools/plan_gadget.d.ts +4 -0
- package/dist/tools/plan_gadget.js +14 -0
- package/dist/tools/plan_gadget.js.map +1 -0
- package/dist/tools/propose_hardware.d.ts +5 -0
- package/dist/tools/propose_hardware.js +57 -8
- package/dist/tools/propose_hardware.js.map +1 -1
- package/dist/tools/simulate_assembly.d.ts +315 -0
- package/dist/tools/simulate_assembly.js +145 -0
- package/dist/tools/simulate_assembly.js.map +1 -0
- package/package.json +4 -1
- package/platforms.json +779 -0
- package/tags.md +1 -0
|
@@ -1,46 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
5
|
-
device_name: z.string().min(1).max(200),
|
|
6
|
-
});
|
|
7
|
-
// Simple normalization for fuzzy lookup: lowercase, strip non-alnum.
|
|
8
|
-
function norm(s) {
|
|
9
|
-
return s.toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
10
|
-
}
|
|
1
|
+
import { getLoadedPlatforms, printablesFor } from "../platforms/index.js";
|
|
2
|
+
import { siteUrlFromEnv } from "../site-url.js";
|
|
3
|
+
import { assessHackability as assessHackabilityCore, assessHackabilityInput, } from "../core/assess.js";
|
|
4
|
+
export { assessHackabilityInput };
|
|
11
5
|
export function assessHackability(input, catalog) {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!match) {
|
|
20
|
-
return {
|
|
21
|
-
found: false,
|
|
22
|
-
message: `"${input.device_name}" is not in the catalog. Cannot assess hackability without verification. Try a more specific name, or check the firmware links section of similar devices.`,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
const safety = applyBrickRiskSafety(match);
|
|
26
|
-
const links = buildLinks(match);
|
|
27
|
-
return {
|
|
28
|
-
found: true,
|
|
29
|
-
device: {
|
|
30
|
-
id: match.id,
|
|
31
|
-
name: match.name,
|
|
32
|
-
category: match.category,
|
|
33
|
-
hackable: true, // presence in catalog implies hackable
|
|
34
|
-
hack_difficulty: match.hack_difficulty,
|
|
35
|
-
brick_risk: safety.brick_risk,
|
|
36
|
-
brick_risk_label: safety.brick_risk_label,
|
|
37
|
-
brick_risk_disclaimer: safety.brick_risk_disclaimer,
|
|
38
|
-
firmware_links: match.firmware_links,
|
|
39
|
-
community_size: match.community_size_bucket,
|
|
40
|
-
last_verified: match.last_verified,
|
|
41
|
-
notes: match.notes,
|
|
42
|
-
links,
|
|
43
|
-
},
|
|
44
|
-
};
|
|
6
|
+
const siteUrl = siteUrlFromEnv();
|
|
7
|
+
return assessHackabilityCore(input, {
|
|
8
|
+
catalog,
|
|
9
|
+
platforms: getLoadedPlatforms(),
|
|
10
|
+
printablesFor: (device, baseUrl) => printablesFor(device, baseUrl),
|
|
11
|
+
siteUrl,
|
|
12
|
+
});
|
|
45
13
|
}
|
|
46
14
|
//# sourceMappingURL=assess_hackability.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assess_hackability.js","sourceRoot":"","sources":["../../src/tools/assess_hackability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assess_hackability.js","sourceRoot":"","sources":["../../src/tools/assess_hackability.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,iBAAiB,IAAI,qBAAqB,EAC1C,sBAAsB,GAGvB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,sBAAsB,EAAuC,CAAC;AAEvE,MAAM,UAAU,iBAAiB,CAC/B,KAAkB,EAClB,OAAsB;IAEtB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,qBAAqB,CAAC,KAAK,EAAE;QAClC,OAAO;QACP,SAAS,EAAE,kBAAkB,EAAE;QAC/B,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,MAAqB,EAAE,OAAO,CAAC;QACjF,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BuildPlan } from "../build-plan/types.js";
|
|
2
|
+
import type { DeviceEntry } from "../catalog/schema.js";
|
|
3
|
+
import { getBuildPlanInput, type GetBuildPlanInput } from "../core/tools.js";
|
|
4
|
+
import type { Platform } from "../platforms/schema.js";
|
|
5
|
+
export { getBuildPlanInput, type GetBuildPlanInput };
|
|
6
|
+
export declare function getBuildPlan(input: GetBuildPlanInput, catalog: DeviceEntry[], platforms: Platform[], siteUrl: string): BuildPlan;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getBuildPlan as getBuildPlanCore, getBuildPlanInput } from "../core/tools.js";
|
|
2
|
+
import { printablesFor } from "../platforms/index.js";
|
|
3
|
+
export { getBuildPlanInput };
|
|
4
|
+
export function getBuildPlan(input, catalog, platforms, siteUrl) {
|
|
5
|
+
const result = getBuildPlanCore(input, {
|
|
6
|
+
catalog,
|
|
7
|
+
platforms,
|
|
8
|
+
printablesFor: (device, baseUrl) => printablesFor(device, baseUrl),
|
|
9
|
+
siteUrl,
|
|
10
|
+
});
|
|
11
|
+
if ("isError" in result) {
|
|
12
|
+
throw new Error(result.text);
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=get_build_plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_build_plan.js","sourceRoot":"","sources":["../../src/tools/get_build_plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,iBAAiB,EAA0B,MAAM,kBAAkB,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,iBAAiB,EAA0B,CAAC;AAErD,MAAM,UAAU,YAAY,CAC1B,KAAwB,EACxB,OAAsB,EACtB,SAAqB,EACrB,OAAe;IAEf,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE;QACrC,OAAO;QACP,SAAS;QACT,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,MAAqB,EAAE,OAAO,CAAC;QACjF,OAAO;KACR,CAAC,CAAC;IACH,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { DeviceEntry } from "../catalog/schema.js";
|
|
2
|
+
import { NEED_VALUES, planGadgetInput, type Need, type PlanGadgetInput, type PlanGadgetOutput, type Size } from "../core/plan-gadget.js";
|
|
3
|
+
export { NEED_VALUES, planGadgetInput, type Need, type PlanGadgetInput, type PlanGadgetOutput, type Size };
|
|
4
|
+
export declare function planGadget(input: PlanGadgetInput, catalog: DeviceEntry[]): PlanGadgetOutput;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { getLoadedPlatforms, printablesFor } from "../platforms/index.js";
|
|
2
|
+
import { siteUrlFromEnv } from "../site-url.js";
|
|
3
|
+
import { NEED_VALUES, planGadget as planGadgetCore, planGadgetInput, } from "../core/plan-gadget.js";
|
|
4
|
+
export { NEED_VALUES, planGadgetInput };
|
|
5
|
+
export function planGadget(input, catalog) {
|
|
6
|
+
const siteUrl = siteUrlFromEnv();
|
|
7
|
+
return planGadgetCore(input, {
|
|
8
|
+
catalog,
|
|
9
|
+
platforms: getLoadedPlatforms(),
|
|
10
|
+
printablesFor: (device, baseUrl) => printablesFor(device, baseUrl),
|
|
11
|
+
siteUrl,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=plan_gadget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan_gadget.js","sourceRoot":"","sources":["../../src/tools/plan_gadget.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,UAAU,IAAI,cAAc,EAC5B,eAAe,GAKhB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAqE,CAAC;AAK3G,MAAM,UAAU,UAAU,CACxB,KAAsB,EACtB,OAAsB;IAEtB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,cAAc,CAAC,KAAK,EAAE;QAC3B,OAAO;QACP,SAAS,EAAE,kBAAkB,EAAE;QAC/B,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,MAAqB,EAAE,OAAO,CAAC;QACjF,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
3
|
import type { DeviceEntry } from "../catalog/schema.js";
|
|
4
4
|
import { type DeviceLinks } from "../links.js";
|
|
5
|
+
import { type AgentPlatform } from "../platforms/index.js";
|
|
5
6
|
export declare const proposeHardwareInput: z.ZodObject<{
|
|
6
7
|
idea: z.ZodString;
|
|
7
8
|
budget_usd: z.ZodOptional<z.ZodNumber>;
|
|
@@ -30,12 +31,16 @@ export interface Proposal {
|
|
|
30
31
|
notes: string;
|
|
31
32
|
links: DeviceLinks;
|
|
32
33
|
ebay_query_suggestion: string;
|
|
34
|
+
agent_platforms: AgentPlatform[];
|
|
33
35
|
}
|
|
34
36
|
export interface ProposeOutput {
|
|
35
37
|
proposals: Proposal[];
|
|
36
38
|
reasoning: string;
|
|
37
39
|
degraded: boolean;
|
|
38
40
|
message?: string;
|
|
41
|
+
note?: string;
|
|
42
|
+
reasoning_unavailable?: boolean;
|
|
43
|
+
try_instead?: "plan_gadget";
|
|
39
44
|
}
|
|
40
45
|
export declare function shortlistCandidates(catalog: DeviceEntry[], idea: string): DeviceEntry[];
|
|
41
46
|
export declare function proposeHardware(input: ProposeInput, catalog: DeviceEntry[], server: Server): Promise<ProposeOutput>;
|
|
@@ -2,6 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import { applyBrickRiskSafety } from "../safety.js";
|
|
3
3
|
import { sampleJson } from "../sampling.js";
|
|
4
4
|
import { buildLinks } from "../links.js";
|
|
5
|
+
import { agentPlatformsFor } from "../platforms/index.js";
|
|
5
6
|
export const proposeHardwareInput = z.object({
|
|
6
7
|
idea: z.string().min(3, "idea is too short").max(2000, "idea is too long"),
|
|
7
8
|
budget_usd: z.number().positive().max(100000).optional(),
|
|
@@ -22,6 +23,7 @@ Rules:
|
|
|
22
23
|
- Only pick from the candidate list provided. Do not invent devices.
|
|
23
24
|
- "why_this_fits" must mention the user's idea explicitly. No generic praise.
|
|
24
25
|
- Respect explicit constraints in the idea: if the user says "e-paper preferred", prioritize devices with the "e-ink" tag. If the user says "low power", prioritize "low-power" tagged devices.
|
|
26
|
+
- If the idea mentions Muse, Meta's agent, or giving an AI agent a physical body, prefer devices marked \`agent:\` and say which tier (full UI vs status) and that Muse SDK tokens are personal/non-commercial.
|
|
25
27
|
- If candidates are weak for the idea, say so in the rationale rather than padding with bad picks.
|
|
26
28
|
- Display HATs (Waveshare, Pimoroni Inky) require a host SBC; if you propose one, also propose a Pi Zero W (raspberry-pi-zero-2w) as the driver.`;
|
|
27
29
|
// Token-aliasing: user-text terms → catalog tag terms.
|
|
@@ -43,6 +45,10 @@ const TAG_ALIASES = {
|
|
|
43
45
|
"music": ["audio-out"],
|
|
44
46
|
"mic": ["voice"],
|
|
45
47
|
"microphone": ["voice"],
|
|
48
|
+
"muse": ["agent-gadget"],
|
|
49
|
+
"ai agent": ["agent-gadget"],
|
|
50
|
+
"agent body": ["agent-gadget"],
|
|
51
|
+
"assistant": ["agent-gadget"],
|
|
46
52
|
};
|
|
47
53
|
function expandIdeaTerms(idea) {
|
|
48
54
|
const lower = idea.toLowerCase();
|
|
@@ -57,7 +63,17 @@ function expandIdeaTerms(idea) {
|
|
|
57
63
|
}
|
|
58
64
|
function candidateContext(catalog) {
|
|
59
65
|
return catalog
|
|
60
|
-
.map((d) =>
|
|
66
|
+
.map((d) => {
|
|
67
|
+
const agentSuffix = safeAgentPlatformsFor(d.id)
|
|
68
|
+
.map((platform) => {
|
|
69
|
+
const label = platform.support === "possible"
|
|
70
|
+
? "possible"
|
|
71
|
+
: platform.tier;
|
|
72
|
+
return ` | agent: ${platform.platform_id} ${label}`;
|
|
73
|
+
})
|
|
74
|
+
.join("");
|
|
75
|
+
return `- id: ${d.id} | name: ${d.name} | category: ${d.category} | tags: ${d.idea_fit_tags.join(", ")} | notes: ${d.notes}${agentSuffix}`;
|
|
76
|
+
})
|
|
61
77
|
.join("\n");
|
|
62
78
|
}
|
|
63
79
|
// Always pass the full catalog when small (<100 devices). The LLM is the
|
|
@@ -81,6 +97,11 @@ export async function proposeHardware(input, catalog, server) {
|
|
|
81
97
|
degraded: true,
|
|
82
98
|
};
|
|
83
99
|
}
|
|
100
|
+
const hostAdvertisesSampling = Boolean(server.getClientCapabilities?.()?.sampling);
|
|
101
|
+
const hasApiKey = Boolean(process.env.ANTHROPIC_API_KEY);
|
|
102
|
+
if (!hostAdvertisesSampling && !hasApiKey) {
|
|
103
|
+
return degradedCatalogMatches(input, catalog, "Your MCP host doesn't support sampling and no ANTHROPIC_API_KEY is set, so these are catalog matches without AI reasoning. For Muse gadgets, call plan_gadget (instant, no key needed).");
|
|
104
|
+
}
|
|
84
105
|
// Pass the FULL catalog to sampling when small; lets the LLM weigh all
|
|
85
106
|
// options. Shortlist only as the degraded-mode fallback.
|
|
86
107
|
const fullCatalog = catalog.length <= 100 ? catalog : shortlistCandidates(catalog, input.idea);
|
|
@@ -94,23 +115,26 @@ export async function proposeHardware(input, catalog, server) {
|
|
|
94
115
|
]
|
|
95
116
|
.filter(Boolean)
|
|
96
117
|
.join("\n");
|
|
118
|
+
const diagnostics = {};
|
|
97
119
|
const sampled = await sampleJson({
|
|
98
120
|
server,
|
|
99
121
|
systemPrompt: SYSTEM_PROMPT,
|
|
100
122
|
userPrompt,
|
|
101
123
|
maxTokens: 1500,
|
|
124
|
+
diagnostics,
|
|
125
|
+
hostSamplingTimeoutMs: 45_000,
|
|
102
126
|
});
|
|
103
127
|
// Degraded path: every reasoning attempt failed (host sampling + retry +
|
|
104
128
|
// optional Anthropic API fallback). Use the alias-aware shortlist as the
|
|
105
129
|
// best available approximation. Honest about the degradation.
|
|
106
130
|
if (!sampled || !Array.isArray(sampled.picks)) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
131
|
+
// If a key WAS present but the API fallback threw (e.g. retired model id),
|
|
132
|
+
// surface that specific reason instead of the misleading "no fallback was
|
|
133
|
+
// configured" message — otherwise the failure is invisible (stderr only).
|
|
134
|
+
const reasoning = diagnostics.apiFallbackError
|
|
135
|
+
? `Reasoning unavailable. ${diagnostics.apiFallbackError} Returning catalog matches by tag overlap.`
|
|
136
|
+
: "Reasoning unavailable. The host LLM failed and no Anthropic API fallback was configured. Returning catalog matches by tag overlap. Set ANTHROPIC_API_KEY in the MCP server's env config to enable reasoning even on hosts without sampling/createMessage support.";
|
|
137
|
+
return degradedCatalogMatches(input, catalog, reasoning, diagnostics.apiFallbackError);
|
|
114
138
|
}
|
|
115
139
|
const proposals = [];
|
|
116
140
|
for (const pick of sampled.picks.slice(0, 5)) {
|
|
@@ -133,6 +157,22 @@ export async function proposeHardware(input, catalog, server) {
|
|
|
133
157
|
degraded: false,
|
|
134
158
|
};
|
|
135
159
|
}
|
|
160
|
+
function degradedCatalogMatches(input, catalog, note, message) {
|
|
161
|
+
const shortlisted = shortlistCandidates(catalog, input.idea);
|
|
162
|
+
const fallback = shortlisted.slice(0, 5).map((d) => buildProposal(d, "Reasoning unavailable; matched against catalog tags only."));
|
|
163
|
+
return {
|
|
164
|
+
proposals: fallback,
|
|
165
|
+
reasoning: note,
|
|
166
|
+
degraded: true,
|
|
167
|
+
reasoning_unavailable: true,
|
|
168
|
+
note,
|
|
169
|
+
...(message ? { message } : {}),
|
|
170
|
+
...(mentionsMuseAgent(input.idea) ? { try_instead: "plan_gadget" } : {}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function mentionsMuseAgent(idea) {
|
|
174
|
+
return /\b(muse|agent gadget|agent body|physical body|body for you|ai body)\b/i.test(idea);
|
|
175
|
+
}
|
|
136
176
|
function buildProposal(device, whyThisFits) {
|
|
137
177
|
const safety = applyBrickRiskSafety(device);
|
|
138
178
|
const links = buildLinks(device);
|
|
@@ -152,6 +192,15 @@ function buildProposal(device, whyThisFits) {
|
|
|
152
192
|
ebay_query_suggestion: links.ebay_search_url.includes("_nkw=")
|
|
153
193
|
? decodeURIComponent(links.ebay_search_url.split("_nkw=")[1]?.split("&")[0] ?? "")
|
|
154
194
|
: device.name,
|
|
195
|
+
agent_platforms: safeAgentPlatformsFor(device.id),
|
|
155
196
|
};
|
|
156
197
|
}
|
|
198
|
+
function safeAgentPlatformsFor(deviceId) {
|
|
199
|
+
try {
|
|
200
|
+
return agentPlatformsFor(deviceId);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
157
206
|
//# sourceMappingURL=propose_hardware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propose_hardware.js","sourceRoot":"","sources":["../../src/tools/propose_hardware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"propose_hardware.js","sourceRoot":"","sources":["../../src/tools/propose_hardware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const simulateAssemblyInput: z.ZodObject<{
|
|
3
|
+
assembly: z.ZodObject<{
|
|
4
|
+
idea: z.ZodString;
|
|
5
|
+
components: z.ZodArray<z.ZodObject<{
|
|
6
|
+
ref: z.ZodString;
|
|
7
|
+
device_id: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
role: z.ZodEnum<["compute", "actuator", "sensor", "display", "power", "chassis", "peripheral"]>;
|
|
10
|
+
sim: z.ZodOptional<z.ZodObject<{
|
|
11
|
+
asset_id: z.ZodOptional<z.ZodString>;
|
|
12
|
+
asset_version: z.ZodOptional<z.ZodString>;
|
|
13
|
+
model_uri: z.ZodOptional<z.ZodString>;
|
|
14
|
+
format: z.ZodOptional<z.ZodEnum<["mjcf", "urdf", "proxy"]>>;
|
|
15
|
+
dof: z.ZodOptional<z.ZodNumber>;
|
|
16
|
+
mass_kg: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
dimensions_m: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
|
|
18
|
+
fidelity: z.ZodOptional<z.ZodEnum<["device-model", "dimensioned-proxy", "generic-placeholder"]>>;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
asset_id?: string | undefined;
|
|
21
|
+
asset_version?: string | undefined;
|
|
22
|
+
model_uri?: string | undefined;
|
|
23
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
24
|
+
dof?: number | undefined;
|
|
25
|
+
mass_kg?: number | undefined;
|
|
26
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
27
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
asset_id?: string | undefined;
|
|
30
|
+
asset_version?: string | undefined;
|
|
31
|
+
model_uri?: string | undefined;
|
|
32
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
33
|
+
dof?: number | undefined;
|
|
34
|
+
mass_kg?: number | undefined;
|
|
35
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
36
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
37
|
+
}>>;
|
|
38
|
+
}, "strip", z.ZodTypeAny, {
|
|
39
|
+
name: string;
|
|
40
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
41
|
+
device_id: string;
|
|
42
|
+
ref: string;
|
|
43
|
+
sim?: {
|
|
44
|
+
asset_id?: string | undefined;
|
|
45
|
+
asset_version?: string | undefined;
|
|
46
|
+
model_uri?: string | undefined;
|
|
47
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
48
|
+
dof?: number | undefined;
|
|
49
|
+
mass_kg?: number | undefined;
|
|
50
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
51
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
52
|
+
} | undefined;
|
|
53
|
+
}, {
|
|
54
|
+
name: string;
|
|
55
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
56
|
+
device_id: string;
|
|
57
|
+
ref: string;
|
|
58
|
+
sim?: {
|
|
59
|
+
asset_id?: string | undefined;
|
|
60
|
+
asset_version?: string | undefined;
|
|
61
|
+
model_uri?: string | undefined;
|
|
62
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
63
|
+
dof?: number | undefined;
|
|
64
|
+
mass_kg?: number | undefined;
|
|
65
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
66
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
67
|
+
} | undefined;
|
|
68
|
+
}>, "many">;
|
|
69
|
+
edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
70
|
+
from: z.ZodString;
|
|
71
|
+
to: z.ZodString;
|
|
72
|
+
transport: z.ZodEnum<["usb", "i2c", "spi", "gpio", "uart", "wifi", "ble", "ros2", "hdmi", "aux", "power"]>;
|
|
73
|
+
payload: z.ZodOptional<z.ZodString>;
|
|
74
|
+
}, "strip", z.ZodTypeAny, {
|
|
75
|
+
from: string;
|
|
76
|
+
to: string;
|
|
77
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
78
|
+
payload?: string | undefined;
|
|
79
|
+
}, {
|
|
80
|
+
from: string;
|
|
81
|
+
to: string;
|
|
82
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
83
|
+
payload?: string | undefined;
|
|
84
|
+
}>, "many">>;
|
|
85
|
+
goal: z.ZodObject<{
|
|
86
|
+
kind: z.ZodEnum<["navigate", "locomote", "manipulate", "sense-act", "display-loop"]>;
|
|
87
|
+
spec: z.ZodString;
|
|
88
|
+
success_metric: z.ZodString;
|
|
89
|
+
criteria: z.ZodOptional<z.ZodObject<{
|
|
90
|
+
position_tolerance_m: z.ZodNumber;
|
|
91
|
+
dwell_s: z.ZodNumber;
|
|
92
|
+
max_collision_events: z.ZodNumber;
|
|
93
|
+
require_upright: z.ZodBoolean;
|
|
94
|
+
}, "strip", z.ZodTypeAny, {
|
|
95
|
+
position_tolerance_m: number;
|
|
96
|
+
dwell_s: number;
|
|
97
|
+
max_collision_events: number;
|
|
98
|
+
require_upright: boolean;
|
|
99
|
+
}, {
|
|
100
|
+
position_tolerance_m: number;
|
|
101
|
+
dwell_s: number;
|
|
102
|
+
max_collision_events: number;
|
|
103
|
+
require_upright: boolean;
|
|
104
|
+
}>>;
|
|
105
|
+
}, "strip", z.ZodTypeAny, {
|
|
106
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
107
|
+
spec: string;
|
|
108
|
+
success_metric: string;
|
|
109
|
+
criteria?: {
|
|
110
|
+
position_tolerance_m: number;
|
|
111
|
+
dwell_s: number;
|
|
112
|
+
max_collision_events: number;
|
|
113
|
+
require_upright: boolean;
|
|
114
|
+
} | undefined;
|
|
115
|
+
}, {
|
|
116
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
117
|
+
spec: string;
|
|
118
|
+
success_metric: string;
|
|
119
|
+
criteria?: {
|
|
120
|
+
position_tolerance_m: number;
|
|
121
|
+
dwell_s: number;
|
|
122
|
+
max_collision_events: number;
|
|
123
|
+
require_upright: boolean;
|
|
124
|
+
} | undefined;
|
|
125
|
+
}>;
|
|
126
|
+
world: z.ZodObject<{
|
|
127
|
+
template: z.ZodEnum<["empty-room", "obstacle-course", "ramp", "tabletop", "stairs", "outdoor-flat"]>;
|
|
128
|
+
goal_xy: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
|
|
129
|
+
}, "strip", z.ZodTypeAny, {
|
|
130
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
131
|
+
goal_xy?: [number, number] | undefined;
|
|
132
|
+
}, {
|
|
133
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
134
|
+
goal_xy?: [number, number] | undefined;
|
|
135
|
+
}>;
|
|
136
|
+
}, "strip", z.ZodTypeAny, {
|
|
137
|
+
idea: string;
|
|
138
|
+
components: {
|
|
139
|
+
name: string;
|
|
140
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
141
|
+
device_id: string;
|
|
142
|
+
ref: string;
|
|
143
|
+
sim?: {
|
|
144
|
+
asset_id?: string | undefined;
|
|
145
|
+
asset_version?: string | undefined;
|
|
146
|
+
model_uri?: string | undefined;
|
|
147
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
148
|
+
dof?: number | undefined;
|
|
149
|
+
mass_kg?: number | undefined;
|
|
150
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
151
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
152
|
+
} | undefined;
|
|
153
|
+
}[];
|
|
154
|
+
edges: {
|
|
155
|
+
from: string;
|
|
156
|
+
to: string;
|
|
157
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
158
|
+
payload?: string | undefined;
|
|
159
|
+
}[];
|
|
160
|
+
goal: {
|
|
161
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
162
|
+
spec: string;
|
|
163
|
+
success_metric: string;
|
|
164
|
+
criteria?: {
|
|
165
|
+
position_tolerance_m: number;
|
|
166
|
+
dwell_s: number;
|
|
167
|
+
max_collision_events: number;
|
|
168
|
+
require_upright: boolean;
|
|
169
|
+
} | undefined;
|
|
170
|
+
};
|
|
171
|
+
world: {
|
|
172
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
173
|
+
goal_xy?: [number, number] | undefined;
|
|
174
|
+
};
|
|
175
|
+
}, {
|
|
176
|
+
idea: string;
|
|
177
|
+
components: {
|
|
178
|
+
name: string;
|
|
179
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
180
|
+
device_id: string;
|
|
181
|
+
ref: string;
|
|
182
|
+
sim?: {
|
|
183
|
+
asset_id?: string | undefined;
|
|
184
|
+
asset_version?: string | undefined;
|
|
185
|
+
model_uri?: string | undefined;
|
|
186
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
187
|
+
dof?: number | undefined;
|
|
188
|
+
mass_kg?: number | undefined;
|
|
189
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
190
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
191
|
+
} | undefined;
|
|
192
|
+
}[];
|
|
193
|
+
goal: {
|
|
194
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
195
|
+
spec: string;
|
|
196
|
+
success_metric: string;
|
|
197
|
+
criteria?: {
|
|
198
|
+
position_tolerance_m: number;
|
|
199
|
+
dwell_s: number;
|
|
200
|
+
max_collision_events: number;
|
|
201
|
+
require_upright: boolean;
|
|
202
|
+
} | undefined;
|
|
203
|
+
};
|
|
204
|
+
world: {
|
|
205
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
206
|
+
goal_xy?: [number, number] | undefined;
|
|
207
|
+
};
|
|
208
|
+
edges?: {
|
|
209
|
+
from: string;
|
|
210
|
+
to: string;
|
|
211
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
212
|
+
payload?: string | undefined;
|
|
213
|
+
}[] | undefined;
|
|
214
|
+
}>;
|
|
215
|
+
duration_s: z.ZodOptional<z.ZodNumber>;
|
|
216
|
+
}, "strip", z.ZodTypeAny, {
|
|
217
|
+
assembly: {
|
|
218
|
+
idea: string;
|
|
219
|
+
components: {
|
|
220
|
+
name: string;
|
|
221
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
222
|
+
device_id: string;
|
|
223
|
+
ref: string;
|
|
224
|
+
sim?: {
|
|
225
|
+
asset_id?: string | undefined;
|
|
226
|
+
asset_version?: string | undefined;
|
|
227
|
+
model_uri?: string | undefined;
|
|
228
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
229
|
+
dof?: number | undefined;
|
|
230
|
+
mass_kg?: number | undefined;
|
|
231
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
232
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
233
|
+
} | undefined;
|
|
234
|
+
}[];
|
|
235
|
+
edges: {
|
|
236
|
+
from: string;
|
|
237
|
+
to: string;
|
|
238
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
239
|
+
payload?: string | undefined;
|
|
240
|
+
}[];
|
|
241
|
+
goal: {
|
|
242
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
243
|
+
spec: string;
|
|
244
|
+
success_metric: string;
|
|
245
|
+
criteria?: {
|
|
246
|
+
position_tolerance_m: number;
|
|
247
|
+
dwell_s: number;
|
|
248
|
+
max_collision_events: number;
|
|
249
|
+
require_upright: boolean;
|
|
250
|
+
} | undefined;
|
|
251
|
+
};
|
|
252
|
+
world: {
|
|
253
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
254
|
+
goal_xy?: [number, number] | undefined;
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
duration_s?: number | undefined;
|
|
258
|
+
}, {
|
|
259
|
+
assembly: {
|
|
260
|
+
idea: string;
|
|
261
|
+
components: {
|
|
262
|
+
name: string;
|
|
263
|
+
role: "display" | "sensor" | "power" | "compute" | "actuator" | "chassis" | "peripheral";
|
|
264
|
+
device_id: string;
|
|
265
|
+
ref: string;
|
|
266
|
+
sim?: {
|
|
267
|
+
asset_id?: string | undefined;
|
|
268
|
+
asset_version?: string | undefined;
|
|
269
|
+
model_uri?: string | undefined;
|
|
270
|
+
format?: "mjcf" | "urdf" | "proxy" | undefined;
|
|
271
|
+
dof?: number | undefined;
|
|
272
|
+
mass_kg?: number | undefined;
|
|
273
|
+
dimensions_m?: [number, number, number] | undefined;
|
|
274
|
+
fidelity?: "device-model" | "dimensioned-proxy" | "generic-placeholder" | undefined;
|
|
275
|
+
} | undefined;
|
|
276
|
+
}[];
|
|
277
|
+
goal: {
|
|
278
|
+
kind: "navigate" | "locomote" | "manipulate" | "sense-act" | "display-loop";
|
|
279
|
+
spec: string;
|
|
280
|
+
success_metric: string;
|
|
281
|
+
criteria?: {
|
|
282
|
+
position_tolerance_m: number;
|
|
283
|
+
dwell_s: number;
|
|
284
|
+
max_collision_events: number;
|
|
285
|
+
require_upright: boolean;
|
|
286
|
+
} | undefined;
|
|
287
|
+
};
|
|
288
|
+
world: {
|
|
289
|
+
template: "empty-room" | "obstacle-course" | "ramp" | "tabletop" | "stairs" | "outdoor-flat";
|
|
290
|
+
goal_xy?: [number, number] | undefined;
|
|
291
|
+
};
|
|
292
|
+
edges?: {
|
|
293
|
+
from: string;
|
|
294
|
+
to: string;
|
|
295
|
+
transport: "usb" | "i2c" | "spi" | "gpio" | "uart" | "wifi" | "ble" | "ros2" | "hdmi" | "aux" | "power";
|
|
296
|
+
payload?: string | undefined;
|
|
297
|
+
}[] | undefined;
|
|
298
|
+
};
|
|
299
|
+
duration_s?: number | undefined;
|
|
300
|
+
}>;
|
|
301
|
+
export type SimulateAssemblyInput = z.infer<typeof simulateAssemblyInput>;
|
|
302
|
+
export interface SimulateAssemblyOutput {
|
|
303
|
+
status: "ok" | "unsupported" | "error" | "unavailable";
|
|
304
|
+
message?: string;
|
|
305
|
+
success?: boolean;
|
|
306
|
+
summary?: string;
|
|
307
|
+
post_mortem?: string;
|
|
308
|
+
authored_by?: string;
|
|
309
|
+
metric_value?: number;
|
|
310
|
+
telemetry?: Record<string, unknown>;
|
|
311
|
+
world_desc?: string;
|
|
312
|
+
artifacts?: Record<string, string>;
|
|
313
|
+
robot?: Record<string, unknown>;
|
|
314
|
+
}
|
|
315
|
+
export declare function simulateAssembly(input: SimulateAssemblyInput): Promise<SimulateAssemblyOutput>;
|