edsger 0.30.0 → 0.30.2

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 (116) hide show
  1. package/.claude/settings.local.json +28 -0
  2. package/.env.local +12 -0
  3. package/dist/api/features/__tests__/regression-prevention.test.d.ts +5 -0
  4. package/dist/api/features/__tests__/regression-prevention.test.js +338 -0
  5. package/dist/api/features/__tests__/status-updater.integration.test.d.ts +5 -0
  6. package/dist/api/features/__tests__/status-updater.integration.test.js +497 -0
  7. package/dist/commands/workflow/pipeline-runner.d.ts +17 -0
  8. package/dist/commands/workflow/pipeline-runner.js +393 -0
  9. package/dist/commands/workflow/runner.d.ts +26 -0
  10. package/dist/commands/workflow/runner.js +119 -0
  11. package/dist/commands/workflow/workflow-runner.d.ts +26 -0
  12. package/dist/commands/workflow/workflow-runner.js +119 -0
  13. package/dist/index.js +0 -0
  14. package/dist/phases/autonomous/index.js +9 -56
  15. package/dist/phases/code-implementation/analyzer-helpers.d.ts +28 -0
  16. package/dist/phases/code-implementation/analyzer-helpers.js +177 -0
  17. package/dist/phases/code-implementation/analyzer.d.ts +32 -0
  18. package/dist/phases/code-implementation/analyzer.js +629 -0
  19. package/dist/phases/code-implementation/branch-pr-creator.js +2 -58
  20. package/dist/phases/code-implementation/context-fetcher.d.ts +17 -0
  21. package/dist/phases/code-implementation/context-fetcher.js +86 -0
  22. package/dist/phases/code-implementation/index.js +9 -67
  23. package/dist/phases/code-implementation/mcp-server.d.ts +1 -0
  24. package/dist/phases/code-implementation/mcp-server.js +93 -0
  25. package/dist/phases/code-implementation/prompts-improvement.d.ts +5 -0
  26. package/dist/phases/code-implementation/prompts-improvement.js +108 -0
  27. package/dist/phases/code-implementation-verification/verifier.d.ts +31 -0
  28. package/dist/phases/code-implementation-verification/verifier.js +196 -0
  29. package/dist/phases/code-refine/analyzer.d.ts +41 -0
  30. package/dist/phases/code-refine/analyzer.js +561 -0
  31. package/dist/phases/code-refine/context-fetcher.d.ts +94 -0
  32. package/dist/phases/code-refine/context-fetcher.js +423 -0
  33. package/dist/phases/code-refine/index.js +6 -37
  34. package/dist/phases/code-refine-verification/analysis/llm-analyzer.d.ts +22 -0
  35. package/dist/phases/code-refine-verification/analysis/llm-analyzer.js +134 -0
  36. package/dist/phases/code-refine-verification/verifier.d.ts +47 -0
  37. package/dist/phases/code-refine-verification/verifier.js +597 -0
  38. package/dist/phases/code-review/analyzer.d.ts +29 -0
  39. package/dist/phases/code-review/analyzer.js +363 -0
  40. package/dist/phases/code-review/context-fetcher.d.ts +92 -0
  41. package/dist/phases/code-review/context-fetcher.js +296 -0
  42. package/dist/phases/code-review/index.js +1 -0
  43. package/dist/phases/feature-analysis/analyzer-helpers.d.ts +10 -0
  44. package/dist/phases/feature-analysis/analyzer-helpers.js +47 -0
  45. package/dist/phases/feature-analysis/analyzer.d.ts +11 -0
  46. package/dist/phases/feature-analysis/analyzer.js +208 -0
  47. package/dist/phases/feature-analysis/context-fetcher.d.ts +26 -0
  48. package/dist/phases/feature-analysis/context-fetcher.js +134 -0
  49. package/dist/phases/feature-analysis/http-fallback.d.ts +20 -0
  50. package/dist/phases/feature-analysis/http-fallback.js +95 -0
  51. package/dist/phases/feature-analysis/mcp-server.d.ts +1 -0
  52. package/dist/phases/feature-analysis/mcp-server.js +144 -0
  53. package/dist/phases/feature-analysis/prompts-improvement.d.ts +8 -0
  54. package/dist/phases/feature-analysis/prompts-improvement.js +109 -0
  55. package/dist/phases/feature-analysis-verification/verifier.d.ts +37 -0
  56. package/dist/phases/feature-analysis-verification/verifier.js +147 -0
  57. package/dist/phases/pr-execution/index.js +1 -0
  58. package/dist/phases/pr-execution/pr-executor.d.ts +2 -1
  59. package/dist/phases/pr-execution/pr-executor.js +9 -38
  60. package/dist/phases/pull-request/creator.js +9 -35
  61. package/dist/phases/technical-design/analyzer-helpers.d.ts +25 -0
  62. package/dist/phases/technical-design/analyzer-helpers.js +39 -0
  63. package/dist/phases/technical-design/analyzer.d.ts +21 -0
  64. package/dist/phases/technical-design/analyzer.js +461 -0
  65. package/dist/phases/technical-design/context-fetcher.d.ts +12 -0
  66. package/dist/phases/technical-design/context-fetcher.js +39 -0
  67. package/dist/phases/technical-design/http-fallback.d.ts +17 -0
  68. package/dist/phases/technical-design/http-fallback.js +151 -0
  69. package/dist/phases/technical-design/mcp-server.d.ts +1 -0
  70. package/dist/phases/technical-design/mcp-server.js +157 -0
  71. package/dist/phases/technical-design/prompts-improvement.d.ts +5 -0
  72. package/dist/phases/technical-design/prompts-improvement.js +93 -0
  73. package/dist/phases/technical-design-verification/verifier.d.ts +53 -0
  74. package/dist/phases/technical-design-verification/verifier.js +170 -0
  75. package/dist/services/feature-branches.d.ts +77 -0
  76. package/dist/services/feature-branches.js +205 -0
  77. package/dist/utils/git-branch-manager.d.ts +2 -0
  78. package/dist/utils/git-branch-manager.js +8 -35
  79. package/dist/utils/git-push.d.ts +43 -0
  80. package/dist/utils/git-push.js +127 -0
  81. package/dist/workflow-runner/config/phase-configs.d.ts +5 -0
  82. package/dist/workflow-runner/config/phase-configs.js +120 -0
  83. package/dist/workflow-runner/core/feature-filter.d.ts +16 -0
  84. package/dist/workflow-runner/core/feature-filter.js +46 -0
  85. package/dist/workflow-runner/core/index.d.ts +8 -0
  86. package/dist/workflow-runner/core/index.js +12 -0
  87. package/dist/workflow-runner/core/pipeline-evaluator.d.ts +24 -0
  88. package/dist/workflow-runner/core/pipeline-evaluator.js +32 -0
  89. package/dist/workflow-runner/core/state-manager.d.ts +24 -0
  90. package/dist/workflow-runner/core/state-manager.js +42 -0
  91. package/dist/workflow-runner/core/workflow-logger.d.ts +20 -0
  92. package/dist/workflow-runner/core/workflow-logger.js +65 -0
  93. package/dist/workflow-runner/executors/phase-executor.d.ts +8 -0
  94. package/dist/workflow-runner/executors/phase-executor.js +248 -0
  95. package/dist/workflow-runner/feature-workflow-runner.d.ts +26 -0
  96. package/dist/workflow-runner/feature-workflow-runner.js +119 -0
  97. package/dist/workflow-runner/index.d.ts +2 -0
  98. package/dist/workflow-runner/index.js +2 -0
  99. package/dist/workflow-runner/pipeline-runner.d.ts +17 -0
  100. package/dist/workflow-runner/pipeline-runner.js +393 -0
  101. package/dist/workflow-runner/workflow-processor.d.ts +54 -0
  102. package/dist/workflow-runner/workflow-processor.js +170 -0
  103. package/dist/workspace/workspace-manager.js +5 -3
  104. package/package.json +1 -1
  105. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.d.ts +0 -4
  106. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.js +0 -133
  107. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.d.ts +0 -4
  108. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.js +0 -336
  109. package/dist/services/lifecycle-agent/index.d.ts +0 -24
  110. package/dist/services/lifecycle-agent/index.js +0 -25
  111. package/dist/services/lifecycle-agent/phase-criteria.d.ts +0 -57
  112. package/dist/services/lifecycle-agent/phase-criteria.js +0 -335
  113. package/dist/services/lifecycle-agent/transition-rules.d.ts +0 -60
  114. package/dist/services/lifecycle-agent/transition-rules.js +0 -184
  115. package/dist/services/lifecycle-agent/types.d.ts +0 -190
  116. package/dist/services/lifecycle-agent/types.js +0 -12
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Checklist verification agent for feature analysis
3
+ * This agent independently reviews checklist compliance to ensure objectivity
4
+ */
5
+ import { query } from '@anthropic-ai/claude-code';
6
+ import { logInfo, logError } from '../../utils/logger.js';
7
+ import { createChecklistVerificationPrompt, createChecklistVerificationSystemPrompt, } from './prompts.js';
8
+ function userMessage(content) {
9
+ return {
10
+ type: 'user',
11
+ message: { role: 'user', content: content },
12
+ };
13
+ }
14
+ async function* prompt(verificationPrompt) {
15
+ yield userMessage(verificationPrompt);
16
+ }
17
+ /**
18
+ * Verify checklist compliance using an independent AI agent
19
+ * This agent acts as a "challenger" to validate the claims made by the analysis agent
20
+ */
21
+ export async function verifyChecklistCompliance(options, config) {
22
+ const { checklistContext, analysisContext, createdUserStories, createdTestCases, verbose, } = options;
23
+ const totalChecklistItems = checklistContext.checklists.reduce((sum, checklist) => sum + checklist.items.length, 0);
24
+ if (verbose) {
25
+ logInfo('🔍 Starting checklist verification...');
26
+ logInfo(` Verifying ${totalChecklistItems} checklist items`);
27
+ }
28
+ try {
29
+ const systemPrompt = createChecklistVerificationSystemPrompt(config);
30
+ const verificationPrompt = createChecklistVerificationPrompt({
31
+ checklistContext,
32
+ analysisContext,
33
+ createdUserStories,
34
+ createdTestCases,
35
+ });
36
+ let lastAssistantResponse = '';
37
+ let verificationResult = null;
38
+ if (verbose) {
39
+ logInfo('🤖 Starting verification agent query...');
40
+ }
41
+ // Use Claude Code SDK for verification
42
+ for await (const message of query({
43
+ prompt: prompt(verificationPrompt),
44
+ options: {
45
+ appendSystemPrompt: systemPrompt,
46
+ model: config.claude.model || 'sonnet',
47
+ maxTurns: 100,
48
+ permissionMode: 'bypassPermissions',
49
+ },
50
+ })) {
51
+ if (verbose) {
52
+ logInfo(` Received message type: ${message.type}`);
53
+ }
54
+ // Capture assistant responses
55
+ if (message.type === 'assistant' && message.message?.content) {
56
+ for (const content of message.message.content) {
57
+ if (content.type === 'text') {
58
+ lastAssistantResponse += content.text + '\n';
59
+ if (verbose) {
60
+ console.log(`\n🔍 ${content.text}`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ if (message.type === 'result') {
66
+ if (message.subtype === 'success') {
67
+ logInfo('\n✅ Verification completed, parsing results...');
68
+ try {
69
+ const responseText = message.result || lastAssistantResponse;
70
+ // Try to extract JSON from markdown code block
71
+ const jsonBlockMatch = responseText.match(/```json\s*\n([\s\S]*?)\n\s*```/);
72
+ let jsonResult = null;
73
+ if (jsonBlockMatch) {
74
+ jsonResult = JSON.parse(jsonBlockMatch[1]);
75
+ }
76
+ else {
77
+ jsonResult = JSON.parse(responseText);
78
+ }
79
+ if (jsonResult && jsonResult.verification) {
80
+ verificationResult = jsonResult.verification;
81
+ }
82
+ else {
83
+ throw new Error('Invalid verification JSON structure');
84
+ }
85
+ }
86
+ catch (error) {
87
+ logError(`Failed to parse verification result: ${error}`);
88
+ // Return default "uncertain" result
89
+ verificationResult = createUncertainVerificationResult(checklistContext, 'Failed to parse verification response');
90
+ }
91
+ }
92
+ else {
93
+ logError(`\n⚠️ Verification incomplete: ${message.subtype}`);
94
+ verificationResult = createUncertainVerificationResult(checklistContext, `Verification incomplete: ${message.subtype}`);
95
+ }
96
+ }
97
+ }
98
+ if (!verificationResult) {
99
+ verificationResult = createUncertainVerificationResult(checklistContext, 'No verification result received');
100
+ }
101
+ if (verbose) {
102
+ logInfo('\n📊 Verification Summary:');
103
+ logInfo(` Total items: ${verificationResult.total_items}`);
104
+ logInfo(` ✅ Confirmed: ${verificationResult.confirmed_count}`);
105
+ logInfo(` ❌ Rejected: ${verificationResult.rejected_count}`);
106
+ logInfo(` ⚠️ Uncertain: ${verificationResult.uncertain_count}`);
107
+ logInfo(` Summary: ${verificationResult.summary}`);
108
+ if (verificationResult.rejected_count > 0) {
109
+ logInfo('\n❌ Rejected items:');
110
+ verificationResult.item_verifications
111
+ .filter((v) => v.verification_status === 'rejected')
112
+ .forEach((v) => {
113
+ logInfo(` - ${v.checklist_item_id}`);
114
+ logInfo(` Reason: ${v.verification_reason}`);
115
+ });
116
+ }
117
+ }
118
+ return verificationResult;
119
+ }
120
+ catch (error) {
121
+ logError(`Checklist verification failed: ${error instanceof Error ? error.message : String(error)}`);
122
+ return createUncertainVerificationResult(checklistContext, `Verification error: ${error instanceof Error ? error.message : String(error)}`);
123
+ }
124
+ }
125
+ /**
126
+ * Create a default "uncertain" verification result when verification fails
127
+ */
128
+ function createUncertainVerificationResult(checklistContext, reason) {
129
+ // Get all checklist items
130
+ const allItems = checklistContext.checklists.flatMap((checklist) => checklist.items.map((item) => ({
131
+ checklist_item_id: item.id,
132
+ })));
133
+ return {
134
+ all_verified: false,
135
+ total_items: allItems.length,
136
+ confirmed_count: 0,
137
+ rejected_count: 0,
138
+ uncertain_count: allItems.length,
139
+ item_verifications: allItems.map((item) => ({
140
+ checklist_item_id: item.checklist_item_id,
141
+ is_satisfied: false,
142
+ verification_status: 'uncertain',
143
+ verification_reason: reason,
144
+ })),
145
+ summary: `Verification could not be completed: ${reason}`,
146
+ };
147
+ }
@@ -108,6 +108,7 @@ export const executeFeaturePRs = async (options, config) => {
108
108
  repo: context.githubConfig.repo,
109
109
  forkInfo: context.forkInfo,
110
110
  verbose,
111
+ token: context.githubConfig.token,
111
112
  };
112
113
  const executionSummary = {
113
114
  branchesCreated: 0,
@@ -8,6 +8,7 @@ export interface PRExecutionConfig {
8
8
  repo: string;
9
9
  forkInfo: RepoForkInfo;
10
10
  verbose?: boolean;
11
+ token?: string;
11
12
  }
12
13
  export interface PRBranchResult {
13
14
  branchName: string;
@@ -19,7 +20,7 @@ export interface PRBranchResult {
19
20
  /**
20
21
  * Push a branch to remote with force-with-lease fallback
21
22
  */
22
- export declare function pushBranch(branchName: string, verbose?: boolean): void;
23
+ export declare function pushBranch(branchName: string, verbose?: boolean, token?: string): void;
23
24
  /**
24
25
  * Get the HEAD SHA of a local branch
25
26
  */
@@ -2,53 +2,24 @@
2
2
  * PR Executor for pushing branches to remote and generating compare URLs
3
3
  * Handles fork-aware URL construction for manual PR creation
4
4
  */
5
- import { execSync } from 'child_process';
6
5
  import { logInfo } from '../../utils/logger.js';
7
6
  import { updatePullRequest } from '../../services/pull-requests.js';
7
+ import { gitPush } from '../../utils/git-push.js';
8
+ import { execFileSync } from 'child_process';
8
9
  /**
9
10
  * Push a branch to remote with force-with-lease fallback
10
11
  */
11
- export function pushBranch(branchName, verbose) {
12
- try {
13
- if (verbose) {
14
- logInfo(`📤 Pushing branch ${branchName} to remote...`);
15
- }
16
- try {
17
- execSync(`git push -u origin ${branchName}`, {
18
- encoding: 'utf-8',
19
- stdio: verbose ? 'inherit' : 'pipe',
20
- });
21
- }
22
- catch {
23
- try {
24
- execSync(`git push origin ${branchName}`, {
25
- encoding: 'utf-8',
26
- stdio: verbose ? 'inherit' : 'pipe',
27
- });
28
- }
29
- catch {
30
- if (verbose) {
31
- logInfo(`⚠️ Push rejected, attempting force push with lease...`);
32
- }
33
- execSync(`git push --force-with-lease origin ${branchName}`, {
34
- encoding: 'utf-8',
35
- stdio: verbose ? 'inherit' : 'pipe',
36
- });
37
- if (verbose) {
38
- logInfo(`✅ Successfully force pushed ${branchName}`);
39
- }
40
- }
41
- }
42
- }
43
- catch (error) {
44
- throw new Error(`Failed to push branch ${branchName}: ${error instanceof Error ? error.message : String(error)}`);
12
+ export function pushBranch(branchName, verbose, token) {
13
+ const result = gitPush({ branchName, token, verbose });
14
+ if (!result.success) {
15
+ throw new Error(`Failed to push branch ${branchName}: ${result.error}`);
45
16
  }
46
17
  }
47
18
  /**
48
19
  * Get the HEAD SHA of a local branch
49
20
  */
50
21
  export function getLocalBranchSha(branchName) {
51
- return execSync(`git rev-parse ${branchName}`, {
22
+ return execFileSync('git', ['rev-parse', branchName], {
52
23
  encoding: 'utf-8',
53
24
  }).trim();
54
25
  }
@@ -68,10 +39,10 @@ export function buildCompareUrl(forkInfo, owner, repo, branchName, base = 'main'
68
39
  * Push a branch and build the compare URL
69
40
  */
70
41
  export function pushBranchAndBuildUrl(config, branchName) {
71
- const { owner, repo, forkInfo, verbose } = config;
42
+ const { owner, repo, forkInfo, verbose, token } = config;
72
43
  const headSha = getLocalBranchSha(branchName);
73
44
  try {
74
- pushBranch(branchName, verbose);
45
+ pushBranch(branchName, verbose, token);
75
46
  const compareUrl = buildCompareUrl(forkInfo, owner, repo, branchName);
76
47
  if (verbose) {
77
48
  logInfo(`🔗 Compare URL: ${compareUrl}`);
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { Octokit } from '@octokit/rest';
6
6
  import { execSync } from 'child_process';
7
+ import { gitPush } from '../../utils/git-push.js';
7
8
  // GitHub PR title best practice: keep under 72 characters
8
9
  const MAX_PR_TITLE_LENGTH = 72;
9
10
  const PR_TITLE_PREFIX = 'feat: ';
@@ -115,39 +116,6 @@ const switchToBranch = (branch, verbose) => {
115
116
  throw new Error(`Failed to switch to branch ${branch}: ${error}`);
116
117
  }
117
118
  };
118
- /**
119
- * Push current branch to remote
120
- * Falls back to force-with-lease if normal push fails (e.g., after rebase)
121
- */
122
- const pushBranch = (branch, verbose) => {
123
- try {
124
- if (verbose) {
125
- console.log(`📤 Pushing branch ${branch} to remote...`);
126
- }
127
- execSync(`git push -u origin ${branch}`, { encoding: 'utf-8' });
128
- if (verbose) {
129
- console.log(`✅ Branch pushed successfully`);
130
- }
131
- }
132
- catch (error) {
133
- // If push fails (likely non-fast-forward after rebase),
134
- // use force-with-lease for safer force push
135
- if (verbose) {
136
- console.log(`⚠️ Push rejected, attempting force push with lease...`);
137
- }
138
- try {
139
- execSync(`git push --force-with-lease origin ${branch}`, {
140
- encoding: 'utf-8',
141
- });
142
- if (verbose) {
143
- console.log(`✅ Successfully force pushed ${branch}`);
144
- }
145
- }
146
- catch (forceError) {
147
- throw new Error(`Failed to push branch: ${forceError}`);
148
- }
149
- }
150
- };
151
119
  /**
152
120
  * Switch to main branch
153
121
  */
@@ -276,7 +244,10 @@ export async function createPullRequest(config, feature) {
276
244
  }
277
245
  try {
278
246
  // Push current branch to remote first
279
- pushBranch(currentBranch, verbose);
247
+ const pushResult = gitPush({ branchName: currentBranch, token: githubToken, verbose });
248
+ if (!pushResult.success) {
249
+ throw new Error(`Failed to push branch: ${pushResult.error}`);
250
+ }
280
251
  // Get the base branch (main) SHA to create feat/ branch from
281
252
  const { data: baseBranchData } = await octokit.repos.getBranch({
282
253
  owner,
@@ -306,7 +277,10 @@ export async function createPullRequest(config, feature) {
306
277
  }
307
278
  else {
308
279
  // If not a dev/ branch, push it normally
309
- pushBranch(currentBranch, verbose);
280
+ const pushResult = gitPush({ branchName: currentBranch, token: githubToken, verbose });
281
+ if (!pushResult.success) {
282
+ throw new Error(`Failed to push branch: ${pushResult.error}`);
283
+ }
310
284
  }
311
285
  // Generate PR title and body
312
286
  const title = generatePRTitle(feature.name);
@@ -0,0 +1,25 @@
1
+ import { type ChecklistVerificationResult } from '../technical-design-verification/agent.js';
2
+ export interface TechnicalDesignResult {
3
+ featureId: string;
4
+ technicalDesign: string | null;
5
+ status: 'success' | 'error';
6
+ summary: string;
7
+ verificationResult?: ChecklistVerificationResult;
8
+ iterations?: number;
9
+ data?: {
10
+ checklist_item_results?: any[];
11
+ [key: string]: any;
12
+ };
13
+ }
14
+ /**
15
+ * Build successful design result
16
+ */
17
+ export declare function buildDesignResult(featureId: string, technicalDesign: string, summary: string, iterations: number, checklistItemResults?: any[]): TechnicalDesignResult;
18
+ /**
19
+ * Build verification failure result
20
+ */
21
+ export declare function buildVerificationFailureResult(featureId: string, technicalDesign: string, verificationResult: ChecklistVerificationResult, iterations: number): TechnicalDesignResult;
22
+ /**
23
+ * Build error result when no design was generated
24
+ */
25
+ export declare function buildNoResultsError(featureId: string): TechnicalDesignResult;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Build successful design result
3
+ */
4
+ export function buildDesignResult(featureId, technicalDesign, summary, iterations, checklistItemResults) {
5
+ return {
6
+ featureId,
7
+ technicalDesign,
8
+ status: 'success',
9
+ summary,
10
+ iterations,
11
+ data: checklistItemResults
12
+ ? { checklist_item_results: checklistItemResults }
13
+ : undefined,
14
+ };
15
+ }
16
+ /**
17
+ * Build verification failure result
18
+ */
19
+ export function buildVerificationFailureResult(featureId, technicalDesign, verificationResult, iterations) {
20
+ return {
21
+ featureId,
22
+ technicalDesign,
23
+ status: 'error',
24
+ summary: `Checklist verification failed after ${iterations} iterations: ${verificationResult.summary}`,
25
+ verificationResult,
26
+ iterations,
27
+ };
28
+ }
29
+ /**
30
+ * Build error result when no design was generated
31
+ */
32
+ export function buildNoResultsError(featureId) {
33
+ return {
34
+ featureId,
35
+ technicalDesign: null,
36
+ status: 'error',
37
+ summary: 'Failed to generate technical design - no valid result received',
38
+ };
39
+ }
@@ -0,0 +1,21 @@
1
+ import { EdsgerConfig } from '../../types/index.js';
2
+ import { ChecklistPhaseContext } from '../../services/checklist.js';
3
+ export interface TechnicalDesignOptions {
4
+ featureId: string;
5
+ verbose?: boolean;
6
+ maxVerificationIterations?: number;
7
+ }
8
+ export interface TechnicalDesignResult {
9
+ featureId: string;
10
+ technicalDesign: string | null;
11
+ status: 'success' | 'error';
12
+ summary: string;
13
+ verificationResult?: any;
14
+ iterations?: number;
15
+ savedViaHttp?: boolean;
16
+ data?: {
17
+ checklist_item_results?: any[];
18
+ [key: string]: any;
19
+ };
20
+ }
21
+ export declare const generateTechnicalDesign: (options: TechnicalDesignOptions, config: EdsgerConfig, checklistContext?: ChecklistPhaseContext | null) => Promise<TechnicalDesignResult>;