@openephemeris/mcp-server 3.21.1 → 3.22.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.
- package/CHANGELOG.md +17 -0
- package/dist/tools/apps/bodygraph-app.js +39 -4
- package/dist/ui/bi-wheel.html +2080 -2026
- package/dist/ui/bodygraph.html +265 -217
- package/dist/ui/chart-wheel.html +516 -446
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ Version numbering follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [3.22.0] — 2026-07-19
|
|
11
|
+
|
|
12
|
+
Mobile/dark QA sweep across the four live iframe apps (chart-wheel, bi-wheel, bodygraph, moon-phase), plus a design-parity pass bringing the wheels' colors in line with the web app's #239 engine redesign.
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
- **Pinch-to-zoom + reliable touch pan** on chart-wheel, bi-wheel, and bodygraph — `touch-action: none` on the chart SVG stops mobile browsers from claiming drags for page scroll and pinches for page zoom; two-finger pinch zooms anchored at the gesture midpoint with simultaneous pan.
|
|
16
|
+
- **Midpoint aspect-type glyphs** on the natal chart wheel — every aspect line now shows its symbol (☌ ☍ △ □ ⚹) on a backing disc, matching the bi-wheel app and the Go engine's design.
|
|
17
|
+
- **Theme-aware HD transit/connection overlays** — `explore_human_design_transit` and `explore_human_design_connection` now pass `visual_config.theme` (previously always defaulted to light server-side) and re-fetch in the host's detected theme via the embedded app.
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- **HD transit/connection overlays no longer error-card** in MCP Apps hosts — both tools' payloads nest the chart under `natal` / `composite_chart` (with a `centers` map shape the app didn't handle), which the bodygraph app's validity gate rejected outright.
|
|
21
|
+
- **Chart-wheel and bi-wheel color palette** now matches the web app's #239 wheel redesign (element remap, vibrant dark-mode zodiac tints, warm/cool aspect semantics) — the iframe wheels had never received that pass and read muddy by comparison.
|
|
22
|
+
- Zodiac sign glyphs no longer occasionally render as the wrong emoji-presentation glyph (missing `U+FE0E` variation selector).
|
|
23
|
+
- Light-host theme detection no longer misreads as dark in some hosts (background-luminance probe used the wrong color space).
|
|
24
|
+
- **ASC/DSC angle labels** no longer clip at the edge of the wheel on full-bleed mobile hosts (a `viewBox` overflow needing container padding that phones don't provide) — coordinates are now clamped inside the frame.
|
|
25
|
+
- Mobile pan/zoom controls shrink to 32px with a translucent, blurred background and an icon-only Reset button, so the control stack stops covering the chart at phone widths.
|
|
26
|
+
|
|
10
27
|
## [3.21.1] — 2026-07-12
|
|
11
28
|
|
|
12
29
|
### Changed
|
|
@@ -1348,6 +1348,12 @@ registerTool({
|
|
|
1348
1348
|
type: "string",
|
|
1349
1349
|
description: "Transit moment, ISO 8601. Defaults to now (UTC) when omitted.",
|
|
1350
1350
|
},
|
|
1351
|
+
theme: {
|
|
1352
|
+
type: "string",
|
|
1353
|
+
enum: ["light", "dark"],
|
|
1354
|
+
description: "Visual theme for the overlay bodygraph. Set automatically by the embedded app to match " +
|
|
1355
|
+
"the host; defaults to dark. You normally never need to pass this.",
|
|
1356
|
+
},
|
|
1351
1357
|
},
|
|
1352
1358
|
required: ["datetime"],
|
|
1353
1359
|
},
|
|
@@ -1384,8 +1390,14 @@ registerTool({
|
|
|
1384
1390
|
body.transit_datetime = { iso: ensureTimezone(String(args.transit_datetime)) };
|
|
1385
1391
|
}
|
|
1386
1392
|
const bundleAvailable = Boolean(getBodygraphBundle());
|
|
1387
|
-
|
|
1393
|
+
// The Go endpoint defaults visual_config.theme to "light", which mismatches
|
|
1394
|
+
// dark MCP hosts — mirror the natal path's explicit dark default. The
|
|
1395
|
+
// iframe re-calls this tool with theme once it detects the host theme.
|
|
1396
|
+
const theme = args.theme === "light" ? "light" : "dark";
|
|
1397
|
+
if (bundleAvailable) {
|
|
1388
1398
|
body.include_visual = true;
|
|
1399
|
+
body.visual_config = { theme };
|
|
1400
|
+
}
|
|
1389
1401
|
const resp = await client.request("POST", "/human-design/transit-chart", { data: body });
|
|
1390
1402
|
const transit = (resp?.transit ?? {});
|
|
1391
1403
|
const completed = Array.isArray(transit.completed_channels) ? transit.completed_channels : [];
|
|
@@ -1400,7 +1412,14 @@ registerTool({
|
|
|
1400
1412
|
(newCenters.length
|
|
1401
1413
|
? `\n\nNewly-defined center${newCenters.length === 1 ? "" : "s"}: **${newCenters.join(", ")}** — a temporary shift while the transit holds.`
|
|
1402
1414
|
: "");
|
|
1403
|
-
const payload = {
|
|
1415
|
+
const payload = {
|
|
1416
|
+
...resp,
|
|
1417
|
+
_svg: svg,
|
|
1418
|
+
_theme: theme,
|
|
1419
|
+
// Lets the iframe re-request this overlay in the host's theme.
|
|
1420
|
+
_refetch: { tool: "explore_human_design_transit", args: { ...args } },
|
|
1421
|
+
server_version: SERVER_VERSION,
|
|
1422
|
+
};
|
|
1404
1423
|
if (bundleAvailable && svg) {
|
|
1405
1424
|
return {
|
|
1406
1425
|
content: [{ type: "text", text: summary }],
|
|
@@ -1446,6 +1465,12 @@ registerTool({
|
|
|
1446
1465
|
},
|
|
1447
1466
|
required: ["datetime"],
|
|
1448
1467
|
},
|
|
1468
|
+
theme: {
|
|
1469
|
+
type: "string",
|
|
1470
|
+
enum: ["light", "dark"],
|
|
1471
|
+
description: "Visual theme for the overlay bodygraph. Set automatically by the embedded app to match " +
|
|
1472
|
+
"the host; defaults to dark. You normally never need to pass this.",
|
|
1473
|
+
},
|
|
1449
1474
|
},
|
|
1450
1475
|
required: ["person_a", "person_b"],
|
|
1451
1476
|
},
|
|
@@ -1473,8 +1498,12 @@ registerTool({
|
|
|
1473
1498
|
subject_2: toSubject(args.person_b),
|
|
1474
1499
|
};
|
|
1475
1500
|
const bundleAvailable = Boolean(getBodygraphBundle());
|
|
1476
|
-
|
|
1501
|
+
// Mirror the transit tool: explicit dark default, host-theme refetch.
|
|
1502
|
+
const theme = args.theme === "light" ? "light" : "dark";
|
|
1503
|
+
if (bundleAvailable) {
|
|
1477
1504
|
body.include_visual = true;
|
|
1505
|
+
body.visual_config = { theme };
|
|
1506
|
+
}
|
|
1478
1507
|
const resp = await client.request("POST", "/human-design/composite", { data: body });
|
|
1479
1508
|
const connections = Array.isArray(resp?.connections) ? resp.connections : [];
|
|
1480
1509
|
const svg = resp?.visual?.data;
|
|
@@ -1490,7 +1519,13 @@ registerTool({
|
|
|
1490
1519
|
line("Dominance — one defines", "dominance") +
|
|
1491
1520
|
line("Compromise — friction", "compromise") +
|
|
1492
1521
|
(connections.length ? "" : " none.");
|
|
1493
|
-
const payload = {
|
|
1522
|
+
const payload = {
|
|
1523
|
+
...resp,
|
|
1524
|
+
_svg: svg,
|
|
1525
|
+
_theme: theme,
|
|
1526
|
+
_refetch: { tool: "explore_human_design_connection", args: { ...args } },
|
|
1527
|
+
server_version: SERVER_VERSION,
|
|
1528
|
+
};
|
|
1494
1529
|
if (bundleAvailable && svg) {
|
|
1495
1530
|
return {
|
|
1496
1531
|
content: [{ type: "text", text: summary }],
|