superskill 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +235 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +1158 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/brainstorm.d.ts +9 -0
- package/dist/commands/brainstorm.js +37 -0
- package/dist/commands/brainstorm.js.map +1 -0
- package/dist/commands/brainstorm.test.d.ts +1 -0
- package/dist/commands/brainstorm.test.js +110 -0
- package/dist/commands/brainstorm.test.js.map +1 -0
- package/dist/commands/context.d.ts +18 -0
- package/dist/commands/context.js +88 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/context.test.d.ts +1 -0
- package/dist/commands/context.test.js +230 -0
- package/dist/commands/context.test.js.map +1 -0
- package/dist/commands/decide.d.ts +12 -0
- package/dist/commands/decide.js +40 -0
- package/dist/commands/decide.js.map +1 -0
- package/dist/commands/decide.test.d.ts +1 -0
- package/dist/commands/decide.test.js +109 -0
- package/dist/commands/decide.test.js.map +1 -0
- package/dist/commands/graph.d.ts +15 -0
- package/dist/commands/graph.js +89 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/graph.test.d.ts +1 -0
- package/dist/commands/graph.test.js +215 -0
- package/dist/commands/graph.test.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.js +257 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/learn.d.ts +25 -0
- package/dist/commands/learn.js +92 -0
- package/dist/commands/learn.js.map +1 -0
- package/dist/commands/learn.test.d.ts +1 -0
- package/dist/commands/learn.test.js +241 -0
- package/dist/commands/learn.test.js.map +1 -0
- package/dist/commands/prune.d.ts +58 -0
- package/dist/commands/prune.js +246 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/read.d.ts +8 -0
- package/dist/commands/read.js +7 -0
- package/dist/commands/read.js.map +1 -0
- package/dist/commands/read.test.d.ts +1 -0
- package/dist/commands/read.test.js +48 -0
- package/dist/commands/read.test.js.map +1 -0
- package/dist/commands/resume.d.ts +20 -0
- package/dist/commands/resume.js +141 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/resume.test.d.ts +1 -0
- package/dist/commands/resume.test.js +243 -0
- package/dist/commands/resume.test.js.map +1 -0
- package/dist/commands/search.d.ts +8 -0
- package/dist/commands/search.js +25 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/search.test.d.ts +1 -0
- package/dist/commands/search.test.js +61 -0
- package/dist/commands/search.test.js.map +1 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.js +79 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/session.test.d.ts +1 -0
- package/dist/commands/session.test.js +231 -0
- package/dist/commands/session.test.js.map +1 -0
- package/dist/commands/skill/catalog.d.ts +39 -0
- package/dist/commands/skill/catalog.js +260 -0
- package/dist/commands/skill/catalog.js.map +1 -0
- package/dist/commands/skill/index.d.ts +55 -0
- package/dist/commands/skill/index.js +82 -0
- package/dist/commands/skill/index.js.map +1 -0
- package/dist/commands/skill/index.test.d.ts +1 -0
- package/dist/commands/skill/index.test.js +137 -0
- package/dist/commands/skill/index.test.js.map +1 -0
- package/dist/commands/skill/install.d.ts +14 -0
- package/dist/commands/skill/install.js +108 -0
- package/dist/commands/skill/install.js.map +1 -0
- package/dist/commands/skill/install.test.d.ts +1 -0
- package/dist/commands/skill/install.test.js +225 -0
- package/dist/commands/skill/install.test.js.map +1 -0
- package/dist/commands/skill/list.d.ts +6 -0
- package/dist/commands/skill/list.js +5 -0
- package/dist/commands/skill/list.js.map +1 -0
- package/dist/commands/skill/list.test.d.ts +1 -0
- package/dist/commands/skill/list.test.js +101 -0
- package/dist/commands/skill/list.test.js.map +1 -0
- package/dist/commands/skill/marketplace.d.ts +121 -0
- package/dist/commands/skill/marketplace.js +548 -0
- package/dist/commands/skill/marketplace.js.map +1 -0
- package/dist/commands/skill/schema.d.ts +27 -0
- package/dist/commands/skill/schema.js +55 -0
- package/dist/commands/skill/schema.js.map +1 -0
- package/dist/commands/skill/schema.test.d.ts +1 -0
- package/dist/commands/skill/schema.test.js +142 -0
- package/dist/commands/skill/schema.test.js.map +1 -0
- package/dist/commands/skill/validate.d.ts +10 -0
- package/dist/commands/skill/validate.js +40 -0
- package/dist/commands/skill/validate.js.map +1 -0
- package/dist/commands/skill/validate.test.d.ts +1 -0
- package/dist/commands/skill/validate.test.js +171 -0
- package/dist/commands/skill/validate.test.js.map +1 -0
- package/dist/commands/task.d.ts +34 -0
- package/dist/commands/task.js +160 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/task.test.d.ts +1 -0
- package/dist/commands/task.test.js +395 -0
- package/dist/commands/task.test.js.map +1 -0
- package/dist/commands/todo.d.ts +15 -0
- package/dist/commands/todo.js +99 -0
- package/dist/commands/todo.js.map +1 -0
- package/dist/commands/todo.test.d.ts +1 -0
- package/dist/commands/todo.test.js +324 -0
- package/dist/commands/todo.test.js.map +1 -0
- package/dist/commands/write.d.ts +12 -0
- package/dist/commands/write.js +40 -0
- package/dist/commands/write.js.map +1 -0
- package/dist/commands/write.test.d.ts +1 -0
- package/dist/commands/write.test.js +79 -0
- package/dist/commands/write.test.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.js +49 -0
- package/dist/config.js.map +1 -0
- package/dist/config.test.d.ts +1 -0
- package/dist/config.test.js +147 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/executor.d.ts +11 -0
- package/dist/core/executor.js +42 -0
- package/dist/core/executor.js.map +1 -0
- package/dist/core/executor.test.d.ts +1 -0
- package/dist/core/executor.test.js +206 -0
- package/dist/core/executor.test.js.map +1 -0
- package/dist/core/middleware/error-handler.d.ts +2 -0
- package/dist/core/middleware/error-handler.js +29 -0
- package/dist/core/middleware/error-handler.js.map +1 -0
- package/dist/core/middleware/index.d.ts +2 -0
- package/dist/core/middleware/index.js +3 -0
- package/dist/core/middleware/index.js.map +1 -0
- package/dist/core/middleware/logging.d.ts +2 -0
- package/dist/core/middleware/logging.js +18 -0
- package/dist/core/middleware/logging.js.map +1 -0
- package/dist/core/registry.d.ts +12 -0
- package/dist/core/registry.js +552 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/registry.test.d.ts +1 -0
- package/dist/core/registry.test.js +213 -0
- package/dist/core/registry.test.js.map +1 -0
- package/dist/core/types.d.ts +38 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/integration/coordination.test.d.ts +1 -0
- package/dist/integration/coordination.test.js +286 -0
- package/dist/integration/coordination.test.js.map +1 -0
- package/dist/integration/project-artifacts.test.d.ts +1 -0
- package/dist/integration/project-artifacts.test.js +275 -0
- package/dist/integration/project-artifacts.test.js.map +1 -0
- package/dist/integration/registry-graph.test.d.ts +1 -0
- package/dist/integration/registry-graph.test.js +157 -0
- package/dist/integration/registry-graph.test.js.map +1 -0
- package/dist/integration/vault-lifecycle.test.d.ts +1 -0
- package/dist/integration/vault-lifecycle.test.js +183 -0
- package/dist/integration/vault-lifecycle.test.js.map +1 -0
- package/dist/lib/auto-number.d.ts +10 -0
- package/dist/lib/auto-number.js +33 -0
- package/dist/lib/auto-number.js.map +1 -0
- package/dist/lib/auto-number.test.d.ts +1 -0
- package/dist/lib/auto-number.test.js +88 -0
- package/dist/lib/auto-number.test.js.map +1 -0
- package/dist/lib/auto-profile.d.ts +11 -0
- package/dist/lib/auto-profile.js +123 -0
- package/dist/lib/auto-profile.js.map +1 -0
- package/dist/lib/auto-profile.test.d.ts +1 -0
- package/dist/lib/auto-profile.test.js +227 -0
- package/dist/lib/auto-profile.test.js.map +1 -0
- package/dist/lib/escape-regex.d.ts +4 -0
- package/dist/lib/escape-regex.js +8 -0
- package/dist/lib/escape-regex.js.map +1 -0
- package/dist/lib/escape-regex.test.d.ts +1 -0
- package/dist/lib/escape-regex.test.js +27 -0
- package/dist/lib/escape-regex.test.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +34 -0
- package/dist/lib/frontmatter.js +75 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/frontmatter.test.d.ts +1 -0
- package/dist/lib/frontmatter.test.js +192 -0
- package/dist/lib/frontmatter.test.js.map +1 -0
- package/dist/lib/project-detector.d.ts +12 -0
- package/dist/lib/project-detector.js +124 -0
- package/dist/lib/project-detector.js.map +1 -0
- package/dist/lib/project-detector.test.d.ts +1 -0
- package/dist/lib/project-detector.test.js +117 -0
- package/dist/lib/project-detector.test.js.map +1 -0
- package/dist/lib/safe-external-path.d.ts +10 -0
- package/dist/lib/safe-external-path.js +47 -0
- package/dist/lib/safe-external-path.js.map +1 -0
- package/dist/lib/safe-external-path.test.d.ts +1 -0
- package/dist/lib/safe-external-path.test.js +99 -0
- package/dist/lib/safe-external-path.test.js.map +1 -0
- package/dist/lib/search-engine.d.ts +19 -0
- package/dist/lib/search-engine.js +164 -0
- package/dist/lib/search-engine.js.map +1 -0
- package/dist/lib/search-engine.test.d.ts +1 -0
- package/dist/lib/search-engine.test.js +120 -0
- package/dist/lib/search-engine.test.js.map +1 -0
- package/dist/lib/session-registry.d.ts +59 -0
- package/dist/lib/session-registry.js +231 -0
- package/dist/lib/session-registry.js.map +1 -0
- package/dist/lib/session-registry.test.d.ts +1 -0
- package/dist/lib/session-registry.test.js +199 -0
- package/dist/lib/session-registry.test.js.map +1 -0
- package/dist/lib/skill-registry.d.ts +13 -0
- package/dist/lib/skill-registry.js +77 -0
- package/dist/lib/skill-registry.js.map +1 -0
- package/dist/lib/stack-detector.d.ts +7 -0
- package/dist/lib/stack-detector.js +184 -0
- package/dist/lib/stack-detector.js.map +1 -0
- package/dist/lib/stack-detector.test.d.ts +1 -0
- package/dist/lib/stack-detector.test.js +110 -0
- package/dist/lib/stack-detector.test.js.map +1 -0
- package/dist/lib/token-estimator.d.ts +19 -0
- package/dist/lib/token-estimator.js +59 -0
- package/dist/lib/token-estimator.js.map +1 -0
- package/dist/lib/token-estimator.test.d.ts +1 -0
- package/dist/lib/token-estimator.test.js +65 -0
- package/dist/lib/token-estimator.test.js.map +1 -0
- package/dist/lib/tool-detector.d.ts +8 -0
- package/dist/lib/tool-detector.js +76 -0
- package/dist/lib/tool-detector.js.map +1 -0
- package/dist/lib/tool-detector.test.d.ts +1 -0
- package/dist/lib/tool-detector.test.js +170 -0
- package/dist/lib/tool-detector.test.js.map +1 -0
- package/dist/lib/vault-fs.d.ts +39 -0
- package/dist/lib/vault-fs.js +184 -0
- package/dist/lib/vault-fs.js.map +1 -0
- package/dist/lib/vault-fs.test.d.ts +1 -0
- package/dist/lib/vault-fs.test.js +210 -0
- package/dist/lib/vault-fs.test.js.map +1 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +387 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/setup/clients.d.ts +2 -0
- package/dist/setup/clients.js +109 -0
- package/dist/setup/clients.js.map +1 -0
- package/dist/setup/configure.d.ts +6 -0
- package/dist/setup/configure.js +126 -0
- package/dist/setup/configure.js.map +1 -0
- package/dist/setup/configure.test.d.ts +1 -0
- package/dist/setup/configure.test.js +112 -0
- package/dist/setup/configure.test.js.map +1 -0
- package/dist/setup/detect.d.ts +3 -0
- package/dist/setup/detect.js +24 -0
- package/dist/setup/detect.js.map +1 -0
- package/dist/setup/detect.test.d.ts +1 -0
- package/dist/setup/detect.test.js +44 -0
- package/dist/setup/detect.test.js.map +1 -0
- package/dist/setup/index.d.ts +2 -0
- package/dist/setup/index.js +147 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/instructions.d.ts +4 -0
- package/dist/setup/instructions.js +62 -0
- package/dist/setup/instructions.js.map +1 -0
- package/dist/setup/instructions.test.d.ts +1 -0
- package/dist/setup/instructions.test.js +84 -0
- package/dist/setup/instructions.test.js.map +1 -0
- package/dist/setup/json-config.d.ts +10 -0
- package/dist/setup/json-config.js +43 -0
- package/dist/setup/json-config.js.map +1 -0
- package/dist/setup/json-config.test.d.ts +1 -0
- package/dist/setup/json-config.test.js +92 -0
- package/dist/setup/json-config.test.js.map +1 -0
- package/dist/setup/postinstall.d.ts +2 -0
- package/dist/setup/postinstall.js +22 -0
- package/dist/setup/postinstall.js.map +1 -0
- package/dist/setup/preuninstall.d.ts +2 -0
- package/dist/setup/preuninstall.js +12 -0
- package/dist/setup/preuninstall.js.map +1 -0
- package/dist/setup/setup-integration.test.d.ts +1 -0
- package/dist/setup/setup-integration.test.js +72 -0
- package/dist/setup/setup-integration.test.js.map +1 -0
- package/dist/setup/teardown.d.ts +5 -0
- package/dist/setup/teardown.js +94 -0
- package/dist/setup/teardown.js.map +1 -0
- package/dist/setup/teardown.test.d.ts +1 -0
- package/dist/setup/teardown.test.js +105 -0
- package/dist/setup/teardown.test.js.map +1 -0
- package/dist/setup/toml-config.d.ts +5 -0
- package/dist/setup/toml-config.js +26 -0
- package/dist/setup/toml-config.js.map +1 -0
- package/dist/setup/toml-config.test.d.ts +1 -0
- package/dist/setup/toml-config.test.js +49 -0
- package/dist/setup/toml-config.test.js.map +1 -0
- package/dist/setup/types.d.ts +52 -0
- package/dist/setup/types.js +23 -0
- package/dist/setup/types.js.map +1 -0
- package/dist/test-helpers.d.ts +20 -0
- package/dist/test-helpers.js +47 -0
- package/dist/test-helpers.js.map +1 -0
- package/dist/test-helpers.test.d.ts +1 -0
- package/dist/test-helpers.test.js +90 -0
- package/dist/test-helpers.test.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from "vitest";
|
|
2
|
+
import { CommandRegistry } from "./registry.js";
|
|
3
|
+
import { VaultError } from "../lib/vault-fs.js";
|
|
4
|
+
function createMockContext() {
|
|
5
|
+
return {
|
|
6
|
+
vaultFs: {},
|
|
7
|
+
vaultPath: "/tmp/test-vault",
|
|
8
|
+
config: {},
|
|
9
|
+
sessionRegistry: {},
|
|
10
|
+
log: {
|
|
11
|
+
debug: vi.fn(),
|
|
12
|
+
info: vi.fn(),
|
|
13
|
+
warn: vi.fn(),
|
|
14
|
+
error: vi.fn(),
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function createMockVaultFs(readResult) {
|
|
19
|
+
return {
|
|
20
|
+
root: "/tmp/test-vault",
|
|
21
|
+
read: vi.fn().mockResolvedValue(readResult ?? ""),
|
|
22
|
+
write: vi.fn().mockResolvedValue({ path: "test", bytes: 0 }),
|
|
23
|
+
list: vi.fn().mockResolvedValue([]),
|
|
24
|
+
exists: vi.fn().mockResolvedValue(false),
|
|
25
|
+
verifyNoSymlinkEscape: vi.fn().mockResolvedValue(undefined),
|
|
26
|
+
append: vi.fn().mockResolvedValue({ path: "test", bytes: 0 }),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
describe("CommandRegistry", () => {
|
|
30
|
+
let registry;
|
|
31
|
+
let ctx;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
registry = new CommandRegistry();
|
|
34
|
+
ctx = createMockContext();
|
|
35
|
+
});
|
|
36
|
+
describe("register and get", () => {
|
|
37
|
+
it("stores and retrieves a registration", () => {
|
|
38
|
+
const handler = async () => null;
|
|
39
|
+
const toolDef = {
|
|
40
|
+
name: "test_tool",
|
|
41
|
+
description: "A test tool",
|
|
42
|
+
inputSchema: { type: "object" },
|
|
43
|
+
};
|
|
44
|
+
const reg = { handler, toolDef };
|
|
45
|
+
registry.register("test", reg);
|
|
46
|
+
expect(registry.get("test")).toBe(reg);
|
|
47
|
+
expect(registry.has("test")).toBe(true);
|
|
48
|
+
expect(registry.has("missing")).toBe(false);
|
|
49
|
+
});
|
|
50
|
+
it("returns undefined for unknown command", () => {
|
|
51
|
+
expect(registry.get("unknown")).toBeUndefined();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
describe("execute", () => {
|
|
55
|
+
it("executes a registered command handler", async () => {
|
|
56
|
+
const handler = async (args) => `Hello, ${args.name}!`;
|
|
57
|
+
const reg = {
|
|
58
|
+
handler: handler,
|
|
59
|
+
toolDef: { name: "greet", description: "Greet", inputSchema: {} },
|
|
60
|
+
};
|
|
61
|
+
registry.register("greet", reg);
|
|
62
|
+
const result = await registry.execute("greet", { name: "World" }, ctx);
|
|
63
|
+
expect(result).toBe("Hello, World!");
|
|
64
|
+
});
|
|
65
|
+
it("uses adaptArgs to transform raw arguments", async () => {
|
|
66
|
+
const handler = async (args) => args.camelCase;
|
|
67
|
+
const reg = {
|
|
68
|
+
handler: handler,
|
|
69
|
+
toolDef: { name: "adapt", description: "Adapt", inputSchema: {} },
|
|
70
|
+
adaptArgs: (raw) => ({ camelCase: raw.snake_case }),
|
|
71
|
+
};
|
|
72
|
+
registry.register("adapt", reg);
|
|
73
|
+
const result = await registry.execute("adapt", { snake_case: "value" }, ctx);
|
|
74
|
+
expect(result).toBe("value");
|
|
75
|
+
});
|
|
76
|
+
it("throws for unknown command", async () => {
|
|
77
|
+
await expect(registry.execute("unknown", {}, ctx)).rejects.toThrow("Unknown command: unknown");
|
|
78
|
+
});
|
|
79
|
+
it("passes context through to handler", async () => {
|
|
80
|
+
let receivedCtx = null;
|
|
81
|
+
const handler = async (_args, ctx) => {
|
|
82
|
+
receivedCtx = ctx;
|
|
83
|
+
return "done";
|
|
84
|
+
};
|
|
85
|
+
const reg = {
|
|
86
|
+
handler,
|
|
87
|
+
toolDef: { name: "ctx-test", description: "Ctx", inputSchema: {} },
|
|
88
|
+
};
|
|
89
|
+
registry.register("ctx-test", reg);
|
|
90
|
+
await registry.execute("ctx-test", {}, ctx);
|
|
91
|
+
expect(receivedCtx).toBe(ctx);
|
|
92
|
+
});
|
|
93
|
+
it("passes through errors from handlers", async () => {
|
|
94
|
+
const handler = async () => {
|
|
95
|
+
throw new VaultError("FILE_NOT_FOUND", "not here");
|
|
96
|
+
};
|
|
97
|
+
const reg = {
|
|
98
|
+
handler,
|
|
99
|
+
toolDef: { name: "error-test", description: "Error", inputSchema: {} },
|
|
100
|
+
};
|
|
101
|
+
registry.register("error-test", reg);
|
|
102
|
+
await expect(registry.execute("error-test", {}, ctx)).rejects.toThrow("not here");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("getToolDefinitions", () => {
|
|
106
|
+
it("returns empty array when no registrations", () => {
|
|
107
|
+
expect(registry.getToolDefinitions()).toEqual([]);
|
|
108
|
+
});
|
|
109
|
+
it("returns tool defs from all registrations", () => {
|
|
110
|
+
const handler = async () => null;
|
|
111
|
+
registry.register("cmd1", {
|
|
112
|
+
handler,
|
|
113
|
+
toolDef: { name: "tool1", description: "Tool 1", inputSchema: {} },
|
|
114
|
+
});
|
|
115
|
+
registry.register("cmd2", {
|
|
116
|
+
handler,
|
|
117
|
+
toolDef: { name: "tool2", description: "Tool 2", inputSchema: {} },
|
|
118
|
+
});
|
|
119
|
+
registry.register("cmd3", {
|
|
120
|
+
handler,
|
|
121
|
+
toolDef: { name: "tool3", description: "Tool 3", inputSchema: {} },
|
|
122
|
+
});
|
|
123
|
+
const defs = registry.getToolDefinitions();
|
|
124
|
+
expect(defs).toHaveLength(3);
|
|
125
|
+
expect(defs.map((d) => d.name)).toEqual(["tool1", "tool2", "tool3"]);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe("getToolNames", () => {
|
|
129
|
+
it("returns all registered tool names", () => {
|
|
130
|
+
const handler = async () => null;
|
|
131
|
+
registry.register("a", { handler, toolDef: { name: "a", description: "", inputSchema: {} } });
|
|
132
|
+
registry.register("b", { handler, toolDef: { name: "b", description: "", inputSchema: {} } });
|
|
133
|
+
expect(registry.getToolNames()).toEqual(["a", "b"]);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe("createRegistry", () => {
|
|
138
|
+
it("registers all expected MCP tools", async () => {
|
|
139
|
+
const { createRegistry } = await import("./registry.js");
|
|
140
|
+
const registry = createRegistry();
|
|
141
|
+
const names = registry.getToolNames();
|
|
142
|
+
const expectedTools = [
|
|
143
|
+
"vault_read",
|
|
144
|
+
"vault_write",
|
|
145
|
+
"vault_search",
|
|
146
|
+
"vault_project_context",
|
|
147
|
+
"vault_init",
|
|
148
|
+
"vault_decide",
|
|
149
|
+
"vault_task",
|
|
150
|
+
"vault_learn",
|
|
151
|
+
"vault_todo",
|
|
152
|
+
"vault_brainstorm",
|
|
153
|
+
"vault_session",
|
|
154
|
+
"vault_prune",
|
|
155
|
+
"vault_stats",
|
|
156
|
+
"vault_resume",
|
|
157
|
+
"vault_deprecate",
|
|
158
|
+
];
|
|
159
|
+
for (const name of expectedTools) {
|
|
160
|
+
expect(names, `Missing tool: ${name}`).toContain(name);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
it("provides inputSchema with required fields for each tool", async () => {
|
|
164
|
+
const { createRegistry } = await import("./registry.js");
|
|
165
|
+
const registry = createRegistry();
|
|
166
|
+
const defs = registry.getToolDefinitions();
|
|
167
|
+
for (const def of defs) {
|
|
168
|
+
expect(def.inputSchema, `${def.name}: missing inputSchema`).toBeDefined();
|
|
169
|
+
expect(def.inputSchema, `${def.name}: inputSchema must be object`).toHaveProperty("type", "object");
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
it("adaptArgs for vault_read passes path and coerces depth", async () => {
|
|
173
|
+
const { createRegistry } = await import("./registry.js");
|
|
174
|
+
const registry = createRegistry();
|
|
175
|
+
const vaultFs = createMockVaultFs("# Hello");
|
|
176
|
+
const ctx = { ...createMockContext(), vaultFs };
|
|
177
|
+
const result = await registry.execute("vault_read", { path: "test.md", depth: "2" }, ctx);
|
|
178
|
+
expect(result).toBe("# Hello");
|
|
179
|
+
expect(vaultFs.read).toHaveBeenCalledWith("test.md");
|
|
180
|
+
});
|
|
181
|
+
it("adaptArgs directly transforms snake_case for each tool", async () => {
|
|
182
|
+
const { createRegistry } = await import("./registry.js");
|
|
183
|
+
const registry = createRegistry();
|
|
184
|
+
const readReg = registry.get("vault_read");
|
|
185
|
+
const readArgs = readReg.adaptArgs({ path: "f.md", depth: 3 });
|
|
186
|
+
expect(readArgs).toEqual({ path: "f.md", depth: 3 });
|
|
187
|
+
const taskReg = registry.get("vault_task");
|
|
188
|
+
const taskArgs = taskReg.adaptArgs({ action: "add", title: "T", blocked_by: ["x"], assigned_to: "a" });
|
|
189
|
+
expect(taskArgs).toEqual({ action: "add", title: "T", blockedBy: ["x"], assignedTo: "a" });
|
|
190
|
+
const sessionReg = registry.get("vault_session");
|
|
191
|
+
const sessionArgs = sessionReg.adaptArgs({ action: "register", tool: "t", task_summary: "s", files_touched: ["a.ts"] });
|
|
192
|
+
expect(sessionArgs).toEqual({ action: "register", tool: "t", taskSummary: "s", filesTouched: ["a.ts"] });
|
|
193
|
+
const learnReg = registry.get("vault_learn");
|
|
194
|
+
const learnArgs = learnReg.adaptArgs({ action: "add", title: "L", tags: ["b"], session_id: "s1" });
|
|
195
|
+
expect(learnArgs).toEqual({ action: "add", title: "L", tags: ["b"], sessionId: "s1" });
|
|
196
|
+
const pruneReg = registry.get("vault_prune");
|
|
197
|
+
const pruneArgs = pruneReg.adaptArgs({ mode: "dry-run", sessions_days: 30, done_tasks_days: 60 });
|
|
198
|
+
expect(pruneArgs).toEqual({ mode: "dry-run", policy: { sessions: 30, doneTasks: 60 }, all: false });
|
|
199
|
+
const ctxReg = registry.get("vault_project_context");
|
|
200
|
+
const ctxArgs = ctxReg.adaptArgs({ project: "p", detail_level: "full" });
|
|
201
|
+
expect(ctxArgs).toEqual({ project: "p", detailLevel: "full" });
|
|
202
|
+
const writeReg = registry.get("vault_write");
|
|
203
|
+
const writeArgs = writeReg.adaptArgs({ path: "f.md", content: "c", mode: "append" });
|
|
204
|
+
expect(writeArgs).toEqual({ path: "f.md", content: "c", mode: "append" });
|
|
205
|
+
const resumeReg = registry.get("vault_resume");
|
|
206
|
+
const resumeArgs = resumeReg.adaptArgs({ project: "p", limit: 3, format: "json" });
|
|
207
|
+
expect(resumeArgs).toEqual({ project: "p", limit: 3 });
|
|
208
|
+
const searchReg = registry.get("vault_search");
|
|
209
|
+
const searchArgs = searchReg.adaptArgs({ query: "q", limit: 5, project: "p", path_filter: "dir" });
|
|
210
|
+
expect(searchArgs).toEqual({ query: "q", project: "p", limit: 5, structured: false });
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
//# sourceMappingURL=registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../src/core/registry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { VaultFS } from '../lib/vault-fs.js';
|
|
2
|
+
import type { SessionRegistryManager } from '../lib/session-registry.js';
|
|
3
|
+
import type { Config } from '../config.js';
|
|
4
|
+
export interface Logger {
|
|
5
|
+
debug(message: string, ...args: unknown[]): void;
|
|
6
|
+
info(message: string, ...args: unknown[]): void;
|
|
7
|
+
warn(message: string, ...args: unknown[]): void;
|
|
8
|
+
error(message: string, ...args: unknown[]): void;
|
|
9
|
+
}
|
|
10
|
+
export interface CommandContext {
|
|
11
|
+
vaultFs: VaultFS;
|
|
12
|
+
vaultPath: string;
|
|
13
|
+
sessionRegistry: SessionRegistryManager;
|
|
14
|
+
config: Config;
|
|
15
|
+
log: Logger;
|
|
16
|
+
}
|
|
17
|
+
export type CommandHandler<TArgs = unknown, TResult = unknown> = (args: TArgs, ctx: CommandContext) => Promise<TResult>;
|
|
18
|
+
export type Middleware = (ctx: CommandContext, next: () => Promise<unknown>) => Promise<unknown>;
|
|
19
|
+
export interface MCPToolDefinition {
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
inputSchema: Record<string, unknown>;
|
|
23
|
+
annotations?: {
|
|
24
|
+
readOnlyHint?: boolean;
|
|
25
|
+
destructiveHint?: boolean;
|
|
26
|
+
idempotentHint?: boolean;
|
|
27
|
+
openWorldHint?: boolean;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface MCPErrorResponse {
|
|
31
|
+
error: string;
|
|
32
|
+
message: string;
|
|
33
|
+
}
|
|
34
|
+
export interface CommandRegistration<TArgs = unknown, TResult = unknown> {
|
|
35
|
+
handler: CommandHandler<TArgs, TResult>;
|
|
36
|
+
toolDef: MCPToolDefinition;
|
|
37
|
+
adaptArgs?: (raw: Record<string, unknown>) => TArgs;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
+
import { mkdir } from "fs/promises";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { createTestContext } from "../test-helpers.js";
|
|
5
|
+
import { sessionCommand } from "../commands/session.js";
|
|
6
|
+
import { resumeCommand } from "../commands/resume.js";
|
|
7
|
+
import { pruneCommand, statsCommand, deprecateCommand } from "../commands/prune.js";
|
|
8
|
+
import { taskCommand } from "../commands/task.js";
|
|
9
|
+
import { learnCommand } from "../commands/learn.js";
|
|
10
|
+
import { decideCommand } from "../commands/decide.js";
|
|
11
|
+
import { readCommand } from "../commands/read.js";
|
|
12
|
+
import { serializeFrontmatter, createFrontmatter } from "../lib/frontmatter.js";
|
|
13
|
+
describe("integration > coordination", () => {
|
|
14
|
+
let ctx;
|
|
15
|
+
let vaultRoot;
|
|
16
|
+
let cleanup;
|
|
17
|
+
beforeEach(async () => {
|
|
18
|
+
const tc = await createTestContext({ project: "my-project" });
|
|
19
|
+
ctx = tc.ctx;
|
|
20
|
+
vaultRoot = tc.vaultRoot;
|
|
21
|
+
cleanup = tc.cleanup;
|
|
22
|
+
await mkdir(join(vaultRoot, "projects/my-project/tasks"), { recursive: true });
|
|
23
|
+
await mkdir(join(vaultRoot, "projects/my-project/sessions"), { recursive: true });
|
|
24
|
+
await mkdir(join(vaultRoot, "projects/my-project/decisions"), { recursive: true });
|
|
25
|
+
await mkdir(join(vaultRoot, "projects/my-project/learnings"), { recursive: true });
|
|
26
|
+
});
|
|
27
|
+
afterEach(async () => {
|
|
28
|
+
await cleanup();
|
|
29
|
+
});
|
|
30
|
+
describe("session lifecycle", () => {
|
|
31
|
+
it("register session then list_active returns it", async () => {
|
|
32
|
+
const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project", taskSummary: "Build API" }, ctx);
|
|
33
|
+
expect(reg.session_id).toBeDefined();
|
|
34
|
+
expect(reg.conflicts).toHaveLength(0);
|
|
35
|
+
const list = await sessionCommand({ action: "list_active" }, ctx);
|
|
36
|
+
expect(list.active_sessions).toHaveLength(1);
|
|
37
|
+
expect(list.active_sessions[0].tool).toBe("claude-code");
|
|
38
|
+
expect(list.active_sessions[0].project).toBe("my-project");
|
|
39
|
+
expect(list.active_sessions[0].task_summary).toBe("Build API");
|
|
40
|
+
});
|
|
41
|
+
it("register two sessions then list_active returns both", async () => {
|
|
42
|
+
await sessionCommand({ action: "register", tool: "claude-code", project: "my-project", taskSummary: "Task A" }, ctx);
|
|
43
|
+
await sessionCommand({ action: "register", tool: "opencode", project: "my-project", taskSummary: "Task B" }, ctx);
|
|
44
|
+
const list = await sessionCommand({ action: "list_active" }, ctx);
|
|
45
|
+
expect(list.active_sessions).toHaveLength(2);
|
|
46
|
+
const tools = list.active_sessions.map((s) => s.tool);
|
|
47
|
+
expect(tools).toContain("claude-code");
|
|
48
|
+
expect(tools).toContain("opencode");
|
|
49
|
+
});
|
|
50
|
+
it("heartbeat updates session then list shows updated timestamp", async () => {
|
|
51
|
+
const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project" }, ctx);
|
|
52
|
+
const sessionId = reg.session_id;
|
|
53
|
+
const listBefore = await sessionCommand({ action: "list_active" }, ctx);
|
|
54
|
+
const beforeTs = listBefore.active_sessions[0].last_heartbeat;
|
|
55
|
+
await sessionCommand({ action: "heartbeat", sessionId }, ctx);
|
|
56
|
+
const listAfter = await sessionCommand({ action: "list_active" }, ctx);
|
|
57
|
+
const afterTs = listAfter.active_sessions[0].last_heartbeat;
|
|
58
|
+
expect(new Date(afterTs).getTime()).toBeGreaterThanOrEqual(new Date(beforeTs).getTime());
|
|
59
|
+
});
|
|
60
|
+
it("complete session then list_active no longer includes it", async () => {
|
|
61
|
+
const reg = await sessionCommand({ action: "register", tool: "claude-code", project: "my-project" }, ctx);
|
|
62
|
+
const sessionId = reg.session_id;
|
|
63
|
+
await sessionCommand({ action: "complete", sessionId, project: "my-project", tool: "claude-code", outcome: "Done" }, ctx);
|
|
64
|
+
const list = await sessionCommand({ action: "list_active" }, ctx);
|
|
65
|
+
expect(list.active_sessions).toHaveLength(0);
|
|
66
|
+
});
|
|
67
|
+
it("register session with files_touched then complete persists session note", async () => {
|
|
68
|
+
const reg = await sessionCommand({
|
|
69
|
+
action: "register",
|
|
70
|
+
tool: "claude-code",
|
|
71
|
+
project: "my-project",
|
|
72
|
+
taskSummary: "Refactor auth",
|
|
73
|
+
filesTouched: ["src/auth.ts", "src/middleware.ts"],
|
|
74
|
+
}, ctx);
|
|
75
|
+
const sessionId = reg.session_id;
|
|
76
|
+
const complete = await sessionCommand({
|
|
77
|
+
action: "complete",
|
|
78
|
+
sessionId,
|
|
79
|
+
project: "my-project",
|
|
80
|
+
tool: "claude-code",
|
|
81
|
+
outcome: "Refactored auth module",
|
|
82
|
+
filesTouched: ["src/auth.ts", "src/middleware.ts"],
|
|
83
|
+
tasksCompleted: ["task-001"],
|
|
84
|
+
}, ctx);
|
|
85
|
+
expect(complete.session_note_path).toBeDefined();
|
|
86
|
+
const content = await readCommand({ path: complete.session_note_path }, ctx);
|
|
87
|
+
expect(content).toContain("claude-code");
|
|
88
|
+
expect(content).toContain("Refactored auth module");
|
|
89
|
+
expect(content).toContain("src/auth.ts");
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("resume", () => {
|
|
93
|
+
it("resume with no sessions returns empty last_sessions and suggested_next_steps", async () => {
|
|
94
|
+
const result = await resumeCommand({ project: "my-project" }, ctx);
|
|
95
|
+
expect(result.project).toBe("my-project");
|
|
96
|
+
expect(result.last_sessions).toHaveLength(0);
|
|
97
|
+
expect(result.active_sessions).toHaveLength(0);
|
|
98
|
+
expect(result.interrupted_sessions).toHaveLength(0);
|
|
99
|
+
expect(result.suggested_next_steps).toHaveLength(0);
|
|
100
|
+
});
|
|
101
|
+
it("create tasks and sessions then resume returns interrupted/in-progress context", async () => {
|
|
102
|
+
await taskCommand({ action: "add", title: "Active task", project: "my-project" }, ctx);
|
|
103
|
+
await taskCommand({ action: "update", taskId: "task-001", status: "in-progress", project: "my-project" }, ctx);
|
|
104
|
+
const reg = await sessionCommand({
|
|
105
|
+
action: "register",
|
|
106
|
+
tool: "claude-code",
|
|
107
|
+
project: "my-project",
|
|
108
|
+
taskSummary: "Working on auth",
|
|
109
|
+
}, ctx);
|
|
110
|
+
await sessionCommand({
|
|
111
|
+
action: "complete",
|
|
112
|
+
sessionId: reg.session_id,
|
|
113
|
+
project: "my-project",
|
|
114
|
+
tool: "claude-code",
|
|
115
|
+
outcome: "Implemented auth flow",
|
|
116
|
+
}, ctx);
|
|
117
|
+
const result = await resumeCommand({ project: "my-project" }, ctx);
|
|
118
|
+
expect(result.last_sessions.length).toBeGreaterThanOrEqual(1);
|
|
119
|
+
expect(result.last_sessions[0].tool).toBe("claude-code");
|
|
120
|
+
expect(result.last_sessions[0].outcome).toBe("Implemented auth flow");
|
|
121
|
+
expect(result.suggested_next_steps.length).toBeGreaterThanOrEqual(1);
|
|
122
|
+
expect(result.suggested_next_steps.some((s) => s.includes("In-progress task"))).toBe(true);
|
|
123
|
+
});
|
|
124
|
+
it("resume respects limit parameter", async () => {
|
|
125
|
+
for (let i = 0; i < 5; i++) {
|
|
126
|
+
const reg = await sessionCommand({
|
|
127
|
+
action: "register",
|
|
128
|
+
tool: `tool-${i}`,
|
|
129
|
+
project: "my-project",
|
|
130
|
+
taskSummary: `Session ${i}`,
|
|
131
|
+
}, ctx);
|
|
132
|
+
await sessionCommand({
|
|
133
|
+
action: "complete",
|
|
134
|
+
sessionId: reg.session_id,
|
|
135
|
+
project: "my-project",
|
|
136
|
+
tool: `tool-${i}`,
|
|
137
|
+
outcome: `Completed session ${i}`,
|
|
138
|
+
}, ctx);
|
|
139
|
+
}
|
|
140
|
+
const result = await resumeCommand({ project: "my-project", limit: 2 }, ctx);
|
|
141
|
+
expect(result.last_sessions.length).toBeLessThanOrEqual(2);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("prune", () => {
|
|
145
|
+
it("prune dry-run mode reports candidates but does not delete", async () => {
|
|
146
|
+
const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
|
|
147
|
+
const sessionContent = serializeFrontmatter(createFrontmatter({
|
|
148
|
+
type: "session",
|
|
149
|
+
status: "completed",
|
|
150
|
+
completed_at: oldDate,
|
|
151
|
+
created: oldDate,
|
|
152
|
+
}), "\n# Old session\n");
|
|
153
|
+
await ctx.vaultFs.write("projects/my-project/sessions/2025-01-01-claude-aabbccdd.md", sessionContent);
|
|
154
|
+
const result = await pruneCommand({ mode: "dry-run", project: "my-project", policy: { sessions: 30 } }, ctx);
|
|
155
|
+
expect(result).toHaveLength(1);
|
|
156
|
+
expect(result[0].stats.sessions_scanned).toBe(1);
|
|
157
|
+
expect(result[0].stats.total_archived).toBe(1);
|
|
158
|
+
expect(result[0].stats.total_deleted).toBe(0);
|
|
159
|
+
const files = await ctx.vaultFs.list("projects/my-project/sessions", 1);
|
|
160
|
+
expect(files.filter((f) => f.endsWith(".md"))).toHaveLength(1);
|
|
161
|
+
});
|
|
162
|
+
it("prune archive mode moves old sessions to _archive", async () => {
|
|
163
|
+
const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
|
|
164
|
+
const sessionContent = serializeFrontmatter(createFrontmatter({
|
|
165
|
+
type: "session",
|
|
166
|
+
status: "completed",
|
|
167
|
+
completed_at: oldDate,
|
|
168
|
+
created: oldDate,
|
|
169
|
+
}), "\n# Old session\n");
|
|
170
|
+
await ctx.vaultFs.write("projects/my-project/sessions/2025-01-01-claude-aabbccdd.md", sessionContent);
|
|
171
|
+
const result = await pruneCommand({ mode: "archive", project: "my-project", policy: { sessions: 30 } }, ctx);
|
|
172
|
+
expect(result).toHaveLength(1);
|
|
173
|
+
expect(result[0].archived).toHaveLength(1);
|
|
174
|
+
expect(result[0].archived[0].to).toContain("_archive");
|
|
175
|
+
const activeFiles = await ctx.vaultFs.list("projects/my-project/sessions", 1);
|
|
176
|
+
expect(activeFiles.filter((f) => f.endsWith(".md"))).toHaveLength(0);
|
|
177
|
+
});
|
|
178
|
+
it("prune with no stale items returns empty results", async () => {
|
|
179
|
+
const recentDate = new Date().toISOString();
|
|
180
|
+
const sessionContent = serializeFrontmatter(createFrontmatter({
|
|
181
|
+
type: "session",
|
|
182
|
+
status: "completed",
|
|
183
|
+
completed_at: recentDate,
|
|
184
|
+
created: recentDate,
|
|
185
|
+
}), "\n# Recent session\n");
|
|
186
|
+
await ctx.vaultFs.write("projects/my-project/sessions/2026-03-19-claude-aabbccdd.md", sessionContent);
|
|
187
|
+
const result = await pruneCommand({ mode: "dry-run", project: "my-project", policy: { sessions: 30 } }, ctx);
|
|
188
|
+
expect(result).toHaveLength(1);
|
|
189
|
+
expect(result[0].stats.sessions_scanned).toBe(1);
|
|
190
|
+
expect(result[0].stats.total_archived).toBe(0);
|
|
191
|
+
expect(result[0].stats.total_deleted).toBe(0);
|
|
192
|
+
});
|
|
193
|
+
it("prune delete mode removes old tasks", async () => {
|
|
194
|
+
const oldDate = new Date(Date.now() - 90 * 24 * 60 * 60 * 1000).toISOString().slice(0, 10);
|
|
195
|
+
const taskContent = serializeFrontmatter(createFrontmatter({
|
|
196
|
+
type: "task",
|
|
197
|
+
id: "task-old-001",
|
|
198
|
+
status: "done",
|
|
199
|
+
created: oldDate,
|
|
200
|
+
updated: oldDate,
|
|
201
|
+
}), "\n# Old task\n");
|
|
202
|
+
await ctx.vaultFs.write("projects/my-project/tasks/task-old-001.md", taskContent);
|
|
203
|
+
const result = await pruneCommand({ mode: "delete", project: "my-project", policy: { doneTasks: 30 } }, ctx);
|
|
204
|
+
expect(result).toHaveLength(1);
|
|
205
|
+
expect(result[0].deleted).toHaveLength(1);
|
|
206
|
+
expect(result[0].deleted[0]).toContain("task-old-001");
|
|
207
|
+
const files = await ctx.vaultFs.list("projects/my-project/tasks", 1);
|
|
208
|
+
expect(files.filter((f) => f.endsWith(".md"))).toHaveLength(0);
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
describe("stats", () => {
|
|
212
|
+
it("stats returns task breakdown", async () => {
|
|
213
|
+
await taskCommand({ action: "add", title: "Backlog task", project: "my-project" }, ctx);
|
|
214
|
+
await taskCommand({ action: "add", title: "Active task", project: "my-project" }, ctx);
|
|
215
|
+
await taskCommand({ action: "add", title: "Done task", project: "my-project" }, ctx);
|
|
216
|
+
await taskCommand({ action: "update", taskId: "task-002", status: "in-progress", project: "my-project" }, ctx);
|
|
217
|
+
await taskCommand({ action: "update", taskId: "task-003", status: "done", project: "my-project" }, ctx);
|
|
218
|
+
const stats = await statsCommand({ project: "my-project" }, ctx);
|
|
219
|
+
expect(stats.project).toBe("my-project");
|
|
220
|
+
expect(stats.tasks.total).toBe(3);
|
|
221
|
+
expect(stats.tasks.backlog).toBe(1);
|
|
222
|
+
expect(stats.tasks.inProgress).toBe(1);
|
|
223
|
+
expect(stats.tasks.done).toBe(1);
|
|
224
|
+
});
|
|
225
|
+
it("stats after creating tasks reflects new count", async () => {
|
|
226
|
+
const before = await statsCommand({ project: "my-project" }, ctx);
|
|
227
|
+
expect(before.tasks.total).toBe(0);
|
|
228
|
+
await taskCommand({ action: "add", title: "New task", project: "my-project" }, ctx);
|
|
229
|
+
const after = await statsCommand({ project: "my-project" }, ctx);
|
|
230
|
+
expect(after.tasks.total).toBe(1);
|
|
231
|
+
expect(after.tasks.backlog).toBe(1);
|
|
232
|
+
});
|
|
233
|
+
it("stats includes learning and ADR counts", async () => {
|
|
234
|
+
await learnCommand({
|
|
235
|
+
action: "add",
|
|
236
|
+
title: "Test learning",
|
|
237
|
+
discovery: "Something useful",
|
|
238
|
+
project: "my-project",
|
|
239
|
+
}, ctx);
|
|
240
|
+
await decideCommand({
|
|
241
|
+
title: "Use React",
|
|
242
|
+
context: "Need UI framework",
|
|
243
|
+
decision: "React chosen",
|
|
244
|
+
project: "my-project",
|
|
245
|
+
}, ctx);
|
|
246
|
+
const stats = await statsCommand({ project: "my-project" }, ctx);
|
|
247
|
+
expect(stats.learnings).toBe(1);
|
|
248
|
+
expect(stats.adrs).toBe(1);
|
|
249
|
+
expect(stats.totalFiles).toBeGreaterThanOrEqual(2);
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
describe("deprecate", () => {
|
|
253
|
+
it("deprecate marks vault item with deprecated status", async () => {
|
|
254
|
+
await decideCommand({
|
|
255
|
+
title: "Old decision",
|
|
256
|
+
context: "Initial context",
|
|
257
|
+
decision: "Initial decision",
|
|
258
|
+
project: "my-project",
|
|
259
|
+
}, ctx);
|
|
260
|
+
const adrList = await ctx.vaultFs.list("projects/my-project/decisions", 1);
|
|
261
|
+
const adrPath = adrList.find((f) => f.endsWith(".md"));
|
|
262
|
+
const result = await deprecateCommand({ path: adrPath }, ctx);
|
|
263
|
+
expect(result.path).toBe(adrPath);
|
|
264
|
+
expect(result.status).toBe("deprecated");
|
|
265
|
+
const content = await readCommand({ path: adrPath }, ctx);
|
|
266
|
+
expect(content).toContain("status: deprecated");
|
|
267
|
+
});
|
|
268
|
+
it("deprecate with reason appends deprecation notice", async () => {
|
|
269
|
+
await learnCommand({
|
|
270
|
+
action: "add",
|
|
271
|
+
title: "Outdated learning",
|
|
272
|
+
discovery: "No longer relevant",
|
|
273
|
+
project: "my-project",
|
|
274
|
+
}, ctx);
|
|
275
|
+
const learnList = await ctx.vaultFs.list("projects/my-project/learnings", 1);
|
|
276
|
+
const learnPath = learnList.find((f) => f.endsWith(".md"));
|
|
277
|
+
const reason = "Replaced by new approach";
|
|
278
|
+
await deprecateCommand({ path: learnPath, reason }, ctx);
|
|
279
|
+
const content = await readCommand({ path: learnPath }, ctx);
|
|
280
|
+
expect(content).toContain("status: deprecated");
|
|
281
|
+
expect(content).toContain("Deprecated");
|
|
282
|
+
expect(content).toContain(reason);
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
//# sourceMappingURL=coordination.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordination.test.js","sourceRoot":"","sources":["../../src/integration/coordination.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|