superskill 0.2.0 → 0.2.4

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 (143) 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 +24 -5
  5. package/LICENSE-COMMERCIAL.md +46 -0
  6. package/README.md +114 -151
  7. package/dist/setup/configure.js +21 -1
  8. package/dist/setup/configure.js.map +1 -1
  9. package/dist/setup/teardown.js +13 -5
  10. package/dist/setup/teardown.js.map +1 -1
  11. package/package.json +8 -2
  12. package/dist/commands/brainstorm.test.d.ts +0 -1
  13. package/dist/commands/brainstorm.test.js +0 -110
  14. package/dist/commands/brainstorm.test.js.map +0 -1
  15. package/dist/commands/context.test.d.ts +0 -1
  16. package/dist/commands/context.test.js +0 -230
  17. package/dist/commands/context.test.js.map +0 -1
  18. package/dist/commands/decide.test.d.ts +0 -1
  19. package/dist/commands/decide.test.js +0 -109
  20. package/dist/commands/decide.test.js.map +0 -1
  21. package/dist/commands/graph.test.d.ts +0 -1
  22. package/dist/commands/graph.test.js +0 -215
  23. package/dist/commands/graph.test.js.map +0 -1
  24. package/dist/commands/learn.test.d.ts +0 -1
  25. package/dist/commands/learn.test.js +0 -241
  26. package/dist/commands/learn.test.js.map +0 -1
  27. package/dist/commands/read.test.d.ts +0 -1
  28. package/dist/commands/read.test.js +0 -48
  29. package/dist/commands/read.test.js.map +0 -1
  30. package/dist/commands/resume.test.d.ts +0 -1
  31. package/dist/commands/resume.test.js +0 -243
  32. package/dist/commands/resume.test.js.map +0 -1
  33. package/dist/commands/search.test.d.ts +0 -1
  34. package/dist/commands/search.test.js +0 -61
  35. package/dist/commands/search.test.js.map +0 -1
  36. package/dist/commands/session.test.d.ts +0 -1
  37. package/dist/commands/session.test.js +0 -231
  38. package/dist/commands/session.test.js.map +0 -1
  39. package/dist/commands/skill/index.test.d.ts +0 -1
  40. package/dist/commands/skill/index.test.js +0 -137
  41. package/dist/commands/skill/index.test.js.map +0 -1
  42. package/dist/commands/skill/install.test.d.ts +0 -1
  43. package/dist/commands/skill/install.test.js +0 -225
  44. package/dist/commands/skill/install.test.js.map +0 -1
  45. package/dist/commands/skill/list.test.d.ts +0 -1
  46. package/dist/commands/skill/list.test.js +0 -101
  47. package/dist/commands/skill/list.test.js.map +0 -1
  48. package/dist/commands/skill/schema.test.d.ts +0 -1
  49. package/dist/commands/skill/schema.test.js +0 -142
  50. package/dist/commands/skill/schema.test.js.map +0 -1
  51. package/dist/commands/skill/validate.test.d.ts +0 -1
  52. package/dist/commands/skill/validate.test.js +0 -171
  53. package/dist/commands/skill/validate.test.js.map +0 -1
  54. package/dist/commands/task.test.d.ts +0 -1
  55. package/dist/commands/task.test.js +0 -395
  56. package/dist/commands/task.test.js.map +0 -1
  57. package/dist/commands/todo.test.d.ts +0 -1
  58. package/dist/commands/todo.test.js +0 -324
  59. package/dist/commands/todo.test.js.map +0 -1
  60. package/dist/commands/write.test.d.ts +0 -1
  61. package/dist/commands/write.test.js +0 -79
  62. package/dist/commands/write.test.js.map +0 -1
  63. package/dist/config.test.d.ts +0 -1
  64. package/dist/config.test.js +0 -147
  65. package/dist/config.test.js.map +0 -1
  66. package/dist/core/executor.test.d.ts +0 -1
  67. package/dist/core/executor.test.js +0 -206
  68. package/dist/core/executor.test.js.map +0 -1
  69. package/dist/core/registry.test.d.ts +0 -1
  70. package/dist/core/registry.test.js +0 -213
  71. package/dist/core/registry.test.js.map +0 -1
  72. package/dist/integration/coordination.test.d.ts +0 -1
  73. package/dist/integration/coordination.test.js +0 -286
  74. package/dist/integration/coordination.test.js.map +0 -1
  75. package/dist/integration/project-artifacts.test.d.ts +0 -1
  76. package/dist/integration/project-artifacts.test.js +0 -275
  77. package/dist/integration/project-artifacts.test.js.map +0 -1
  78. package/dist/integration/registry-graph.test.d.ts +0 -1
  79. package/dist/integration/registry-graph.test.js +0 -157
  80. package/dist/integration/registry-graph.test.js.map +0 -1
  81. package/dist/integration/vault-lifecycle.test.d.ts +0 -1
  82. package/dist/integration/vault-lifecycle.test.js +0 -183
  83. package/dist/integration/vault-lifecycle.test.js.map +0 -1
  84. package/dist/lib/auto-number.test.d.ts +0 -1
  85. package/dist/lib/auto-number.test.js +0 -88
  86. package/dist/lib/auto-number.test.js.map +0 -1
  87. package/dist/lib/auto-profile.test.d.ts +0 -1
  88. package/dist/lib/auto-profile.test.js +0 -227
  89. package/dist/lib/auto-profile.test.js.map +0 -1
  90. package/dist/lib/escape-regex.test.d.ts +0 -1
  91. package/dist/lib/escape-regex.test.js +0 -27
  92. package/dist/lib/escape-regex.test.js.map +0 -1
  93. package/dist/lib/frontmatter.test.d.ts +0 -1
  94. package/dist/lib/frontmatter.test.js +0 -192
  95. package/dist/lib/frontmatter.test.js.map +0 -1
  96. package/dist/lib/project-detector.test.d.ts +0 -1
  97. package/dist/lib/project-detector.test.js +0 -117
  98. package/dist/lib/project-detector.test.js.map +0 -1
  99. package/dist/lib/safe-external-path.test.d.ts +0 -1
  100. package/dist/lib/safe-external-path.test.js +0 -99
  101. package/dist/lib/safe-external-path.test.js.map +0 -1
  102. package/dist/lib/search-engine.test.d.ts +0 -1
  103. package/dist/lib/search-engine.test.js +0 -120
  104. package/dist/lib/search-engine.test.js.map +0 -1
  105. package/dist/lib/session-registry.test.d.ts +0 -1
  106. package/dist/lib/session-registry.test.js +0 -199
  107. package/dist/lib/session-registry.test.js.map +0 -1
  108. package/dist/lib/stack-detector.test.d.ts +0 -1
  109. package/dist/lib/stack-detector.test.js +0 -110
  110. package/dist/lib/stack-detector.test.js.map +0 -1
  111. package/dist/lib/token-estimator.test.d.ts +0 -1
  112. package/dist/lib/token-estimator.test.js +0 -65
  113. package/dist/lib/token-estimator.test.js.map +0 -1
  114. package/dist/lib/tool-detector.test.d.ts +0 -1
  115. package/dist/lib/tool-detector.test.js +0 -170
  116. package/dist/lib/tool-detector.test.js.map +0 -1
  117. package/dist/lib/vault-fs.test.d.ts +0 -1
  118. package/dist/lib/vault-fs.test.js +0 -210
  119. package/dist/lib/vault-fs.test.js.map +0 -1
  120. package/dist/setup/configure.test.d.ts +0 -1
  121. package/dist/setup/configure.test.js +0 -112
  122. package/dist/setup/configure.test.js.map +0 -1
  123. package/dist/setup/detect.test.d.ts +0 -1
  124. package/dist/setup/detect.test.js +0 -44
  125. package/dist/setup/detect.test.js.map +0 -1
  126. package/dist/setup/instructions.test.d.ts +0 -1
  127. package/dist/setup/instructions.test.js +0 -84
  128. package/dist/setup/instructions.test.js.map +0 -1
  129. package/dist/setup/json-config.test.d.ts +0 -1
  130. package/dist/setup/json-config.test.js +0 -92
  131. package/dist/setup/json-config.test.js.map +0 -1
  132. package/dist/setup/setup-integration.test.d.ts +0 -1
  133. package/dist/setup/setup-integration.test.js +0 -72
  134. package/dist/setup/setup-integration.test.js.map +0 -1
  135. package/dist/setup/teardown.test.d.ts +0 -1
  136. package/dist/setup/teardown.test.js +0 -105
  137. package/dist/setup/teardown.test.js.map +0 -1
  138. package/dist/setup/toml-config.test.d.ts +0 -1
  139. package/dist/setup/toml-config.test.js +0 -49
  140. package/dist/setup/toml-config.test.js.map +0 -1
  141. package/dist/test-helpers.test.d.ts +0 -1
  142. package/dist/test-helpers.test.js +0 -90
  143. package/dist/test-helpers.test.js.map +0 -1
@@ -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 {};
@@ -1,241 +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 { learnCommand } from "./learn.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("learnCommand", () => {
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("add learning", () => {
31
- it("creates new learning 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/learnings"), { recursive: true });
34
- const result = await learnCommand({
35
- action: "add",
36
- title: "API Rate Limiting",
37
- discovery: "Rate limits reset at midnight UTC",
38
- project: "test-project",
39
- }, ctx);
40
- expect(result.learning_id).toBe("001");
41
- expect(result.path).toBe("projects/test-project/learnings/001-api-rate-limiting.md");
42
- const content = await vaultFs.read(result.path);
43
- expect(content).toContain("type: learning");
44
- expect(content).toContain("# API Rate Limiting");
45
- expect(content).toContain("Rate limits reset at midnight UTC");
46
- });
47
- it("increments number for subsequent learnings", async () => {
48
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
49
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
50
- const result1 = await learnCommand({
51
- action: "add",
52
- title: "First Learning",
53
- discovery: "Discovery 1",
54
- project: "test-project",
55
- }, ctx);
56
- const result2 = await learnCommand({
57
- action: "add",
58
- title: "Second Learning",
59
- discovery: "Discovery 2",
60
- project: "test-project",
61
- }, ctx);
62
- expect(result1.learning_id).toBe("001");
63
- expect(result2.learning_id).toBe("002");
64
- });
65
- it("sets default confidence to medium", async () => {
66
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
67
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
68
- await learnCommand({
69
- action: "add",
70
- title: "Test",
71
- discovery: "Discovery",
72
- project: "test-project",
73
- }, ctx);
74
- const content = await vaultFs.read("projects/test-project/learnings/001-test.md");
75
- expect(content).toContain("confidence: medium");
76
- });
77
- it("accepts high confidence", async () => {
78
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
79
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
80
- await learnCommand({
81
- action: "add",
82
- title: "High Confidence",
83
- discovery: "Verified",
84
- confidence: "high",
85
- project: "test-project",
86
- }, ctx);
87
- const content = await vaultFs.read("projects/test-project/learnings/001-high-confidence.md");
88
- expect(content).toContain("confidence: high");
89
- });
90
- it("accepts low confidence", async () => {
91
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
92
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
93
- await learnCommand({
94
- action: "add",
95
- title: "Low Confidence",
96
- discovery: "Unverified",
97
- confidence: "low",
98
- project: "test-project",
99
- }, ctx);
100
- const content = await vaultFs.read("projects/test-project/learnings/001-low-confidence.md");
101
- expect(content).toContain("confidence: low");
102
- });
103
- it("rejects invalid confidence", async () => {
104
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
105
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
106
- await expect(learnCommand({
107
- action: "add",
108
- title: "Test",
109
- discovery: "Test",
110
- confidence: "invalid",
111
- project: "test-project",
112
- }, ctx)).rejects.toThrow('Invalid confidence "invalid"');
113
- });
114
- it("requires title for add", async () => {
115
- await expect(learnCommand({
116
- action: "add",
117
- discovery: "Test",
118
- project: "test-project",
119
- }, ctx)).rejects.toThrow("Title required for add");
120
- });
121
- it("requires discovery for add", async () => {
122
- await expect(learnCommand({
123
- action: "add",
124
- title: "Test",
125
- project: "test-project",
126
- }, ctx)).rejects.toThrow("Discovery required for add");
127
- });
128
- it("stores tags in frontmatter", async () => {
129
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
130
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
131
- await learnCommand({
132
- action: "add",
133
- title: "Tagged Learning",
134
- discovery: "Content",
135
- tags: ["api", "performance"],
136
- project: "test-project",
137
- }, ctx);
138
- const content = await vaultFs.read("projects/test-project/learnings/001-tagged-learning.md");
139
- expect(content).toContain("tags:");
140
- expect(content).toContain("- api");
141
- expect(content).toContain("- performance");
142
- });
143
- it("stores source and session_id", async () => {
144
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
145
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
146
- await learnCommand({
147
- action: "add",
148
- title: "Sourced Learning",
149
- discovery: "Content",
150
- source: "PR #123",
151
- sessionId: "session-abc123",
152
- project: "test-project",
153
- }, ctx);
154
- const content = await vaultFs.read("projects/test-project/learnings/001-sourced-learning.md");
155
- expect(content).toMatch(/source:\s*'?PR #123'?/);
156
- expect(content).toContain("session_id: session-abc123");
157
- });
158
- });
159
- describe("list learnings", () => {
160
- it("returns empty array when no learnings", async () => {
161
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
162
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
163
- const result = await learnCommand({
164
- action: "list",
165
- project: "test-project",
166
- }, ctx);
167
- expect(result.learnings).toEqual([]);
168
- });
169
- it("lists all learnings", async () => {
170
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
171
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
172
- await learnCommand({
173
- action: "add",
174
- title: "Learning 1",
175
- discovery: "Discovery 1",
176
- tags: ["api"],
177
- project: "test-project",
178
- }, ctx);
179
- await learnCommand({
180
- action: "add",
181
- title: "Learning 2",
182
- discovery: "Discovery 2",
183
- tags: ["database"],
184
- confidence: "high",
185
- project: "test-project",
186
- }, ctx);
187
- const result = await learnCommand({
188
- action: "list",
189
- project: "test-project",
190
- }, ctx);
191
- expect(result.learnings).toHaveLength(2);
192
- expect(result.learnings[0].id).toBe("001");
193
- expect(result.learnings[0].title).toBe("Learning 1");
194
- expect(result.learnings[0].tags).toEqual(["api"]);
195
- expect(result.learnings[1].id).toBe("002");
196
- expect(result.learnings[1].confidence).toBe("high");
197
- });
198
- it("filters by tag", async () => {
199
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
200
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
201
- await learnCommand({
202
- action: "add",
203
- title: "API Learning",
204
- discovery: "Discovery",
205
- tags: ["api"],
206
- project: "test-project",
207
- }, ctx);
208
- await learnCommand({
209
- action: "add",
210
- title: "DB Learning",
211
- discovery: "Discovery",
212
- tags: ["database"],
213
- project: "test-project",
214
- }, ctx);
215
- const result = await learnCommand({
216
- action: "list",
217
- tag: "api",
218
- project: "test-project",
219
- }, ctx);
220
- expect(result.learnings).toHaveLength(1);
221
- expect(result.learnings[0].title).toBe("API Learning");
222
- });
223
- it("returns empty when learnings directory does not exist", async () => {
224
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
225
- const result = await learnCommand({
226
- action: "list",
227
- project: "test-project",
228
- }, ctx);
229
- expect(result.learnings).toEqual([]);
230
- });
231
- });
232
- describe("unknown action", () => {
233
- it("throws error for unknown action", async () => {
234
- await expect(learnCommand({
235
- action: "unknown",
236
- project: "test-project",
237
- }, ctx)).rejects.toThrow("Unknown action: unknown");
238
- });
239
- });
240
- });
241
- //# sourceMappingURL=learn.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"learn.test.js","sourceRoot":"","sources":["../../src/commands/learn.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,48 +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 { readCommand, listCommand } from "./read.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("readCommand", () => {
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("readCommand", () => {
31
- it("reads existing file", async () => {
32
- await vaultFs.write("test.md", "content");
33
- const result = await readCommand({ path: "test.md" }, ctx);
34
- expect(result).toBe("content");
35
- });
36
- });
37
- describe("listCommand", () => {
38
- it("lists directory contents", async () => {
39
- await vaultFs.write("test.md", "content");
40
- await mkdir(join(vaultRoot, "subdir"));
41
- await vaultFs.write("subdir/child.md", "child");
42
- const result = await listCommand({ path: ".", depth: 2 }, ctx);
43
- expect(result).toContain("./test.md");
44
- expect(result).toContain("./subdir/child.md");
45
- });
46
- });
47
- });
48
- //# sourceMappingURL=read.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read.test.js","sourceRoot":"","sources":["../../src/commands/read.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};