ai-sdlc 0.2.0-alpha.5 → 0.2.0-alpha.51

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 (131) hide show
  1. package/README.md +53 -1058
  2. package/dist/agents/implementation.d.ts +6 -0
  3. package/dist/agents/implementation.d.ts.map +1 -1
  4. package/dist/agents/implementation.js +151 -13
  5. package/dist/agents/implementation.js.map +1 -1
  6. package/dist/agents/index.d.ts +2 -0
  7. package/dist/agents/index.d.ts.map +1 -1
  8. package/dist/agents/index.js +2 -0
  9. package/dist/agents/index.js.map +1 -1
  10. package/dist/agents/orchestrator.d.ts +61 -0
  11. package/dist/agents/orchestrator.d.ts.map +1 -0
  12. package/dist/agents/orchestrator.js +443 -0
  13. package/dist/agents/orchestrator.js.map +1 -0
  14. package/dist/agents/planning.d.ts +1 -1
  15. package/dist/agents/planning.d.ts.map +1 -1
  16. package/dist/agents/planning.js +55 -4
  17. package/dist/agents/planning.js.map +1 -1
  18. package/dist/agents/refinement.d.ts.map +1 -1
  19. package/dist/agents/refinement.js +22 -3
  20. package/dist/agents/refinement.js.map +1 -1
  21. package/dist/agents/research.d.ts +85 -1
  22. package/dist/agents/research.d.ts.map +1 -1
  23. package/dist/agents/research.js +506 -16
  24. package/dist/agents/research.js.map +1 -1
  25. package/dist/agents/review.d.ts +103 -2
  26. package/dist/agents/review.d.ts.map +1 -1
  27. package/dist/agents/review.js +775 -93
  28. package/dist/agents/review.js.map +1 -1
  29. package/dist/agents/rework.d.ts.map +1 -1
  30. package/dist/agents/rework.js +22 -3
  31. package/dist/agents/rework.js.map +1 -1
  32. package/dist/agents/single-task.d.ts +41 -0
  33. package/dist/agents/single-task.d.ts.map +1 -0
  34. package/dist/agents/single-task.js +357 -0
  35. package/dist/agents/single-task.js.map +1 -0
  36. package/dist/agents/state-assessor.d.ts +3 -3
  37. package/dist/agents/state-assessor.d.ts.map +1 -1
  38. package/dist/agents/state-assessor.js +6 -6
  39. package/dist/agents/state-assessor.js.map +1 -1
  40. package/dist/agents/test-pattern-detector.d.ts +49 -0
  41. package/dist/agents/test-pattern-detector.d.ts.map +1 -0
  42. package/dist/agents/test-pattern-detector.js +273 -0
  43. package/dist/agents/test-pattern-detector.js.map +1 -0
  44. package/dist/agents/verification.d.ts +11 -0
  45. package/dist/agents/verification.d.ts.map +1 -1
  46. package/dist/agents/verification.js +97 -12
  47. package/dist/agents/verification.js.map +1 -1
  48. package/dist/cli/commands/migrate.js +1 -1
  49. package/dist/cli/commands/migrate.js.map +1 -1
  50. package/dist/cli/commands.d.ts +65 -3
  51. package/dist/cli/commands.d.ts.map +1 -1
  52. package/dist/cli/commands.js +1108 -204
  53. package/dist/cli/commands.js.map +1 -1
  54. package/dist/cli/daemon.d.ts.map +1 -1
  55. package/dist/cli/daemon.js +20 -3
  56. package/dist/cli/daemon.js.map +1 -1
  57. package/dist/cli/runner.d.ts.map +1 -1
  58. package/dist/cli/runner.js +19 -11
  59. package/dist/cli/runner.js.map +1 -1
  60. package/dist/core/auth.d.ts +43 -0
  61. package/dist/core/auth.d.ts.map +1 -1
  62. package/dist/core/auth.js +105 -1
  63. package/dist/core/auth.js.map +1 -1
  64. package/dist/core/client.d.ts +6 -0
  65. package/dist/core/client.d.ts.map +1 -1
  66. package/dist/core/client.js +57 -3
  67. package/dist/core/client.js.map +1 -1
  68. package/dist/core/config.d.ts +24 -1
  69. package/dist/core/config.d.ts.map +1 -1
  70. package/dist/core/config.js +100 -3
  71. package/dist/core/config.js.map +1 -1
  72. package/dist/core/conflict-detector.d.ts +108 -0
  73. package/dist/core/conflict-detector.d.ts.map +1 -0
  74. package/dist/core/conflict-detector.js +413 -0
  75. package/dist/core/conflict-detector.js.map +1 -0
  76. package/dist/core/git-utils.d.ts +28 -0
  77. package/dist/core/git-utils.d.ts.map +1 -0
  78. package/dist/core/git-utils.js +146 -0
  79. package/dist/core/git-utils.js.map +1 -0
  80. package/dist/core/index.d.ts +19 -0
  81. package/dist/core/index.d.ts.map +1 -0
  82. package/dist/core/index.js +19 -0
  83. package/dist/core/index.js.map +1 -0
  84. package/dist/core/kanban.d.ts +1 -1
  85. package/dist/core/kanban.d.ts.map +1 -1
  86. package/dist/core/kanban.js +7 -6
  87. package/dist/core/kanban.js.map +1 -1
  88. package/dist/core/llm-utils.d.ts +103 -0
  89. package/dist/core/llm-utils.d.ts.map +1 -0
  90. package/dist/core/llm-utils.js +368 -0
  91. package/dist/core/llm-utils.js.map +1 -0
  92. package/dist/core/logger.d.ts +92 -0
  93. package/dist/core/logger.d.ts.map +1 -0
  94. package/dist/core/logger.js +221 -0
  95. package/dist/core/logger.js.map +1 -0
  96. package/dist/core/story-logger.d.ts +102 -0
  97. package/dist/core/story-logger.d.ts.map +1 -0
  98. package/dist/core/story-logger.js +265 -0
  99. package/dist/core/story-logger.js.map +1 -0
  100. package/dist/core/story.d.ts +89 -20
  101. package/dist/core/story.d.ts.map +1 -1
  102. package/dist/core/story.js +300 -52
  103. package/dist/core/story.js.map +1 -1
  104. package/dist/core/task-parser.d.ts +59 -0
  105. package/dist/core/task-parser.d.ts.map +1 -0
  106. package/dist/core/task-parser.js +235 -0
  107. package/dist/core/task-parser.js.map +1 -0
  108. package/dist/core/task-progress.d.ts +92 -0
  109. package/dist/core/task-progress.d.ts.map +1 -0
  110. package/dist/core/task-progress.js +280 -0
  111. package/dist/core/task-progress.js.map +1 -0
  112. package/dist/core/workflow-state.d.ts +45 -6
  113. package/dist/core/workflow-state.d.ts.map +1 -1
  114. package/dist/core/workflow-state.js +201 -12
  115. package/dist/core/workflow-state.js.map +1 -1
  116. package/dist/core/worktree.d.ts +77 -0
  117. package/dist/core/worktree.d.ts.map +1 -0
  118. package/dist/core/worktree.js +246 -0
  119. package/dist/core/worktree.js.map +1 -0
  120. package/dist/index.js +135 -5
  121. package/dist/index.js.map +1 -1
  122. package/dist/services/error-classifier.d.ts +119 -0
  123. package/dist/services/error-classifier.d.ts.map +1 -0
  124. package/dist/services/error-classifier.js +182 -0
  125. package/dist/services/error-classifier.js.map +1 -0
  126. package/dist/types/index.d.ts +362 -1
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/index.js +1 -0
  129. package/dist/types/index.js.map +1 -1
  130. package/package.json +4 -1
  131. package/templates/story.md +5 -0
@@ -1,5 +1,6 @@
1
1
  import { parseStory, writeStory, updateStoryStatus } from '../core/story.js';
2
2
  import { runAgentQuery } from '../core/client.js';
3
+ import { getLogger } from '../core/logger.js';
3
4
  import path from 'path';
4
5
  const REFINEMENT_SYSTEM_PROMPT = `You are a product refinement specialist. Your job is to take raw story ideas from the backlog and transform them into well-defined, actionable user stories.
5
6
 
@@ -22,8 +23,14 @@ At the end of your response, include:
22
23
  * ready-to-implement user story.
23
24
  */
24
25
  export async function runRefinementAgent(storyPath, sdlcRoot, options = {}) {
26
+ const logger = getLogger();
27
+ const startTime = Date.now();
25
28
  const story = parseStory(storyPath);
26
29
  const changesMade = [];
30
+ logger.info('refinement', 'Starting refinement phase', {
31
+ storyId: story.frontmatter.id,
32
+ status: story.frontmatter.status,
33
+ });
27
34
  try {
28
35
  const prompt = `Please refine this story:
29
36
 
@@ -65,10 +72,16 @@ Format your response as markdown that will replace the story content.`;
65
72
  // Update timestamp
66
73
  story.frontmatter.updated = new Date().toISOString().split('T')[0];
67
74
  // Write the story
68
- writeStory(story);
75
+ await writeStory(story);
69
76
  // Update status to ready
70
- const movedStory = updateStoryStatus(story, 'ready');
77
+ const movedStory = await updateStoryStatus(story, 'ready');
71
78
  changesMade.push('Updated status to ready');
79
+ logger.info('refinement', 'Refinement phase complete', {
80
+ storyId: story.frontmatter.id,
81
+ durationMs: Date.now() - startTime,
82
+ newStatus: 'ready',
83
+ changesCount: changesMade.length,
84
+ });
72
85
  return {
73
86
  success: true,
74
87
  story: movedStory,
@@ -76,11 +89,17 @@ Format your response as markdown that will replace the story content.`;
76
89
  };
77
90
  }
78
91
  catch (error) {
92
+ const errorMessage = error instanceof Error ? error.message : String(error);
93
+ logger.error('refinement', 'Refinement phase failed', {
94
+ storyId: story.frontmatter.id,
95
+ durationMs: Date.now() - startTime,
96
+ error: errorMessage,
97
+ });
79
98
  return {
80
99
  success: false,
81
100
  story,
82
101
  changesMade,
83
- error: error instanceof Error ? error.message : String(error),
102
+ error: errorMessage,
84
103
  };
85
104
  }
86
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"refinement.js","sourceRoot":"","sources":["../../src/agents/refinement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"refinement.js","sourceRoot":"","sources":["../../src/agents/refinement.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AgentProgressCallback } from '../core/client.js';
2
- import { AgentResult } from '../types/index.js';
2
+ import { Story, AgentResult, FARScore } from '../types/index.js';
3
3
  export interface AgentOptions {
4
4
  /** Context from a previous review failure - must address these issues */
5
5
  reworkContext?: string;
@@ -13,4 +13,88 @@ export interface AgentOptions {
13
13
  * and gathering relevant information.
14
14
  */
15
15
  export declare function runResearchAgent(storyPath: string, sdlcRoot: string, options?: AgentOptions): Promise<AgentResult>;
16
+ /**
17
+ * Gather context about the codebase for research.
18
+ *
19
+ * Collects information about:
20
+ * - Project configuration files (package.json, tsconfig.json, etc.)
21
+ * - Directory structure
22
+ * - Source files
23
+ * - Test files (for understanding testing patterns)
24
+ * - Configuration files (for discovering config patterns)
25
+ *
26
+ * @param sdlcRoot - Path to the .ai-sdlc directory
27
+ * @returns Formatted context string with codebase information
28
+ */
29
+ export declare function gatherCodebaseContext(sdlcRoot: string): Promise<string>;
30
+ /**
31
+ * Determine if web research would add value based on story content and codebase context.
32
+ *
33
+ * Web research is triggered when:
34
+ * 1. External dependencies are referenced (libraries, APIs, frameworks)
35
+ * 2. Unfamiliar APIs/patterns are mentioned
36
+ * 3. Library-specific documentation is needed
37
+ * 4. Best practices are requested
38
+ *
39
+ * Web research is skipped when:
40
+ * - Topic is purely internal (refactoring, moving code, internal utilities)
41
+ * - No external dependencies mentioned
42
+ */
43
+ export declare function shouldPerformWebResearch(story: Story, codebaseContext: string): boolean;
44
+ /**
45
+ * Sanitize web research content for safe storage and display.
46
+ * Removes ANSI escape sequences, control characters, and potential injection vectors.
47
+ *
48
+ * Security rationale: Web research content comes from external sources (LLM, web tools)
49
+ * and must be sanitized before storage to prevent:
50
+ * - ANSI injection (terminal control sequence attacks)
51
+ * - Markdown injection (malicious formatting)
52
+ * - Control character injection (null bytes, bell characters, etc.)
53
+ *
54
+ * @param text - Raw web research content from external source
55
+ * @returns Sanitized text safe for storage in markdown files
56
+ */
57
+ export declare function sanitizeWebResearchContent(text: string): string;
58
+ /**
59
+ * Sanitize text for logging to prevent log injection attacks.
60
+ * Replaces newlines with spaces and truncates for readability.
61
+ *
62
+ * Security rationale: Log injection attacks use newlines to inject fake log entries.
63
+ * By replacing newlines with spaces, we ensure each log() call produces exactly one log line.
64
+ *
65
+ * @param text - Raw text that will be logged
66
+ * @returns Sanitized text safe for logging (single line, truncated)
67
+ */
68
+ export declare function sanitizeForLogging(text: string): string;
69
+ /**
70
+ * Sanitize codebase context before including in LLM prompts.
71
+ * Escapes dangerous patterns that could cause prompt injection.
72
+ *
73
+ * Security rationale: Codebase files may contain malicious content from:
74
+ * - Compromised dependencies
75
+ * - Malicious commits
76
+ * - Untrusted contributors
77
+ *
78
+ * We must prevent prompt injection by escaping patterns that could:
79
+ * - Terminate the prompt early (triple backticks)
80
+ * - Inject commands or instructions
81
+ * - Confuse the LLM's understanding of structure
82
+ *
83
+ * @param text - Raw codebase context
84
+ * @returns Sanitized text safe for LLM prompts
85
+ */
86
+ export declare function sanitizeCodebaseContext(text: string): string;
87
+ /**
88
+ * Parse FAR evaluation from web research finding text.
89
+ * Expected format from LLM:
90
+ * **FAR Score**: Factuality: 5, Actionability: 4, Relevance: 5
91
+ * **Justification**: Official documentation provides...
92
+ *
93
+ * Returns default scores (2, 2, 2) with parsingSucceeded: false if parsing fails.
94
+ * Default of 2 (rather than 3) indicates uncertainty rather than average quality.
95
+ *
96
+ * @param finding - Web research finding text to parse
97
+ * @returns FARScore with parsed or default values and parsing status
98
+ */
99
+ export declare function evaluateFAR(finding: string): FARScore;
16
100
  //# sourceMappingURL=research.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/agents/research.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAS,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAavD,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAsEtB"}
1
+ {"version":3,"file":"research.d.ts","sourceRoot":"","sources":["../../src/agents/research.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAgLjE,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CAsGtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmG7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAiCvF;AAeD;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA8B/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBvD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA6B5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAuDrD"}