superskill 0.2.0 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/.claude-plugin/marketplace.json +23 -0
  2. package/.claude-plugin/plugin.json +12 -0
  3. package/.mcp.json +9 -0
  4. package/CHANGELOG.md +24 -5
  5. package/LICENSE-COMMERCIAL.md +46 -0
  6. package/README.md +114 -151
  7. package/dist/setup/configure.js +21 -1
  8. package/dist/setup/configure.js.map +1 -1
  9. package/dist/setup/teardown.js +13 -5
  10. package/dist/setup/teardown.js.map +1 -1
  11. package/package.json +8 -2
  12. package/dist/commands/brainstorm.test.d.ts +0 -1
  13. package/dist/commands/brainstorm.test.js +0 -110
  14. package/dist/commands/brainstorm.test.js.map +0 -1
  15. package/dist/commands/context.test.d.ts +0 -1
  16. package/dist/commands/context.test.js +0 -230
  17. package/dist/commands/context.test.js.map +0 -1
  18. package/dist/commands/decide.test.d.ts +0 -1
  19. package/dist/commands/decide.test.js +0 -109
  20. package/dist/commands/decide.test.js.map +0 -1
  21. package/dist/commands/graph.test.d.ts +0 -1
  22. package/dist/commands/graph.test.js +0 -215
  23. package/dist/commands/graph.test.js.map +0 -1
  24. package/dist/commands/learn.test.d.ts +0 -1
  25. package/dist/commands/learn.test.js +0 -241
  26. package/dist/commands/learn.test.js.map +0 -1
  27. package/dist/commands/read.test.d.ts +0 -1
  28. package/dist/commands/read.test.js +0 -48
  29. package/dist/commands/read.test.js.map +0 -1
  30. package/dist/commands/resume.test.d.ts +0 -1
  31. package/dist/commands/resume.test.js +0 -243
  32. package/dist/commands/resume.test.js.map +0 -1
  33. package/dist/commands/search.test.d.ts +0 -1
  34. package/dist/commands/search.test.js +0 -61
  35. package/dist/commands/search.test.js.map +0 -1
  36. package/dist/commands/session.test.d.ts +0 -1
  37. package/dist/commands/session.test.js +0 -231
  38. package/dist/commands/session.test.js.map +0 -1
  39. package/dist/commands/skill/index.test.d.ts +0 -1
  40. package/dist/commands/skill/index.test.js +0 -137
  41. package/dist/commands/skill/index.test.js.map +0 -1
  42. package/dist/commands/skill/install.test.d.ts +0 -1
  43. package/dist/commands/skill/install.test.js +0 -225
  44. package/dist/commands/skill/install.test.js.map +0 -1
  45. package/dist/commands/skill/list.test.d.ts +0 -1
  46. package/dist/commands/skill/list.test.js +0 -101
  47. package/dist/commands/skill/list.test.js.map +0 -1
  48. package/dist/commands/skill/schema.test.d.ts +0 -1
  49. package/dist/commands/skill/schema.test.js +0 -142
  50. package/dist/commands/skill/schema.test.js.map +0 -1
  51. package/dist/commands/skill/validate.test.d.ts +0 -1
  52. package/dist/commands/skill/validate.test.js +0 -171
  53. package/dist/commands/skill/validate.test.js.map +0 -1
  54. package/dist/commands/task.test.d.ts +0 -1
  55. package/dist/commands/task.test.js +0 -395
  56. package/dist/commands/task.test.js.map +0 -1
  57. package/dist/commands/todo.test.d.ts +0 -1
  58. package/dist/commands/todo.test.js +0 -324
  59. package/dist/commands/todo.test.js.map +0 -1
  60. package/dist/commands/write.test.d.ts +0 -1
  61. package/dist/commands/write.test.js +0 -79
  62. package/dist/commands/write.test.js.map +0 -1
  63. package/dist/config.test.d.ts +0 -1
  64. package/dist/config.test.js +0 -147
  65. package/dist/config.test.js.map +0 -1
  66. package/dist/core/executor.test.d.ts +0 -1
  67. package/dist/core/executor.test.js +0 -206
  68. package/dist/core/executor.test.js.map +0 -1
  69. package/dist/core/registry.test.d.ts +0 -1
  70. package/dist/core/registry.test.js +0 -213
  71. package/dist/core/registry.test.js.map +0 -1
  72. package/dist/integration/coordination.test.d.ts +0 -1
  73. package/dist/integration/coordination.test.js +0 -286
  74. package/dist/integration/coordination.test.js.map +0 -1
  75. package/dist/integration/project-artifacts.test.d.ts +0 -1
  76. package/dist/integration/project-artifacts.test.js +0 -275
  77. package/dist/integration/project-artifacts.test.js.map +0 -1
  78. package/dist/integration/registry-graph.test.d.ts +0 -1
  79. package/dist/integration/registry-graph.test.js +0 -157
  80. package/dist/integration/registry-graph.test.js.map +0 -1
  81. package/dist/integration/vault-lifecycle.test.d.ts +0 -1
  82. package/dist/integration/vault-lifecycle.test.js +0 -183
  83. package/dist/integration/vault-lifecycle.test.js.map +0 -1
  84. package/dist/lib/auto-number.test.d.ts +0 -1
  85. package/dist/lib/auto-number.test.js +0 -88
  86. package/dist/lib/auto-number.test.js.map +0 -1
  87. package/dist/lib/auto-profile.test.d.ts +0 -1
  88. package/dist/lib/auto-profile.test.js +0 -227
  89. package/dist/lib/auto-profile.test.js.map +0 -1
  90. package/dist/lib/escape-regex.test.d.ts +0 -1
  91. package/dist/lib/escape-regex.test.js +0 -27
  92. package/dist/lib/escape-regex.test.js.map +0 -1
  93. package/dist/lib/frontmatter.test.d.ts +0 -1
  94. package/dist/lib/frontmatter.test.js +0 -192
  95. package/dist/lib/frontmatter.test.js.map +0 -1
  96. package/dist/lib/project-detector.test.d.ts +0 -1
  97. package/dist/lib/project-detector.test.js +0 -117
  98. package/dist/lib/project-detector.test.js.map +0 -1
  99. package/dist/lib/safe-external-path.test.d.ts +0 -1
  100. package/dist/lib/safe-external-path.test.js +0 -99
  101. package/dist/lib/safe-external-path.test.js.map +0 -1
  102. package/dist/lib/search-engine.test.d.ts +0 -1
  103. package/dist/lib/search-engine.test.js +0 -120
  104. package/dist/lib/search-engine.test.js.map +0 -1
  105. package/dist/lib/session-registry.test.d.ts +0 -1
  106. package/dist/lib/session-registry.test.js +0 -199
  107. package/dist/lib/session-registry.test.js.map +0 -1
  108. package/dist/lib/stack-detector.test.d.ts +0 -1
  109. package/dist/lib/stack-detector.test.js +0 -110
  110. package/dist/lib/stack-detector.test.js.map +0 -1
  111. package/dist/lib/token-estimator.test.d.ts +0 -1
  112. package/dist/lib/token-estimator.test.js +0 -65
  113. package/dist/lib/token-estimator.test.js.map +0 -1
  114. package/dist/lib/tool-detector.test.d.ts +0 -1
  115. package/dist/lib/tool-detector.test.js +0 -170
  116. package/dist/lib/tool-detector.test.js.map +0 -1
  117. package/dist/lib/vault-fs.test.d.ts +0 -1
  118. package/dist/lib/vault-fs.test.js +0 -210
  119. package/dist/lib/vault-fs.test.js.map +0 -1
  120. package/dist/setup/configure.test.d.ts +0 -1
  121. package/dist/setup/configure.test.js +0 -112
  122. package/dist/setup/configure.test.js.map +0 -1
  123. package/dist/setup/detect.test.d.ts +0 -1
  124. package/dist/setup/detect.test.js +0 -44
  125. package/dist/setup/detect.test.js.map +0 -1
  126. package/dist/setup/instructions.test.d.ts +0 -1
  127. package/dist/setup/instructions.test.js +0 -84
  128. package/dist/setup/instructions.test.js.map +0 -1
  129. package/dist/setup/json-config.test.d.ts +0 -1
  130. package/dist/setup/json-config.test.js +0 -92
  131. package/dist/setup/json-config.test.js.map +0 -1
  132. package/dist/setup/setup-integration.test.d.ts +0 -1
  133. package/dist/setup/setup-integration.test.js +0 -72
  134. package/dist/setup/setup-integration.test.js.map +0 -1
  135. package/dist/setup/teardown.test.d.ts +0 -1
  136. package/dist/setup/teardown.test.js +0 -105
  137. package/dist/setup/teardown.test.js.map +0 -1
  138. package/dist/setup/toml-config.test.d.ts +0 -1
  139. package/dist/setup/toml-config.test.js +0 -49
  140. package/dist/setup/toml-config.test.js.map +0 -1
  141. package/dist/test-helpers.test.d.ts +0 -1
  142. package/dist/test-helpers.test.js +0 -90
  143. package/dist/test-helpers.test.js.map +0 -1
@@ -1,110 +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 { brainstormCommand } from "./brainstorm.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("brainstormCommand", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("create new brainstorm", () => {
31
- it("creates new brainstorm file with frontmatter", async () => {
32
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
33
- await mkdir(join(vaultRoot, "projects/test-project/brainstorms"), { recursive: true });
34
- const result = await brainstormCommand({
35
- topic: "My Brainstorm",
36
- content: "First idea",
37
- project: "test-project",
38
- }, ctx);
39
- expect(result.path).toBe("projects/test-project/brainstorms/my-brainstorm.md");
40
- expect(result.total_entries).toBe(1);
41
- const content = await vaultFs.read(result.path);
42
- expect(content).toContain("type: brainstorm");
43
- expect(content).toContain("project: test-project");
44
- expect(content).toContain("# My Brainstorm");
45
- expect(content).toContain("First idea");
46
- });
47
- it("creates frontmatter with draft status", async () => {
48
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
49
- await mkdir(join(vaultRoot, "projects/test-project/brainstorms"), { recursive: true });
50
- const result = await brainstormCommand({
51
- topic: "Test Topic",
52
- content: "content",
53
- project: "test-project",
54
- }, ctx);
55
- const content = await vaultFs.read(result.path);
56
- expect(content).toContain("status: draft");
57
- });
58
- it("slugifies topic with special characters", async () => {
59
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
60
- await mkdir(join(vaultRoot, "projects/test-project/brainstorms"), { recursive: true });
61
- const result = await brainstormCommand({
62
- topic: "My Special Topic! @#$",
63
- content: "content",
64
- project: "test-project",
65
- }, ctx);
66
- expect(result.path).toContain("my-special-topic");
67
- });
68
- });
69
- describe("append to existing brainstorm", () => {
70
- it("appends new entry to existing brainstorm", async () => {
71
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
72
- await mkdir(join(vaultRoot, "projects/test-project/brainstorms"), { recursive: true });
73
- await brainstormCommand({
74
- topic: "Existing Topic",
75
- content: "First entry",
76
- project: "test-project",
77
- }, ctx);
78
- const result = await brainstormCommand({
79
- topic: "Existing Topic",
80
- content: "Second entry",
81
- project: "test-project",
82
- }, ctx);
83
- expect(result.total_entries).toBe(2);
84
- const content = await vaultFs.read(result.path);
85
- expect(content).toContain("First entry");
86
- expect(content).toContain("Second entry");
87
- });
88
- it("counts entries correctly after multiple appends", async () => {
89
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
90
- await mkdir(join(vaultRoot, "projects/test-project/brainstorms"), { recursive: true });
91
- await brainstormCommand({
92
- topic: "Multi Entry",
93
- content: "Entry 1",
94
- project: "test-project",
95
- }, ctx);
96
- await brainstormCommand({
97
- topic: "Multi Entry",
98
- content: "Entry 2",
99
- project: "test-project",
100
- }, ctx);
101
- const result = await brainstormCommand({
102
- topic: "Multi Entry",
103
- content: "Entry 3",
104
- project: "test-project",
105
- }, ctx);
106
- expect(result.total_entries).toBe(3);
107
- });
108
- });
109
- });
110
- //# sourceMappingURL=brainstorm.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brainstorm.test.js","sourceRoot":"","sources":["../../src/commands/brainstorm.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,230 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { contextCommand } from "./context.js";
6
- import { VaultFS } from "../lib/vault-fs.js";
7
- function createCommandContext(vaultFs, overrides) {
8
- return {
9
- vaultFs,
10
- vaultPath: vaultFs.root,
11
- sessionRegistry: {},
12
- config: {},
13
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
14
- ...overrides,
15
- };
16
- }
17
- describe("contextCommand", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("missing context file", () => {
31
- it("returns message when context file does not exist", async () => {
32
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
33
- const result = await contextCommand({
34
- project: "test-project",
35
- }, ctx);
36
- expect(result.project_slug).toBe("test-project");
37
- expect(result.context_md).toContain("No context file found");
38
- expect(result.token_estimate).toBe(20);
39
- expect(result.sections).toEqual([]);
40
- expect(result.truncated).toBe(false);
41
- });
42
- });
43
- describe("summary mode (default)", () => {
44
- it("returns context content with truncation if over budget", async () => {
45
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
46
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
47
- const longContent = "a".repeat(10000);
48
- await vaultFs.write(`projects/test-project/context.md`, `---
49
- type: context
50
- project: test-project
51
- ---
52
-
53
- # Project Context
54
-
55
- ## Overview
56
-
57
- ${longContent}
58
-
59
- ## Details
60
-
61
- More content here.
62
- `);
63
- const result = await contextCommand({
64
- project: "test-project",
65
- maxTokens: 100,
66
- }, ctx);
67
- expect(result.truncated).toBe(true);
68
- expect(result.token_estimate).toBeLessThan(100);
69
- });
70
- it("extracts section headings", async () => {
71
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
72
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
73
- await vaultFs.write(`projects/test-project/context.md`, `---
74
- type: context
75
- project: test-project
76
- ---
77
-
78
- # Project Context
79
-
80
- ## Overview
81
-
82
- Overview content.
83
-
84
- ## Tech Stack
85
-
86
- Stack details.
87
-
88
- ## Architecture
89
-
90
- Arch details.
91
- `);
92
- const result = await contextCommand({
93
- project: "test-project",
94
- }, ctx);
95
- expect(result.sections).toContain("Overview");
96
- expect(result.sections).toContain("Tech Stack");
97
- expect(result.sections).toContain("Architecture");
98
- });
99
- });
100
- describe("full mode", () => {
101
- it("returns full context without truncation", async () => {
102
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
103
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
104
- const longContent = "a".repeat(10000);
105
- await vaultFs.write(`projects/test-project/context.md`, `---
106
- type: context
107
- ---
108
-
109
- # Project Context
110
-
111
- ${longContent}
112
- `);
113
- const result = await contextCommand({
114
- project: "test-project",
115
- detailLevel: "full",
116
- }, ctx);
117
- expect(result.truncated).toBe(false);
118
- expect(result.context_md).toContain(longContent);
119
- expect(result.token_estimate).toBeGreaterThan(2000);
120
- });
121
- });
122
- describe("learning count", () => {
123
- it("counts learning files", async () => {
124
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
125
- await mkdir(join(vaultRoot, "projects/test-project/learnings"), { recursive: true });
126
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
127
- await vaultFs.write(`projects/test-project/context.md`, `---
128
- type: context
129
- ---
130
-
131
- # Context
132
- `);
133
- await vaultFs.write(`projects/test-project/learnings/001-test.md`, `---
134
- type: learning
135
- ---
136
-
137
- # Learning 1
138
- `);
139
- await vaultFs.write(`projects/test-project/learnings/002-test.md`, `---
140
- type: learning
141
- ---
142
-
143
- # Learning 2
144
- `);
145
- const result = await contextCommand({
146
- project: "test-project",
147
- }, ctx);
148
- expect(result.learning_count).toBe(2);
149
- });
150
- it("returns 0 when learnings directory does not exist", async () => {
151
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
152
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
153
- await vaultFs.write(`projects/test-project/context.md`, `---
154
- type: context
155
- ---
156
-
157
- # Context
158
- `);
159
- const result = await contextCommand({
160
- project: "test-project",
161
- }, ctx);
162
- expect(result.learning_count).toBe(0);
163
- });
164
- });
165
- describe("last session", () => {
166
- it("extracts last session info", async () => {
167
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
168
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
169
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
170
- await vaultFs.write(`projects/test-project/context.md`, `---
171
- type: context
172
- ---
173
-
174
- # Context
175
- `);
176
- await vaultFs.write(`projects/test-project/sessions/2024-01-15-session-abc123.md`, `---
177
- type: session
178
- outcome: Implemented feature X
179
- completed_at: "2024-01-15T10:30:00Z"
180
- ---
181
-
182
- # Session
183
- `);
184
- const result = await contextCommand({
185
- project: "test-project",
186
- }, ctx);
187
- expect(result.last_session).not.toBeNull();
188
- expect(result.last_session.outcome).toBe("Implemented feature X");
189
- expect(result.last_session.completed_at).toBe("2024-01-15T10:30:00Z");
190
- });
191
- it("returns null when no sessions exist", async () => {
192
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
193
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
194
- await vaultFs.write(`projects/test-project/context.md`, `---
195
- type: context
196
- ---
197
-
198
- # Context
199
- `);
200
- const result = await contextCommand({
201
- project: "test-project",
202
- }, ctx);
203
- expect(result.last_session).toBeNull();
204
- });
205
- it("falls back to created date if completed_at missing", async () => {
206
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
207
- await mkdir(join(vaultRoot, "projects/test-project/sessions"), { recursive: true });
208
- await mkdir(join(vaultRoot, "projects/test-project"), { recursive: true });
209
- await vaultFs.write(`projects/test-project/context.md`, `---
210
- type: context
211
- ---
212
-
213
- # Context
214
- `);
215
- await vaultFs.write(`projects/test-project/sessions/2024-01-15-session-abc.md`, `---
216
- type: session
217
- outcome: Test session
218
- created: "2024-01-15"
219
- ---
220
-
221
- # Session
222
- `);
223
- const result = await contextCommand({
224
- project: "test-project",
225
- }, ctx);
226
- expect(result.last_session.completed_at).toBe("2024-01-15");
227
- });
228
- });
229
- });
230
- //# sourceMappingURL=context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.test.js","sourceRoot":"","sources":["../../src/commands/context.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,109 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { mkdir, rm } from "fs/promises";
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { decideCommand } from "./decide.js";
6
- import { VaultFS } from "../lib/vault-fs.js";
7
- function createCommandContext(vaultFs, overrides) {
8
- return {
9
- vaultFs,
10
- vaultPath: vaultFs.root,
11
- sessionRegistry: {},
12
- config: {},
13
- log: { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() },
14
- ...overrides,
15
- };
16
- }
17
- describe("decideCommand", () => {
18
- let vaultRoot;
19
- let vaultFs;
20
- let ctx;
21
- beforeEach(async () => {
22
- vaultRoot = join(homedir(), `.vault-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
23
- await mkdir(vaultRoot, { recursive: true });
24
- vaultFs = new VaultFS(vaultRoot);
25
- ctx = createCommandContext(vaultFs);
26
- });
27
- afterEach(async () => {
28
- await rm(vaultRoot, { recursive: true, force: true });
29
- });
30
- describe("create ADR", () => {
31
- it("creates ADR with auto-numbering", async () => {
32
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
33
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
34
- const result = await decideCommand({
35
- title: "Use TypeScript",
36
- context: "We need type safety",
37
- decision: "Adopt TypeScript for all new code",
38
- project: "test-project",
39
- }, ctx);
40
- expect(result.decision_number).toBe(1);
41
- expect(result.path).toBe("projects/test-project/decisions/001-use-typescript.md");
42
- const content = await vaultFs.read(result.path);
43
- expect(content).toContain("type: adr");
44
- expect(content).toContain("project: test-project");
45
- expect(content).toContain("status: active");
46
- expect(content).toContain("# ADR-001: Use TypeScript");
47
- expect(content).toContain("We need type safety");
48
- expect(content).toContain("Adopt TypeScript for all new code");
49
- });
50
- it("increments ADR number for subsequent decisions", async () => {
51
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
52
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
53
- const result1 = await decideCommand({
54
- title: "First Decision",
55
- context: "Context 1",
56
- decision: "Decision 1",
57
- project: "test-project",
58
- }, ctx);
59
- const result2 = await decideCommand({
60
- title: "Second Decision",
61
- context: "Context 2",
62
- decision: "Decision 2",
63
- project: "test-project",
64
- }, ctx);
65
- expect(result1.decision_number).toBe(1);
66
- expect(result2.decision_number).toBe(2);
67
- });
68
- it("includes alternatives and consequences when provided", async () => {
69
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
70
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
71
- const result = await decideCommand({
72
- title: "Database Choice",
73
- context: "Need a database",
74
- decision: "Use PostgreSQL",
75
- alternatives: "Considered MySQL and MongoDB",
76
- consequences: "Requires DevOps expertise",
77
- project: "test-project",
78
- }, ctx);
79
- const content = await vaultFs.read(result.path);
80
- expect(content).toContain("Considered MySQL and MongoDB");
81
- expect(content).toContain("Requires DevOps expertise");
82
- });
83
- it("uses defaults for missing alternatives and consequences", async () => {
84
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
85
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
86
- const result = await decideCommand({
87
- title: "Simple Decision",
88
- context: "Simple context",
89
- decision: "Simple decision",
90
- project: "test-project",
91
- }, ctx);
92
- const content = await vaultFs.read(result.path);
93
- expect(content).toContain("None documented.");
94
- expect(content).toContain("To be evaluated.");
95
- });
96
- it("slugifies title correctly", async () => {
97
- await vaultFs.write("project-map.json", JSON.stringify({ projects: { "test-project": "/tmp/test" } }));
98
- await mkdir(join(vaultRoot, "projects/test-project/decisions"), { recursive: true });
99
- const result = await decideCommand({
100
- title: "Use React & TypeScript!",
101
- context: "Context",
102
- decision: "Decision",
103
- project: "test-project",
104
- }, ctx);
105
- expect(result.path).toContain("use-react-typescript");
106
- });
107
- });
108
- });
109
- //# sourceMappingURL=decide.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decide.test.js","sourceRoot":"","sources":["../../src/commands/decide.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};