@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.
Files changed (74) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +9 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +13 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/schema.d.ts +146 -0
  7. package/dist/schema.d.ts.map +1 -0
  8. package/dist/schema.js +68 -0
  9. package/dist/schema.js.map +1 -0
  10. package/dist/tools/_registry.d.ts +10 -0
  11. package/dist/tools/_registry.d.ts.map +1 -0
  12. package/dist/tools/_registry.js +59 -0
  13. package/dist/tools/_registry.js.map +1 -0
  14. package/dist/tools/_registry.test.d.ts +2 -0
  15. package/dist/tools/_registry.test.d.ts.map +1 -0
  16. package/dist/tools/_registry.test.js +81 -0
  17. package/dist/tools/_registry.test.js.map +1 -0
  18. package/dist/tools/_types.d.ts +56 -0
  19. package/dist/tools/_types.d.ts.map +1 -0
  20. package/dist/tools/_types.js +5 -0
  21. package/dist/tools/_types.js.map +1 -0
  22. package/dist/tools/aider.d.ts +3 -0
  23. package/dist/tools/aider.d.ts.map +1 -0
  24. package/dist/tools/aider.js +24 -0
  25. package/dist/tools/aider.js.map +1 -0
  26. package/dist/tools/antigravity.d.ts +3 -0
  27. package/dist/tools/antigravity.d.ts.map +1 -0
  28. package/dist/tools/antigravity.js +24 -0
  29. package/dist/tools/antigravity.js.map +1 -0
  30. package/dist/tools/claude-code.d.ts +3 -0
  31. package/dist/tools/claude-code.d.ts.map +1 -0
  32. package/dist/tools/claude-code.js +24 -0
  33. package/dist/tools/claude-code.js.map +1 -0
  34. package/dist/tools/codex.d.ts +3 -0
  35. package/dist/tools/codex.d.ts.map +1 -0
  36. package/dist/tools/codex.js +24 -0
  37. package/dist/tools/codex.js.map +1 -0
  38. package/dist/tools/cursor.d.ts +3 -0
  39. package/dist/tools/cursor.d.ts.map +1 -0
  40. package/dist/tools/cursor.js +24 -0
  41. package/dist/tools/cursor.js.map +1 -0
  42. package/dist/tools/gemini-cli.d.ts +3 -0
  43. package/dist/tools/gemini-cli.d.ts.map +1 -0
  44. package/dist/tools/gemini-cli.js +24 -0
  45. package/dist/tools/gemini-cli.js.map +1 -0
  46. package/dist/tools/index.d.ts +3 -0
  47. package/dist/tools/index.d.ts.map +1 -0
  48. package/dist/tools/index.js +3 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/openclaw.d.ts +3 -0
  51. package/dist/tools/openclaw.d.ts.map +1 -0
  52. package/dist/tools/openclaw.js +24 -0
  53. package/dist/tools/openclaw.js.map +1 -0
  54. package/dist/tools/opencode.d.ts +3 -0
  55. package/dist/tools/opencode.d.ts.map +1 -0
  56. package/dist/tools/opencode.js +24 -0
  57. package/dist/tools/opencode.js.map +1 -0
  58. package/dist/tools/vscode.d.ts +3 -0
  59. package/dist/tools/vscode.d.ts.map +1 -0
  60. package/dist/tools/vscode.js +28 -0
  61. package/dist/tools/vscode.js.map +1 -0
  62. package/dist/types.d.ts +305 -0
  63. package/dist/types.d.ts.map +1 -0
  64. package/dist/types.js +13 -0
  65. package/dist/types.js.map +1 -0
  66. package/dist/utils.d.ts +48 -0
  67. package/dist/utils.d.ts.map +1 -0
  68. package/dist/utils.js +125 -0
  69. package/dist/utils.js.map +1 -0
  70. package/dist/utils.test.d.ts +5 -0
  71. package/dist/utils.test.d.ts.map +1 -0
  72. package/dist/utils.test.js +190 -0
  73. package/dist/utils.test.js.map +1 -0
  74. 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,5 @@
1
+ /**
2
+ * Tests for utility functions - written FIRST following TDD
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=utils.test.d.ts.map
@@ -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
+ }