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,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 {};
@@ -1,243 +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 { resumeCommand, formatResumeContext } from "./resume.js";
6
- import { SessionRegistryManager } from "../lib/session-registry.js";
7
- import { VaultFS } from "../lib/vault-fs.js";
8
- function createCommandContext(vaultFs, overrides) {
9
- return {
10
- vaultFs,
11
- vaultPath: vaultFs.root,
12
- sessionRegistry: {},
13
- config: {},
14
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
15
- ...overrides,
16
- };
17
- }
18
- describe("resumeCommand", () => {
19
- let vaultRoot;
20
- let vaultFs;
21
- let registry;
22
- let ctx;
23
- beforeEach(async () => {
24
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
25
- await mkdir(vaultRoot, { recursive: true });
26
- await mkdir(join(vaultRoot, "coordination/locks"), { recursive: true });
27
- vaultFs = new VaultFS(vaultRoot);
28
- registry = new SessionRegistryManager(vaultRoot, 24);
29
- ctx = createCommandContext(vaultFs, { sessionRegistry: registry });
30
- });
31
- afterEach(async () => {
32
- await rm(vaultRoot, { recursive: true, force: true });
33
- });
34
- describe("resume context", () => {
35
- it("returns project slug", async () => {
36
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
37
- const result = await resumeCommand({
38
- project: "test-project",
39
- }, ctx);
40
- expect(result.project).toBe("test-project");
41
- });
42
- it("returns empty arrays when no sessions or tasks", async () => {
43
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
44
- const result = await resumeCommand({
45
- project: "test-project",
46
- }, ctx);
47
- expect(result.last_sessions).toEqual([]);
48
- expect(result.active_sessions).toEqual([]);
49
- expect(result.interrupted_sessions).toEqual([]);
50
- });
51
- it("returns recent completed sessions", async () => {
52
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
53
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
54
- await vaultFs.write(`projects/test-project/sessions/2024-01-15-session.md`, `---
55
- type: session
56
- tool: claude
57
- outcome: Feature implemented
58
- completed_at: "2024-01-15T10:00:00Z"
59
- files_touched:
60
- - src/index.ts
61
- tasks_completed:
62
- - task-001
63
- ---
64
-
65
- # Session
66
- `);
67
- const result = await resumeCommand({
68
- project: "test-project",
69
- }, ctx);
70
- expect(result.last_sessions).toHaveLength(1);
71
- expect(result.last_sessions[0].tool).toBe("claude");
72
- expect(result.last_sessions[0].outcome).toBe("Feature implemented");
73
- expect(result.last_sessions[0].files_touched).toContain("src/index.ts");
74
- });
75
- it("limits sessions to specified limit", async () => {
76
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
77
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
78
- for (let i = 1; i <= 10; i++) {
79
- await vaultFs.write(`projects/test-project/sessions/2024-01-${String(i).padStart(2, "0")}-session.md`, `---
80
- type: session
81
- tool: tool-${i}
82
- outcome: Outcome ${i}
83
- created: "2024-01-${String(i).padStart(2, "0")}"
84
- ---
85
-
86
- # Session
87
- `);
88
- }
89
- const result = await resumeCommand({
90
- project: "test-project",
91
- limit: 3,
92
- }, ctx);
93
- expect(result.last_sessions.length).toBeLessThanOrEqual(3);
94
- });
95
- it("returns active sessions for the project", async () => {
96
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
97
- await registry.register("claude", "test-project", "Active task", []);
98
- const result = await resumeCommand({
99
- project: "test-project",
100
- }, ctx);
101
- expect(result.active_sessions.length).toBeGreaterThanOrEqual(1);
102
- expect(result.active_sessions.some(s => s.project === "test-project")).toBe(true);
103
- });
104
- it("includes interrupted sessions", async () => {
105
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
106
- // Register and let it become stale (by not heartbeating)
107
- const { session_id } = await registry.register("claude", "test-project", "Interrupted task", []);
108
- // Manually mark as stale in registry
109
- await vaultFs.write("coordination/session-registry.json", JSON.stringify({
110
- sessions: [
111
- {
112
- session_id,
113
- tool: "claude",
114
- project: "test-project",
115
- status: "stale",
116
- task_summary: "Interrupted task",
117
- files_touched: [],
118
- started_at: new Date().toISOString(),
119
- last_heartbeat: new Date(Date.now() - 3600000).toISOString(),
120
- },
121
- ],
122
- }));
123
- const result = await resumeCommand({
124
- project: "test-project",
125
- }, ctx);
126
- expect(result.interrupted_sessions.length).toBeGreaterThanOrEqual(1);
127
- });
128
- it("suggests next steps from interrupted sessions", async () => {
129
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
130
- // Create stale session
131
- await vaultFs.write("coordination/session-registry.json", JSON.stringify({
132
- sessions: [
133
- {
134
- session_id: "test-stale-123",
135
- tool: "claude",
136
- project: "test-project",
137
- status: "stale",
138
- task_summary: "Interrupted task",
139
- files_touched: [],
140
- started_at: new Date().toISOString(),
141
- last_heartbeat: new Date(Date.now() - 3600000).toISOString(),
142
- },
143
- ],
144
- }));
145
- const result = await resumeCommand({
146
- project: "test-project",
147
- }, ctx);
148
- expect(result.suggested_next_steps.length).toBeGreaterThan(0);
149
- expect(result.suggested_next_steps.some(s => s.includes("Interrupted"))).toBe(true);
150
- });
151
- it("suggests next steps from in-progress tasks", async () => {
152
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
153
- await mkdir(join(vaultRoot, "projects/test-project/tasks"), { recursive: true });
154
- await vaultFs.write("projects/test-project/tasks/task-001-in-progress.md", `---
155
- type: task
156
- status: in-progress
157
- ---
158
-
159
- # In Progress Task
160
- `);
161
- const result = await resumeCommand({
162
- project: "test-project",
163
- }, ctx);
164
- expect(result.suggested_next_steps.some(s => s.includes("In-progress task"))).toBe(true);
165
- });
166
- it("handles missing sessions directory gracefully", async () => {
167
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
168
- const result = await resumeCommand({
169
- project: "test-project",
170
- }, ctx);
171
- expect(result.last_sessions).toEqual([]);
172
- });
173
- });
174
- describe("formatResumeContext", () => {
175
- it("formats context as markdown", () => {
176
- const ctx = {
177
- project: "test-project",
178
- last_sessions: [
179
- { tool: "claude", outcome: "Done", completed_at: "2024-01-15", files_touched: [], tasks_completed: [] },
180
- ],
181
- active_sessions: [],
182
- interrupted_sessions: [],
183
- suggested_next_steps: ["Review PR", "Fix tests"],
184
- };
185
- const result = formatResumeContext(ctx);
186
- expect(result).toContain("## Session Resume: test-project");
187
- expect(result).toContain("### Recent Sessions");
188
- expect(result).toContain("claude");
189
- expect(result).toContain("### Suggested Next Steps");
190
- expect(result).toContain("Review PR");
191
- });
192
- it("includes interrupted sessions section", () => {
193
- const ctx = {
194
- project: "test-project",
195
- last_sessions: [],
196
- active_sessions: [],
197
- interrupted_sessions: [
198
- {
199
- id: "stale-1",
200
- tool: "cursor",
201
- project: "test-project",
202
- status: "stale",
203
- task_summary: "Interrupted work",
204
- files_touched: ["src/file.ts"],
205
- started_at: "2024-01-15T10:00:00Z",
206
- last_heartbeat: "2024-01-15T11:00:00Z",
207
- completed_at: null,
208
- },
209
- ],
210
- suggested_next_steps: [],
211
- };
212
- const result = formatResumeContext(ctx);
213
- expect(result).toContain("### Interrupted Sessions (stale)");
214
- expect(result).toContain("cursor");
215
- expect(result).toContain("Interrupted work");
216
- });
217
- it("includes active sessions section", () => {
218
- const ctx = {
219
- project: "test-project",
220
- last_sessions: [],
221
- active_sessions: [
222
- {
223
- id: "active-1",
224
- tool: "copilot",
225
- project: "test-project",
226
- status: "active",
227
- task_summary: "Active work",
228
- files_touched: [],
229
- started_at: "2024-01-15T10:00:00Z",
230
- last_heartbeat: "2024-01-15T11:00:00Z",
231
- completed_at: null,
232
- },
233
- ],
234
- interrupted_sessions: [],
235
- suggested_next_steps: [],
236
- };
237
- const result = formatResumeContext(ctx);
238
- expect(result).toContain("### Active Sessions (other agents)");
239
- expect(result).toContain("copilot");
240
- });
241
- });
242
- });
243
- //# sourceMappingURL=resume.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume.test.js","sourceRoot":"","sources":["../../src/commands/resume.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,61 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, writeFile, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { searchCommand } from "./search.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("searchCommand", () => {
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
- await mkdir(join(vaultRoot, "projects/test"), { recursive: true });
27
- });
28
- afterEach(async () => {
29
- await rm(vaultRoot, { recursive: true, force: true });
30
- });
31
- describe("text search", () => {
32
- it("performs text search", async () => {
33
- await writeFile(join(vaultRoot, "projects/test/note.md"), "# Test Note\n\nSearchable content here");
34
- const results = await searchCommand({ query: "Searchable", limit: 10 }, ctx);
35
- expect(results.length).toBeGreaterThan(0);
36
- expect(results[0].path).toContain("note.md");
37
- });
38
- it("filters by project path", async () => {
39
- await mkdir(join(vaultRoot, "projects/other"), { recursive: true });
40
- await writeFile(join(vaultRoot, "projects/test/note.md"), "Searchable content");
41
- await writeFile(join(vaultRoot, "projects/other/note.md"), "Searchable content");
42
- const results = await searchCommand({ query: "Searchable", project: "test", limit: 10 }, ctx);
43
- expect(results.every((r) => r.path.includes("test"))).toBe(true);
44
- });
45
- });
46
- describe("structured search", () => {
47
- it("performs structured search", async () => {
48
- await writeFile(join(vaultRoot, "projects/test/doc.md"), "---\ntype: adr\nstatus: active\n---\n\nContent");
49
- const results = await searchCommand({ query: "type:adr status:active", structured: true, limit: 10 }, ctx);
50
- expect(results.length).toBeGreaterThan(0);
51
- });
52
- it("includes project filter in structured search", async () => {
53
- await mkdir(join(vaultRoot, "projects/other"), { recursive: true });
54
- await writeFile(join(vaultRoot, "projects/test/doc.md"), "---\ntype: adr\nstatus: active\n---\n\nContent");
55
- await writeFile(join(vaultRoot, "projects/other/doc.md"), "---\ntype: adr\nstatus: active\n---\n\nContent");
56
- const results = await searchCommand({ query: "type:adr", structured: true, project: "test", limit: 10 }, ctx);
57
- expect(results.every((r) => r.path.includes("test"))).toBe(true);
58
- });
59
- });
60
- });
61
- //# sourceMappingURL=search.test.js.map