superskill 0.2.2 → 0.2.5

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 (164) hide show
  1. package/.claude-plugin/marketplace.json +23 -0
  2. package/.claude-plugin/plugin.json +12 -0
  3. package/.mcp.json +9 -0
  4. package/CHANGELOG.md +28 -0
  5. package/LICENSE-COMMERCIAL.md +46 -0
  6. package/dist/cli.js +0 -0
  7. package/dist/commands/skill/marketplace.d.ts +1 -0
  8. package/dist/commands/skill/marketplace.js +79 -35
  9. package/dist/commands/skill/marketplace.js.map +1 -1
  10. package/dist/commands/skill/web-discovery.d.ts +36 -0
  11. package/dist/commands/skill/web-discovery.js +196 -0
  12. package/dist/commands/skill/web-discovery.js.map +1 -0
  13. package/dist/core/registry.js +8 -16
  14. package/dist/core/registry.js.map +1 -1
  15. package/dist/mcp-server.js +0 -0
  16. package/dist/setup/configure.js +21 -1
  17. package/dist/setup/configure.js.map +1 -1
  18. package/dist/setup/teardown.js +13 -5
  19. package/dist/setup/teardown.js.map +1 -1
  20. package/package.json +7 -1
  21. package/dist/commands/brainstorm.test.d.ts +0 -1
  22. package/dist/commands/brainstorm.test.js +0 -110
  23. package/dist/commands/brainstorm.test.js.map +0 -1
  24. package/dist/commands/context.test.d.ts +0 -1
  25. package/dist/commands/context.test.js +0 -230
  26. package/dist/commands/context.test.js.map +0 -1
  27. package/dist/commands/decide.test.d.ts +0 -1
  28. package/dist/commands/decide.test.js +0 -109
  29. package/dist/commands/decide.test.js.map +0 -1
  30. package/dist/commands/graph.test.d.ts +0 -1
  31. package/dist/commands/graph.test.js +0 -215
  32. package/dist/commands/graph.test.js.map +0 -1
  33. package/dist/commands/learn.test.d.ts +0 -1
  34. package/dist/commands/learn.test.js +0 -241
  35. package/dist/commands/learn.test.js.map +0 -1
  36. package/dist/commands/read.test.d.ts +0 -1
  37. package/dist/commands/read.test.js +0 -48
  38. package/dist/commands/read.test.js.map +0 -1
  39. package/dist/commands/resume.test.d.ts +0 -1
  40. package/dist/commands/resume.test.js +0 -243
  41. package/dist/commands/resume.test.js.map +0 -1
  42. package/dist/commands/search.test.d.ts +0 -1
  43. package/dist/commands/search.test.js +0 -61
  44. package/dist/commands/search.test.js.map +0 -1
  45. package/dist/commands/session.test.d.ts +0 -1
  46. package/dist/commands/session.test.js +0 -231
  47. package/dist/commands/session.test.js.map +0 -1
  48. package/dist/commands/skill/index.test.d.ts +0 -1
  49. package/dist/commands/skill/index.test.js +0 -137
  50. package/dist/commands/skill/index.test.js.map +0 -1
  51. package/dist/commands/skill/install.test.d.ts +0 -1
  52. package/dist/commands/skill/install.test.js +0 -225
  53. package/dist/commands/skill/install.test.js.map +0 -1
  54. package/dist/commands/skill/list.test.d.ts +0 -1
  55. package/dist/commands/skill/list.test.js +0 -101
  56. package/dist/commands/skill/list.test.js.map +0 -1
  57. package/dist/commands/skill/schema.test.d.ts +0 -1
  58. package/dist/commands/skill/schema.test.js +0 -142
  59. package/dist/commands/skill/schema.test.js.map +0 -1
  60. package/dist/commands/skill/validate.test.d.ts +0 -1
  61. package/dist/commands/skill/validate.test.js +0 -171
  62. package/dist/commands/skill/validate.test.js.map +0 -1
  63. package/dist/commands/task.test.d.ts +0 -1
  64. package/dist/commands/task.test.js +0 -395
  65. package/dist/commands/task.test.js.map +0 -1
  66. package/dist/commands/todo.test.d.ts +0 -1
  67. package/dist/commands/todo.test.js +0 -324
  68. package/dist/commands/todo.test.js.map +0 -1
  69. package/dist/commands/write.test.d.ts +0 -1
  70. package/dist/commands/write.test.js +0 -79
  71. package/dist/commands/write.test.js.map +0 -1
  72. package/dist/config.test.d.ts +0 -1
  73. package/dist/config.test.js +0 -147
  74. package/dist/config.test.js.map +0 -1
  75. package/dist/core/executor.d.ts +0 -11
  76. package/dist/core/executor.js +0 -42
  77. package/dist/core/executor.js.map +0 -1
  78. package/dist/core/executor.test.d.ts +0 -1
  79. package/dist/core/executor.test.js +0 -206
  80. package/dist/core/executor.test.js.map +0 -1
  81. package/dist/core/middleware/error-handler.d.ts +0 -2
  82. package/dist/core/middleware/error-handler.js +0 -29
  83. package/dist/core/middleware/error-handler.js.map +0 -1
  84. package/dist/core/middleware/index.d.ts +0 -2
  85. package/dist/core/middleware/index.js +0 -3
  86. package/dist/core/middleware/index.js.map +0 -1
  87. package/dist/core/middleware/logging.d.ts +0 -2
  88. package/dist/core/middleware/logging.js +0 -18
  89. package/dist/core/middleware/logging.js.map +0 -1
  90. package/dist/core/registry.test.d.ts +0 -1
  91. package/dist/core/registry.test.js +0 -213
  92. package/dist/core/registry.test.js.map +0 -1
  93. package/dist/integration/coordination.test.d.ts +0 -1
  94. package/dist/integration/coordination.test.js +0 -286
  95. package/dist/integration/coordination.test.js.map +0 -1
  96. package/dist/integration/project-artifacts.test.d.ts +0 -1
  97. package/dist/integration/project-artifacts.test.js +0 -275
  98. package/dist/integration/project-artifacts.test.js.map +0 -1
  99. package/dist/integration/registry-graph.test.d.ts +0 -1
  100. package/dist/integration/registry-graph.test.js +0 -157
  101. package/dist/integration/registry-graph.test.js.map +0 -1
  102. package/dist/integration/vault-lifecycle.test.d.ts +0 -1
  103. package/dist/integration/vault-lifecycle.test.js +0 -183
  104. package/dist/integration/vault-lifecycle.test.js.map +0 -1
  105. package/dist/lib/auto-number.test.d.ts +0 -1
  106. package/dist/lib/auto-number.test.js +0 -88
  107. package/dist/lib/auto-number.test.js.map +0 -1
  108. package/dist/lib/auto-profile.test.d.ts +0 -1
  109. package/dist/lib/auto-profile.test.js +0 -227
  110. package/dist/lib/auto-profile.test.js.map +0 -1
  111. package/dist/lib/escape-regex.test.d.ts +0 -1
  112. package/dist/lib/escape-regex.test.js +0 -27
  113. package/dist/lib/escape-regex.test.js.map +0 -1
  114. package/dist/lib/frontmatter.test.d.ts +0 -1
  115. package/dist/lib/frontmatter.test.js +0 -192
  116. package/dist/lib/frontmatter.test.js.map +0 -1
  117. package/dist/lib/project-detector.test.d.ts +0 -1
  118. package/dist/lib/project-detector.test.js +0 -117
  119. package/dist/lib/project-detector.test.js.map +0 -1
  120. package/dist/lib/safe-external-path.test.d.ts +0 -1
  121. package/dist/lib/safe-external-path.test.js +0 -99
  122. package/dist/lib/safe-external-path.test.js.map +0 -1
  123. package/dist/lib/search-engine.test.d.ts +0 -1
  124. package/dist/lib/search-engine.test.js +0 -120
  125. package/dist/lib/search-engine.test.js.map +0 -1
  126. package/dist/lib/session-registry.test.d.ts +0 -1
  127. package/dist/lib/session-registry.test.js +0 -199
  128. package/dist/lib/session-registry.test.js.map +0 -1
  129. package/dist/lib/stack-detector.test.d.ts +0 -1
  130. package/dist/lib/stack-detector.test.js +0 -110
  131. package/dist/lib/stack-detector.test.js.map +0 -1
  132. package/dist/lib/token-estimator.test.d.ts +0 -1
  133. package/dist/lib/token-estimator.test.js +0 -65
  134. package/dist/lib/token-estimator.test.js.map +0 -1
  135. package/dist/lib/tool-detector.test.d.ts +0 -1
  136. package/dist/lib/tool-detector.test.js +0 -170
  137. package/dist/lib/tool-detector.test.js.map +0 -1
  138. package/dist/lib/vault-fs.test.d.ts +0 -1
  139. package/dist/lib/vault-fs.test.js +0 -210
  140. package/dist/lib/vault-fs.test.js.map +0 -1
  141. package/dist/setup/configure.test.d.ts +0 -1
  142. package/dist/setup/configure.test.js +0 -112
  143. package/dist/setup/configure.test.js.map +0 -1
  144. package/dist/setup/detect.test.d.ts +0 -1
  145. package/dist/setup/detect.test.js +0 -44
  146. package/dist/setup/detect.test.js.map +0 -1
  147. package/dist/setup/instructions.test.d.ts +0 -1
  148. package/dist/setup/instructions.test.js +0 -84
  149. package/dist/setup/instructions.test.js.map +0 -1
  150. package/dist/setup/json-config.test.d.ts +0 -1
  151. package/dist/setup/json-config.test.js +0 -92
  152. package/dist/setup/json-config.test.js.map +0 -1
  153. package/dist/setup/setup-integration.test.d.ts +0 -1
  154. package/dist/setup/setup-integration.test.js +0 -72
  155. package/dist/setup/setup-integration.test.js.map +0 -1
  156. package/dist/setup/teardown.test.d.ts +0 -1
  157. package/dist/setup/teardown.test.js +0 -105
  158. package/dist/setup/teardown.test.js.map +0 -1
  159. package/dist/setup/toml-config.test.d.ts +0 -1
  160. package/dist/setup/toml-config.test.js +0 -49
  161. package/dist/setup/toml-config.test.js.map +0 -1
  162. package/dist/test-helpers.test.d.ts +0 -1
  163. package/dist/test-helpers.test.js +0 -90
  164. package/dist/test-helpers.test.js.map +0 -1
@@ -1,230 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { contextCommand } from "./context.js";
6
- import { VaultFS } from "../lib/vault-fs.js";
7
- function createCommandContext(vaultFs, overrides) {
8
- return {
9
- vaultFs,
10
- vaultPath: vaultFs.root,
11
- sessionRegistry: {},
12
- config: {},
13
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
14
- ...overrides,
15
- };
16
- }
17
- describe("contextCommand", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("missing context file", () => {
31
- it("returns message when context file does not exist", async () => {
32
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
33
- const result = await contextCommand({
34
- project: "test-project",
35
- }, ctx);
36
- expect(result.project_slug).toBe("test-project");
37
- expect(result.context_md).toContain("No context file found");
38
- expect(result.token_estimate).toBe(20);
39
- expect(result.sections).toEqual([]);
40
- expect(result.truncated).toBe(false);
41
- });
42
- });
43
- describe("summary mode (default)", () => {
44
- it("returns context content with truncation if over budget", async () => {
45
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
46
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
47
- const longContent = "a".repeat(10000);
48
- await vaultFs.write(`projects/test-project/context.md`, `---
49
- type: context
50
- project: test-project
51
- ---
52
-
53
- # Project Context
54
-
55
- ## Overview
56
-
57
- ${longContent}
58
-
59
- ## Details
60
-
61
- More content here.
62
- `);
63
- const result = await contextCommand({
64
- project: "test-project",
65
- maxTokens: 100,
66
- }, ctx);
67
- expect(result.truncated).toBe(true);
68
- expect(result.token_estimate).toBeLessThan(100);
69
- });
70
- it("extracts section headings", async () => {
71
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
72
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
73
- await vaultFs.write(`projects/test-project/context.md`, `---
74
- type: context
75
- project: test-project
76
- ---
77
-
78
- # Project Context
79
-
80
- ## Overview
81
-
82
- Overview content.
83
-
84
- ## Tech Stack
85
-
86
- Stack details.
87
-
88
- ## Architecture
89
-
90
- Arch details.
91
- `);
92
- const result = await contextCommand({
93
- project: "test-project",
94
- }, ctx);
95
- expect(result.sections).toContain("Overview");
96
- expect(result.sections).toContain("Tech Stack");
97
- expect(result.sections).toContain("Architecture");
98
- });
99
- });
100
- describe("full mode", () => {
101
- it("returns full context without truncation", async () => {
102
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
103
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
104
- const longContent = "a".repeat(10000);
105
- await vaultFs.write(`projects/test-project/context.md`, `---
106
- type: context
107
- ---
108
-
109
- # Project Context
110
-
111
- ${longContent}
112
- `);
113
- const result = await contextCommand({
114
- project: "test-project",
115
- detailLevel: "full",
116
- }, ctx);
117
- expect(result.truncated).toBe(false);
118
- expect(result.context_md).toContain(longContent);
119
- expect(result.token_estimate).toBeGreaterThan(2000);
120
- });
121
- });
122
- describe("learning count", () => {
123
- it("counts learning files", async () => {
124
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
125
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
126
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
127
- await vaultFs.write(`projects/test-project/context.md`, `---
128
- type: context
129
- ---
130
-
131
- # Context
132
- `);
133
- await vaultFs.write(`projects/test-project/learnings/001-test.md`, `---
134
- type: learning
135
- ---
136
-
137
- # Learning 1
138
- `);
139
- await vaultFs.write(`projects/test-project/learnings/002-test.md`, `---
140
- type: learning
141
- ---
142
-
143
- # Learning 2
144
- `);
145
- const result = await contextCommand({
146
- project: "test-project",
147
- }, ctx);
148
- expect(result.learning_count).toBe(2);
149
- });
150
- it("returns 0 when learnings directory does not exist", async () => {
151
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
152
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
153
- await vaultFs.write(`projects/test-project/context.md`, `---
154
- type: context
155
- ---
156
-
157
- # Context
158
- `);
159
- const result = await contextCommand({
160
- project: "test-project",
161
- }, ctx);
162
- expect(result.learning_count).toBe(0);
163
- });
164
- });
165
- describe("last session", () => {
166
- it("extracts last session info", async () => {
167
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
168
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
169
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
170
- await vaultFs.write(`projects/test-project/context.md`, `---
171
- type: context
172
- ---
173
-
174
- # Context
175
- `);
176
- await vaultFs.write(`projects/test-project/sessions/2024-01-15-session-abc123.md`, `---
177
- type: session
178
- outcome: Implemented feature X
179
- completed_at: "2024-01-15T10:30:00Z"
180
- ---
181
-
182
- # Session
183
- `);
184
- const result = await contextCommand({
185
- project: "test-project",
186
- }, ctx);
187
- expect(result.last_session).not.toBeNull();
188
- expect(result.last_session.outcome).toBe("Implemented feature X");
189
- expect(result.last_session.completed_at).toBe("2024-01-15T10:30:00Z");
190
- });
191
- it("returns null when no sessions exist", async () => {
192
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
193
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
194
- await vaultFs.write(`projects/test-project/context.md`, `---
195
- type: context
196
- ---
197
-
198
- # Context
199
- `);
200
- const result = await contextCommand({
201
- project: "test-project",
202
- }, ctx);
203
- expect(result.last_session).toBeNull();
204
- });
205
- it("falls back to created date if completed_at missing", async () => {
206
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
207
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
208
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
209
- await vaultFs.write(`projects/test-project/context.md`, `---
210
- type: context
211
- ---
212
-
213
- # Context
214
- `);
215
- await vaultFs.write(`projects/test-project/sessions/2024-01-15-session-abc.md`, `---
216
- type: session
217
- outcome: Test session
218
- created: "2024-01-15"
219
- ---
220
-
221
- # Session
222
- `);
223
- const result = await contextCommand({
224
- project: "test-project",
225
- }, ctx);
226
- expect(result.last_session.completed_at).toBe("2024-01-15");
227
- });
228
- });
229
- });
230
- //# sourceMappingURL=context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../src/commands/context.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,109 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { decideCommand } from "./decide.js";
6
- import { VaultFS } from "../lib/vault-fs.js";
7
- function createCommandContext(vaultFs, overrides) {
8
- return {
9
- vaultFs,
10
- vaultPath: vaultFs.root,
11
- sessionRegistry: {},
12
- config: {},
13
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
14
- ...overrides,
15
- };
16
- }
17
- describe("decideCommand", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("create ADR", () => {
31
- it("creates ADR with auto-numbering", async () => {
32
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
33
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
34
- const result = await decideCommand({
35
- title: "Use TypeScript",
36
- context: "We need type safety",
37
- decision: "Adopt TypeScript for all new code",
38
- project: "test-project",
39
- }, ctx);
40
- expect(result.decision_number).toBe(1);
41
- expect(result.path).toBe("projects/test-project/decisions/001-use-typescript.md");
42
- const content = await vaultFs.read(result.path);
43
- expect(content).toContain("type: adr");
44
- expect(content).toContain("project: test-project");
45
- expect(content).toContain("status: active");
46
- expect(content).toContain("# ADR-001: Use TypeScript");
47
- expect(content).toContain("We need type safety");
48
- expect(content).toContain("Adopt TypeScript for all new code");
49
- });
50
- it("increments ADR number for subsequent decisions", async () => {
51
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
52
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
53
- const result1 = await decideCommand({
54
- title: "First Decision",
55
- context: "Context 1",
56
- decision: "Decision 1",
57
- project: "test-project",
58
- }, ctx);
59
- const result2 = await decideCommand({
60
- title: "Second Decision",
61
- context: "Context 2",
62
- decision: "Decision 2",
63
- project: "test-project",
64
- }, ctx);
65
- expect(result1.decision_number).toBe(1);
66
- expect(result2.decision_number).toBe(2);
67
- });
68
- it("includes alternatives and consequences when provided", async () => {
69
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
70
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
71
- const result = await decideCommand({
72
- title: "Database Choice",
73
- context: "Need a database",
74
- decision: "Use PostgreSQL",
75
- alternatives: "Considered MySQL and MongoDB",
76
- consequences: "Requires DevOps expertise",
77
- project: "test-project",
78
- }, ctx);
79
- const content = await vaultFs.read(result.path);
80
- expect(content).toContain("Considered MySQL and MongoDB");
81
- expect(content).toContain("Requires DevOps expertise");
82
- });
83
- it("uses defaults for missing alternatives and consequences", async () => {
84
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
85
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
86
- const result = await decideCommand({
87
- title: "Simple Decision",
88
- context: "Simple context",
89
- decision: "Simple decision",
90
- project: "test-project",
91
- }, ctx);
92
- const content = await vaultFs.read(result.path);
93
- expect(content).toContain("None documented.");
94
- expect(content).toContain("To be evaluated.");
95
- });
96
- it("slugifies title correctly", async () => {
97
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
98
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
99
- const result = await decideCommand({
100
- title: "Use React & TypeScript!",
101
- context: "Context",
102
- decision: "Decision",
103
- project: "test-project",
104
- }, ctx);
105
- expect(result.path).toContain("use-react-typescript");
106
- });
107
- });
108
- });
109
- //# sourceMappingURL=decide.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decide.test.js","sourceRoot":"","sources":["../../src/commands/decide.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,SAAS,oBAAoB,CAAC,OAAgB,EAAE,SAAmC;IACjF,OAAO;QACL,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,IAAI;QACvB,eAAe,EAAE,EAAS;QAC1B,MAAM,EAAE,EAAS;QACjB,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;QACrE,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,SAAiB,CAAC;IACtB,IAAI,OAAgB,CAAC;IACrB,IAAI,GAAmB,CAAC;IAExB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACvG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,qBAAqB;gBAC9B,QAAQ,EAAE,mCAAmC;gBAC7C,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAElF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACvG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErF,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;gBAClC,KAAK,EAAE,gBAAgB;gBACvB,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;gBAClC,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACvG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,iBAAiB;gBAC1B,QAAQ,EAAE,gBAAgB;gBAC1B,YAAY,EAAE,8BAA8B;gBAC5C,YAAY,EAAE,2BAA2B;gBACzC,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;YAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACvG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,KAAK,EAAE,iBAAiB;gBACxB,OAAO,EAAE,gBAAgB;gBACzB,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YACvG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;gBACjC,KAAK,EAAE,yBAAyB;gBAChC,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,cAAc;aACxB,EAAE,GAAG,CAAC,CAAC;YAER,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,215 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { graphRelatedCommand, graphCrossProjectCommand } from "./graph.js";
6
- import { VaultFS } from "../lib/vault-fs.js";
7
- function createCommandContext(vaultFs, overrides) {
8
- return {
9
- vaultFs,
10
- vaultPath: vaultFs.root,
11
- sessionRegistry: {},
12
- config: {},
13
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
14
- ...overrides,
15
- };
16
- }
17
- describe("graph commands", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("extractWikilinks", () => {
31
- it("extracts simple wikilinks", async () => {
32
- await vaultFs.write("note.md", `---
33
- type: note
34
- ---
35
-
36
- # Note
37
-
38
- Link to [[other-note]] and [[another-note]].
39
- `);
40
- const result = await graphRelatedCommand({ path: "note.md" }, ctx);
41
- expect(result.outgoing).toContain("other-note");
42
- expect(result.outgoing).toContain("another-note");
43
- });
44
- it("extracts wikilinks with aliases", async () => {
45
- await vaultFs.write("note.md", `---
46
- type: note
47
- ---
48
-
49
- Link to [[target|display text]].
50
- `);
51
- const result = await graphRelatedCommand({ path: "note.md" }, ctx);
52
- expect(result.outgoing).toContain("target");
53
- });
54
- it("deduplicates wikilinks", async () => {
55
- await vaultFs.write("note.md", `---
56
- type: note
57
- ---
58
-
59
- Link to [[same-note]] twice: [[same-note]].
60
- `);
61
- const result = await graphRelatedCommand({ path: "note.md" }, ctx);
62
- expect(result.outgoing.filter(l => l === "same-note")).toHaveLength(1);
63
- });
64
- it("returns empty array when no wikilinks", async () => {
65
- await vaultFs.write("note.md", `---
66
- type: note
67
- ---
68
-
69
- # Note with no links
70
- `);
71
- const result = await graphRelatedCommand({ path: "note.md" }, ctx);
72
- expect(result.outgoing).toEqual([]);
73
- });
74
- });
75
- describe("backlinks", () => {
76
- it("finds backlinks to note", async () => {
77
- await vaultFs.write("target.md", `---
78
- type: note
79
- ---
80
-
81
- # Target Note
82
- `);
83
- await vaultFs.write("source.md", `---
84
- type: note
85
- ---
86
-
87
- Link to [[target]] here.
88
- `);
89
- const result = await graphRelatedCommand({ path: "target.md" }, ctx);
90
- expect(result.backlinks).toContain("source.md");
91
- });
92
- it("excludes self-references from backlinks", async () => {
93
- await vaultFs.write("note.md", `---
94
- type: note
95
- ---
96
-
97
- Link to [[note]] itself.
98
- `);
99
- const result = await graphRelatedCommand({ path: "note.md" }, ctx);
100
- expect(result.backlinks).not.toContain("note.md");
101
- });
102
- it("finds backlinks with .md extension in link", async () => {
103
- await vaultFs.write("target.md", `---
104
- type: note
105
- ---
106
-
107
- # Target
108
- `);
109
- await vaultFs.write("source.md", `---
110
- type: note
111
- ---
112
-
113
- Link to [[target.md]].
114
- `);
115
- const result = await graphRelatedCommand({ path: "target.md" }, ctx);
116
- expect(result.backlinks).toContain("source.md");
117
- });
118
- });
119
- describe("hops", () => {
120
- it("returns single hop by default", async () => {
121
- await vaultFs.write("a.md", `---
122
- type: note
123
- ---
124
-
125
- [[b]]
126
- `);
127
- await vaultFs.write("b.md", `---
128
- type: note
129
- ---
130
-
131
- [[c]]
132
- `);
133
- await vaultFs.write("c.md", `---\ntype: note\n---\n# C`);
134
- const result = await graphRelatedCommand({ path: "a.md", hops: 1 }, ctx);
135
- expect(result.outgoing).toContain("b");
136
- expect(result.outgoing).not.toContain("c");
137
- });
138
- it("returns second hop when hops > 1", async () => {
139
- await vaultFs.write("a.md", `---
140
- type: note
141
- ---
142
-
143
- [[b]]
144
- `);
145
- await vaultFs.write("b.md", `---
146
- type: note
147
- ---
148
-
149
- [[c]]
150
- `);
151
- await vaultFs.write("c.md", `---\ntype: note\n---\n# C`);
152
- const result = await graphRelatedCommand({ path: "a.md", hops: 2 }, ctx);
153
- expect(result.outgoing).toContain("b");
154
- expect(result.outgoing).toContain("c");
155
- });
156
- it("finds second hop backlinks", async () => {
157
- await vaultFs.write("a.md", `---\ntype: note\n---\n[[b]]`);
158
- await vaultFs.write("b.md", `---\ntype: note\n---\n# B`);
159
- await vaultFs.write("c.md", `---\ntype: note\n---\n[[b]]`);
160
- const result = await graphRelatedCommand({ path: "a.md", hops: 2 }, ctx);
161
- // c.md links to b.md, which is linked from a.md
162
- expect(result.backlinks.length).toBeGreaterThanOrEqual(0);
163
- });
164
- });
165
- describe("graphCrossProjectCommand", () => {
166
- it("groups results by project", async () => {
167
- await mkdir(join(vaultRoot, "projects/proj-a"), { recursive: true });
168
- await mkdir(join(vaultRoot, "projects/proj-b"), { recursive: true });
169
- await vaultFs.write("projects/proj-a/note.md", `---
170
- type: note
171
- ---
172
-
173
- API endpoint documentation
174
- `);
175
- await vaultFs.write("projects/proj-b/note.md", `---
176
- type: note
177
- ---
178
-
179
- API client implementation
180
- `);
181
- const result = await graphCrossProjectCommand({ query: "API", limit: 10 }, ctx);
182
- // Results should be grouped
183
- expect(typeof result).toBe("object");
184
- });
185
- it("uses _shared for non-project files", async () => {
186
- await vaultFs.write("shared-note.md", `---
187
- type: note
188
- ---
189
-
190
- Shared API documentation
191
- `);
192
- const result = await graphCrossProjectCommand({ query: "API", limit: 10 }, ctx);
193
- expect(result["_shared"] || result["shared-note"]).toBeDefined;
194
- });
195
- it("respects limit parameter", async () => {
196
- for (let i = 0; i < 30; i++) {
197
- await vaultFs.write(`note-${i}.md`, `---
198
- type: note
199
- ---
200
-
201
- Test content ${i}
202
- `);
203
- }
204
- const result = await graphCrossProjectCommand({ query: "Test", limit: 5 }, ctx);
205
- const totalResults = Object.values(result).flat().length;
206
- expect(totalResults).toBeLessThanOrEqual(5);
207
- });
208
- });
209
- describe("error handling", () => {
210
- it("throws for non-existent file", async () => {
211
- await expect(graphRelatedCommand({ path: "nonexistent.md" }, ctx)).rejects.toThrow();
212
- });
213
- });
214
- });
215
- //# sourceMappingURL=graph.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graph.test.js","sourceRoot":"","sources":["../../src/commands/graph.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};