@lukawi/toporealm 0.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +113 -0
  3. package/README.md +115 -0
  4. package/dist/cli/index.d.ts +46 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +276 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/cli/main.d.ts +3 -0
  9. package/dist/cli/main.d.ts.map +1 -0
  10. package/dist/cli/main.js +48 -0
  11. package/dist/cli/main.js.map +1 -0
  12. package/dist/core/errors.d.ts +16 -0
  13. package/dist/core/errors.d.ts.map +1 -0
  14. package/dist/core/errors.js +40 -0
  15. package/dist/core/errors.js.map +1 -0
  16. package/dist/core/index.d.ts +9 -0
  17. package/dist/core/index.d.ts.map +1 -0
  18. package/dist/core/index.js +9 -0
  19. package/dist/core/index.js.map +1 -0
  20. package/dist/core/store.d.ts +27 -0
  21. package/dist/core/store.d.ts.map +1 -0
  22. package/dist/core/store.js +390 -0
  23. package/dist/core/store.js.map +1 -0
  24. package/dist/core/types.d.ts +108 -0
  25. package/dist/core/types.d.ts.map +1 -0
  26. package/dist/core/types.js +3 -0
  27. package/dist/core/types.js.map +1 -0
  28. package/dist/core/validate.d.ts +16 -0
  29. package/dist/core/validate.d.ts.map +1 -0
  30. package/dist/core/validate.js +32 -0
  31. package/dist/core/validate.js.map +1 -0
  32. package/dist/distribution/hosts.d.ts +12 -0
  33. package/dist/distribution/hosts.d.ts.map +1 -0
  34. package/dist/distribution/hosts.js +122 -0
  35. package/dist/distribution/hosts.js.map +1 -0
  36. package/dist/distribution/index.d.ts +4 -0
  37. package/dist/distribution/index.d.ts.map +1 -0
  38. package/dist/distribution/index.js +4 -0
  39. package/dist/distribution/index.js.map +1 -0
  40. package/dist/distribution/installer.d.ts +23 -0
  41. package/dist/distribution/installer.d.ts.map +1 -0
  42. package/dist/distribution/installer.js +179 -0
  43. package/dist/distribution/installer.js.map +1 -0
  44. package/dist/distribution/skills.d.ts +11 -0
  45. package/dist/distribution/skills.d.ts.map +1 -0
  46. package/dist/distribution/skills.js +20 -0
  47. package/dist/distribution/skills.js.map +1 -0
  48. package/dist/index.d.ts +8 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +8 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/integrations/skills/toporealm/SKILL.md +19 -0
  53. package/dist/integrations/skills/toporealm/agents/openai.yaml +6 -0
  54. package/dist/integrations/skills/toporealm-design/SKILL.md +14 -0
  55. package/dist/integrations/skills/toporealm-design/agents/openai.yaml +6 -0
  56. package/dist/integrations/skills/toporealm-grilling/SKILL.md +26 -0
  57. package/dist/integrations/skills/toporealm-grilling/agents/openai.yaml +6 -0
  58. package/dist/integrations/skills/toporealm-join/SKILL.md +18 -0
  59. package/dist/integrations/skills/toporealm-join/agents/openai.yaml +6 -0
  60. package/dist/mcp/index.d.ts +31 -0
  61. package/dist/mcp/index.d.ts.map +1 -0
  62. package/dist/mcp/index.js +128 -0
  63. package/dist/mcp/index.js.map +1 -0
  64. package/dist/module-sdk/actions.d.ts +33 -0
  65. package/dist/module-sdk/actions.d.ts.map +1 -0
  66. package/dist/module-sdk/actions.js +56 -0
  67. package/dist/module-sdk/actions.js.map +1 -0
  68. package/dist/module-sdk/index.d.ts +47 -0
  69. package/dist/module-sdk/index.d.ts.map +1 -0
  70. package/dist/module-sdk/index.js +7 -0
  71. package/dist/module-sdk/index.js.map +1 -0
  72. package/dist/module-sdk/registry.d.ts +81 -0
  73. package/dist/module-sdk/registry.d.ts.map +1 -0
  74. package/dist/module-sdk/registry.js +294 -0
  75. package/dist/module-sdk/registry.js.map +1 -0
  76. package/dist/server/index.d.ts +14 -0
  77. package/dist/server/index.d.ts.map +1 -0
  78. package/dist/server/index.js +168 -0
  79. package/dist/server/index.js.map +1 -0
  80. package/dist/web/index.d.ts +26 -0
  81. package/dist/web/index.d.ts.map +1 -0
  82. package/dist/web/index.js +107 -0
  83. package/dist/web/index.js.map +1 -0
  84. package/dist/web-assets/assets/index-BUAvvLwY.js +35 -0
  85. package/dist/web-assets/assets/index-DtKFY9Hh.css +1 -0
  86. package/dist/web-assets/index.html +175 -0
  87. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ .canvas-wrapper.svelte-7bxg53{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;background:var(--bg)}.sky-bg.svelte-7bxg53{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;overflow:hidden}.graph-canvas.svelte-7bxg53{position:relative;z-index:2;width:100%;height:100%;display:block}.sky-band.svelte-7bxg53{position:absolute;top:-20%;right:-20%;bottom:-20%;left:-20%;background:linear-gradient(162deg,transparent 40%,rgba(207,216,255,.05) 49%,rgba(232,236,255,.032) 52%,transparent 60%)}.sky-dust.svelte-7bxg53{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.node-tooltip.svelte-7bxg53{position:absolute;background:var(--surface-2);border:1px solid var(--line);color:var(--ink);font-family:var(--font-mono);font-size:var(--text-xs);padding:var(--sp-1) var(--sp-2);border-radius:var(--r-sm);pointer-events:none;display:none;z-index:var(--z-tooltip);white-space:nowrap;letter-spacing:var(--track-label)}.nodes>g.node.dimmed,.edges>g.edge-group.dimmed{opacity:.3}@keyframes star-breathe{0%,to{opacity:.82;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes star-sparkle{0%,to{opacity:.9}42%{opacity:.55}58%{opacity:.95}}@keyframes core-glint{0%,to{opacity:1}50%{opacity:.86}}@keyframes prism-shift{0%,to{transform:translate(0);opacity:.5}50%{transform:translate(.6px,-.4px);opacity:.32}}@keyframes ring-bloom{0%{opacity:.9;transform:scale(.5)}to{opacity:0;transform:scale(1.7)}}@keyframes flash-pulse{0%{opacity:0}18%{opacity:.6}to{opacity:0}}.nodes g.node .star-sky{pointer-events:none;transform-origin:center;transform-box:fill-box}.nodes g.node .hover-flash{opacity:0;transform-origin:center;transform-box:fill-box}.nodes g.node .hover-ring{opacity:0;transform:scale(.5);transform-origin:center;transform-box:fill-box}.nodes g.node:hover .hover-ring,.nodes g.node.is-focused .hover-ring{animation:ring-bloom .8s var(--ease-out-quart)}.nodes g.node:hover .hover-flash,.nodes g.node.is-focused .hover-flash{animation:flash-pulse .4s var(--ease-out-quart)}.nodes g.node:hover .star-spikes,.nodes g.node.is-focused .star-spikes,.nodes g.node.is-selected .star-spikes,.nodes g.node.edge-hilite .star-spikes{filter:brightness(1.35)}.nodes g.node.is-selected .node-label,.nodes g.node.is-selected .kind-label{fill:var(--ink)}.nodes g.node.is-dragging{cursor:grabbing}.nodes g.node .star-halo{animation:star-breathe 3.6s ease-in-out infinite;transform-origin:center;transform-box:fill-box}.nodes g.node .star-spikes{animation:star-sparkle 5.2s ease-in-out infinite;transform-origin:center;transform-box:fill-box;transition:filter .14s var(--ease-out-quart)}.nodes g.node .star-core{animation:core-glint 2.8s ease-in-out infinite;transform-origin:center;transform-box:fill-box}.nodes g.node .prism-r{animation:prism-shift 2.2s ease-in-out infinite;transform-box:fill-box}.nodes g.node .prism-b{animation:prism-shift 2.2s ease-in-out -1.1s infinite;transform-box:fill-box}@media(prefers-reduced-motion:reduce){.nodes g.node .star-halo,.nodes g.node .star-spikes,.nodes g.node .star-core,.nodes g.node .prism-r,.nodes g.node .prism-b{animation:none}.nodes g.node:hover .hover-ring,.nodes g.node.is-focused .hover-ring,.nodes g.node:hover .hover-flash,.nodes g.node.is-focused .hover-flash{animation:none}.nodes g.node .star-spikes{transition:none}.sky-dust .dust-tw{animation:none}}.graph-canvas.svelte-7bxg53 g.node:focus{outline:none}.sky-dust .dust{fill:#ffffff52}.sky-dust .dust-tw{animation:dust-tw 4.5s ease-in-out infinite}@keyframes dust-tw{0%,to{opacity:.14}50%{opacity:.5}}.zoom-hint.svelte-7bxg53{position:absolute;bottom:var(--sp-4);left:50%;transform:translate(-50%);font-family:var(--font-sans);font-size:var(--text-2xs);color:var(--ink-faint);pointer-events:none;background:var(--glass);-webkit-backdrop-filter:var(--blur-panel);backdrop-filter:var(--blur-panel);padding:var(--sp-1) var(--sp-3);border-radius:999px;border:1px solid var(--glass-line);z-index:5;letter-spacing:.02em;transition:color .2s var(--ease-out-quart)}.canvas-wrapper.svelte-7bxg53:hover .zoom-hint:where(.svelte-7bxg53){color:var(--ink-muted)}.hint-key.svelte-7bxg53{color:var(--ink-muted);font-weight:500;font-family:var(--font-mono)}.hint-sep.svelte-7bxg53{margin:0 var(--sp-1);color:var(--ink-faint)}@media(max-width:1000px){.zoom-hint.svelte-7bxg53{display:none}}@media(prefers-reduced-motion:reduce){.zoom-hint.svelte-7bxg53{transition:none}}.drawer.svelte-9ocgkg{position:fixed;right:12px;top:calc(var(--header-h) + 12px);bottom:12px;background:var(--glass-strong);-webkit-backdrop-filter:var(--blur-panel);backdrop-filter:var(--blur-panel);border:1px solid var(--glass-line);border-radius:var(--r-xl);box-shadow:var(--shadow-float);color:var(--ink);display:flex;flex-direction:column;z-index:var(--z-panel);overflow:hidden;transform:translate(calc(100% + 24px));transition:transform .22s var(--ease-out-quint)}.drawer.visible.svelte-9ocgkg{transform:translate(0)}.drawer-header.svelte-9ocgkg{display:flex;align-items:center;gap:var(--sp-2);padding:0 var(--sp-3) 0 var(--sp-5);min-height:52px;border-bottom:1px solid var(--line);flex-shrink:0}.drawer-title.svelte-9ocgkg{font-family:var(--font-sans);font-size:13px;font-weight:650;color:var(--ink);flex:1}.drawer-kbd.svelte-9ocgkg{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);border:1px solid var(--line);border-radius:6px;padding:1px var(--sp-1)}.drawer-close.svelte-9ocgkg{background:none;border:none;color:var(--ink-muted);cursor:pointer;border-radius:var(--r);min-width:var(--tap);min-height:var(--tap);margin-right:calc((var(--tap) - 32px) / -2);display:flex;align-items:center;justify-content:center;transition:background .13s var(--ease-out-quart),color .13s var(--ease-out-quart)}.drawer-close.svelte-9ocgkg:hover{background:var(--wash-2);color:var(--ink)}.drawer-close.svelte-9ocgkg:active{background:var(--wash-3)}.drawer-body.svelte-9ocgkg{padding:var(--sp-5);overflow-y:auto;flex:1}.drawer-body.svelte-9ocgkg .entity-title{font-family:var(--font-sans);font-size:var(--text-xl);font-weight:700;margin:0 0 var(--sp-4);color:var(--ink);line-height:1.25;letter-spacing:var(--track-tight);text-wrap:balance}.drawer-body.svelte-9ocgkg .meta-grid{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-5);padding-bottom:var(--sp-4);border-bottom:1px solid var(--line)}.drawer-body.svelte-9ocgkg .meta-tag{font-family:var(--font-mono);font-size:var(--text-2xs);padding:4px 10px;border-radius:8px;background:var(--wash-1);color:var(--ink-muted);border:1px solid var(--line);font-weight:500;display:inline-flex;align-items:center;gap:var(--sp-1);letter-spacing:.02em;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drawer-body.svelte-9ocgkg .id-tag{color:var(--ink);border-color:var(--line-strong);background:var(--wash-2)}.drawer-body.svelte-9ocgkg .section{margin-bottom:var(--sp-5);padding-top:var(--sp-3);border-top:1px solid var(--line)}.drawer-body.svelte-9ocgkg .section-title{font-family:var(--font-sans);font-size:var(--text-xs);font-weight:650;margin:0 0 var(--sp-3);color:var(--ink);display:flex;align-items:center;gap:var(--sp-2)}.drawer-body.svelte-9ocgkg .section-count{margin-left:auto;color:var(--ink-faint);font-variant-numeric:tabular-nums;font-family:var(--font-mono);font-size:var(--text-2xs);background:var(--wash-1);border-radius:999px;padding:1px 8px}.drawer-body.svelte-9ocgkg .plan-desc{font-family:var(--font-sans);font-size:var(--text-sm);line-height:1.7;color:var(--ink-muted);margin:0}.drawer-body.svelte-9ocgkg .chip{font-family:var(--font-mono);font-size:var(--text-2xs);background:var(--wash-1);padding:4px 10px;border-radius:8px;color:var(--ink-muted);border:1px solid var(--line);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.drawer-body.svelte-9ocgkg .chip-link{cursor:pointer;transition:background .13s var(--ease-out-quart),color .13s var(--ease-out-quart)}.drawer-body.svelte-9ocgkg .chip-link:hover{background:var(--wash-3);color:var(--ink)}.drawer-body.svelte-9ocgkg .sub-list{margin-top:var(--sp-3);display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:center}.drawer-body.svelte-9ocgkg .sub-list.column{flex-direction:column;align-items:stretch}.drawer-body.svelte-9ocgkg .sub-label{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint)}@media(max-width:1000px){.drawer.svelte-9ocgkg{top:12px}}@media(max-width:768px){.drawer.svelte-9ocgkg{width:auto!important;max-width:100%;left:12px;top:12px;bottom:76px;transform:translateY(calc(100% + 24px))}.drawer.visible.svelte-9ocgkg{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.drawer.svelte-9ocgkg{transition:none}}.json-block.svelte-o53x5{border:1px solid var(--line);border-radius:var(--r);background:var(--wash-1);margin-bottom:var(--sp-2);overflow:hidden}.json-head.svelte-o53x5{display:flex;align-items:center;justify-content:space-between}.json-toggle.svelte-o53x5{display:flex;align-items:center;gap:var(--sp-2);flex:1;background:none;border:none;color:var(--ink-muted);font-family:var(--font-mono);font-size:var(--text-2xs);font-weight:600;padding:var(--sp-2) var(--sp-3);cursor:pointer;text-align:left;transition:background .13s var(--ease-out-quart),color .13s var(--ease-out-quart)}.json-toggle.svelte-o53x5:hover{background:var(--wash-2);color:var(--ink)}.json-toggle.svelte-o53x5:focus-visible{outline:2px solid var(--interactive);outline-offset:-2px}.json-toggle.svelte-o53x5 svg:where(.svelte-o53x5){transition:transform .15s var(--ease-out-quart);flex-shrink:0}.json-toggle.svelte-o53x5 svg.open:where(.svelte-o53x5){transform:rotate(90deg)}.json-copy.svelte-o53x5{background:transparent;border:1px solid var(--line-strong);border-radius:var(--r-sm);color:var(--ink-muted);font-family:var(--font-sans);font-size:var(--text-2xs);font-weight:600;padding:2px var(--sp-2);margin-right:var(--sp-2);cursor:pointer;transition:color .13s var(--ease-out-quart),border-color .13s var(--ease-out-quart)}.json-copy.svelte-o53x5:hover{color:var(--ink);border-color:var(--ink-faint)}.json-body.svelte-o53x5{margin:0;padding:var(--sp-2) var(--sp-3);font-family:var(--font-mono);font-size:var(--text-2xs);line-height:1.55;color:var(--ink-muted);white-space:pre-wrap;word-break:break-word;max-height:240px;overflow-y:auto;border-top:1px solid var(--line)}.kind-dot.svelte-nf0sji{width:7px;height:7px;border-radius:50%;flex-shrink:0}.object-actions.svelte-nf0sji{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-4)}.action-btn.svelte-nf0sji{background:var(--wash-2);border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-3);cursor:pointer;transition:background .13s var(--ease-out-quart)}.action-btn.svelte-nf0sji:hover:not(:disabled){background:var(--wash-3)}.action-btn.svelte-nf0sji:disabled{opacity:.4;cursor:not-allowed}.action-btn.svelte-nf0sji:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.action-error.svelte-nf0sji{display:flex;align-items:flex-start;gap:var(--sp-2);flex-wrap:wrap;margin-top:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:#e5504f1a;border:1px solid rgba(229,80,79,.4);border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);line-height:1.55;color:var(--status-failed)}.action-error-code.svelte-nf0sji{font-family:var(--font-mono);font-weight:700;letter-spacing:var(--track-caps)}.action-error-text.svelte-nf0sji{color:var(--ink-muted);flex:1;min-width:0}.degraded.svelte-nf0sji{display:flex;align-items:flex-start;gap:var(--sp-2);margin-bottom:var(--sp-4);padding:var(--sp-3);background:#f0a73a1a;border:1px solid rgba(240,167,58,.3);border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);line-height:1.6;color:var(--status-running)}.degraded-tag.svelte-nf0sji{font-family:var(--font-mono);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--track-caps);flex-shrink:0;margin-top:1px}.relation-row.svelte-nf0sji{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--wash-1);border:1px solid var(--line);border-radius:var(--r);cursor:pointer;text-align:left;transition:background .13s var(--ease-out-quart),border-color .13s var(--ease-out-quart)}.relation-row.svelte-nf0sji:hover{background:var(--wash-2);border-color:var(--line-strong)}.relation-row.svelte-nf0sji:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.relation-dir.svelte-nf0sji{font-family:var(--font-mono);color:var(--ink-faint);flex-shrink:0}.relation-name.svelte-nf0sji{font-family:var(--font-sans);font-size:var(--text-xs);color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.relation-endpoint.svelte-nf0sji{margin-left:auto;font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);flex-shrink:0;max-width:40%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kind-dot.svelte-n9davv{width:7px;height:7px;border-radius:50%;flex-shrink:0}.relation-actions.svelte-n9davv{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-4)}.action-btn.svelte-n9davv{background:var(--wash-2);border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-3);cursor:pointer;transition:background .13s var(--ease-out-quart)}.action-btn.svelte-n9davv:hover:not(:disabled){background:var(--wash-3)}.action-btn.svelte-n9davv:disabled{opacity:.4;cursor:not-allowed}.action-btn.svelte-n9davv:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.degraded.svelte-n9davv{display:flex;align-items:flex-start;gap:var(--sp-2);margin-bottom:var(--sp-4);padding:var(--sp-3);background:#f0a73a1a;border:1px solid rgba(240,167,58,.3);border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);line-height:1.6;color:var(--status-running)}.degraded-tag.svelte-n9davv{font-family:var(--font-mono);font-size:var(--text-2xs);font-weight:700;letter-spacing:var(--track-caps);flex-shrink:0;margin-top:1px}.endpoint-row.svelte-n9davv{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-2)}.endpoint-label.svelte-n9davv{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);text-transform:lowercase;letter-spacing:.02em;width:44px;flex-shrink:0}.endpoint-link.svelte-n9davv{background:none;border:none;padding:0;color:var(--ink);font-family:var(--font-mono);font-size:var(--text-sm);cursor:pointer;text-align:left;text-decoration:underline;text-decoration-color:var(--line-strong);text-underline-offset:3px;transition:text-decoration-color .13s var(--ease-out-quart);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.endpoint-link.svelte-n9davv:hover{text-decoration-color:var(--ink)}.endpoint-link.svelte-n9davv:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.editor-form.svelte-y9fra9{display:flex;flex-direction:column;gap:var(--sp-4)}.readonly-note.svelte-y9fra9{padding:var(--sp-2) var(--sp-3);background:#f0a73a1a;border:1px solid rgba(240,167,58,.3);border-radius:var(--r);color:var(--status-running);font-family:var(--font-sans);font-size:var(--text-xs)}.field.svelte-y9fra9{display:flex;flex-direction:column;gap:var(--sp-1)}.field-label.svelte-y9fra9{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);letter-spacing:.02em}.field-input.svelte-y9fra9{background:var(--wash-1);border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-sm);padding:var(--sp-2) var(--sp-3);outline:none;transition:border-color .13s var(--ease-out-quart),background .13s var(--ease-out-quart);width:100%}.field-input.mono.svelte-y9fra9{font-family:var(--font-mono);font-size:var(--text-xs)}.field-input.svelte-y9fra9:hover:not(:disabled){border-color:var(--line-strong)}.field-input.svelte-y9fra9:focus:not(:disabled){background:var(--wash-2);border-color:var(--line-strong)}.field-input.svelte-y9fra9:disabled{opacity:.45;cursor:not-allowed}.field-input.svelte-y9fra9::placeholder{color:var(--ink-faint)}select.field-input.svelte-y9fra9 option:where(.svelte-y9fra9){background:var(--bg-chrome);color:var(--ink)}textarea.field-input.svelte-y9fra9{resize:vertical;min-height:80px;line-height:1.55}.field-pair.svelte-y9fra9{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3)}.field-hint.svelte-y9fra9{font-family:var(--font-sans);font-size:var(--text-2xs);color:var(--ink-faint);line-height:1.5}.form-error.svelte-y9fra9{display:flex;align-items:flex-start;gap:var(--sp-2);flex-wrap:wrap;padding:var(--sp-2) var(--sp-3);background:#e5504f1a;border:1px solid rgba(229,80,79,.4);border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);line-height:1.55;color:var(--status-failed)}.error-code.svelte-y9fra9{font-family:var(--font-mono);font-weight:700;letter-spacing:var(--track-caps)}.error-text.svelte-y9fra9{color:var(--ink-muted);flex:1;min-width:0}.mini-btn.svelte-y9fra9{background:transparent;border:1px solid rgba(229,80,79,.4);border-radius:var(--r-sm);color:var(--ink-muted);font-family:var(--font-sans);font-size:var(--text-2xs);font-weight:600;padding:1px var(--sp-2);cursor:pointer}.mini-btn.svelte-y9fra9:hover{color:var(--ink)}.form-actions.svelte-y9fra9{display:flex;gap:var(--sp-2)}.primary-btn.svelte-y9fra9{flex:1;background:var(--interactive);color:#000;border:none;border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:650;padding:var(--sp-2) var(--sp-4);cursor:pointer;transition:opacity .13s var(--ease-out-quart)}.primary-btn.svelte-y9fra9:hover:not(:disabled){opacity:.88}.primary-btn.svelte-y9fra9:disabled{opacity:.4;cursor:not-allowed}.ghost-btn.svelte-y9fra9{background:transparent;border:1px solid var(--line-strong);border-radius:var(--r);color:var(--ink-muted);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-4);cursor:pointer;transition:color .13s var(--ease-out-quart),border-color .13s var(--ease-out-quart)}.ghost-btn.svelte-y9fra9:hover:not(:disabled){color:var(--ink);border-color:var(--ink-faint)}.ghost-btn.svelte-y9fra9:disabled{opacity:.4;cursor:not-allowed}.primary-btn.svelte-y9fra9:focus-visible,.ghost-btn.svelte-y9fra9:focus-visible,.danger-btn.svelte-y9fra9:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.danger-zone.svelte-y9fra9{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;padding-top:var(--sp-3);border-top:1px solid var(--line)}.confirm-text.svelte-y9fra9{font-family:var(--font-sans);font-size:var(--text-2xs);color:var(--status-failed);flex:1;min-width:100%}.danger-btn.svelte-y9fra9{background:#e5504f1f;border:1px solid rgba(229,80,79,.4);border-radius:var(--r);color:var(--status-failed);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-4);cursor:pointer;transition:background .13s var(--ease-out-quart)}.danger-btn.svelte-y9fra9:hover:not(:disabled){background:#e5504f33}.danger-btn.svelte-y9fra9:disabled{opacity:.4;cursor:not-allowed}.app.svelte-1n46o8q{display:flex;flex-direction:column;height:100vh;background:var(--bg-chrome);color:var(--ink);overflow:hidden}.topbar.svelte-1n46o8q{display:flex;align-items:center;gap:var(--sp-3);padding:0 var(--sp-4);height:48px;flex-shrink:0;border-bottom:1px solid var(--line);box-shadow:inset 0 1px 0 var(--hi-line);background:var(--bg-chrome);-webkit-user-select:none;user-select:none;white-space:nowrap}.brand.svelte-1n46o8q{display:flex;align-items:center;gap:var(--sp-2);color:var(--ink-muted);flex-shrink:0}.brand-text.svelte-1n46o8q{display:flex;flex-direction:column;gap:1px;min-width:0}.title.svelte-1n46o8q{font-family:var(--font-sans);font-size:13px;font-weight:650;letter-spacing:-.01em;color:var(--ink);line-height:1.2}.graph-label.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);letter-spacing:.02em;max-width:200px;overflow:hidden;text-overflow:ellipsis}.status-bar.svelte-1n46o8q{display:flex;align-items:center;gap:2px;padding:3px;background:var(--wash-1);border-radius:11px;overflow-x:auto;scrollbar-width:none;min-width:0;flex-shrink:1}.status-bar.svelte-1n46o8q::-webkit-scrollbar{display:none}.sb-total.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-muted);padding:3px var(--sp-2);font-variant-numeric:tabular-nums;align-self:center;flex-shrink:0}.sb-n.svelte-1n46o8q{color:var(--ink);font-weight:600}.sb-total.svelte-1n46o8q .sb-n:where(.svelte-1n46o8q){margin-right:3px}.sb-chip.svelte-1n46o8q{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-muted);background:transparent;border:none;border-radius:999px;padding:3px 9px;cursor:pointer;font-variant-numeric:tabular-nums;flex-shrink:0;transition:background .13s var(--ease-out-quart),color .13s var(--ease-out-quart)}.sb-chip.svelte-1n46o8q:hover{background:var(--wash-2);color:var(--ink)}.sb-chip[aria-pressed=true].svelte-1n46o8q{background:var(--wash-3);color:var(--ink)}.sb-chip.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.sb-chip.zero.svelte-1n46o8q{opacity:.45}.sb-dot.svelte-1n46o8q{width:7px;height:7px;border-radius:50%;flex-shrink:0}.sb-label.svelte-1n46o8q{letter-spacing:.02em}.sb-clear.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-2xs);font-weight:600;color:var(--ink);background:var(--wash-3);border:none;border-radius:999px;padding:3px 10px;cursor:pointer;flex-shrink:0;transition:background .13s var(--ease-out-quart)}.sb-clear.svelte-1n46o8q:hover{background:#ffffff2e}.sb-clear.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.topbar-right.svelte-1n46o8q{margin-left:auto;display:flex;align-items:center;gap:var(--sp-2);flex-shrink:0}.stats.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-muted);font-variant-numeric:tabular-nums;letter-spacing:.02em;display:flex;align-items:center;gap:var(--sp-2);padding-left:var(--sp-2)}.stat.svelte-1n46o8q{color:var(--ink);font-weight:500}.stat-unit.svelte-1n46o8q{color:var(--ink-faint);margin-left:1px}.stat-divider.svelte-1n46o8q{color:var(--ink-faint)}.conn-off.svelte-1n46o8q{color:var(--status-running);font-size:var(--text-2xs);border:1px solid rgba(240,167,58,.5);border-radius:999px;padding:1px var(--sp-2)}.search-box.svelte-1n46o8q{position:relative;display:flex;align-items:center}.search-icon.svelte-1n46o8q{position:absolute;left:10px;color:var(--ink-faint);pointer-events:none}.search-input.svelte-1n46o8q{background:var(--wash-1);border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-xs);padding:5px var(--sp-2) 5px 28px;width:210px;outline:none;transition:border-color .13s var(--ease-out-quart),background .13s var(--ease-out-quart)}.search-input.svelte-1n46o8q::placeholder{color:var(--ink-faint)}.search-input.svelte-1n46o8q:hover{border-color:var(--line-strong)}.search-input.svelte-1n46o8q:focus{background:var(--wash-2);border-color:var(--line-strong)}.search-input.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.main.svelte-1n46o8q{flex:1 1 0%;min-height:0;position:relative;overflow:hidden}.filter-chip.svelte-1n46o8q,.action-chip.svelte-1n46o8q{position:absolute;top:var(--sp-3);left:50%;transform:translate(-50%);display:flex;align-items:center;gap:var(--sp-2);background:var(--glass);-webkit-backdrop-filter:var(--blur-panel);backdrop-filter:var(--blur-panel);border:1px solid var(--glass-line);border-radius:999px;box-shadow:var(--shadow-float);padding:var(--sp-1) var(--sp-3);font-size:var(--text-2xs);font-family:var(--font-mono);color:var(--ink);z-index:var(--z-overlay);font-variant-numeric:tabular-nums;max-width:calc(100% - 48px)}.action-chip.svelte-1n46o8q{top:auto;bottom:var(--sp-4)}.action-chip.recovery.svelte-1n46o8q{border-color:#e5504f73}.recovery-code.svelte-1n46o8q{color:var(--status-failed);font-weight:700;letter-spacing:var(--track-caps)}.recovery-text.svelte-1n46o8q{font-family:var(--font-sans);color:var(--ink-muted)}.filter-clear.svelte-1n46o8q{background:transparent;border:1px solid var(--line-strong);border-radius:var(--r-sm);color:var(--ink-muted);font-family:var(--font-sans);font-size:var(--text-2xs);font-weight:600;padding:1px var(--sp-2);cursor:pointer;flex-shrink:0;transition:color .13s var(--ease-out-quart),border-color .13s var(--ease-out-quart)}.filter-clear.svelte-1n46o8q:hover{color:var(--ink);border-color:var(--ink-faint)}.tool-rail.svelte-1n46o8q{position:absolute;left:12px;top:50%;transform:translateY(-50%);width:var(--rail-w);display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 0;background:var(--glass);-webkit-backdrop-filter:var(--blur-panel);backdrop-filter:var(--blur-panel);border:1px solid var(--glass-line, var(--line));border-radius:16px;box-shadow:var(--shadow-float),inset 0 1px 0 var(--hi-line);z-index:var(--z-overlay);transition:transform .22s var(--ease-out-quint),opacity .22s var(--ease-out-quint)}.rail-btn.svelte-1n46o8q{position:relative;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;border-radius:var(--r);color:var(--ink-muted);cursor:pointer;transition:background .13s var(--ease-out-quart),color .13s var(--ease-out-quart)}.rail-btn.svelte-1n46o8q:hover{background:var(--wash-2);color:var(--ink)}.rail-btn.active.svelte-1n46o8q{background:var(--wash-3);color:var(--ink)}.rail-btn.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.rail-btn.svelte-1n46o8q:disabled{opacity:.35;cursor:not-allowed}.rail-badge.svelte-1n46o8q{position:absolute;top:3px;right:3px;min-width:14px;height:14px;padding:0 3px;border-radius:999px;background:var(--wash-3);border:1px solid var(--line-strong);color:var(--ink);font-family:var(--font-mono);font-size:9px;font-weight:600;line-height:12px;text-align:center;font-variant-numeric:tabular-nums;pointer-events:none}.rail-sep.svelte-1n46o8q{width:18px;height:1px;background:var(--line);margin:var(--sp-1) 0;flex-shrink:0}.rail-flyout.svelte-1n46o8q{position:absolute;left:calc(var(--rail-w) + 20px);top:50%;transform:translateY(-50%);background:var(--glass-strong);-webkit-backdrop-filter:var(--blur-panel);backdrop-filter:var(--blur-panel);border:1px solid var(--glass-line, var(--line));border-radius:var(--r-lg);box-shadow:var(--shadow-float),inset 0 1px 0 var(--hi-line);padding:var(--sp-3);z-index:var(--z-panel);min-width:210px;display:flex;flex-direction:column;gap:var(--sp-1);max-height:70vh;overflow-y:auto}.graphs-flyout.svelte-1n46o8q{min-width:260px}.raw-flyout.svelte-1n46o8q{min-width:380px;max-width:480px}.flyout-title.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-2xs);font-weight:650;color:var(--ink-faint);padding:0 var(--sp-1) var(--sp-1)}.flyout-hint.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-2xs);color:var(--ink-faint);line-height:1.6;margin:0;padding:0 var(--sp-1)}.flyout-actions.svelte-1n46o8q{display:flex;gap:var(--sp-2);padding:0 var(--sp-1) var(--sp-1)}.flyout-btn.svelte-1n46o8q{flex:1;background:var(--wash-2);border:1px solid var(--line);border-radius:var(--r);color:var(--ink);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-3);cursor:pointer;transition:background .13s var(--ease-out-quart)}.flyout-btn.svelte-1n46o8q:hover{background:var(--wash-3)}.flyout-btn.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.graph-item.svelte-1n46o8q{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-2);border:none;background:transparent;border-radius:var(--r);cursor:pointer;text-align:left;transition:background .13s var(--ease-out-quart)}.graph-item.svelte-1n46o8q:hover{background:var(--wash-2)}.graph-item.active.svelte-1n46o8q{background:var(--wash-3)}.graph-item.svelte-1n46o8q:focus-visible{outline:2px solid var(--interactive);outline-offset:1px}.graph-item-body.svelte-1n46o8q{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.graph-item-name.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-xs);font-weight:600;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.graph-item-label.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-2xs);color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.graph-item-count.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-faint);background:var(--wash-2);border-radius:999px;padding:1px 8px;font-variant-numeric:tabular-nums;flex-shrink:0}.validation-summary.svelte-1n46o8q{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:#e5504f14;border:1px solid rgba(229,80,79,.35);border-radius:var(--r)}.validation-summary.valid.svelte-1n46o8q{background:#16a34a14;border-color:#16a34a59}.validation-verdict.svelte-1n46o8q{font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--status-failed)}.validation-summary.valid.svelte-1n46o8q .validation-verdict:where(.svelte-1n46o8q){color:var(--status-passed)}.validation-list.svelte-1n46o8q{margin:0;padding-left:var(--sp-4);font-family:var(--font-sans);font-size:var(--text-2xs);line-height:1.6;color:var(--ink-muted);display:flex;flex-direction:column;gap:2px}.validation-list.errors.svelte-1n46o8q{color:var(--status-failed)}.validation-list.warnings.svelte-1n46o8q{color:var(--status-running)}.module-item.svelte-1n46o8q{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-1);font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--ink-muted);flex-wrap:wrap}.module-dot.svelte-1n46o8q{width:7px;height:7px;border-radius:50%;background:var(--status-failed);flex-shrink:0}.module-dot.ok.svelte-1n46o8q{background:var(--status-passed)}.module-name.svelte-1n46o8q{color:var(--ink)}.module-state.svelte-1n46o8q{margin-left:auto;color:var(--status-failed)}.module-state.ok.svelte-1n46o8q{color:var(--status-passed)}.module-reason.svelte-1n46o8q{flex-basis:100%;color:var(--ink-faint);padding-left:var(--sp-3)}.raw-snapshot.svelte-1n46o8q{margin:0;font-family:var(--font-mono);font-size:var(--text-2xs);line-height:1.5;color:var(--ink-muted);white-space:pre-wrap;word-break:break-word;max-height:50vh;overflow-y:auto;background:var(--wash-1);border:1px solid var(--line);border-radius:var(--r);padding:var(--sp-2)}.loading-state.svelte-1n46o8q,.empty-state.svelte-1n46o8q,.error-state.svelte-1n46o8q{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-3);color:var(--ink-muted);background:var(--bg)}.skeleton-graph.svelte-1n46o8q{position:relative;width:400px;height:300px;opacity:.4}.skeleton-node.svelte-1n46o8q{position:absolute;width:40px;height:40px;border-radius:50%;background:var(--surface-2);border:2px solid var(--line-strong);animation:svelte-1n46o8q-skeleton-pulse 1.5s ease-in-out infinite}.skeleton-node.svelte-1n46o8q:nth-child(1){animation-delay:0s}.skeleton-node.svelte-1n46o8q:nth-child(2){animation-delay:.1s}.skeleton-node.svelte-1n46o8q:nth-child(3){animation-delay:.2s}.skeleton-node.svelte-1n46o8q:nth-child(4){animation-delay:.3s}.skeleton-node.svelte-1n46o8q:nth-child(5){animation-delay:.4s}.skeleton-node.svelte-1n46o8q:nth-child(6){animation-delay:.5s}.skeleton-edges.svelte-1n46o8q{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.skeleton-edge.svelte-1n46o8q{stroke:var(--line-strong);stroke-width:.5;stroke-dasharray:2 1;animation:svelte-1n46o8q-skeleton-pulse 1.5s ease-in-out infinite}.skeleton-edge.svelte-1n46o8q:nth-child(1){animation-delay:.1s}.skeleton-edge.svelte-1n46o8q:nth-child(2){animation-delay:.2s}.skeleton-edge.svelte-1n46o8q:nth-child(3){animation-delay:.3s}.skeleton-edge.svelte-1n46o8q:nth-child(4){animation-delay:.4s}.skeleton-edge.svelte-1n46o8q:nth-child(5){animation-delay:.5s}@keyframes svelte-1n46o8q-skeleton-pulse{0%,to{opacity:.3}50%{opacity:.6}}.loading-text.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-sm);color:var(--ink-muted);margin:0}.error-title.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-base);font-weight:650;color:var(--ink);margin:0}.error-hint.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-xs);color:var(--ink-faint);margin:0;max-width:44ch;text-align:center;line-height:1.6}.retry-btn.svelte-1n46o8q{background:var(--interactive);color:#000;border:none;border-radius:var(--r);font-family:var(--font-sans);font-size:var(--text-xs);font-weight:600;padding:var(--sp-2) var(--sp-4);cursor:pointer;transition:opacity .13s var(--ease-out-quart)}.retry-btn.svelte-1n46o8q:hover{opacity:.88}.empty-title.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-sm);font-weight:650;margin:var(--sp-2) 0 0;color:var(--ink-muted)}.empty-hint.svelte-1n46o8q{font-family:var(--font-sans);font-size:var(--text-xs);margin:0;color:var(--ink-faint)}@media(prefers-reduced-motion:reduce){.sb-chip.svelte-1n46o8q,.rail-btn.svelte-1n46o8q,.tool-rail.svelte-1n46o8q,.rail-flyout.svelte-1n46o8q{transition:none}.skeleton-node.svelte-1n46o8q,.skeleton-edge.svelte-1n46o8q{animation:none;opacity:.5}}@media(max-width:768px){.topbar.svelte-1n46o8q{padding:0 var(--sp-3);gap:var(--sp-2)}.stats.svelte-1n46o8q,.graph-label.svelte-1n46o8q{display:none}.search-input.svelte-1n46o8q{width:130px}.tool-rail.svelte-1n46o8q{top:auto;bottom:12px;left:50%;transform:translate(-50%);width:auto;height:56px;flex-direction:row;padding:0 8px;border-radius:18px}.rail-btn.svelte-1n46o8q{width:var(--tap);height:var(--tap)}.rail-sep.svelte-1n46o8q{width:1px;height:20px;margin:0 var(--sp-1)}.rail-flyout.svelte-1n46o8q{left:var(--sp-2);right:var(--sp-2);top:auto;bottom:76px;transform:none}}
@@ -0,0 +1,175 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="theme-color" content="#0a0b0e" />
7
+ <title>TopoRealm — 拓扑图工作空间</title>
8
+ <style>
9
+ /* ── Design tokens: deep-space instrument glass(与 Super Plumber 参考实现逐项一致,
10
+ 见 D:/LUKAWI/AI_project/projects/topological-tool/web-ui/index.html;TopoRealm 侧
11
+ 仅彩色语义不同:画布彩色表达对象 kind/模块,而非工作流状态)── */
12
+ :root {
13
+ /* Surfaces:画布纯黑舞台不变;chrome = 冷调近黑玻璃分层 */
14
+ --bg: #000000;
15
+ --bg-chrome: #0a0b0e;
16
+ --glass: rgba(13, 15, 20, 0.72); /* 浮层玻璃基(dock/图例/提示/胶囊) */
17
+ --glass-strong: rgba(15, 17, 22, 0.88); /* 抽屉玻璃(正文可读优先) */
18
+ --glass-line: rgba(255, 255, 255, 0.08); /* 玻璃边线 */
19
+ --hi-line: rgba(255, 255, 255, 0.06); /* 玻璃顶部内高光 */
20
+
21
+ /* Washes(白色洗刷阶梯:容器底/hover/active,替代不透明灰阶) */
22
+ --wash-1: rgba(255, 255, 255, 0.04);
23
+ --wash-2: rgba(255, 255, 255, 0.07);
24
+ --wash-3: rgba(255, 255, 255, 0.12);
25
+
26
+ /* Ink(白阶梯:文本最低档 0.52 ≈ 5.7:1,全部 ≥ AA) */
27
+ --ink: #ffffff;
28
+ --ink-muted: rgba(255, 255, 255, 0.72);
29
+ --ink-faint: rgba(255, 255, 255, 0.52);
30
+
31
+ /* Lines & borders */
32
+ --line: rgba(255, 255, 255, 0.08);
33
+ --line-strong: rgba(255, 255, 255, 0.16);
34
+
35
+ /* 交互色:白。focus/选中/开关一律明度表达 */
36
+ --interactive: #ffffff;
37
+
38
+ /* 浮层唯一投影档(玻璃深度)+ 模糊 */
39
+ --shadow-float: 0 12px 32px rgba(0, 0, 0, 0.5), 0 2px 8px rgba(0, 0, 0, 0.35);
40
+ --blur-panel: blur(20px) saturate(140%);
41
+ --blur-bar: blur(24px) saturate(140%);
42
+
43
+ /* 兼容别名(旧 surface 语义 → wash 映射,防止漏改处裸退) */
44
+ --surface-1: var(--wash-1);
45
+ --surface-2: var(--wash-2);
46
+ --surface-3: var(--wash-3);
47
+
48
+ /* Status colors — 校验/历史等状态语义沿用参考实现的 OKLCH 色档 */
49
+ --status-pending: #8a8f98;
50
+ --status-ready: #4a93e8;
51
+ --status-running: #f0a73a;
52
+ --status-passed: #16a34a;
53
+ --status-failed: #e5504f;
54
+ --status-blocked: #a574e6;
55
+ --status-cancelled: #7e848d;
56
+
57
+ /* Fonts */
58
+ --font-sans:
59
+ -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, "PingFang SC",
60
+ "Microsoft YaHei", sans-serif;
61
+ --font-mono:
62
+ ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
63
+
64
+ /* Type scale(--text-2xs 11px:废除 10px 功能文本)*/
65
+ --text-2xs: 0.6875rem; /* 11px */
66
+ --text-xs: 0.75rem; /* 12px */
67
+ --text-sm: 0.8125rem; /* 13px */
68
+ --text-base: 0.875rem; /* 14px */
69
+ --text-md: 1rem; /* 16px */
70
+ --text-lg: 1.25rem; /* 20px */
71
+ --text-xl: 1.75rem; /* 28px */
72
+
73
+ /* Letter-spacing scale */
74
+ --track-tight: -0.015em;
75
+ --track-body: 0.01em;
76
+ --track-label: 0.04em;
77
+ --track-caps: 0.08em;
78
+
79
+ /* Spacing (4pt base) */
80
+ --sp-1: 4px;
81
+ --sp-2: 8px;
82
+ --sp-3: 12px;
83
+ --sp-4: 16px;
84
+ --sp-5: 20px;
85
+ --sp-6: 24px;
86
+ --sp-8: 32px;
87
+ --sp-10: 40px;
88
+ --sp-12: 48px;
89
+ --sp-16: 64px;
90
+
91
+ /* Radii(6/10/14/18 + pill:玻璃仪器的圆角阶梯)*/
92
+ --r-sm: 6px;
93
+ --r: 10px;
94
+ --r-lg: 14px;
95
+ --r-xl: 18px;
96
+
97
+ /* Easings */
98
+ --ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1);
99
+ --ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1);
100
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
101
+
102
+ /* z-index scale(工具轨/浮层 10 < 面板 100 < tooltip 1000)*/
103
+ --z-canvas: 1;
104
+ --z-overlay: 10;
105
+ --z-panel: 100;
106
+ --z-tooltip: 1000;
107
+
108
+ /* 布局常量 */
109
+ --header-h: 48px; /* 单排仪器条高度 */
110
+ --rail-w: 48px; /* 左缘浮动玻璃 dock 宽(含内衬) */
111
+
112
+ /* Touch targets */
113
+ --tap: 44px;
114
+ }
115
+
116
+ * {
117
+ margin: 0;
118
+ padding: 0;
119
+ box-sizing: border-box;
120
+ }
121
+
122
+ html,
123
+ body {
124
+ height: 100%;
125
+ background: var(--bg-chrome);
126
+ color: var(--ink);
127
+ font-family: var(--font-sans);
128
+ font-size: var(--text-base);
129
+ line-height: 1.55;
130
+ -webkit-font-smoothing: antialiased;
131
+ -moz-osx-font-smoothing: grayscale;
132
+ font-feature-settings:
133
+ "tnum" 1,
134
+ "lnum" 1;
135
+ }
136
+
137
+ /* 键盘焦点全局可见(白环;鼠标点击不触发)*/
138
+ :focus-visible {
139
+ outline: 2px solid var(--interactive);
140
+ outline-offset: 1px;
141
+ }
142
+
143
+ body {
144
+ letter-spacing: var(--track-body);
145
+ }
146
+
147
+ /* Scrollbar */
148
+ ::-webkit-scrollbar {
149
+ width: 6px;
150
+ height: 6px;
151
+ }
152
+ ::-webkit-scrollbar-track {
153
+ background: transparent;
154
+ }
155
+ ::-webkit-scrollbar-thumb {
156
+ background: var(--wash-3);
157
+ border-radius: 999px;
158
+ }
159
+ ::-webkit-scrollbar-thumb:hover {
160
+ background: rgba(255, 255, 255, 0.2);
161
+ }
162
+
163
+ /* Selection */
164
+ ::selection {
165
+ background: rgba(255, 255, 255, 0.12);
166
+ color: var(--ink);
167
+ }
168
+ </style>
169
+ <script type="module" crossorigin src="/assets/index-BUAvvLwY.js"></script>
170
+ <link rel="stylesheet" crossorigin href="/assets/index-DtKFY9Hh.css">
171
+ </head>
172
+ <body>
173
+ <div id="app"></div>
174
+ </body>
175
+ </html>
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@lukawi/toporealm",
3
+ "version": "0.1.0",
4
+ "description": "Domain-neutral graph foundation with CLI, MCP, Web UI, module SDK, and agent integrations",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/LUKAWI/toporealm.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/LUKAWI/toporealm/issues"
12
+ },
13
+ "homepage": "https://github.com/LUKAWI/toporealm#readme",
14
+ "engines": {
15
+ "node": ">=20"
16
+ },
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": { "types": "./dist/index.d.ts", "import": "./dist/index.js" },
21
+ "./core": { "types": "./dist/core/index.d.ts", "import": "./dist/core/index.js" },
22
+ "./module-sdk": { "types": "./dist/module-sdk/index.d.ts", "import": "./dist/module-sdk/index.js" },
23
+ "./cli": { "types": "./dist/cli/index.d.ts", "import": "./dist/cli/index.js" },
24
+ "./mcp": { "types": "./dist/mcp/index.d.ts", "import": "./dist/mcp/index.js" },
25
+ "./server": { "types": "./dist/server/index.d.ts", "import": "./dist/server/index.js" },
26
+ "./web": { "types": "./dist/web/index.d.ts", "import": "./dist/web/index.js" },
27
+ "./distribution": { "types": "./dist/distribution/index.d.ts", "import": "./dist/distribution/index.js" },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "files": [
31
+ "dist"
32
+ ],
33
+ "type": "module",
34
+ "bin": {
35
+ "toporealm": "dist/cli/main.js"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public",
39
+ "tag": "preview"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.json && npm run web:build && node scripts/copy-web-assets.mjs",
43
+ "typecheck": "tsc -p tsconfig.json --noEmit",
44
+ "pretest": "npm run build",
45
+ "test": "vitest run",
46
+ "web:build": "npm --prefix web-ui run build",
47
+ "web:typecheck": "npm --prefix web-ui run typecheck",
48
+ "web:test": "npm --prefix web-ui run test",
49
+ "web:browser-smoke": "vitest run tests/browser-smoke.test.ts",
50
+ "web:verify": "npm run web:typecheck && npm run web:build && npm run web:test",
51
+ "verify": "npm run typecheck && npm test && npm run web:typecheck && npm run web:test && npm run test:package",
52
+ "prepack": "npm run build",
53
+ "test:package": "node scripts/package-smoke.mjs"
54
+ },
55
+ "dependencies": {
56
+ "@modelcontextprotocol/sdk": "^1.30.0",
57
+ "yaml": "^2.7.0",
58
+ "zod": "^3.25.76"
59
+ },
60
+ "devDependencies": {
61
+ "@types/node": "^22.10.0",
62
+ "typescript": "^5.7.2",
63
+ "vitest": "^2.1.8"
64
+ }
65
+ }