nightshift-mcp 1.0.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.
Files changed (74) hide show
  1. package/README.md +670 -0
  2. package/dist/agent-spawner.d.ts +55 -0
  3. package/dist/agent-spawner.d.ts.map +1 -0
  4. package/dist/agent-spawner.js +468 -0
  5. package/dist/agent-spawner.js.map +1 -0
  6. package/dist/chat-manager.d.ts +72 -0
  7. package/dist/chat-manager.d.ts.map +1 -0
  8. package/dist/chat-manager.js +331 -0
  9. package/dist/chat-manager.js.map +1 -0
  10. package/dist/daemon.d.ts +65 -0
  11. package/dist/daemon.d.ts.map +1 -0
  12. package/dist/daemon.js +563 -0
  13. package/dist/daemon.js.map +1 -0
  14. package/dist/file-lock.d.ts +41 -0
  15. package/dist/file-lock.d.ts.map +1 -0
  16. package/dist/file-lock.js +157 -0
  17. package/dist/file-lock.js.map +1 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +2433 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/ralph-manager.d.ts +148 -0
  23. package/dist/ralph-manager.d.ts.map +1 -0
  24. package/dist/ralph-manager.js +399 -0
  25. package/dist/ralph-manager.js.map +1 -0
  26. package/dist/tool-registry.d.ts +130 -0
  27. package/dist/tool-registry.d.ts.map +1 -0
  28. package/dist/tool-registry.js +280 -0
  29. package/dist/tool-registry.js.map +1 -0
  30. package/dist/tools/agents.d.ts +7 -0
  31. package/dist/tools/agents.d.ts.map +1 -0
  32. package/dist/tools/agents.js +366 -0
  33. package/dist/tools/agents.js.map +1 -0
  34. package/dist/tools/bugs.d.ts +6 -0
  35. package/dist/tools/bugs.d.ts.map +1 -0
  36. package/dist/tools/bugs.js +184 -0
  37. package/dist/tools/bugs.js.map +1 -0
  38. package/dist/tools/chat.d.ts +10 -0
  39. package/dist/tools/chat.d.ts.map +1 -0
  40. package/dist/tools/chat.js +287 -0
  41. package/dist/tools/chat.js.map +1 -0
  42. package/dist/tools/index.d.ts +33 -0
  43. package/dist/tools/index.d.ts.map +1 -0
  44. package/dist/tools/index.js +51 -0
  45. package/dist/tools/index.js.map +1 -0
  46. package/dist/tools/prd.d.ts +8 -0
  47. package/dist/tools/prd.d.ts.map +1 -0
  48. package/dist/tools/prd.js +275 -0
  49. package/dist/tools/prd.js.map +1 -0
  50. package/dist/tools/progress.d.ts +5 -0
  51. package/dist/tools/progress.d.ts.map +1 -0
  52. package/dist/tools/progress.js +81 -0
  53. package/dist/tools/progress.js.map +1 -0
  54. package/dist/tools/savepoints.d.ts +5 -0
  55. package/dist/tools/savepoints.d.ts.map +1 -0
  56. package/dist/tools/savepoints.js +100 -0
  57. package/dist/tools/savepoints.js.map +1 -0
  58. package/dist/tools/utility.d.ts +4 -0
  59. package/dist/tools/utility.d.ts.map +1 -0
  60. package/dist/tools/utility.js +375 -0
  61. package/dist/tools/utility.js.map +1 -0
  62. package/dist/tools/workflow.d.ts +10 -0
  63. package/dist/tools/workflow.d.ts.map +1 -0
  64. package/dist/tools/workflow.js +321 -0
  65. package/dist/tools/workflow.js.map +1 -0
  66. package/dist/types.d.ts +105 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/workflow-manager.d.ts +154 -0
  71. package/dist/workflow-manager.d.ts.map +1 -0
  72. package/dist/workflow-manager.js +356 -0
  73. package/dist/workflow-manager.js.map +1 -0
  74. package/package.json +48 -0
@@ -0,0 +1,399 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ import { execSync } from "child_process";
4
+ /**
5
+ * Manages Ralph-style PRD and progress file operations
6
+ */
7
+ export class RalphManager {
8
+ projectPath;
9
+ prdFile;
10
+ progressFile;
11
+ bugsFile;
12
+ constructor(projectPath) {
13
+ this.projectPath = projectPath;
14
+ this.prdFile = path.join(projectPath, "prd.json");
15
+ this.progressFile = path.join(projectPath, "progress.txt");
16
+ this.bugsFile = path.join(projectPath, "bugs.json");
17
+ }
18
+ /**
19
+ * Check if a PRD file exists
20
+ */
21
+ hasPRD() {
22
+ return fs.existsSync(this.prdFile);
23
+ }
24
+ /**
25
+ * Read and parse the PRD file
26
+ */
27
+ readPRD() {
28
+ if (!this.hasPRD()) {
29
+ return null;
30
+ }
31
+ try {
32
+ const content = fs.readFileSync(this.prdFile, "utf-8");
33
+ return JSON.parse(content);
34
+ }
35
+ catch (error) {
36
+ throw new Error(`Failed to parse PRD: ${error instanceof Error ? error.message : String(error)}`);
37
+ }
38
+ }
39
+ /**
40
+ * Write the PRD file
41
+ */
42
+ writePRD(prd) {
43
+ fs.writeFileSync(this.prdFile, JSON.stringify(prd, null, 2), "utf-8");
44
+ }
45
+ /**
46
+ * Get the next story to work on (highest priority with passes: false)
47
+ */
48
+ getNextStory() {
49
+ const prd = this.readPRD();
50
+ if (!prd)
51
+ return null;
52
+ const incompleteStories = prd.userStories
53
+ .filter((s) => !s.passes)
54
+ .sort((a, b) => a.priority - b.priority);
55
+ return incompleteStories[0] || null;
56
+ }
57
+ /**
58
+ * Get a specific story by ID
59
+ */
60
+ getStory(storyId) {
61
+ const prd = this.readPRD();
62
+ if (!prd)
63
+ return null;
64
+ return prd.userStories.find((s) => s.id === storyId) || null;
65
+ }
66
+ /**
67
+ * Get all incomplete stories
68
+ */
69
+ getIncompleteStories() {
70
+ const prd = this.readPRD();
71
+ if (!prd)
72
+ return [];
73
+ return prd.userStories
74
+ .filter((s) => !s.passes)
75
+ .sort((a, b) => a.priority - b.priority);
76
+ }
77
+ /**
78
+ * Get all complete stories
79
+ */
80
+ getCompleteStories() {
81
+ const prd = this.readPRD();
82
+ if (!prd)
83
+ return [];
84
+ return prd.userStories.filter((s) => s.passes);
85
+ }
86
+ /**
87
+ * Mark a story as complete (passes: true)
88
+ */
89
+ markStoryComplete(storyId, notes) {
90
+ const prd = this.readPRD();
91
+ if (!prd)
92
+ return null;
93
+ const story = prd.userStories.find((s) => s.id === storyId);
94
+ if (!story)
95
+ return null;
96
+ story.passes = true;
97
+ if (notes) {
98
+ story.notes = notes;
99
+ }
100
+ this.writePRD(prd);
101
+ return story;
102
+ }
103
+ /**
104
+ * Update a story's notes
105
+ */
106
+ updateStoryNotes(storyId, notes) {
107
+ const prd = this.readPRD();
108
+ if (!prd)
109
+ return null;
110
+ const story = prd.userStories.find((s) => s.id === storyId);
111
+ if (!story)
112
+ return null;
113
+ story.notes = notes;
114
+ this.writePRD(prd);
115
+ return story;
116
+ }
117
+ /**
118
+ * Check if all stories are complete
119
+ */
120
+ isAllComplete() {
121
+ const prd = this.readPRD();
122
+ if (!prd)
123
+ return false;
124
+ return prd.userStories.every((s) => s.passes);
125
+ }
126
+ /**
127
+ * Get completion summary
128
+ */
129
+ getCompletionSummary() {
130
+ const prd = this.readPRD();
131
+ if (!prd) {
132
+ return { total: 0, complete: 0, incomplete: 0, percentComplete: 0 };
133
+ }
134
+ const total = prd.userStories.length;
135
+ const complete = prd.userStories.filter((s) => s.passes).length;
136
+ const incomplete = total - complete;
137
+ const percentComplete = total > 0 ? Math.round((complete / total) * 100) : 0;
138
+ return { total, complete, incomplete, percentComplete };
139
+ }
140
+ /**
141
+ * Check if progress file exists
142
+ */
143
+ hasProgressFile() {
144
+ return fs.existsSync(this.progressFile);
145
+ }
146
+ /**
147
+ * Read the progress file
148
+ */
149
+ readProgress() {
150
+ if (!this.hasProgressFile()) {
151
+ return "";
152
+ }
153
+ return fs.readFileSync(this.progressFile, "utf-8");
154
+ }
155
+ /**
156
+ * Initialize the progress file
157
+ */
158
+ initProgressFile() {
159
+ if (this.hasProgressFile())
160
+ return;
161
+ const header = `# Ralph Progress Log
162
+ Started: ${new Date().toISOString()}
163
+ ---
164
+
165
+ ## Codebase Patterns
166
+ (Add reusable patterns discovered during development here)
167
+
168
+ ---
169
+
170
+ `;
171
+ fs.writeFileSync(this.progressFile, header, "utf-8");
172
+ }
173
+ /**
174
+ * Append to the progress file
175
+ */
176
+ appendProgress(content) {
177
+ this.initProgressFile();
178
+ const timestamp = new Date().toISOString();
179
+ const entry = `\n## ${timestamp}\n${content}\n---\n`;
180
+ fs.appendFileSync(this.progressFile, entry, "utf-8");
181
+ }
182
+ /**
183
+ * Add a codebase pattern to the progress file
184
+ */
185
+ addCodebasePattern(pattern) {
186
+ if (!this.hasProgressFile()) {
187
+ this.initProgressFile();
188
+ }
189
+ const content = this.readProgress();
190
+ const patternSection = "## Codebase Patterns";
191
+ const idx = content.indexOf(patternSection);
192
+ if (idx === -1) {
193
+ // Pattern section doesn't exist, add it
194
+ this.initProgressFile();
195
+ return this.addCodebasePattern(pattern);
196
+ }
197
+ // Find the end of the patterns section (next ## or ---)
198
+ const afterSection = content.substring(idx + patternSection.length);
199
+ const endIdx = afterSection.search(/\n## |\n---/);
200
+ const patternsContent = endIdx === -1 ? afterSection : afterSection.substring(0, endIdx);
201
+ // Add new pattern
202
+ const newPattern = `- ${pattern}\n`;
203
+ const updatedContent = content.substring(0, idx + patternSection.length) +
204
+ patternsContent.trimEnd() +
205
+ "\n" +
206
+ newPattern +
207
+ (endIdx === -1 ? "" : afterSection.substring(endIdx));
208
+ fs.writeFileSync(this.progressFile, updatedContent, "utf-8");
209
+ }
210
+ /**
211
+ * Get file paths
212
+ */
213
+ getPRDPath() {
214
+ return this.prdFile;
215
+ }
216
+ getProgressPath() {
217
+ return this.progressFile;
218
+ }
219
+ // ============================================
220
+ // Bugs Management
221
+ // ============================================
222
+ /**
223
+ * Check if a bugs file exists
224
+ */
225
+ hasBugs() {
226
+ return fs.existsSync(this.bugsFile);
227
+ }
228
+ /**
229
+ * Read and parse the bugs file
230
+ */
231
+ readBugs() {
232
+ if (!this.hasBugs()) {
233
+ return null;
234
+ }
235
+ try {
236
+ const content = fs.readFileSync(this.bugsFile, "utf-8");
237
+ return JSON.parse(content);
238
+ }
239
+ catch (error) {
240
+ throw new Error(`Failed to parse bugs.json: ${error instanceof Error ? error.message : String(error)}`);
241
+ }
242
+ }
243
+ /**
244
+ * Write the bugs file
245
+ */
246
+ writeBugs(bugList) {
247
+ fs.writeFileSync(this.bugsFile, JSON.stringify(bugList, null, 2), "utf-8");
248
+ }
249
+ /**
250
+ * Get the next bug to fix (highest priority unfixed)
251
+ */
252
+ getNextBug() {
253
+ const bugList = this.readBugs();
254
+ if (!bugList)
255
+ return null;
256
+ const unfixed = bugList.bugs
257
+ .filter((b) => !b.fixed)
258
+ .sort((a, b) => a.priority - b.priority);
259
+ return unfixed[0] || null;
260
+ }
261
+ /**
262
+ * Get a specific bug by ID
263
+ */
264
+ getBug(bugId) {
265
+ const bugList = this.readBugs();
266
+ if (!bugList)
267
+ return null;
268
+ return bugList.bugs.find((b) => b.id === bugId) || null;
269
+ }
270
+ /**
271
+ * Get all unfixed bugs
272
+ */
273
+ getUnfixedBugs() {
274
+ const bugList = this.readBugs();
275
+ if (!bugList)
276
+ return [];
277
+ return bugList.bugs
278
+ .filter((b) => !b.fixed)
279
+ .sort((a, b) => a.priority - b.priority);
280
+ }
281
+ /**
282
+ * Mark a bug as fixed
283
+ */
284
+ markBugFixed(bugId, notes) {
285
+ const bugList = this.readBugs();
286
+ if (!bugList)
287
+ return null;
288
+ const bug = bugList.bugs.find((b) => b.id === bugId);
289
+ if (!bug)
290
+ return null;
291
+ bug.fixed = true;
292
+ if (notes) {
293
+ bug.notes = notes;
294
+ }
295
+ this.writeBugs(bugList);
296
+ return bug;
297
+ }
298
+ /**
299
+ * Get bugs completion summary
300
+ */
301
+ getBugsSummary() {
302
+ const bugList = this.readBugs();
303
+ if (!bugList) {
304
+ return { total: 0, fixed: 0, unfixed: 0, percentFixed: 0 };
305
+ }
306
+ const total = bugList.bugs.length;
307
+ const fixed = bugList.bugs.filter((b) => b.fixed).length;
308
+ const unfixed = total - fixed;
309
+ const percentFixed = total > 0 ? Math.round((fixed / total) * 100) : 0;
310
+ return { total, fixed, unfixed, percentFixed };
311
+ }
312
+ /**
313
+ * Check if all work is complete (stories + bugs)
314
+ */
315
+ isAllWorkComplete() {
316
+ const storiesComplete = this.isAllComplete();
317
+ const bugsSummary = this.getBugsSummary();
318
+ const bugsComplete = bugsSummary.total === 0 || bugsSummary.unfixed === 0;
319
+ return storiesComplete && bugsComplete;
320
+ }
321
+ getBugsPath() {
322
+ return this.bugsFile;
323
+ }
324
+ // ============================================
325
+ // Savepoints
326
+ // ============================================
327
+ /**
328
+ * Create a savepoint (git commit + tag)
329
+ * Returns the tag name if successful, null if failed
330
+ */
331
+ createSavepoint(label, message) {
332
+ const tag = `savepoint/${label}`;
333
+ const commitMessage = message || `savepoint: ${label}`;
334
+ try {
335
+ // Check if we're in a git repo
336
+ execSync("git rev-parse --git-dir", {
337
+ cwd: this.projectPath,
338
+ stdio: "pipe",
339
+ });
340
+ // Check if there are changes to commit
341
+ const status = execSync("git status --porcelain", {
342
+ cwd: this.projectPath,
343
+ encoding: "utf-8",
344
+ }).trim();
345
+ if (status) {
346
+ // Stage all changes and commit
347
+ execSync("git add -A", { cwd: this.projectPath, stdio: "pipe" });
348
+ execSync(`git commit -m "${commitMessage}"`, {
349
+ cwd: this.projectPath,
350
+ stdio: "pipe",
351
+ });
352
+ }
353
+ // Create the tag (force to overwrite if exists)
354
+ execSync(`git tag -f ${tag}`, { cwd: this.projectPath, stdio: "pipe" });
355
+ return { success: true, tag };
356
+ }
357
+ catch (error) {
358
+ return {
359
+ success: false,
360
+ error: error instanceof Error ? error.message : String(error),
361
+ };
362
+ }
363
+ }
364
+ /**
365
+ * List all savepoints
366
+ */
367
+ listSavepoints() {
368
+ try {
369
+ const output = execSync("git tag -l 'savepoint/*'", {
370
+ cwd: this.projectPath,
371
+ encoding: "utf-8",
372
+ });
373
+ return output.trim().split("\n").filter(Boolean);
374
+ }
375
+ catch {
376
+ return [];
377
+ }
378
+ }
379
+ /**
380
+ * Rollback to a savepoint
381
+ */
382
+ rollbackToSavepoint(tag) {
383
+ try {
384
+ const fullTag = tag.startsWith("savepoint/") ? tag : `savepoint/${tag}`;
385
+ execSync(`git reset --hard ${fullTag}`, {
386
+ cwd: this.projectPath,
387
+ stdio: "pipe",
388
+ });
389
+ return { success: true };
390
+ }
391
+ catch (error) {
392
+ return {
393
+ success: false,
394
+ error: error instanceof Error ? error.message : String(error),
395
+ };
396
+ }
397
+ }
398
+ }
399
+ //# sourceMappingURL=ralph-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ralph-manager.js","sourceRoot":"","sources":["../src/ralph-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { z, type ZodObject, type ZodRawShape } from "zod";
2
+ /**
3
+ * Context passed to tool handlers
4
+ */
5
+ export interface ToolContext {
6
+ chatManager: any;
7
+ ralphManager: any;
8
+ workflowManager: any;
9
+ projectPath: string;
10
+ }
11
+ /**
12
+ * Result returned by tool handlers
13
+ */
14
+ export interface ToolResult {
15
+ content: Array<{
16
+ type: "text";
17
+ text: string;
18
+ }>;
19
+ isError?: boolean;
20
+ [key: string]: unknown;
21
+ }
22
+ /**
23
+ * Summary of a tool for help/listing
24
+ */
25
+ export interface ToolSummary {
26
+ name: string;
27
+ category: string;
28
+ description: string;
29
+ }
30
+ /**
31
+ * Full tool definition including schema and handler
32
+ * Uses 'any' for handler params to allow variance in tool definitions
33
+ */
34
+ export interface ToolDefinition {
35
+ name: string;
36
+ category: string;
37
+ description: string;
38
+ fullDescription: string;
39
+ inputSchema: ZodObject<any>;
40
+ handler: (params: any, context: ToolContext) => Promise<ToolResult>;
41
+ }
42
+ /**
43
+ * Detailed schema info for help output
44
+ */
45
+ export interface SchemaInfo {
46
+ name: string;
47
+ description: string;
48
+ fullDescription: string;
49
+ category: string;
50
+ parameters: Record<string, {
51
+ type: string;
52
+ description: string;
53
+ required: boolean;
54
+ }>;
55
+ }
56
+ /**
57
+ * Tool categories for organization
58
+ */
59
+ export declare const TOOL_CATEGORIES: readonly ["chat", "prd", "workflow", "agents", "progress", "bugs", "savepoints", "utility"];
60
+ export type ToolCategory = typeof TOOL_CATEGORIES[number];
61
+ /**
62
+ * Registry for managing tool definitions
63
+ * Provides lazy loading of schemas and centralized execution
64
+ */
65
+ export declare class ToolRegistry {
66
+ private tools;
67
+ private categoryIndex;
68
+ constructor();
69
+ /**
70
+ * Register a tool definition
71
+ */
72
+ register(tool: ToolDefinition): void;
73
+ /**
74
+ * Register multiple tools at once
75
+ */
76
+ registerAll(tools: ToolDefinition[]): void;
77
+ /**
78
+ * Get all registered tool names
79
+ */
80
+ getToolNames(): string[];
81
+ /**
82
+ * Get all categories
83
+ */
84
+ getCategories(): ToolCategory[];
85
+ /**
86
+ * Get tool count
87
+ */
88
+ getToolCount(): number;
89
+ /**
90
+ * Check if a tool exists
91
+ */
92
+ has(name: string): boolean;
93
+ /**
94
+ * Get a tool definition by name
95
+ */
96
+ get(name: string): ToolDefinition | undefined;
97
+ /**
98
+ * List tools with brief summaries, optionally filtered by category
99
+ */
100
+ listTools(category?: string): ToolSummary[];
101
+ /**
102
+ * Get detailed schema information for a tool
103
+ */
104
+ getSchema(toolName: string): SchemaInfo | null;
105
+ /**
106
+ * Get a human-readable type name from a Zod schema
107
+ */
108
+ private getZodTypeName;
109
+ /**
110
+ * Execute a tool by name with the given parameters
111
+ */
112
+ execute(toolName: string, params: Record<string, unknown>, context: ToolContext): Promise<ToolResult>;
113
+ /**
114
+ * Generate help text for all tools or a specific tool
115
+ */
116
+ generateHelp(action?: string, category?: string): string;
117
+ }
118
+ /**
119
+ * Helper to create a tool definition with proper typing
120
+ */
121
+ export declare function defineTool<T extends ZodRawShape>(config: {
122
+ name: string;
123
+ category: ToolCategory;
124
+ description: string;
125
+ fullDescription: string;
126
+ inputSchema: ZodObject<T>;
127
+ handler: (params: z.infer<ZodObject<T>>, context: ToolContext) => Promise<ToolResult>;
128
+ }): ToolDefinition;
129
+ export declare const toolRegistry: ToolRegistry;
130
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../src/tool-registry.ts"],"names":[],"mappings":"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"}