@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.
- package/LICENSE +21 -0
- package/README.en.md +113 -0
- package/README.md +115 -0
- package/dist/cli/index.d.ts +46 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +276 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +48 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/core/errors.d.ts +16 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +40 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/store.d.ts +27 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +390 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/types.d.ts +108 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/validate.d.ts +16 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +32 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/distribution/hosts.d.ts +12 -0
- package/dist/distribution/hosts.d.ts.map +1 -0
- package/dist/distribution/hosts.js +122 -0
- package/dist/distribution/hosts.js.map +1 -0
- package/dist/distribution/index.d.ts +4 -0
- package/dist/distribution/index.d.ts.map +1 -0
- package/dist/distribution/index.js +4 -0
- package/dist/distribution/index.js.map +1 -0
- package/dist/distribution/installer.d.ts +23 -0
- package/dist/distribution/installer.d.ts.map +1 -0
- package/dist/distribution/installer.js +179 -0
- package/dist/distribution/installer.js.map +1 -0
- package/dist/distribution/skills.d.ts +11 -0
- package/dist/distribution/skills.d.ts.map +1 -0
- package/dist/distribution/skills.js +20 -0
- package/dist/distribution/skills.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/skills/toporealm/SKILL.md +19 -0
- package/dist/integrations/skills/toporealm/agents/openai.yaml +6 -0
- package/dist/integrations/skills/toporealm-design/SKILL.md +14 -0
- package/dist/integrations/skills/toporealm-design/agents/openai.yaml +6 -0
- package/dist/integrations/skills/toporealm-grilling/SKILL.md +26 -0
- package/dist/integrations/skills/toporealm-grilling/agents/openai.yaml +6 -0
- package/dist/integrations/skills/toporealm-join/SKILL.md +18 -0
- package/dist/integrations/skills/toporealm-join/agents/openai.yaml +6 -0
- package/dist/mcp/index.d.ts +31 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +128 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/module-sdk/actions.d.ts +33 -0
- package/dist/module-sdk/actions.d.ts.map +1 -0
- package/dist/module-sdk/actions.js +56 -0
- package/dist/module-sdk/actions.js.map +1 -0
- package/dist/module-sdk/index.d.ts +47 -0
- package/dist/module-sdk/index.d.ts.map +1 -0
- package/dist/module-sdk/index.js +7 -0
- package/dist/module-sdk/index.js.map +1 -0
- package/dist/module-sdk/registry.d.ts +81 -0
- package/dist/module-sdk/registry.d.ts.map +1 -0
- package/dist/module-sdk/registry.js +294 -0
- package/dist/module-sdk/registry.js.map +1 -0
- package/dist/server/index.d.ts +14 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +168 -0
- package/dist/server/index.js.map +1 -0
- package/dist/web/index.d.ts +26 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +107 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web-assets/assets/index-BUAvvLwY.js +35 -0
- package/dist/web-assets/assets/index-DtKFY9Hh.css +1 -0
- package/dist/web-assets/index.html +175 -0
- package/package.json +65 -0
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { extname, join, normalize, relative } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { coreSurface } from "../core/index.js";
|
|
5
|
+
import { CoreError } from "../core/index.js";
|
|
6
|
+
export const webSurface = {
|
|
7
|
+
name: "web",
|
|
8
|
+
coreFormat: coreSurface.graphFormat,
|
|
9
|
+
};
|
|
10
|
+
/** Client-side projection that consumes the same revisioned patches returned by Core. */
|
|
11
|
+
export class WebGraphModel {
|
|
12
|
+
current;
|
|
13
|
+
constructor(snapshot) {
|
|
14
|
+
this.current = structuredClone(snapshot);
|
|
15
|
+
}
|
|
16
|
+
get snapshot() {
|
|
17
|
+
return structuredClone(this.current);
|
|
18
|
+
}
|
|
19
|
+
applyPatch(patch) {
|
|
20
|
+
if (patch.fromRevision !== this.current.revision) {
|
|
21
|
+
throw new CoreError({
|
|
22
|
+
code: "PATCH_GAP",
|
|
23
|
+
message: `Web 视图需要 revision ${this.current.revision},收到 ${patch.fromRevision}。`,
|
|
24
|
+
details: { expectedRevision: this.current.revision, patchFrom: patch.fromRevision },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const objects = new Map(this.current.objects.map((object) => [object.id, structuredClone(object)]));
|
|
28
|
+
const relations = new Map(this.current.relations.map((relation) => [relation.id, structuredClone(relation)]));
|
|
29
|
+
for (const object of patch.objects.added)
|
|
30
|
+
objects.set(object.id, structuredClone(object));
|
|
31
|
+
for (const object of patch.objects.updated)
|
|
32
|
+
objects.set(object.id, structuredClone(object));
|
|
33
|
+
for (const id of patch.objects.deleted)
|
|
34
|
+
objects.delete(id);
|
|
35
|
+
for (const relation of patch.relations.added)
|
|
36
|
+
relations.set(relation.id, structuredClone(relation));
|
|
37
|
+
for (const relation of patch.relations.updated)
|
|
38
|
+
relations.set(relation.id, structuredClone(relation));
|
|
39
|
+
for (const id of patch.relations.deleted)
|
|
40
|
+
relations.delete(id);
|
|
41
|
+
this.current = {
|
|
42
|
+
manifest: patch.manifestChanged && patch.manifest ? structuredClone(patch.manifest) : this.current.manifest,
|
|
43
|
+
objects: [...objects.values()].sort(byId),
|
|
44
|
+
relations: [...relations.values()].sort(byId),
|
|
45
|
+
revision: patch.toRevision,
|
|
46
|
+
};
|
|
47
|
+
return this.snapshot;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** One extension failing must leave the generic surface usable. */
|
|
51
|
+
export function withUiErrorBoundary(extension, fallback) {
|
|
52
|
+
try {
|
|
53
|
+
return { enabled: true, value: extension() };
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return { enabled: false, value: fallback(), error: error instanceof Error ? error.message : String(error) };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const PACKAGED_WEB_DIST = fileURLToPath(new URL("../web-assets/", import.meta.url));
|
|
60
|
+
const DEVELOPMENT_WEB_DIST = join(process.cwd(), "web-ui", "dist");
|
|
61
|
+
function defaultWebRoot() {
|
|
62
|
+
return existsSync(join(PACKAGED_WEB_DIST, "index.html")) ? PACKAGED_WEB_DIST : DEVELOPMENT_WEB_DIST;
|
|
63
|
+
}
|
|
64
|
+
const MIME_TYPES = {
|
|
65
|
+
".css": "text/css; charset=utf-8",
|
|
66
|
+
".html": "text/html; charset=utf-8",
|
|
67
|
+
".js": "text/javascript; charset=utf-8",
|
|
68
|
+
".json": "application/json; charset=utf-8",
|
|
69
|
+
".svg": "image/svg+xml",
|
|
70
|
+
".woff": "font/woff",
|
|
71
|
+
".woff2": "font/woff2",
|
|
72
|
+
};
|
|
73
|
+
/** Reads a built Web UI asset without allowing paths outside web-ui/dist. */
|
|
74
|
+
export function readWebAsset(pathname, webRoot = defaultWebRoot()) {
|
|
75
|
+
let decoded;
|
|
76
|
+
try {
|
|
77
|
+
decoded = decodeURIComponent(pathname);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
const assetPath = normalize(join(webRoot, decoded.replace(/^[/\\]+/, "")));
|
|
83
|
+
const rel = relative(webRoot, assetPath);
|
|
84
|
+
if (!rel || rel.startsWith("..") || rel.includes(`..${"/"}`) || rel.includes(`..${"\\"}`) || !existsSync(assetPath))
|
|
85
|
+
return undefined;
|
|
86
|
+
return { body: readFileSync(assetPath), contentType: MIME_TYPES[extname(assetPath).toLowerCase()] ?? "application/octet-stream" };
|
|
87
|
+
}
|
|
88
|
+
function byId(left, right) {
|
|
89
|
+
return left.id.localeCompare(right.id);
|
|
90
|
+
}
|
|
91
|
+
export function renderWebShell(webRoot = defaultWebRoot()) {
|
|
92
|
+
const builtIndex = join(webRoot, "index.html");
|
|
93
|
+
if (existsSync(builtIndex))
|
|
94
|
+
return readFileSync(builtIndex, "utf8");
|
|
95
|
+
return `<!doctype html>
|
|
96
|
+
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
97
|
+
<title>TopoRealm</title><style>body{font:15px system-ui,sans-serif;max-width:960px;margin:2rem auto;padding:0 1rem}button{margin:.25rem;padding:.45rem .7rem}pre{background:#f5f5f5;padding:1rem;overflow:auto}</style></head>
|
|
98
|
+
<body><h1>TopoRealm</h1><p>最薄基座 Web 视图:读取图快照,并把编辑结果作为 revision patch 应用。</p>
|
|
99
|
+
<p><button id="refresh">刷新</button><button id="undo">撤销</button><button id="redo">重做</button></p><pre id="state">加载中…</pre>
|
|
100
|
+
<script>
|
|
101
|
+
const state=document.querySelector('#state');
|
|
102
|
+
async function get(){const r=await fetch('/graph'); const v=await r.json(); state.textContent=JSON.stringify(v,null,2);}
|
|
103
|
+
async function action(path){const r=await fetch(path,{method:'POST',headers:{'content-type':'application/json'},body:'{}'}); const v=await r.json(); state.textContent=JSON.stringify(v,null,2);}
|
|
104
|
+
document.querySelector('#refresh').onclick=get; document.querySelector('#undo').onclick=()=>action('/undo'); document.querySelector('#redo').onclick=()=>action('/redo'); get();
|
|
105
|
+
</script></body></html>`;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,WAAW,CAAC,WAAW;CAC3B,CAAC;AAEX,yFAAyF;AACzF,MAAM,OAAO,aAAa;IAChB,OAAO,CAAgB;IAE/B,YAAY,QAAuB;QACjC,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,KAAiB;QAC1B,IAAI,KAAK,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACjD,MAAM,IAAI,SAAS,CAAC;gBAClB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,qBAAqB,IAAI,CAAC,OAAO,CAAC,QAAQ,OAAO,KAAK,CAAC,YAAY,GAAG;gBAC/E,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE;aACpF,CAAC,CAAC;QACL,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACpG,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9G,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1F,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,KAAK;YAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpG,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO;YAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;QACtG,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO;YAAE,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC3G,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,QAAQ,EAAE,KAAK,CAAC,UAAU;SAC3B,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAQD,mEAAmE;AACnE,MAAM,UAAU,mBAAmB,CAAI,SAAkB,EAAE,QAAiB;IAC1E,IAAI,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9G,CAAC;AACH,CAAC;AAED,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpF,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEnE,SAAS,cAAc;IACrB,OAAO,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,GAA2B;IACzC,MAAM,EAAE,yBAAyB;IACjC,OAAO,EAAE,0BAA0B;IACnC,KAAK,EAAE,gCAAgC;IACvC,OAAO,EAAE,iCAAiC;IAC1C,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,YAAY;CACvB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,OAAO,GAAG,cAAc,EAAE;IACvE,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACtI,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC;AACpI,CAAC;AAED,SAAS,IAAI,CAAC,IAAmC,EAAE,KAAoC;IACrF,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAO,GAAG,cAAc,EAAE;IACvD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,OAAO;;;;;;;;;;wBAUe,CAAC;AACzB,CAAC"}
|