@mycelish/core 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/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +146 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +68 -0
- package/dist/schema.js.map +1 -0
- package/dist/tools/_registry.d.ts +10 -0
- package/dist/tools/_registry.d.ts.map +1 -0
- package/dist/tools/_registry.js +59 -0
- package/dist/tools/_registry.js.map +1 -0
- package/dist/tools/_registry.test.d.ts +2 -0
- package/dist/tools/_registry.test.d.ts.map +1 -0
- package/dist/tools/_registry.test.js +81 -0
- package/dist/tools/_registry.test.js.map +1 -0
- package/dist/tools/_types.d.ts +56 -0
- package/dist/tools/_types.d.ts.map +1 -0
- package/dist/tools/_types.js +5 -0
- package/dist/tools/_types.js.map +1 -0
- package/dist/tools/aider.d.ts +3 -0
- package/dist/tools/aider.d.ts.map +1 -0
- package/dist/tools/aider.js +24 -0
- package/dist/tools/aider.js.map +1 -0
- package/dist/tools/antigravity.d.ts +3 -0
- package/dist/tools/antigravity.d.ts.map +1 -0
- package/dist/tools/antigravity.js +24 -0
- package/dist/tools/antigravity.js.map +1 -0
- package/dist/tools/claude-code.d.ts +3 -0
- package/dist/tools/claude-code.d.ts.map +1 -0
- package/dist/tools/claude-code.js +24 -0
- package/dist/tools/claude-code.js.map +1 -0
- package/dist/tools/codex.d.ts +3 -0
- package/dist/tools/codex.d.ts.map +1 -0
- package/dist/tools/codex.js +24 -0
- package/dist/tools/codex.js.map +1 -0
- package/dist/tools/cursor.d.ts +3 -0
- package/dist/tools/cursor.d.ts.map +1 -0
- package/dist/tools/cursor.js +24 -0
- package/dist/tools/cursor.js.map +1 -0
- package/dist/tools/gemini-cli.d.ts +3 -0
- package/dist/tools/gemini-cli.d.ts.map +1 -0
- package/dist/tools/gemini-cli.js +24 -0
- package/dist/tools/gemini-cli.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/openclaw.d.ts +3 -0
- package/dist/tools/openclaw.d.ts.map +1 -0
- package/dist/tools/openclaw.js +24 -0
- package/dist/tools/openclaw.js.map +1 -0
- package/dist/tools/opencode.d.ts +3 -0
- package/dist/tools/opencode.d.ts.map +1 -0
- package/dist/tools/opencode.js +24 -0
- package/dist/tools/opencode.js.map +1 -0
- package/dist/tools/vscode.d.ts +3 -0
- package/dist/tools/vscode.d.ts.map +1 -0
- package/dist/tools/vscode.js +28 -0
- package/dist/tools/vscode.js.map +1 -0
- package/dist/types.d.ts +305 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +13 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +48 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +125 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.d.ts +5 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +190 -0
- package/dist/utils.test.js.map +1 -0
- package/package.json +46 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for Mycelium
|
|
3
|
+
*/
|
|
4
|
+
import * as os from "node:os";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
/**
|
|
7
|
+
* Expand ~ to home directory in path
|
|
8
|
+
*/
|
|
9
|
+
export function expandPath(p) {
|
|
10
|
+
if (p.startsWith("~")) {
|
|
11
|
+
return path.join(os.homedir(), p.slice(1));
|
|
12
|
+
}
|
|
13
|
+
return p;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Contract home directory to ~ in path
|
|
17
|
+
*/
|
|
18
|
+
export function contractPath(p) {
|
|
19
|
+
const home = os.homedir();
|
|
20
|
+
if (p.startsWith(home)) {
|
|
21
|
+
return "~" + p.slice(home.length);
|
|
22
|
+
}
|
|
23
|
+
return p;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get the hostname for machine-specific configs
|
|
27
|
+
*/
|
|
28
|
+
export function getHostname() {
|
|
29
|
+
return os.hostname();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the global mycelium directory path
|
|
33
|
+
*/
|
|
34
|
+
export function getGlobalMyceliumPath() {
|
|
35
|
+
return expandPath("~/.mycelium");
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get the project mycelium directory path
|
|
39
|
+
*/
|
|
40
|
+
export function getProjectMyceliumPath(projectRoot) {
|
|
41
|
+
return path.join(projectRoot, ".mycelium");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Deep merge two objects, with source taking priority
|
|
45
|
+
*/
|
|
46
|
+
export function deepMerge(target, source) {
|
|
47
|
+
const result = { ...target };
|
|
48
|
+
for (const key in source) {
|
|
49
|
+
const sourceValue = source[key];
|
|
50
|
+
const targetValue = target[key];
|
|
51
|
+
if (sourceValue !== undefined &&
|
|
52
|
+
typeof sourceValue === "object" &&
|
|
53
|
+
sourceValue !== null &&
|
|
54
|
+
!Array.isArray(sourceValue) &&
|
|
55
|
+
typeof targetValue === "object" &&
|
|
56
|
+
targetValue !== null &&
|
|
57
|
+
!Array.isArray(targetValue)) {
|
|
58
|
+
result[key] = deepMerge(targetValue, sourceValue);
|
|
59
|
+
}
|
|
60
|
+
else if (sourceValue !== undefined) {
|
|
61
|
+
result[key] = sourceValue;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve environment variables in a string (e.g., ${VAR_NAME})
|
|
68
|
+
*/
|
|
69
|
+
export function resolveEnvVars(str, env = process.env) {
|
|
70
|
+
return str.replace(/\$\{([^}]+)\}/g, (_, varName) => {
|
|
71
|
+
return env[varName] || "";
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Resolve environment variables in an object recursively
|
|
76
|
+
*/
|
|
77
|
+
export function resolveEnvVarsInObject(obj, env = process.env) {
|
|
78
|
+
if (typeof obj === "string") {
|
|
79
|
+
return resolveEnvVars(obj, env);
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(obj)) {
|
|
82
|
+
return obj.map((item) => resolveEnvVarsInObject(item, env));
|
|
83
|
+
}
|
|
84
|
+
if (typeof obj === "object" && obj !== null) {
|
|
85
|
+
const result = {};
|
|
86
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
87
|
+
result[key] = resolveEnvVarsInObject(value, env);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
return obj;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Format a sync status for display
|
|
95
|
+
*/
|
|
96
|
+
export function formatStatus(status) {
|
|
97
|
+
const statusMap = {
|
|
98
|
+
synced: "\u001b[32m\u25CF synced\u001b[0m",
|
|
99
|
+
pending: "\u001b[33m\u25CF pending\u001b[0m",
|
|
100
|
+
error: "\u001b[31m\u25CF error\u001b[0m",
|
|
101
|
+
disabled: "\u001b[90m\u25CB disabled\u001b[0m",
|
|
102
|
+
};
|
|
103
|
+
return statusMap[status];
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a path exists
|
|
107
|
+
*/
|
|
108
|
+
export async function pathExists(p) {
|
|
109
|
+
const fs = await import("node:fs/promises");
|
|
110
|
+
try {
|
|
111
|
+
await fs.access(p);
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Ensure a directory exists, creating it if necessary
|
|
120
|
+
*/
|
|
121
|
+
export async function ensureDir(dirPath) {
|
|
122
|
+
const fs = await import("node:fs/promises");
|
|
123
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.d.ts","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for utility functions - written FIRST following TDD
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, afterEach } from "vitest";
|
|
5
|
+
import * as os from "node:os";
|
|
6
|
+
// Tests define the API we want - implementation comes after
|
|
7
|
+
describe("expandPath", () => {
|
|
8
|
+
it("expands ~ to home directory", async () => {
|
|
9
|
+
const { expandPath } = await import("./utils.js");
|
|
10
|
+
const home = os.homedir();
|
|
11
|
+
expect(expandPath("~/.mycelium")).toBe(`${home}/.mycelium`);
|
|
12
|
+
});
|
|
13
|
+
it("leaves absolute paths unchanged", async () => {
|
|
14
|
+
const { expandPath } = await import("./utils.js");
|
|
15
|
+
expect(expandPath("/absolute/path")).toBe("/absolute/path");
|
|
16
|
+
});
|
|
17
|
+
it("leaves relative paths unchanged", async () => {
|
|
18
|
+
const { expandPath } = await import("./utils.js");
|
|
19
|
+
expect(expandPath("relative/path")).toBe("relative/path");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
describe("contractPath", () => {
|
|
23
|
+
it("contracts home directory to ~", async () => {
|
|
24
|
+
const { contractPath } = await import("./utils.js");
|
|
25
|
+
const home = os.homedir();
|
|
26
|
+
expect(contractPath(`${home}/.mycelium`)).toBe("~/.mycelium");
|
|
27
|
+
});
|
|
28
|
+
it("leaves paths outside home unchanged", async () => {
|
|
29
|
+
const { contractPath } = await import("./utils.js");
|
|
30
|
+
expect(contractPath("/var/log")).toBe("/var/log");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("getHostname", () => {
|
|
34
|
+
it("returns the system hostname", async () => {
|
|
35
|
+
const { getHostname } = await import("./utils.js");
|
|
36
|
+
expect(getHostname()).toBe(os.hostname());
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe("getGlobalMyceliumPath", () => {
|
|
40
|
+
it("returns ~/.mycelium expanded", async () => {
|
|
41
|
+
const { getGlobalMyceliumPath } = await import("./utils.js");
|
|
42
|
+
const home = os.homedir();
|
|
43
|
+
expect(getGlobalMyceliumPath()).toBe(`${home}/.mycelium`);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("getProjectMyceliumPath", () => {
|
|
47
|
+
it("returns .mycelium in project root", async () => {
|
|
48
|
+
const { getProjectMyceliumPath } = await import("./utils.js");
|
|
49
|
+
expect(getProjectMyceliumPath("/home/user/project")).toBe("/home/user/project/.mycelium");
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("deepMerge", () => {
|
|
53
|
+
it("merges flat objects with source priority", async () => {
|
|
54
|
+
const { deepMerge } = await import("./utils.js");
|
|
55
|
+
const target = { a: 1, b: 2 };
|
|
56
|
+
const source = { b: 3, c: 4 };
|
|
57
|
+
expect(deepMerge(target, source)).toEqual({ a: 1, b: 3, c: 4 });
|
|
58
|
+
});
|
|
59
|
+
it("merges nested objects recursively", async () => {
|
|
60
|
+
const { deepMerge } = await import("./utils.js");
|
|
61
|
+
const target = { a: { x: 1, y: 2 }, b: 1 };
|
|
62
|
+
const source = { a: { y: 3, z: 4 } };
|
|
63
|
+
expect(deepMerge(target, source)).toEqual({ a: { x: 1, y: 3, z: 4 }, b: 1 });
|
|
64
|
+
});
|
|
65
|
+
it("does not mutate original objects", async () => {
|
|
66
|
+
const { deepMerge } = await import("./utils.js");
|
|
67
|
+
const target = { a: 1 };
|
|
68
|
+
const source = { b: 2 };
|
|
69
|
+
deepMerge(target, source);
|
|
70
|
+
expect(target).toEqual({ a: 1 });
|
|
71
|
+
});
|
|
72
|
+
it("replaces arrays instead of merging them", async () => {
|
|
73
|
+
const { deepMerge } = await import("./utils.js");
|
|
74
|
+
const target = { arr: [1, 2] };
|
|
75
|
+
const source = { arr: [3, 4] };
|
|
76
|
+
expect(deepMerge(target, source)).toEqual({ arr: [3, 4] });
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe("resolveEnvVars", () => {
|
|
80
|
+
it("resolves ${VAR} syntax from environment", async () => {
|
|
81
|
+
const { resolveEnvVars } = await import("./utils.js");
|
|
82
|
+
const env = { MY_VAR: "hello" };
|
|
83
|
+
expect(resolveEnvVars("value is ${MY_VAR}", env)).toBe("value is hello");
|
|
84
|
+
});
|
|
85
|
+
it("resolves multiple variables", async () => {
|
|
86
|
+
const { resolveEnvVars } = await import("./utils.js");
|
|
87
|
+
const env = { A: "x", B: "y" };
|
|
88
|
+
expect(resolveEnvVars("${A} and ${B}", env)).toBe("x and y");
|
|
89
|
+
});
|
|
90
|
+
it("replaces undefined vars with empty string", async () => {
|
|
91
|
+
const { resolveEnvVars } = await import("./utils.js");
|
|
92
|
+
expect(resolveEnvVars("${UNDEFINED}", {})).toBe("");
|
|
93
|
+
});
|
|
94
|
+
it("leaves strings without vars unchanged", async () => {
|
|
95
|
+
const { resolveEnvVars } = await import("./utils.js");
|
|
96
|
+
expect(resolveEnvVars("no vars here", {})).toBe("no vars here");
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe("resolveEnvVarsInObject", () => {
|
|
100
|
+
it("resolves vars in nested object strings", async () => {
|
|
101
|
+
const { resolveEnvVarsInObject } = await import("./utils.js");
|
|
102
|
+
const obj = { a: "${VAR}", b: { c: "${VAR}" } };
|
|
103
|
+
const env = { VAR: "resolved" };
|
|
104
|
+
expect(resolveEnvVarsInObject(obj, env)).toEqual({
|
|
105
|
+
a: "resolved",
|
|
106
|
+
b: { c: "resolved" },
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
it("resolves vars in arrays", async () => {
|
|
110
|
+
const { resolveEnvVarsInObject } = await import("./utils.js");
|
|
111
|
+
const obj = { arr: ["${A}", "${B}"] };
|
|
112
|
+
const env = { A: "x", B: "y" };
|
|
113
|
+
expect(resolveEnvVarsInObject(obj, env)).toEqual({ arr: ["x", "y"] });
|
|
114
|
+
});
|
|
115
|
+
it("leaves non-string values unchanged", async () => {
|
|
116
|
+
const { resolveEnvVarsInObject } = await import("./utils.js");
|
|
117
|
+
const obj = { num: 42, bool: true, nil: null };
|
|
118
|
+
expect(resolveEnvVarsInObject(obj, {})).toEqual({
|
|
119
|
+
num: 42,
|
|
120
|
+
bool: true,
|
|
121
|
+
nil: null,
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
describe("formatStatus", () => {
|
|
126
|
+
it("formats synced status with green color", async () => {
|
|
127
|
+
const { formatStatus } = await import("./utils.js");
|
|
128
|
+
const result = formatStatus("synced");
|
|
129
|
+
expect(result).toContain("synced");
|
|
130
|
+
expect(result).toContain("\u001b[32m"); // green ANSI
|
|
131
|
+
});
|
|
132
|
+
it("formats pending status with yellow color", async () => {
|
|
133
|
+
const { formatStatus } = await import("./utils.js");
|
|
134
|
+
const result = formatStatus("pending");
|
|
135
|
+
expect(result).toContain("pending");
|
|
136
|
+
expect(result).toContain("\u001b[33m"); // yellow ANSI
|
|
137
|
+
});
|
|
138
|
+
it("formats error status with red color", async () => {
|
|
139
|
+
const { formatStatus } = await import("./utils.js");
|
|
140
|
+
const result = formatStatus("error");
|
|
141
|
+
expect(result).toContain("error");
|
|
142
|
+
expect(result).toContain("\u001b[31m"); // red ANSI
|
|
143
|
+
});
|
|
144
|
+
it("formats disabled status with gray color", async () => {
|
|
145
|
+
const { formatStatus } = await import("./utils.js");
|
|
146
|
+
const result = formatStatus("disabled");
|
|
147
|
+
expect(result).toContain("disabled");
|
|
148
|
+
expect(result).toContain("\u001b[90m"); // gray ANSI
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
describe("pathExists", () => {
|
|
152
|
+
it("returns true for existing paths", async () => {
|
|
153
|
+
const { pathExists } = await import("./utils.js");
|
|
154
|
+
expect(await pathExists("/")).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
it("returns false for non-existing paths", async () => {
|
|
157
|
+
const { pathExists } = await import("./utils.js");
|
|
158
|
+
expect(await pathExists("/nonexistent/path/12345")).toBe(false);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe("ensureDir", () => {
|
|
162
|
+
const testDir = `/tmp/mycelium-test-${Date.now()}`;
|
|
163
|
+
afterEach(async () => {
|
|
164
|
+
const fs = await import("node:fs/promises");
|
|
165
|
+
try {
|
|
166
|
+
await fs.rm(testDir, { recursive: true });
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Ignore
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
it("creates directory if it does not exist", async () => {
|
|
173
|
+
const { ensureDir, pathExists } = await import("./utils.js");
|
|
174
|
+
await ensureDir(testDir);
|
|
175
|
+
expect(await pathExists(testDir)).toBe(true);
|
|
176
|
+
});
|
|
177
|
+
it("creates nested directories", async () => {
|
|
178
|
+
const { ensureDir, pathExists } = await import("./utils.js");
|
|
179
|
+
const nestedDir = `${testDir}/a/b/c`;
|
|
180
|
+
await ensureDir(nestedDir);
|
|
181
|
+
expect(await pathExists(nestedDir)).toBe(true);
|
|
182
|
+
});
|
|
183
|
+
it("does not fail if directory already exists", async () => {
|
|
184
|
+
const { ensureDir, pathExists } = await import("./utils.js");
|
|
185
|
+
await ensureDir(testDir);
|
|
186
|
+
await ensureDir(testDir); // Second call should not throw
|
|
187
|
+
expect(await pathExists(testDir)).toBe(true);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=utils.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.test.js","sourceRoot":"","sources":["../src/utils.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mycelish/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Core types and utilities for Mycelium",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./types": {
|
|
14
|
+
"types": "./dist/types.d.ts",
|
|
15
|
+
"import": "./dist/types.js"
|
|
16
|
+
},
|
|
17
|
+
"./schema": {
|
|
18
|
+
"types": "./dist/schema.d.ts",
|
|
19
|
+
"import": "./dist/schema.js"
|
|
20
|
+
},
|
|
21
|
+
"./utils": {
|
|
22
|
+
"types": "./dist/utils.d.ts",
|
|
23
|
+
"import": "./dist/utils.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"README.md"
|
|
29
|
+
],
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^25.2.2",
|
|
32
|
+
"typescript": "^5.9.3",
|
|
33
|
+
"vitest": "^4.0.18"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"zod": "^4.3.6"
|
|
37
|
+
},
|
|
38
|
+
"scripts": {
|
|
39
|
+
"build": "tsc",
|
|
40
|
+
"dev": "tsc --watch",
|
|
41
|
+
"test": "vitest run",
|
|
42
|
+
"test:watch": "vitest",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"clean": "rm -rf dist"
|
|
45
|
+
}
|
|
46
|
+
}
|