@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,108 @@
1
+ /** The v1 graph format intentionally contains no domain-specific enums. */
2
+ export declare const GRAPH_FORMAT: "toporealm.graph/v1";
3
+ export type GraphFormat = typeof GRAPH_FORMAT;
4
+ export type EntityId = string;
5
+ export type ModuleId = string;
6
+ export type ModuleNamespace = string;
7
+ export interface GraphModuleRef {
8
+ id: ModuleId;
9
+ namespace: ModuleNamespace;
10
+ schema: number;
11
+ }
12
+ export interface GraphSources {
13
+ objects: string;
14
+ relations: string;
15
+ }
16
+ export interface GraphManifest {
17
+ format: GraphFormat;
18
+ id: string;
19
+ label?: string;
20
+ modules?: GraphModuleRef[];
21
+ sources: GraphSources;
22
+ meta?: Record<string, unknown>;
23
+ }
24
+ export interface ObjectRecord {
25
+ id: EntityId;
26
+ kind: string;
27
+ label: string;
28
+ data?: Record<string, unknown>;
29
+ capabilities?: Record<string, Record<string, unknown>>;
30
+ meta?: Record<string, unknown>;
31
+ }
32
+ export type RelationDirection = "directed" | "undirected";
33
+ export interface RelationRecord {
34
+ id: EntityId;
35
+ kind: string;
36
+ source: EntityId;
37
+ target: EntityId;
38
+ direction: RelationDirection;
39
+ label?: string;
40
+ data?: Record<string, unknown>;
41
+ capabilities?: Record<string, Record<string, unknown>>;
42
+ meta?: Record<string, unknown>;
43
+ }
44
+ export interface GraphSnapshot {
45
+ manifest: GraphManifest;
46
+ objects: readonly ObjectRecord[];
47
+ relations: readonly RelationRecord[];
48
+ revision: number;
49
+ }
50
+ export type ObjectMutation = {
51
+ op: "upsert_object";
52
+ object: ObjectRecord;
53
+ } | {
54
+ op: "delete_object";
55
+ id: EntityId;
56
+ };
57
+ export type RelationMutation = {
58
+ op: "upsert_relation";
59
+ relation: RelationRecord;
60
+ } | {
61
+ op: "delete_relation";
62
+ id: EntityId;
63
+ };
64
+ export type ManifestMutation = {
65
+ op: "patch_manifest";
66
+ patch: Partial<Pick<GraphManifest, "label" | "modules" | "meta">>;
67
+ };
68
+ /** A single user/agent command. It is the atomic unit for undo and redo. */
69
+ export type Mutation = ObjectMutation | RelationMutation | ManifestMutation;
70
+ export interface MutationPlan {
71
+ mutations: readonly Mutation[];
72
+ expectedRevision?: number;
73
+ label?: string;
74
+ }
75
+ export interface GraphPatch {
76
+ fromRevision: number;
77
+ toRevision: number;
78
+ objects: {
79
+ added: readonly ObjectRecord[];
80
+ updated: readonly ObjectRecord[];
81
+ deleted: readonly EntityId[];
82
+ };
83
+ relations: {
84
+ added: readonly RelationRecord[];
85
+ updated: readonly RelationRecord[];
86
+ deleted: readonly EntityId[];
87
+ };
88
+ manifestChanged: boolean;
89
+ manifest?: GraphManifest;
90
+ }
91
+ export interface MutationResult {
92
+ snapshot: GraphSnapshot;
93
+ patch: GraphPatch;
94
+ history: {
95
+ canUndo: boolean;
96
+ canRedo: boolean;
97
+ };
98
+ }
99
+ export interface CoreErrorShape {
100
+ code: string;
101
+ message: string;
102
+ details?: Record<string, unknown>;
103
+ }
104
+ export interface CoreSurface {
105
+ readonly name: "core";
106
+ readonly graphFormat: GraphFormat;
107
+ }
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** The v1 graph format intentionally contains no domain-specific enums. */
2
+ export const GRAPH_FORMAT = "toporealm.graph/v1";
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG,oBAA6B,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { GraphSnapshot } from "./types.js";
2
+ import type { GraphRegistrySnapshot } from "../module-sdk/registry.js";
3
+ export interface ValidationIssue {
4
+ code: string;
5
+ message: string;
6
+ severity: "error" | "warning";
7
+ }
8
+ export interface GraphValidationResult {
9
+ ok: boolean;
10
+ complete: boolean;
11
+ errors: readonly ValidationIssue[];
12
+ warnings: readonly ValidationIssue[];
13
+ }
14
+ /** Basic checks are always available; complete checks additionally require module registries. */
15
+ export declare function validateGraph(snapshot: GraphSnapshot, registry?: GraphRegistrySnapshot): GraphValidationResult;
16
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CACtC;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,qBAAqB,GAAG,qBAAqB,CA0B9G"}
@@ -0,0 +1,32 @@
1
+ /** Basic checks are always available; complete checks additionally require module registries. */
2
+ export function validateGraph(snapshot, registry) {
3
+ const errors = [];
4
+ const warnings = [];
5
+ const ids = new Set();
6
+ for (const object of snapshot.objects) {
7
+ if (ids.has(object.id))
8
+ errors.push({ code: "DUPLICATE_ID", message: `重复实体 ID:${object.id}`, severity: "error" });
9
+ ids.add(object.id);
10
+ }
11
+ for (const relation of snapshot.relations) {
12
+ if (ids.has(relation.id))
13
+ errors.push({ code: "DUPLICATE_ID", message: `重复实体 ID:${relation.id}`, severity: "error" });
14
+ ids.add(relation.id);
15
+ if (!snapshot.objects.some((object) => object.id === relation.source) || !snapshot.objects.some((object) => object.id === relation.target)) {
16
+ errors.push({ code: "DANGLING_RELATION", message: `关系 ${relation.id} 的端点不存在。`, severity: "error" });
17
+ }
18
+ }
19
+ let complete = registry !== undefined;
20
+ if (!registry)
21
+ warnings.push({ code: "MODULE_REGISTRY_UNAVAILABLE", message: "未提供模块注册快照,只能报告基础校验。", severity: "warning" });
22
+ else {
23
+ for (const module of registry.modules) {
24
+ if (module.status === "unavailable") {
25
+ complete = false;
26
+ warnings.push({ code: "MODULE_UNAVAILABLE", message: `模块 ${module.id} 不可用:${module.reason ?? "未知原因"}`, severity: "warning" });
27
+ }
28
+ }
29
+ }
30
+ return { ok: errors.length === 0, complete, errors, warnings };
31
+ }
32
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/core/validate.ts"],"names":[],"mappings":"AAgBA,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAAC,QAAuB,EAAE,QAAgC;IACrF,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAClH,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtH,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3I,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;SACtH,CAAC;QACJ,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACpC,QAAQ,GAAG,KAAK,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAChI,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AACjE,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type HostId = "codex" | "claude" | "pi";
2
+ export interface HostSyncOptions {
3
+ workspaceRoot: string;
4
+ hostRoots: Record<HostId, string>;
5
+ }
6
+ export interface HostSyncResult {
7
+ host: HostId;
8
+ projectionRoot: string;
9
+ modules: readonly string[];
10
+ }
11
+ export declare function syncHosts(options: HostSyncOptions): readonly HostSyncResult[];
12
+ //# sourceMappingURL=hosts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/distribution/hosts.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAiGD,wBAAgB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,SAAS,cAAc,EAAE,CAsB7E"}
@@ -0,0 +1,122 @@
1
+ import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { dirname, join, resolve } from "node:path";
3
+ import { WorkspaceModuleResolver } from "../module-sdk/index.js";
4
+ import { CoreError } from "../core/index.js";
5
+ import { BASE_SKILL_NAMES, baseSkillsRoot } from "./skills.js";
6
+ function writeJson(path, value) {
7
+ mkdirSync(dirname(path), { recursive: true });
8
+ writeFileSync(path, JSON.stringify(value, null, 2), "utf8");
9
+ }
10
+ function readOwner(path) {
11
+ if (!existsSync(path))
12
+ return undefined;
13
+ try {
14
+ return JSON.parse(readFileSync(path, "utf8"));
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ function ensureOwnedOrEmpty(path, expectedModule) {
21
+ if (!existsSync(path))
22
+ return;
23
+ const owner = readOwner(join(path, ".toporealm-owner.json"));
24
+ if (!owner || owner.managedBy !== "toporealm" || owner.generator !== "toporealm-host-sync" || (expectedModule && owner.moduleId !== expectedModule)) {
25
+ throw new CoreError({ code: "HOST_TARGET_UNOWNED", message: `不会覆盖无 TopoRealm 所有权标记的宿主资产:${path}` });
26
+ }
27
+ }
28
+ function writeBaseProjection(root, host, modules) {
29
+ writeJson(join(root, ".toporealm-owner.json"), { managedBy: "toporealm", generator: "toporealm-host-sync" });
30
+ const mcpServer = { type: "stdio", command: "npx", args: ["-y", "@lukawi/toporealm@0.1.0", "mcp"], enabled: true };
31
+ writeJson(join(root, ".mcp.json"), { mcpServers: { toporealm: mcpServer } });
32
+ mkdirSync(join(root, "hooks"), { recursive: true });
33
+ writeFileSync(join(root, "hooks", "session-brief.mjs"), `import { spawnSync } from "node:child_process";
34
+ const result = spawnSync("npx", ["-y", "@lukawi/toporealm@0.1.0", "status"], { encoding: "utf8", shell: process.platform === "win32" });
35
+ const summary = result.status === 0 ? result.stdout.trim() : "TopoRealm 工作区尚不可用。";
36
+ process.stdout.write(JSON.stringify({ hookSpecificOutput: { hookEventName: "SessionStart", additionalContext: summary } }));
37
+ `, "utf8");
38
+ if (host === "codex") {
39
+ writeJson(join(root, ".codex-plugin", "plugin.json"), {
40
+ name: "toporealm", version: "0.1.0", description: "Domain-neutral graph foundation for Codex.",
41
+ author: { name: "lukawi", url: "https://github.com/LUKAWI/toporealm" }, homepage: "https://github.com/LUKAWI/toporealm",
42
+ repository: "https://github.com/LUKAWI/toporealm", license: "MIT", keywords: ["graph", "mcp", "skills"],
43
+ skills: "./skills/", mcpServers: "./.mcp.json",
44
+ interface: { displayName: "TopoRealm", shortDescription: "Domain-neutral graphs, modules, and visual editing", longDescription: "Read, evolve, validate, and visualize extensible TopoRealm graphs through Core, CLI, MCP, Web UI, and separately installed modules.", developerName: "lukawi", category: "Developer Tools", capabilities: ["Read", "Write"], websiteURL: "https://github.com/LUKAWI/toporealm", defaultPrompt: ["Read the current TopoRealm graph and help me continue", "Design a domain-neutral graph change for this request"] },
45
+ });
46
+ }
47
+ if (host === "claude") {
48
+ writeJson(join(root, ".claude-plugin", "plugin.json"), {
49
+ $schema: "https://json.schemastore.org/claude-code-plugin-manifest.json", name: "toporealm", displayName: "TopoRealm",
50
+ description: "Domain-neutral graph foundation for Claude Code.", version: "0.1.0", author: { name: "lukawi" },
51
+ homepage: "https://github.com/LUKAWI/toporealm", repository: "https://github.com/LUKAWI/toporealm", license: "MIT", keywords: ["graph", "mcp", "skills"],
52
+ });
53
+ writeJson(join(root, "hooks", "hooks.json"), { hooks: { SessionStart: [{ hooks: [{ type: "command", command: "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-brief.mjs\"" }] }] } });
54
+ }
55
+ if (host === "pi") {
56
+ writeJson(join(root, "package.json"), {
57
+ name: "@lukawi/toporealm-pi", version: "0.1.0", private: true, type: "module", keywords: ["pi-package", "graph", "mcp"],
58
+ pi: { extensions: ["./index.js"], skills: ["./skills"] }, mcpServers: { toporealm: mcpServer },
59
+ });
60
+ writeFileSync(join(root, "index.js"), `import { spawnSync } from "node:child_process";
61
+ export default function toporealmPi(pi) {
62
+ pi.on("before_agent_start", async () => {
63
+ const result = spawnSync("npx", ["-y", "@lukawi/toporealm@0.1.0", "status"], { encoding: "utf8", shell: process.platform === "win32" });
64
+ return { message: { customType: "toporealm-status", content: result.status === 0 ? result.stdout.trim() : "TopoRealm 工作区尚不可用。", display: false } };
65
+ });
66
+ }
67
+ `, "utf8");
68
+ }
69
+ }
70
+ function copySkills(root, module) {
71
+ if (module.status !== "available")
72
+ return;
73
+ const skills = module.manifest.skills?.directory;
74
+ if (!skills)
75
+ return;
76
+ const source = resolve(module.root, skills);
77
+ if (!existsSync(source))
78
+ return;
79
+ const target = join(root, "skills", module.id);
80
+ ensureOwnedOrEmpty(target, module.id);
81
+ if (existsSync(target))
82
+ rmSync(target, { recursive: true, force: true });
83
+ cpSync(source, target, { recursive: true });
84
+ writeJson(join(target, ".toporealm-owner.json"), { managedBy: "toporealm", generator: "toporealm-host-sync", moduleId: module.id, version: module.manifest.version });
85
+ }
86
+ function removeStaleSkills(root, active) {
87
+ const skillsRoot = join(root, "skills");
88
+ if (!existsSync(skillsRoot))
89
+ return;
90
+ for (const id of readdirSync(skillsRoot)) {
91
+ const target = join(skillsRoot, id);
92
+ const owner = readOwner(join(target, ".toporealm-owner.json"));
93
+ if (owner?.managedBy === "toporealm" && owner.generator === "toporealm-host-sync" && owner.moduleId && !active.has(owner.moduleId))
94
+ rmSync(target, { recursive: true, force: true });
95
+ }
96
+ }
97
+ export function syncHosts(options) {
98
+ const resolver = new WorkspaceModuleResolver(options.workspaceRoot);
99
+ const bindings = resolver.readBindings().bindings ?? {};
100
+ const resolved = Object.keys(bindings).map((id) => resolver.resolve(id));
101
+ const available = resolved.filter((item) => item.status === "available");
102
+ const modules = available.map((item) => item.id);
103
+ return ["codex", "claude", "pi"].map((host) => {
104
+ const root = join(resolve(options.hostRoots[host]), ".toporealm", "generated", host);
105
+ ensureOwnedOrEmpty(root);
106
+ mkdirSync(root, { recursive: true });
107
+ for (const name of BASE_SKILL_NAMES) {
108
+ const path = join(root, "skills", name);
109
+ ensureOwnedOrEmpty(path, "core");
110
+ if (existsSync(path))
111
+ rmSync(path, { recursive: true, force: true });
112
+ cpSync(join(baseSkillsRoot(), name), path, { recursive: true });
113
+ writeJson(join(path, ".toporealm-owner.json"), { managedBy: "toporealm", generator: "toporealm-host-sync", moduleId: "core" });
114
+ }
115
+ for (const module of available)
116
+ copySkills(root, module);
117
+ removeStaleSkills(root, new Set(["core", ...modules]));
118
+ writeBaseProjection(root, host, [...BASE_SKILL_NAMES, ...modules]);
119
+ return { host, projectionRoot: root, modules };
120
+ });
121
+ }
122
+ //# sourceMappingURL=hosts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/distribution/hosts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./installer.js";
2
+ export * from "./hosts.js";
3
+ export * from "./skills.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/distribution/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./installer.js";
2
+ export * from "./hosts.js";
3
+ export * from "./skills.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/distribution/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type InstallScope = "workspace" | "global";
2
+ export interface InstallOptions {
3
+ workspaceRoot: string;
4
+ scope?: InstallScope;
5
+ globalHome?: string;
6
+ npmCommand?: string;
7
+ }
8
+ export interface InstalledModule {
9
+ id: string;
10
+ version: string;
11
+ root: string;
12
+ scope: InstallScope;
13
+ sourceSpec: string;
14
+ }
15
+ interface SourceRecord extends InstalledModule {
16
+ managedBy: "toporealm";
17
+ installedAt: string;
18
+ }
19
+ export declare function installModule(spec: string, options: InstallOptions): InstalledModule;
20
+ export declare function uninstallModule(id: string, options: InstallOptions): void;
21
+ export declare function listInstalledModules(options: InstallOptions): readonly SourceRecord[];
22
+ export {};
23
+ //# sourceMappingURL=installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/distribution/installer.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAElD,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,YAAa,SAAQ,eAAe;IAC5C,SAAS,EAAE,WAAW,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAoID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,eAAe,CAiBpF;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAazE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,YAAY,EAAE,CAKrF"}
@@ -0,0 +1,179 @@
1
+ import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, realpathSync, rmSync, writeFileSync, renameSync } from "node:fs";
2
+ import { execFileSync } from "node:child_process";
3
+ import { homedir, tmpdir } from "node:os";
4
+ import { dirname, join, relative, resolve } from "node:path";
5
+ import * as YAML from "yaml";
6
+ import { CoreError } from "../core/index.js";
7
+ const SOURCE_FILE = "module-sources.yaml";
8
+ function parseYaml(path) {
9
+ try {
10
+ return YAML.parse(readFileSync(path, "utf8"));
11
+ }
12
+ catch (error) {
13
+ throw new CoreError({ code: "INVALID_MODULE_PACKAGE", message: `无法读取模块包文件:${path}`, details: { cause: error instanceof Error ? error.message : String(error) } });
14
+ }
15
+ }
16
+ function writeYaml(path, value) {
17
+ mkdirSync(dirname(path), { recursive: true });
18
+ writeFileSync(path, YAML.stringify(value), "utf8");
19
+ }
20
+ function safeModuleId(id) {
21
+ if (!id || /[\\/:]/.test(id))
22
+ throw new CoreError({ code: "INVALID_MODULE_ID", message: `模块 id 无效:${id}` });
23
+ }
24
+ function ensureInside(root, path) {
25
+ const resolved = resolve(path);
26
+ const escaped = relative(resolve(root), resolved).startsWith("..") || resolve(relative(resolve(root), resolved)) === ".";
27
+ if (escaped)
28
+ throw new CoreError({ code: "MODULE_PATH_ESCAPE", message: `模块包路径越出包目录:${path}` });
29
+ return resolved;
30
+ }
31
+ function canonicalPath(path) {
32
+ return existsSync(path) ? realpathSync.native(path) : path;
33
+ }
34
+ function validatePackage(packageRoot) {
35
+ const packageJsonPath = join(packageRoot, "package.json");
36
+ const packageJson = parseYaml(packageJsonPath);
37
+ if (typeof packageJson.toporealm !== "string")
38
+ throw new CoreError({ code: "INVALID_MODULE_PACKAGE", message: "package.json 缺少 toporealm 清单入口。" });
39
+ const manifestPath = ensureInside(packageRoot, join(packageRoot, packageJson.toporealm));
40
+ const manifest = parseYaml(manifestPath);
41
+ if (manifest.format !== "toporealm.module/v1" || typeof manifest.id !== "string" || typeof manifest.version !== "string") {
42
+ throw new CoreError({ code: "INVALID_MODULE_PACKAGE", message: "module.yaml 缺少有效的 TopoRealm 身份。" });
43
+ }
44
+ safeModuleId(manifest.id);
45
+ if (packageJson.version !== manifest.version)
46
+ throw new CoreError({ code: "INVALID_MODULE_PACKAGE", message: `package.json version=${String(packageJson.version)} 与 module.yaml version=${manifest.version} 不一致。` });
47
+ const scripts = packageJson.scripts && typeof packageJson.scripts === "object" ? packageJson.scripts : {};
48
+ if (["preinstall", "install", "postinstall"].some((name) => scripts[name] !== undefined))
49
+ throw new CoreError({ code: "MODULE_INSTALL_SCRIPT", message: "TopoRealm 模块禁止安装阶段脚本。" });
50
+ if (packageJson.dependencies && typeof packageJson.dependencies === "object" && Object.keys(packageJson.dependencies).length > 0)
51
+ throw new CoreError({ code: "MODULE_NOT_SELF_CONTAINED", message: "模块必须把普通运行时依赖打入 bundle,不能依赖外部 node_modules。" });
52
+ if (existsSync(join(packageRoot, "node_modules")))
53
+ throw new CoreError({ code: "MODULE_NOT_SELF_CONTAINED", message: "模块包不能包含 node_modules。" });
54
+ return manifest;
55
+ }
56
+ function readSourceRecords(path) {
57
+ if (!existsSync(path))
58
+ return [];
59
+ const parsed = parseYaml(path);
60
+ return Array.isArray(parsed.modules) ? parsed.modules : [];
61
+ }
62
+ function writeSourceRecord(path, record) {
63
+ const records = readSourceRecords(path).filter((item) => !(item.id === record.id && item.scope === record.scope));
64
+ records.push(record);
65
+ writeYaml(path, { modules: records });
66
+ }
67
+ function readBindings(path) {
68
+ if (!existsSync(path))
69
+ return { bindings: {} };
70
+ const parsed = parseYaml(path);
71
+ return parsed && typeof parsed === "object" ? parsed : { bindings: {} };
72
+ }
73
+ function writeWorkspaceBinding(workspaceRoot, id) {
74
+ const path = join(workspaceRoot, ".toporealm", "modules.yaml");
75
+ const bindings = readBindings(path);
76
+ const next = bindings.bindings ?? {};
77
+ next[id] = { source: "workspace", path: `modules/${id}` };
78
+ writeYaml(path, { ...bindings, bindings: next });
79
+ }
80
+ function removeWorkspaceBinding(workspaceRoot, id) {
81
+ const path = join(workspaceRoot, ".toporealm", "modules.yaml");
82
+ const bindings = readBindings(path);
83
+ if (bindings.bindings)
84
+ delete bindings.bindings[id];
85
+ writeYaml(path, bindings);
86
+ }
87
+ function unpackPackage(spec, options) {
88
+ const staging = mkdtempSync(join(tmpdir(), "toporealm-npm-"));
89
+ const npm = options.npmCommand;
90
+ const npmArgs = ["pack", "--ignore-scripts", spec, "--pack-destination", staging];
91
+ try {
92
+ if (npm) {
93
+ execFileSync(npm, npmArgs, { cwd: options.workspaceRoot, stdio: ["ignore", "pipe", "inherit"], shell: process.platform === "win32" });
94
+ }
95
+ else {
96
+ const candidates = [
97
+ process.env.npm_execpath,
98
+ join(dirname(process.execPath), "node_modules", "npm", "bin", "npm-cli.js"),
99
+ resolve(dirname(process.execPath), "..", "lib", "node_modules", "npm", "bin", "npm-cli.js"),
100
+ ].filter((candidate) => Boolean(candidate));
101
+ const npmCli = candidates.find((candidate) => existsSync(candidate));
102
+ if (!npmCli)
103
+ throw new Error("找不到 npm CLI;请通过 npm 运行 TopoRealm 或显式提供 npmCommand。");
104
+ execFileSync(process.execPath, [npmCli, ...npmArgs], { cwd: options.workspaceRoot, stdio: ["ignore", "pipe", "inherit"] });
105
+ }
106
+ const tarball = readdirSync(staging).find((file) => file.endsWith(".tgz"));
107
+ if (!tarball)
108
+ throw new Error("npm pack 没有产生 tarball。");
109
+ const unpacked = join(staging, "unpacked");
110
+ mkdirSync(unpacked, { recursive: true });
111
+ execFileSync("tar", ["-xzf", join(staging, tarball), "-C", unpacked], { stdio: "ignore" });
112
+ const root = existsSync(join(unpacked, "package")) ? join(unpacked, "package") : unpacked;
113
+ validatePackage(root);
114
+ return { root, cleanup: () => rmSync(staging, { recursive: true, force: true }) };
115
+ }
116
+ catch (error) {
117
+ rmSync(staging, { recursive: true, force: true });
118
+ if (error instanceof CoreError)
119
+ throw error;
120
+ throw new CoreError({ code: "MODULE_PACK_FAILED", message: `npm pack 或解包失败:${spec}`, details: { cause: error instanceof Error ? error.message : String(error) } });
121
+ }
122
+ }
123
+ function moveManagedModule(sourceRoot, targetRoot, manifest) {
124
+ mkdirSync(dirname(targetRoot), { recursive: true });
125
+ if (existsSync(targetRoot)) {
126
+ const markerPath = join(targetRoot, ".toporealm-source.json");
127
+ if (!existsSync(markerPath))
128
+ throw new CoreError({ code: "MODULE_TARGET_UNOWNED", message: `不会覆盖无来源标记的模块目录:${targetRoot}` });
129
+ rmSync(targetRoot, { recursive: true, force: true });
130
+ }
131
+ const temporary = `${targetRoot}.tmp-${process.pid}-${Date.now()}`;
132
+ cpSync(sourceRoot, temporary, { recursive: true });
133
+ writeFileSync(join(temporary, ".toporealm-source.json"), JSON.stringify({ managedBy: "toporealm", id: manifest.id, version: manifest.version }, null, 2), "utf8");
134
+ renameSync(temporary, targetRoot);
135
+ }
136
+ export function installModule(spec, options) {
137
+ const scope = options.scope ?? "workspace";
138
+ const globalHome = resolve(options.globalHome ?? process.env.TOPOREALM_HOME ?? join(homedir(), ".toporealm"));
139
+ const packed = unpackPackage(spec, options);
140
+ try {
141
+ const manifest = validatePackage(packed.root);
142
+ const targetRoot = scope === "workspace"
143
+ ? join(resolve(options.workspaceRoot), ".toporealm", "modules", manifest.id)
144
+ : join(globalHome, "modules", manifest.id, manifest.version);
145
+ moveManagedModule(packed.root, targetRoot, manifest);
146
+ const record = { managedBy: "toporealm", id: manifest.id, version: manifest.version, root: canonicalPath(targetRoot), scope, sourceSpec: spec, installedAt: new Date().toISOString() };
147
+ writeSourceRecord(scope === "workspace" ? join(options.workspaceRoot, ".toporealm", SOURCE_FILE) : join(globalHome, SOURCE_FILE), record);
148
+ if (scope === "workspace")
149
+ writeWorkspaceBinding(options.workspaceRoot, manifest.id);
150
+ return record;
151
+ }
152
+ finally {
153
+ packed.cleanup();
154
+ }
155
+ }
156
+ export function uninstallModule(id, options) {
157
+ safeModuleId(id);
158
+ const scope = options.scope ?? "workspace";
159
+ const globalHome = resolve(options.globalHome ?? process.env.TOPOREALM_HOME ?? join(homedir(), ".toporealm"));
160
+ const sourceFile = scope === "workspace" ? join(options.workspaceRoot, ".toporealm", SOURCE_FILE) : join(globalHome, SOURCE_FILE);
161
+ const records = readSourceRecords(sourceFile);
162
+ const record = records.find((item) => item.id === id && item.scope === scope);
163
+ if (!record)
164
+ throw new CoreError({ code: "MODULE_SOURCE_NOT_FOUND", message: `没有 TopoRealm 所有权记录,拒绝卸载:${id}` });
165
+ const marker = join(record.root, ".toporealm-source.json");
166
+ if (!existsSync(marker))
167
+ throw new CoreError({ code: "MODULE_TARGET_UNOWNED", message: `模块目录缺少所有权标记,拒绝卸载:${record.root}` });
168
+ rmSync(record.root, { recursive: true, force: true });
169
+ writeYaml(sourceFile, { modules: records.filter((item) => item !== record) });
170
+ if (scope === "workspace")
171
+ removeWorkspaceBinding(options.workspaceRoot, id);
172
+ }
173
+ export function listInstalledModules(options) {
174
+ const globalHome = resolve(options.globalHome ?? process.env.TOPOREALM_HOME ?? join(homedir(), ".toporealm"));
175
+ const workspace = readSourceRecords(join(options.workspaceRoot, ".toporealm", SOURCE_FILE));
176
+ const global = readSourceRecords(join(globalHome, SOURCE_FILE));
177
+ return [...workspace, ...global];
178
+ }
179
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/distribution/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const BASE_SKILL_NAMES: readonly ["toporealm", "toporealm-design", "toporealm-join", "toporealm-grilling"];
2
+ export type BaseSkillName = typeof BASE_SKILL_NAMES[number];
3
+ export declare function baseSkillsRoot(): string;
4
+ export declare function routeSkillIntent(input: {
5
+ explicitSkill?: BaseSkillName;
6
+ asksForGrilling?: boolean;
7
+ criticalAmbiguity?: boolean;
8
+ designRequest?: boolean;
9
+ joinRequest?: boolean;
10
+ }): BaseSkillName;
11
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/distribution/skills.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,oFAAqF,CAAC;AACnH,MAAM,MAAM,aAAa,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,aAAa,CAMhB"}
@@ -0,0 +1,20 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ export const BASE_SKILL_NAMES = ["toporealm", "toporealm-design", "toporealm-join", "toporealm-grilling"];
5
+ export function baseSkillsRoot() {
6
+ const packaged = fileURLToPath(new URL("../integrations/skills/", import.meta.url));
7
+ return existsSync(join(packaged, "toporealm", "SKILL.md")) ? packaged : join(process.cwd(), "integrations", "src", "skills");
8
+ }
9
+ export function routeSkillIntent(input) {
10
+ if (input.explicitSkill)
11
+ return input.explicitSkill;
12
+ if (input.asksForGrilling || input.criticalAmbiguity)
13
+ return "toporealm-grilling";
14
+ if (input.designRequest)
15
+ return "toporealm-design";
16
+ if (input.joinRequest)
17
+ return "toporealm-join";
18
+ return "toporealm";
19
+ }
20
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/distribution/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,WAAW,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,CAAU,CAAC;AAGnH,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpF,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/H,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAMhC;IACC,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC,aAAa,CAAC;IACpD,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,iBAAiB;QAAE,OAAO,oBAAoB,CAAC;IAClF,IAAI,KAAK,CAAC,aAAa;QAAE,OAAO,kBAAkB,CAAC;IACnD,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO,gBAAgB,CAAC;IAC/C,OAAO,WAAW,CAAC;AACrB,CAAC"}