@mycelish/cli 0.1.0 → 0.2.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/dist/__tests__/mcp-server.test.d.ts +2 -0
- package/dist/__tests__/mcp-server.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-server.test.js +60 -0
- package/dist/__tests__/mcp-server.test.js.map +1 -0
- package/dist/__tests__/unified-item-state.integration.test.d.ts +7 -0
- package/dist/__tests__/unified-item-state.integration.test.d.ts.map +1 -0
- package/dist/__tests__/unified-item-state.integration.test.js +217 -0
- package/dist/__tests__/unified-item-state.integration.test.js.map +1 -0
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +9 -0
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/disable.d.ts +8 -6
- package/dist/commands/disable.d.ts.map +1 -1
- package/dist/commands/disable.js +143 -136
- package/dist/commands/disable.js.map +1 -1
- package/dist/commands/disable.test.js +117 -23
- package/dist/commands/disable.test.js.map +1 -1
- package/dist/commands/doctor.d.ts +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +1 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/enable.d.ts +8 -6
- package/dist/commands/enable.d.ts.map +1 -1
- package/dist/commands/enable.js +128 -133
- package/dist/commands/enable.js.map +1 -1
- package/dist/commands/enable.test.js +192 -24
- package/dist/commands/enable.test.js.map +1 -1
- package/dist/commands/health-checks/index.d.ts +2 -1
- package/dist/commands/health-checks/index.d.ts.map +1 -1
- package/dist/commands/health-checks/index.js +2 -1
- package/dist/commands/health-checks/index.js.map +1 -1
- package/dist/commands/health-checks/mcp-check.d.ts +5 -1
- package/dist/commands/health-checks/mcp-check.d.ts.map +1 -1
- package/dist/commands/health-checks/mcp-check.js +32 -1
- package/dist/commands/health-checks/mcp-check.js.map +1 -1
- package/dist/commands/health-checks/plugin-takeover-check.d.ts +15 -0
- package/dist/commands/health-checks/plugin-takeover-check.d.ts.map +1 -0
- package/dist/commands/health-checks/plugin-takeover-check.js +274 -0
- package/dist/commands/health-checks/plugin-takeover-check.js.map +1 -0
- package/dist/commands/health-checks/runner.d.ts.map +1 -1
- package/dist/commands/health-checks/runner.js +18 -0
- package/dist/commands/health-checks/runner.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +33 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +9 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +17 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +51 -0
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/preset.test.js +7 -3
- package/dist/commands/preset.test.js.map +1 -1
- package/dist/commands/remove.d.ts +25 -23
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +118 -247
- package/dist/commands/remove.js.map +1 -1
- package/dist/commands/remove.test.js +152 -78
- package/dist/commands/remove.test.js.map +1 -1
- package/dist/commands/report.d.ts +8 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +149 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/report.test.d.ts +2 -0
- package/dist/commands/report.test.d.ts.map +1 -0
- package/dist/commands/report.test.js +23 -0
- package/dist/commands/report.test.js.map +1 -0
- package/dist/commands/status.d.ts +9 -4
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +81 -10
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/status.test.js +92 -0
- package/dist/commands/status.test.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +138 -7
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/sync.test.js +91 -6
- package/dist/commands/sync.test.js.map +1 -1
- package/dist/core/adapter-base.d.ts +2 -0
- package/dist/core/adapter-base.d.ts.map +1 -1
- package/dist/core/adapter-base.js +2 -1
- package/dist/core/adapter-base.js.map +1 -1
- package/dist/core/auto-adapter.d.ts.map +1 -1
- package/dist/core/auto-adapter.js +58 -3
- package/dist/core/auto-adapter.js.map +1 -1
- package/dist/core/auto-adapter.test.js +155 -0
- package/dist/core/auto-adapter.test.js.map +1 -1
- package/dist/core/config-merger.d.ts +6 -5
- package/dist/core/config-merger.d.ts.map +1 -1
- package/dist/core/config-merger.js +119 -136
- package/dist/core/config-merger.js.map +1 -1
- package/dist/core/config-merger.test.d.ts +1 -1
- package/dist/core/config-merger.test.js +72 -88
- package/dist/core/config-merger.test.js.map +1 -1
- package/dist/core/file-syncer.d.ts +33 -0
- package/dist/core/file-syncer.d.ts.map +1 -0
- package/dist/core/file-syncer.js +138 -0
- package/dist/core/file-syncer.js.map +1 -0
- package/dist/core/file-syncer.test.d.ts +2 -0
- package/dist/core/file-syncer.test.d.ts.map +1 -0
- package/dist/core/file-syncer.test.js +131 -0
- package/dist/core/file-syncer.test.js.map +1 -0
- package/dist/core/global-tracer.d.ts +4 -0
- package/dist/core/global-tracer.d.ts.map +1 -0
- package/dist/core/global-tracer.js +36 -0
- package/dist/core/global-tracer.js.map +1 -0
- package/dist/core/item-loader.d.ts +18 -0
- package/dist/core/item-loader.d.ts.map +1 -0
- package/dist/core/item-loader.js +40 -0
- package/dist/core/item-loader.js.map +1 -0
- package/dist/core/item-loader.test.d.ts +2 -0
- package/dist/core/item-loader.test.d.ts.map +1 -0
- package/dist/core/item-loader.test.js +52 -0
- package/dist/core/item-loader.test.js.map +1 -0
- package/dist/core/manifest-migrator.d.ts +15 -0
- package/dist/core/manifest-migrator.d.ts.map +1 -0
- package/dist/core/manifest-migrator.js +38 -0
- package/dist/core/manifest-migrator.js.map +1 -0
- package/dist/core/manifest-migrator.test.d.ts +2 -0
- package/dist/core/manifest-migrator.test.d.ts.map +1 -0
- package/dist/core/manifest-migrator.test.js +53 -0
- package/dist/core/manifest-migrator.test.js.map +1 -0
- package/dist/core/manifest-state.d.ts +117 -0
- package/dist/core/manifest-state.d.ts.map +1 -0
- package/dist/core/manifest-state.js +218 -0
- package/dist/core/manifest-state.js.map +1 -0
- package/dist/core/manifest-state.test.d.ts +2 -0
- package/dist/core/manifest-state.test.d.ts.map +1 -0
- package/dist/core/manifest-state.test.js +130 -0
- package/dist/core/manifest-state.test.js.map +1 -0
- package/dist/core/marketplace-registry.d.ts +0 -1
- package/dist/core/marketplace-registry.d.ts.map +1 -1
- package/dist/core/marketplace-registry.js +0 -16
- package/dist/core/marketplace-registry.js.map +1 -1
- package/dist/core/marketplace-registry.test.js +1 -14
- package/dist/core/marketplace-registry.test.js.map +1 -1
- package/dist/core/mcp-injector.d.ts +2 -2
- package/dist/core/mcp-injector.d.ts.map +1 -1
- package/dist/core/mcp-injector.js +6 -6
- package/dist/core/mcp-injector.js.map +1 -1
- package/dist/core/mcp-injector.test.js +33 -26
- package/dist/core/mcp-injector.test.js.map +1 -1
- package/dist/core/mcp-registry.js +1 -1
- package/dist/core/mcp-registry.js.map +1 -1
- package/dist/core/mcp-registry.test.js +1 -1
- package/dist/core/mcp-registry.test.js.map +1 -1
- package/dist/core/memory-scoper.test.js +2 -13
- package/dist/core/memory-scoper.test.js.map +1 -1
- package/dist/core/migrator/executor.js +2 -2
- package/dist/core/migrator/executor.js.map +1 -1
- package/dist/core/plugin-state.d.ts +7 -0
- package/dist/core/plugin-state.d.ts.map +1 -0
- package/dist/core/plugin-state.js +88 -0
- package/dist/core/plugin-state.js.map +1 -0
- package/dist/core/plugin-takeover.d.ts +50 -0
- package/dist/core/plugin-takeover.d.ts.map +1 -0
- package/dist/core/plugin-takeover.js +263 -0
- package/dist/core/plugin-takeover.js.map +1 -0
- package/dist/core/plugin-takeover.test.d.ts +2 -0
- package/dist/core/plugin-takeover.test.d.ts.map +1 -0
- package/dist/core/plugin-takeover.test.js +243 -0
- package/dist/core/plugin-takeover.test.js.map +1 -0
- package/dist/core/self-register.d.ts +5 -0
- package/dist/core/self-register.d.ts.map +1 -0
- package/dist/core/self-register.js +43 -0
- package/dist/core/self-register.js.map +1 -0
- package/dist/core/self-register.test.d.ts +2 -0
- package/dist/core/self-register.test.d.ts.map +1 -0
- package/dist/core/self-register.test.js +77 -0
- package/dist/core/self-register.test.js.map +1 -0
- package/dist/core/smart-memory.d.ts +5 -5
- package/dist/core/smart-memory.d.ts.map +1 -1
- package/dist/core/smart-memory.js +1 -10
- package/dist/core/smart-memory.js.map +1 -1
- package/dist/core/smart-memory.test.js +3 -30
- package/dist/core/smart-memory.test.js.map +1 -1
- package/dist/core/state-verifier.d.ts +36 -0
- package/dist/core/state-verifier.d.ts.map +1 -0
- package/dist/core/state-verifier.js +159 -0
- package/dist/core/state-verifier.js.map +1 -0
- package/dist/core/state-verifier.test.d.ts +2 -0
- package/dist/core/state-verifier.test.d.ts.map +1 -0
- package/dist/core/state-verifier.test.js +188 -0
- package/dist/core/state-verifier.test.js.map +1 -0
- package/dist/core/symlink-manager.d.ts +1 -1
- package/dist/core/symlink-manager.d.ts.map +1 -1
- package/dist/core/symlink-manager.js +1 -1
- package/dist/core/symlink-manager.js.map +1 -1
- package/dist/core/symlink-manager.test.js +4 -4
- package/dist/core/symlink-manager.test.js.map +1 -1
- package/dist/core/sync-writer.d.ts +2 -1
- package/dist/core/sync-writer.d.ts.map +1 -1
- package/dist/core/sync-writer.js +108 -22
- package/dist/core/sync-writer.js.map +1 -1
- package/dist/core/sync-writer.test.js +31 -0
- package/dist/core/sync-writer.test.js.map +1 -1
- package/dist/core/tool-adapter.d.ts.map +1 -1
- package/dist/core/tool-adapter.js +45 -6
- package/dist/core/tool-adapter.js.map +1 -1
- package/dist/core/trace-store.d.ts +36 -0
- package/dist/core/trace-store.d.ts.map +1 -0
- package/dist/core/trace-store.js +145 -0
- package/dist/core/trace-store.js.map +1 -0
- package/dist/core/trace-store.test.d.ts +2 -0
- package/dist/core/trace-store.test.d.ts.map +1 -0
- package/dist/core/trace-store.test.js +102 -0
- package/dist/core/trace-store.test.js.map +1 -0
- package/dist/core/tracer.d.ts +27 -0
- package/dist/core/tracer.d.ts.map +1 -0
- package/dist/core/tracer.js +62 -0
- package/dist/core/tracer.js.map +1 -0
- package/dist/core/tracer.test.d.ts +2 -0
- package/dist/core/tracer.test.d.ts.map +1 -0
- package/dist/core/tracer.test.js +54 -0
- package/dist/core/tracer.test.js.map +1 -0
- package/dist/core/watcher.d.ts.map +1 -1
- package/dist/core/watcher.js +9 -2
- package/dist/core/watcher.js.map +1 -1
- package/dist/core/watcher.test.js +9 -0
- package/dist/core/watcher.test.js.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/prompts.d.ts +3 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +40 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +6 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +24 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +27 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/server.test.d.ts +2 -0
- package/dist/mcp/server.test.d.ts.map +1 -0
- package/dist/mcp/server.test.js +9 -0
- package/dist/mcp/server.test.js.map +1 -0
- package/dist/mcp/tools/config-tools.d.ts +3 -0
- package/dist/mcp/tools/config-tools.d.ts.map +1 -0
- package/dist/mcp/tools/config-tools.js +80 -0
- package/dist/mcp/tools/config-tools.js.map +1 -0
- package/dist/mcp/tools/config-tools.test.d.ts +2 -0
- package/dist/mcp/tools/config-tools.test.d.ts.map +1 -0
- package/dist/mcp/tools/config-tools.test.js +207 -0
- package/dist/mcp/tools/config-tools.test.js.map +1 -0
- package/dist/mcp/tools/item-tools.d.ts +3 -0
- package/dist/mcp/tools/item-tools.d.ts.map +1 -0
- package/dist/mcp/tools/item-tools.js +95 -0
- package/dist/mcp/tools/item-tools.js.map +1 -0
- package/dist/mcp/tools/item-tools.test.d.ts +2 -0
- package/dist/mcp/tools/item-tools.test.d.ts.map +1 -0
- package/dist/mcp/tools/item-tools.test.js +184 -0
- package/dist/mcp/tools/item-tools.test.js.map +1 -0
- package/dist/mcp/tools/marketplace-tools.d.ts +3 -0
- package/dist/mcp/tools/marketplace-tools.d.ts.map +1 -0
- package/dist/mcp/tools/marketplace-tools.js +35 -0
- package/dist/mcp/tools/marketplace-tools.js.map +1 -0
- package/dist/mcp/tools/marketplace-tools.test.d.ts +2 -0
- package/dist/mcp/tools/marketplace-tools.test.d.ts.map +1 -0
- package/dist/mcp/tools/marketplace-tools.test.js +48 -0
- package/dist/mcp/tools/marketplace-tools.test.js.map +1 -0
- package/dist/mcp/tools/memory-tools.d.ts +3 -0
- package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
- package/dist/mcp/tools/memory-tools.js +68 -0
- package/dist/mcp/tools/memory-tools.js.map +1 -0
- package/dist/mcp/tools/memory-tools.test.d.ts +2 -0
- package/dist/mcp/tools/memory-tools.test.d.ts.map +1 -0
- package/dist/mcp/tools/memory-tools.test.js +144 -0
- package/dist/mcp/tools/memory-tools.test.js.map +1 -0
- package/dist/mcp/tools/observe-tools.d.ts +3 -0
- package/dist/mcp/tools/observe-tools.d.ts.map +1 -0
- package/dist/mcp/tools/observe-tools.js +37 -0
- package/dist/mcp/tools/observe-tools.js.map +1 -0
- package/dist/mcp/tools/observe-tools.test.d.ts +2 -0
- package/dist/mcp/tools/observe-tools.test.d.ts.map +1 -0
- package/dist/mcp/tools/observe-tools.test.js +71 -0
- package/dist/mcp/tools/observe-tools.test.js.map +1 -0
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +63 -37
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/plugins.test.d.ts +2 -0
- package/dist/routes/plugins.test.d.ts.map +1 -0
- package/dist/routes/plugins.test.js +56 -0
- package/dist/routes/plugins.test.js.map +1 -0
- package/dist/routes/remove.d.ts.map +1 -1
- package/dist/routes/remove.js +6 -15
- package/dist/routes/remove.js.map +1 -1
- package/dist/routes/state.d.ts.map +1 -1
- package/dist/routes/state.js +35 -70
- package/dist/routes/state.js.map +1 -1
- package/dist/routes/sync.d.ts.map +1 -1
- package/dist/routes/sync.js +10 -3
- package/dist/routes/sync.js.map +1 -1
- package/package.json +6 -2
|
@@ -2,36 +2,26 @@
|
|
|
2
2
|
* Config Merger Module
|
|
3
3
|
*
|
|
4
4
|
* Merges configurations from three levels:
|
|
5
|
-
* - Global (~/.mycelium/) - base configuration
|
|
5
|
+
* - Global (~/.mycelium/global/) - base configuration
|
|
6
6
|
* - Machine (~/.mycelium/machines/{hostname}/) - hardware-specific overrides
|
|
7
7
|
* - Project (.mycelium/ in project root) - project-specific overrides
|
|
8
8
|
*
|
|
9
9
|
* Priority: Project > Machine > Global
|
|
10
10
|
*/
|
|
11
|
-
import * as fs from "node:fs/promises";
|
|
12
11
|
import * as os from "node:os";
|
|
13
12
|
import * as path from "node:path";
|
|
13
|
+
import { parse as yamlParse } from "yaml";
|
|
14
|
+
import { MYCELIUM_HOME, readFileIfExists } from "./fs-helpers.js";
|
|
15
|
+
import { loadItemsFromDir } from "./item-loader.js";
|
|
14
16
|
/**
|
|
15
17
|
* Default empty memory config
|
|
16
18
|
*/
|
|
17
19
|
function getDefaultMemoryConfig() {
|
|
18
20
|
return {
|
|
19
21
|
scopes: {
|
|
20
|
-
shared: {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
files: [],
|
|
24
|
-
},
|
|
25
|
-
coding: {
|
|
26
|
-
syncTo: [],
|
|
27
|
-
path: "",
|
|
28
|
-
files: [],
|
|
29
|
-
},
|
|
30
|
-
personal: {
|
|
31
|
-
syncTo: [],
|
|
32
|
-
path: "",
|
|
33
|
-
files: [],
|
|
34
|
-
},
|
|
22
|
+
shared: { syncTo: [], path: "", files: [] },
|
|
23
|
+
coding: { syncTo: [], path: "", files: [] },
|
|
24
|
+
personal: { syncTo: [], path: "", files: [] },
|
|
35
25
|
},
|
|
36
26
|
};
|
|
37
27
|
}
|
|
@@ -42,6 +32,9 @@ function createEmptyMergedConfig() {
|
|
|
42
32
|
return {
|
|
43
33
|
mcps: {},
|
|
44
34
|
skills: {},
|
|
35
|
+
agents: {},
|
|
36
|
+
rules: {},
|
|
37
|
+
commands: {},
|
|
45
38
|
memory: getDefaultMemoryConfig(),
|
|
46
39
|
sources: {},
|
|
47
40
|
};
|
|
@@ -52,69 +45,39 @@ function createEmptyMergedConfig() {
|
|
|
52
45
|
*/
|
|
53
46
|
export function mergeConfigs(globalConfig, machineConfig, projectConfig) {
|
|
54
47
|
const result = createEmptyMergedConfig();
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
else {
|
|
71
|
-
// Add new MCP from machine config
|
|
72
|
-
result.mcps[name] = { ...config };
|
|
73
|
-
result.sources[name] = "machine";
|
|
48
|
+
const levels = [
|
|
49
|
+
{ config: globalConfig, source: "global" },
|
|
50
|
+
{ config: machineConfig, source: "machine" },
|
|
51
|
+
{ config: projectConfig, source: "project" },
|
|
52
|
+
];
|
|
53
|
+
for (const { config, source } of levels) {
|
|
54
|
+
if (!config)
|
|
55
|
+
continue;
|
|
56
|
+
// Merge MCPs — higher priority level overwrites lower
|
|
57
|
+
if (config.mcps) {
|
|
58
|
+
for (const [name, mcp] of Object.entries(config.mcps)) {
|
|
59
|
+
result.mcps[name] = result.mcps[name]
|
|
60
|
+
? mergeMcpServerConfig(result.mcps[name], mcp)
|
|
61
|
+
: { ...mcp };
|
|
62
|
+
result.sources[name] = source;
|
|
74
63
|
}
|
|
75
64
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
for (const [name, config] of Object.entries(projectConfig.mcps)) {
|
|
80
|
-
if (result.mcps[name]) {
|
|
81
|
-
// Merge with existing config - project takes priority
|
|
82
|
-
result.mcps[name] = mergeMcpServerConfig(result.mcps[name], config);
|
|
83
|
-
result.sources[name] = "project";
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
// Add new MCP from project config
|
|
87
|
-
result.mcps[name] = { ...config };
|
|
88
|
-
result.sources[name] = "project";
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Merge skills (similar priority logic)
|
|
93
|
-
if (globalConfig?.skills) {
|
|
94
|
-
for (const [name, skill] of Object.entries(globalConfig.skills)) {
|
|
95
|
-
result.skills[name] = { ...skill };
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
if (machineConfig?.skills) {
|
|
99
|
-
for (const [name, skill] of Object.entries(machineConfig.skills)) {
|
|
100
|
-
result.skills[name] = { ...skill };
|
|
65
|
+
// Merge skills — simple overwrite by priority
|
|
66
|
+
if (config.skills) {
|
|
67
|
+
Object.assign(result.skills, config.skills);
|
|
101
68
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
69
|
+
// Merge agents/rules/commands — simple overwrite by priority
|
|
70
|
+
if (config.agents)
|
|
71
|
+
Object.assign(result.agents, config.agents);
|
|
72
|
+
if (config.rules)
|
|
73
|
+
Object.assign(result.rules, config.rules);
|
|
74
|
+
if (config.commands)
|
|
75
|
+
Object.assign(result.commands, config.commands);
|
|
76
|
+
// Merge memory — scope-level overwrite
|
|
77
|
+
if (config.memory) {
|
|
78
|
+
result.memory = mergeMemoryConfig(result.memory, config.memory);
|
|
106
79
|
}
|
|
107
80
|
}
|
|
108
|
-
// Merge memory config
|
|
109
|
-
if (globalConfig?.memory) {
|
|
110
|
-
result.memory = { ...globalConfig.memory };
|
|
111
|
-
}
|
|
112
|
-
if (machineConfig?.memory) {
|
|
113
|
-
result.memory = mergeMemoryConfig(result.memory, machineConfig.memory);
|
|
114
|
-
}
|
|
115
|
-
if (projectConfig?.memory) {
|
|
116
|
-
result.memory = mergeMemoryConfig(result.memory, projectConfig.memory);
|
|
117
|
-
}
|
|
118
81
|
return result;
|
|
119
82
|
}
|
|
120
83
|
/**
|
|
@@ -125,104 +88,124 @@ function mergeMcpServerConfig(target, source) {
|
|
|
125
88
|
command: source.command ?? target.command,
|
|
126
89
|
args: source.args ?? target.args,
|
|
127
90
|
env: source.env !== undefined ? source.env : target.env,
|
|
128
|
-
|
|
91
|
+
state: source.state ?? target.state,
|
|
92
|
+
source: source.source ?? target.source,
|
|
129
93
|
tools: source.tools ?? target.tools,
|
|
130
94
|
excludeTools: source.excludeTools ?? target.excludeTools,
|
|
131
95
|
};
|
|
132
96
|
}
|
|
133
97
|
/**
|
|
134
|
-
* Merge memory configs
|
|
98
|
+
* Merge memory configs — scopes from source overwrite target at scope level
|
|
135
99
|
*/
|
|
136
100
|
function mergeMemoryConfig(target, source) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
101
|
+
if (!source.scopes)
|
|
102
|
+
return target;
|
|
103
|
+
return { ...target, scopes: { ...target.scopes, ...source.scopes } };
|
|
104
|
+
}
|
|
105
|
+
// ============================================================================
|
|
106
|
+
// Item Loading Helpers
|
|
107
|
+
// ============================================================================
|
|
108
|
+
async function loadFileItems(dir) {
|
|
109
|
+
const items = await loadItemsFromDir(dir);
|
|
110
|
+
const result = {};
|
|
111
|
+
for (const item of items) {
|
|
112
|
+
result[item.name] = item;
|
|
143
113
|
}
|
|
144
114
|
return result;
|
|
145
115
|
}
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// Config File Loading
|
|
118
|
+
// ============================================================================
|
|
146
119
|
/**
|
|
147
|
-
*
|
|
120
|
+
* Parse a config string as YAML or JSON.
|
|
121
|
+
* Returns null on parse error (logs a warning for malformed files).
|
|
148
122
|
*/
|
|
149
|
-
|
|
123
|
+
function parseConfig(content, filePath) {
|
|
150
124
|
try {
|
|
151
|
-
|
|
152
|
-
return
|
|
125
|
+
// YAML.parse handles both YAML and JSON transparently
|
|
126
|
+
return yamlParse(content);
|
|
153
127
|
}
|
|
154
|
-
catch {
|
|
155
|
-
|
|
128
|
+
catch (err) {
|
|
129
|
+
console.warn(`Mycelium: failed to parse ${filePath}: ${err.message}`);
|
|
130
|
+
return null;
|
|
156
131
|
}
|
|
157
132
|
}
|
|
158
133
|
/**
|
|
159
|
-
* Load
|
|
134
|
+
* Load MCPs from a directory — tries mcps.yaml first, falls back to mcps.json.
|
|
135
|
+
*
|
|
136
|
+
* Format differences:
|
|
137
|
+
* - YAML: flat structure { "mcp-name": { command, args } }
|
|
138
|
+
* - JSON: nested structure { mcps: { "mcp-name": { command, args } } }
|
|
160
139
|
*/
|
|
161
|
-
async function
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
140
|
+
async function loadMcpsFromDir(dir) {
|
|
141
|
+
// Try YAML first (preferred format)
|
|
142
|
+
const yamlContent = await readFileIfExists(path.join(dir, "mcps.yaml"));
|
|
143
|
+
if (yamlContent) {
|
|
144
|
+
return parseConfig(yamlContent, path.join(dir, "mcps.yaml")) ?? {};
|
|
145
|
+
}
|
|
146
|
+
// Fallback to JSON
|
|
147
|
+
const jsonContent = await readFileIfExists(path.join(dir, "mcps.json"));
|
|
148
|
+
if (jsonContent) {
|
|
149
|
+
const data = parseConfig(jsonContent, path.join(dir, "mcps.json"));
|
|
150
|
+
return data?.mcps ?? {};
|
|
151
|
+
}
|
|
152
|
+
return {};
|
|
169
153
|
}
|
|
170
154
|
/**
|
|
171
|
-
* Load global config from ~/.mycelium/
|
|
155
|
+
* Load global config from ~/.mycelium/global/
|
|
172
156
|
*/
|
|
173
157
|
export async function loadGlobalConfig() {
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const result = {
|
|
178
|
-
mcps: {},
|
|
158
|
+
const globalDir = path.join(MYCELIUM_HOME, "global");
|
|
159
|
+
return {
|
|
160
|
+
mcps: await loadMcpsFromDir(globalDir),
|
|
179
161
|
skills: {},
|
|
162
|
+
agents: await loadFileItems(path.join(globalDir, "agents")),
|
|
163
|
+
rules: await loadFileItems(path.join(globalDir, "rules")),
|
|
164
|
+
commands: await loadFileItems(path.join(globalDir, "commands")),
|
|
180
165
|
};
|
|
181
|
-
if (await fileExists(mcpsPath)) {
|
|
182
|
-
const mcpsConfig = await loadJsonConfig(mcpsPath);
|
|
183
|
-
if (mcpsConfig?.mcps) {
|
|
184
|
-
result.mcps = mcpsConfig.mcps;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return result;
|
|
188
166
|
}
|
|
189
167
|
/**
|
|
190
168
|
* Load project config from .mycelium/ in project root
|
|
191
169
|
*/
|
|
192
170
|
export async function loadProjectConfig(projectRoot) {
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
mcps:
|
|
171
|
+
const root = projectRoot ?? process.cwd();
|
|
172
|
+
const projDir = path.join(root, ".mycelium");
|
|
173
|
+
return {
|
|
174
|
+
mcps: await loadMcpsFromDir(projDir),
|
|
197
175
|
skills: {},
|
|
176
|
+
agents: await loadFileItems(path.join(projDir, "agents")),
|
|
177
|
+
rules: await loadFileItems(path.join(projDir, "rules")),
|
|
178
|
+
commands: await loadFileItems(path.join(projDir, "commands")),
|
|
198
179
|
};
|
|
199
|
-
if (await fileExists(mcpsPath)) {
|
|
200
|
-
const mcpsConfig = await loadJsonConfig(mcpsPath);
|
|
201
|
-
if (mcpsConfig?.mcps) {
|
|
202
|
-
result.mcps = mcpsConfig.mcps;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return result;
|
|
206
180
|
}
|
|
207
181
|
/**
|
|
208
|
-
* Load machine-specific config from ~/.mycelium/machines/{hostname}
|
|
182
|
+
* Load machine-specific config from ~/.mycelium/machines/{hostname}.*
|
|
183
|
+
* Tries: hostname.yaml → hostname.json → hostname/ directory
|
|
209
184
|
*/
|
|
210
185
|
export async function loadMachineConfig() {
|
|
211
|
-
const home = os.homedir();
|
|
212
186
|
const hostname = os.hostname();
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
187
|
+
const machinesDir = path.join(MYCELIUM_HOME, "machines");
|
|
188
|
+
const hostDir = path.join(machinesDir, hostname);
|
|
189
|
+
// Load agents/rules/commands from hostname/ directory
|
|
190
|
+
const fileItems = {
|
|
191
|
+
agents: await loadFileItems(path.join(hostDir, "agents")),
|
|
192
|
+
rules: await loadFileItems(path.join(hostDir, "rules")),
|
|
193
|
+
commands: await loadFileItems(path.join(hostDir, "commands")),
|
|
218
194
|
};
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
|
|
195
|
+
// Try hostname.yaml (flat MCP entries)
|
|
196
|
+
const yamlContent = await readFileIfExists(path.join(machinesDir, `${hostname}.yaml`));
|
|
197
|
+
if (yamlContent) {
|
|
198
|
+
const mcps = parseConfig(yamlContent, `machines/${hostname}.yaml`) ?? {};
|
|
199
|
+
return { mcps, skills: {}, ...fileItems };
|
|
200
|
+
}
|
|
201
|
+
// Try hostname.json (nested { mcps: {} })
|
|
202
|
+
const jsonContent = await readFileIfExists(path.join(machinesDir, `${hostname}.json`));
|
|
203
|
+
if (jsonContent) {
|
|
204
|
+
const data = parseConfig(jsonContent, `machines/${hostname}.json`);
|
|
205
|
+
return { mcps: data?.mcps ?? {}, skills: {}, ...fileItems };
|
|
206
|
+
}
|
|
207
|
+
// Try hostname/ directory
|
|
208
|
+
return { mcps: await loadMcpsFromDir(hostDir), skills: {}, ...fileItems };
|
|
226
209
|
}
|
|
227
210
|
/**
|
|
228
211
|
* Load and merge all config levels for a project
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/core/config-merger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"config-merger.js","sourceRoot":"","sources":["../../src/core/config-merger.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Config merge priority: Project > Machine > Global
|
|
5
5
|
* - Global provides base set of skills/mcps/memory
|
|
6
6
|
* - Machine can add/override for hardware-specific needs
|
|
7
|
-
* - Project can add/override/DISABLE specific items (
|
|
7
|
+
* - Project can add/override/DISABLE specific items (state: "disabled")
|
|
8
8
|
*/
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=config-merger.test.d.ts.map
|