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.
- package/.claude-plugin/marketplace.json +23 -0
- package/.claude-plugin/plugin.json +12 -0
- package/.mcp.json +9 -0
- package/CHANGELOG.md +24 -5
- package/LICENSE-COMMERCIAL.md +46 -0
- package/README.md +114 -151
- package/dist/setup/configure.js +21 -1
- package/dist/setup/configure.js.map +1 -1
- package/dist/setup/teardown.js +13 -5
- package/dist/setup/teardown.js.map +1 -1
- package/package.json +8 -2
- package/dist/commands/brainstorm.test.d.ts +0 -1
- package/dist/commands/brainstorm.test.js +0 -110
- package/dist/commands/brainstorm.test.js.map +0 -1
- package/dist/commands/context.test.d.ts +0 -1
- package/dist/commands/context.test.js +0 -230
- package/dist/commands/context.test.js.map +0 -1
- package/dist/commands/decide.test.d.ts +0 -1
- package/dist/commands/decide.test.js +0 -109
- package/dist/commands/decide.test.js.map +0 -1
- package/dist/commands/graph.test.d.ts +0 -1
- package/dist/commands/graph.test.js +0 -215
- package/dist/commands/graph.test.js.map +0 -1
- package/dist/commands/learn.test.d.ts +0 -1
- package/dist/commands/learn.test.js +0 -241
- package/dist/commands/learn.test.js.map +0 -1
- package/dist/commands/read.test.d.ts +0 -1
- package/dist/commands/read.test.js +0 -48
- package/dist/commands/read.test.js.map +0 -1
- package/dist/commands/resume.test.d.ts +0 -1
- package/dist/commands/resume.test.js +0 -243
- package/dist/commands/resume.test.js.map +0 -1
- package/dist/commands/search.test.d.ts +0 -1
- package/dist/commands/search.test.js +0 -61
- package/dist/commands/search.test.js.map +0 -1
- package/dist/commands/session.test.d.ts +0 -1
- package/dist/commands/session.test.js +0 -231
- package/dist/commands/session.test.js.map +0 -1
- package/dist/commands/skill/index.test.d.ts +0 -1
- package/dist/commands/skill/index.test.js +0 -137
- package/dist/commands/skill/index.test.js.map +0 -1
- package/dist/commands/skill/install.test.d.ts +0 -1
- package/dist/commands/skill/install.test.js +0 -225
- package/dist/commands/skill/install.test.js.map +0 -1
- package/dist/commands/skill/list.test.d.ts +0 -1
- package/dist/commands/skill/list.test.js +0 -101
- package/dist/commands/skill/list.test.js.map +0 -1
- package/dist/commands/skill/schema.test.d.ts +0 -1
- package/dist/commands/skill/schema.test.js +0 -142
- package/dist/commands/skill/schema.test.js.map +0 -1
- package/dist/commands/skill/validate.test.d.ts +0 -1
- package/dist/commands/skill/validate.test.js +0 -171
- package/dist/commands/skill/validate.test.js.map +0 -1
- package/dist/commands/task.test.d.ts +0 -1
- package/dist/commands/task.test.js +0 -395
- package/dist/commands/task.test.js.map +0 -1
- package/dist/commands/todo.test.d.ts +0 -1
- package/dist/commands/todo.test.js +0 -324
- package/dist/commands/todo.test.js.map +0 -1
- package/dist/commands/write.test.d.ts +0 -1
- package/dist/commands/write.test.js +0 -79
- package/dist/commands/write.test.js.map +0 -1
- package/dist/config.test.d.ts +0 -1
- package/dist/config.test.js +0 -147
- package/dist/config.test.js.map +0 -1
- package/dist/core/executor.test.d.ts +0 -1
- package/dist/core/executor.test.js +0 -206
- package/dist/core/executor.test.js.map +0 -1
- package/dist/core/registry.test.d.ts +0 -1
- package/dist/core/registry.test.js +0 -213
- package/dist/core/registry.test.js.map +0 -1
- package/dist/integration/coordination.test.d.ts +0 -1
- package/dist/integration/coordination.test.js +0 -286
- package/dist/integration/coordination.test.js.map +0 -1
- package/dist/integration/project-artifacts.test.d.ts +0 -1
- package/dist/integration/project-artifacts.test.js +0 -275
- package/dist/integration/project-artifacts.test.js.map +0 -1
- package/dist/integration/registry-graph.test.d.ts +0 -1
- package/dist/integration/registry-graph.test.js +0 -157
- package/dist/integration/registry-graph.test.js.map +0 -1
- package/dist/integration/vault-lifecycle.test.d.ts +0 -1
- package/dist/integration/vault-lifecycle.test.js +0 -183
- package/dist/integration/vault-lifecycle.test.js.map +0 -1
- package/dist/lib/auto-number.test.d.ts +0 -1
- package/dist/lib/auto-number.test.js +0 -88
- package/dist/lib/auto-number.test.js.map +0 -1
- package/dist/lib/auto-profile.test.d.ts +0 -1
- package/dist/lib/auto-profile.test.js +0 -227
- package/dist/lib/auto-profile.test.js.map +0 -1
- package/dist/lib/escape-regex.test.d.ts +0 -1
- package/dist/lib/escape-regex.test.js +0 -27
- package/dist/lib/escape-regex.test.js.map +0 -1
- package/dist/lib/frontmatter.test.d.ts +0 -1
- package/dist/lib/frontmatter.test.js +0 -192
- package/dist/lib/frontmatter.test.js.map +0 -1
- package/dist/lib/project-detector.test.d.ts +0 -1
- package/dist/lib/project-detector.test.js +0 -117
- package/dist/lib/project-detector.test.js.map +0 -1
- package/dist/lib/safe-external-path.test.d.ts +0 -1
- package/dist/lib/safe-external-path.test.js +0 -99
- package/dist/lib/safe-external-path.test.js.map +0 -1
- package/dist/lib/search-engine.test.d.ts +0 -1
- package/dist/lib/search-engine.test.js +0 -120
- package/dist/lib/search-engine.test.js.map +0 -1
- package/dist/lib/session-registry.test.d.ts +0 -1
- package/dist/lib/session-registry.test.js +0 -199
- package/dist/lib/session-registry.test.js.map +0 -1
- package/dist/lib/stack-detector.test.d.ts +0 -1
- package/dist/lib/stack-detector.test.js +0 -110
- package/dist/lib/stack-detector.test.js.map +0 -1
- package/dist/lib/token-estimator.test.d.ts +0 -1
- package/dist/lib/token-estimator.test.js +0 -65
- package/dist/lib/token-estimator.test.js.map +0 -1
- package/dist/lib/tool-detector.test.d.ts +0 -1
- package/dist/lib/tool-detector.test.js +0 -170
- package/dist/lib/tool-detector.test.js.map +0 -1
- package/dist/lib/vault-fs.test.d.ts +0 -1
- package/dist/lib/vault-fs.test.js +0 -210
- package/dist/lib/vault-fs.test.js.map +0 -1
- package/dist/setup/configure.test.d.ts +0 -1
- package/dist/setup/configure.test.js +0 -112
- package/dist/setup/configure.test.js.map +0 -1
- package/dist/setup/detect.test.d.ts +0 -1
- package/dist/setup/detect.test.js +0 -44
- package/dist/setup/detect.test.js.map +0 -1
- package/dist/setup/instructions.test.d.ts +0 -1
- package/dist/setup/instructions.test.js +0 -84
- package/dist/setup/instructions.test.js.map +0 -1
- package/dist/setup/json-config.test.d.ts +0 -1
- package/dist/setup/json-config.test.js +0 -92
- package/dist/setup/json-config.test.js.map +0 -1
- package/dist/setup/setup-integration.test.d.ts +0 -1
- package/dist/setup/setup-integration.test.js +0 -72
- package/dist/setup/setup-integration.test.js.map +0 -1
- package/dist/setup/teardown.test.d.ts +0 -1
- package/dist/setup/teardown.test.js +0 -105
- package/dist/setup/teardown.test.js.map +0 -1
- package/dist/setup/toml-config.test.d.ts +0 -1
- package/dist/setup/toml-config.test.js +0 -49
- package/dist/setup/toml-config.test.js.map +0 -1
- package/dist/test-helpers.test.d.ts +0 -1
- package/dist/test-helpers.test.js +0 -90
- package/dist/test-helpers.test.js.map +0 -1
|
@@ -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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../src/commands/search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,231 +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 { sessionCommand } from "./session.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("sessionCommand", () => {
|
|
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("register", () => {
|
|
35
|
-
it("registers a new session", async () => {
|
|
36
|
-
const result = await sessionCommand({
|
|
37
|
-
action: "register",
|
|
38
|
-
tool: "claude",
|
|
39
|
-
project: "test-project",
|
|
40
|
-
taskSummary: "Implement feature X",
|
|
41
|
-
filesTouched: ["src/index.ts"],
|
|
42
|
-
}, ctx);
|
|
43
|
-
expect(result.session_id).toBeDefined();
|
|
44
|
-
expect(result.session_id).toMatch(/^claude-/);
|
|
45
|
-
expect(result.conflicts).toEqual([]);
|
|
46
|
-
});
|
|
47
|
-
it("detects conflicts when touching same files", async () => {
|
|
48
|
-
await sessionCommand({
|
|
49
|
-
action: "register",
|
|
50
|
-
tool: "cursor",
|
|
51
|
-
project: "test-project",
|
|
52
|
-
taskSummary: "Working on Y",
|
|
53
|
-
filesTouched: ["src/shared.ts"],
|
|
54
|
-
}, ctx);
|
|
55
|
-
const result = await sessionCommand({
|
|
56
|
-
action: "register",
|
|
57
|
-
tool: "claude",
|
|
58
|
-
project: "test-project",
|
|
59
|
-
taskSummary: "Working on X",
|
|
60
|
-
filesTouched: ["src/shared.ts", "src/other.ts"],
|
|
61
|
-
}, ctx);
|
|
62
|
-
expect(result.conflicts).toBeDefined();
|
|
63
|
-
expect(result.conflicts.length).toBeGreaterThan(0);
|
|
64
|
-
expect(result.conflicts[0].overlapping_files).toContain("src/shared.ts");
|
|
65
|
-
});
|
|
66
|
-
it("requires tool name for register", async () => {
|
|
67
|
-
await expect(sessionCommand({
|
|
68
|
-
action: "register",
|
|
69
|
-
}, ctx)).rejects.toThrow("Tool name required for register");
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
describe("heartbeat", () => {
|
|
73
|
-
it("updates session timestamp", async () => {
|
|
74
|
-
const { session_id } = await sessionCommand({
|
|
75
|
-
action: "register",
|
|
76
|
-
tool: "claude",
|
|
77
|
-
project: "test-project",
|
|
78
|
-
}, ctx);
|
|
79
|
-
const result = await sessionCommand({
|
|
80
|
-
action: "heartbeat",
|
|
81
|
-
sessionId: session_id,
|
|
82
|
-
}, ctx);
|
|
83
|
-
expect(result).toEqual({});
|
|
84
|
-
});
|
|
85
|
-
it("requires session ID for heartbeat", async () => {
|
|
86
|
-
await expect(sessionCommand({
|
|
87
|
-
action: "heartbeat",
|
|
88
|
-
}, ctx)).rejects.toThrow("Session ID required for heartbeat");
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
describe("complete", () => {
|
|
92
|
-
it("marks session as completed", async () => {
|
|
93
|
-
const { session_id } = await sessionCommand({
|
|
94
|
-
action: "register",
|
|
95
|
-
tool: "claude",
|
|
96
|
-
project: "test-project",
|
|
97
|
-
taskSummary: "Task summary",
|
|
98
|
-
}, ctx);
|
|
99
|
-
const result = await sessionCommand({
|
|
100
|
-
action: "complete",
|
|
101
|
-
sessionId: session_id,
|
|
102
|
-
taskSummary: "Completed task",
|
|
103
|
-
}, ctx);
|
|
104
|
-
expect(result).toEqual({});
|
|
105
|
-
});
|
|
106
|
-
it("persists session note when vault and project provided", async () => {
|
|
107
|
-
const { session_id } = await sessionCommand({
|
|
108
|
-
action: "register",
|
|
109
|
-
tool: "claude",
|
|
110
|
-
project: "test-project",
|
|
111
|
-
}, ctx);
|
|
112
|
-
await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
|
|
113
|
-
const result = await sessionCommand({
|
|
114
|
-
action: "complete",
|
|
115
|
-
sessionId: session_id,
|
|
116
|
-
project: "test-project",
|
|
117
|
-
tool: "claude",
|
|
118
|
-
outcome: "Feature implemented",
|
|
119
|
-
filesTouched: ["src/index.ts"],
|
|
120
|
-
tasksCompleted: ["task-001"],
|
|
121
|
-
}, ctx);
|
|
122
|
-
expect(result.session_note_path).toBeDefined();
|
|
123
|
-
expect(result.session_note_path).toMatch(/projects\/test-project\/sessions\/\d{4}-\d{2}-\d{2}-claude-/);
|
|
124
|
-
const content = await vaultFs.read(result.session_note_path);
|
|
125
|
-
expect(content).toContain("type: session");
|
|
126
|
-
expect(content).toContain("tool: claude");
|
|
127
|
-
expect(content).toContain("Feature implemented");
|
|
128
|
-
});
|
|
129
|
-
it("requires session ID for complete", async () => {
|
|
130
|
-
await expect(sessionCommand({
|
|
131
|
-
action: "complete",
|
|
132
|
-
}, ctx)).rejects.toThrow("Session ID required for complete");
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe("list_active", () => {
|
|
136
|
-
it("lists active sessions", async () => {
|
|
137
|
-
await sessionCommand({
|
|
138
|
-
action: "register",
|
|
139
|
-
tool: "claude",
|
|
140
|
-
project: "test-project",
|
|
141
|
-
taskSummary: "Task 1",
|
|
142
|
-
}, ctx);
|
|
143
|
-
await sessionCommand({
|
|
144
|
-
action: "register",
|
|
145
|
-
tool: "cursor",
|
|
146
|
-
project: "other-project",
|
|
147
|
-
taskSummary: "Task 2",
|
|
148
|
-
}, ctx);
|
|
149
|
-
const result = await sessionCommand({
|
|
150
|
-
action: "list_active",
|
|
151
|
-
}, ctx);
|
|
152
|
-
expect(result.active_sessions).toBeDefined();
|
|
153
|
-
expect(result.active_sessions.length).toBeGreaterThanOrEqual(2);
|
|
154
|
-
});
|
|
155
|
-
it("excludes completed sessions", async () => {
|
|
156
|
-
const { session_id } = await sessionCommand({
|
|
157
|
-
action: "register",
|
|
158
|
-
tool: "claude",
|
|
159
|
-
project: "test-project",
|
|
160
|
-
}, ctx);
|
|
161
|
-
await sessionCommand({
|
|
162
|
-
action: "register",
|
|
163
|
-
tool: "cursor",
|
|
164
|
-
project: "test-project",
|
|
165
|
-
}, ctx);
|
|
166
|
-
await sessionCommand({
|
|
167
|
-
action: "complete",
|
|
168
|
-
sessionId: session_id,
|
|
169
|
-
}, ctx);
|
|
170
|
-
const result = await sessionCommand({
|
|
171
|
-
action: "list_active",
|
|
172
|
-
}, ctx);
|
|
173
|
-
const activeIds = result.active_sessions.map((s) => s.id);
|
|
174
|
-
expect(activeIds).not.toContain(session_id);
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
describe("persist session note", () => {
|
|
178
|
-
it("creates session note when completing with project and vaultFs", async () => {
|
|
179
|
-
await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
|
|
180
|
-
const { session_id } = await sessionCommand({
|
|
181
|
-
action: "register",
|
|
182
|
-
tool: "claude-code",
|
|
183
|
-
project: "test-project",
|
|
184
|
-
taskSummary: "Build feature X",
|
|
185
|
-
filesTouched: ["src/index.ts"],
|
|
186
|
-
}, ctx);
|
|
187
|
-
await sessionCommand({
|
|
188
|
-
action: "complete",
|
|
189
|
-
sessionId: session_id,
|
|
190
|
-
project: "test-project",
|
|
191
|
-
outcome: "Completed successfully",
|
|
192
|
-
filesTouched: ["src/index.ts"],
|
|
193
|
-
tasksCompleted: ["task-001"],
|
|
194
|
-
}, ctx);
|
|
195
|
-
const files = await vaultFs.list("projects/test-project/sessions");
|
|
196
|
-
expect(files.length).toBeGreaterThanOrEqual(1);
|
|
197
|
-
const notePath = files.find((f) => f.endsWith(".md"));
|
|
198
|
-
expect(notePath).toBeDefined();
|
|
199
|
-
const content = await vaultFs.read(notePath);
|
|
200
|
-
expect(content).toContain("claude-code");
|
|
201
|
-
expect(content).toContain("Completed successfully");
|
|
202
|
-
expect(content).toContain("src/index.ts");
|
|
203
|
-
});
|
|
204
|
-
it("extracts tool name from session ID for note heading", async () => {
|
|
205
|
-
await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
|
|
206
|
-
const { session_id } = await sessionCommand({
|
|
207
|
-
action: "register",
|
|
208
|
-
tool: "my-custom-tool",
|
|
209
|
-
project: "test-project",
|
|
210
|
-
}, ctx);
|
|
211
|
-
await sessionCommand({
|
|
212
|
-
action: "complete",
|
|
213
|
-
sessionId: session_id,
|
|
214
|
-
project: "test-project",
|
|
215
|
-
outcome: "Done",
|
|
216
|
-
}, ctx);
|
|
217
|
-
const files = await vaultFs.list("projects/test-project/sessions");
|
|
218
|
-
const notePath = files.find((f) => f.endsWith(".md"));
|
|
219
|
-
const content = await vaultFs.read(notePath);
|
|
220
|
-
expect(content).toContain("my-custom-tool");
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
describe("unknown action", () => {
|
|
224
|
-
it("throws error for unknown action", async () => {
|
|
225
|
-
await expect(sessionCommand({
|
|
226
|
-
action: "unknown",
|
|
227
|
-
}, ctx)).rejects.toThrow("Unknown action: unknown");
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
//# sourceMappingURL=session.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.test.js","sourceRoot":"","sources":["../../src/commands/session.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|