ai-sdlc 0.2.0-alpha.5 → 0.2.0-alpha.50
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/README.md +53 -1058
- package/dist/agents/implementation.d.ts +6 -0
- package/dist/agents/implementation.d.ts.map +1 -1
- package/dist/agents/implementation.js +151 -13
- package/dist/agents/implementation.js.map +1 -1
- package/dist/agents/index.d.ts +2 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +2 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +61 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +443 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/planning.d.ts +1 -1
- package/dist/agents/planning.d.ts.map +1 -1
- package/dist/agents/planning.js +55 -4
- package/dist/agents/planning.js.map +1 -1
- package/dist/agents/refinement.d.ts.map +1 -1
- package/dist/agents/refinement.js +22 -3
- package/dist/agents/refinement.js.map +1 -1
- package/dist/agents/research.d.ts +85 -1
- package/dist/agents/research.d.ts.map +1 -1
- package/dist/agents/research.js +506 -16
- package/dist/agents/research.js.map +1 -1
- package/dist/agents/review.d.ts +77 -2
- package/dist/agents/review.d.ts.map +1 -1
- package/dist/agents/review.js +615 -93
- package/dist/agents/review.js.map +1 -1
- package/dist/agents/rework.d.ts.map +1 -1
- package/dist/agents/rework.js +22 -3
- package/dist/agents/rework.js.map +1 -1
- package/dist/agents/single-task.d.ts +41 -0
- package/dist/agents/single-task.d.ts.map +1 -0
- package/dist/agents/single-task.js +357 -0
- package/dist/agents/single-task.js.map +1 -0
- package/dist/agents/state-assessor.d.ts +3 -3
- package/dist/agents/state-assessor.d.ts.map +1 -1
- package/dist/agents/state-assessor.js +6 -6
- package/dist/agents/state-assessor.js.map +1 -1
- package/dist/agents/test-pattern-detector.d.ts +49 -0
- package/dist/agents/test-pattern-detector.d.ts.map +1 -0
- package/dist/agents/test-pattern-detector.js +273 -0
- package/dist/agents/test-pattern-detector.js.map +1 -0
- package/dist/agents/verification.d.ts +11 -0
- package/dist/agents/verification.d.ts.map +1 -1
- package/dist/agents/verification.js +97 -12
- package/dist/agents/verification.js.map +1 -1
- package/dist/cli/commands/migrate.js +1 -1
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands.d.ts +65 -3
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +1108 -204
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +20 -3
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/runner.d.ts.map +1 -1
- package/dist/cli/runner.js +19 -11
- package/dist/cli/runner.js.map +1 -1
- package/dist/core/auth.d.ts +43 -0
- package/dist/core/auth.d.ts.map +1 -1
- package/dist/core/auth.js +105 -1
- package/dist/core/auth.js.map +1 -1
- package/dist/core/client.d.ts +6 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +57 -3
- package/dist/core/client.js.map +1 -1
- package/dist/core/config.d.ts +24 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +100 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/conflict-detector.d.ts +108 -0
- package/dist/core/conflict-detector.d.ts.map +1 -0
- package/dist/core/conflict-detector.js +413 -0
- package/dist/core/conflict-detector.js.map +1 -0
- package/dist/core/git-utils.d.ts +28 -0
- package/dist/core/git-utils.d.ts.map +1 -0
- package/dist/core/git-utils.js +146 -0
- package/dist/core/git-utils.js.map +1 -0
- package/dist/core/index.d.ts +19 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +19 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/kanban.d.ts +1 -1
- package/dist/core/kanban.d.ts.map +1 -1
- package/dist/core/kanban.js +7 -6
- package/dist/core/kanban.js.map +1 -1
- package/dist/core/llm-utils.d.ts +103 -0
- package/dist/core/llm-utils.d.ts.map +1 -0
- package/dist/core/llm-utils.js +368 -0
- package/dist/core/llm-utils.js.map +1 -0
- package/dist/core/logger.d.ts +92 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +221 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/story-logger.d.ts +102 -0
- package/dist/core/story-logger.d.ts.map +1 -0
- package/dist/core/story-logger.js +265 -0
- package/dist/core/story-logger.js.map +1 -0
- package/dist/core/story.d.ts +89 -20
- package/dist/core/story.d.ts.map +1 -1
- package/dist/core/story.js +297 -52
- package/dist/core/story.js.map +1 -1
- package/dist/core/task-parser.d.ts +59 -0
- package/dist/core/task-parser.d.ts.map +1 -0
- package/dist/core/task-parser.js +235 -0
- package/dist/core/task-parser.js.map +1 -0
- package/dist/core/task-progress.d.ts +92 -0
- package/dist/core/task-progress.d.ts.map +1 -0
- package/dist/core/task-progress.js +280 -0
- package/dist/core/task-progress.js.map +1 -0
- package/dist/core/workflow-state.d.ts +45 -6
- package/dist/core/workflow-state.d.ts.map +1 -1
- package/dist/core/workflow-state.js +201 -12
- package/dist/core/workflow-state.js.map +1 -1
- package/dist/core/worktree.d.ts +77 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +246 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/index.js +135 -5
- package/dist/index.js.map +1 -1
- package/dist/services/error-classifier.d.ts +119 -0
- package/dist/services/error-classifier.d.ts.map +1 -0
- package/dist/services/error-classifier.js +182 -0
- package/dist/services/error-classifier.js.map +1 -0
- package/dist/types/index.d.ts +336 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +4 -1
package/dist/core/auth.d.ts
CHANGED
|
@@ -1,4 +1,47 @@
|
|
|
1
1
|
export type CredentialType = 'api_key' | 'oauth_token' | 'none';
|
|
2
|
+
/**
|
|
3
|
+
* Token expiration information
|
|
4
|
+
*/
|
|
5
|
+
export interface TokenExpirationInfo {
|
|
6
|
+
/** Whether the token is currently expired (with clock skew buffer) */
|
|
7
|
+
isExpired: boolean;
|
|
8
|
+
/** Expiration date (null if not available or invalid) */
|
|
9
|
+
expiresAt: Date | null;
|
|
10
|
+
/** Milliseconds until expiration (null if not available or invalid) */
|
|
11
|
+
expiresInMs: number | null;
|
|
12
|
+
/** Source file path for debugging (null if not from file) */
|
|
13
|
+
source: string | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if a token expires within the given buffer period
|
|
17
|
+
* Returns false if date is invalid or missing
|
|
18
|
+
*
|
|
19
|
+
* @param expiresAt - ISO 8601 date string
|
|
20
|
+
* @param bufferMs - Time buffer in milliseconds (default: 5 minutes)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Check if token expires in next 5 minutes
|
|
24
|
+
* isTokenExpiringSoon('2026-01-15T12:05:00Z') // true if current time is after 12:00:00
|
|
25
|
+
*
|
|
26
|
+
* // Check with custom buffer (10 minutes)
|
|
27
|
+
* isTokenExpiringSoon('2026-01-15T12:10:00Z', 10 * 60 * 1000) // true if current time is after 12:00:00
|
|
28
|
+
*/
|
|
29
|
+
export declare function isTokenExpiringSoon(expiresAt: string | undefined, bufferMs?: number): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Get token expiration information from credentials file
|
|
32
|
+
* Returns null fields if expiresAt is missing or unparseable
|
|
33
|
+
*
|
|
34
|
+
* @returns TokenExpirationInfo with expiration details
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const info = getTokenExpirationInfo();
|
|
38
|
+
* if (info.isExpired) {
|
|
39
|
+
* console.error('Token expired. Please run `claude login`');
|
|
40
|
+
* } else if (info.expiresInMs && info.expiresInMs < 5 * 60 * 1000) {
|
|
41
|
+
* console.warn('Token expires soon');
|
|
42
|
+
* }
|
|
43
|
+
*/
|
|
44
|
+
export declare function getTokenExpirationInfo(): TokenExpirationInfo;
|
|
2
45
|
/**
|
|
3
46
|
* Get API key/token from various sources in order of preference:
|
|
4
47
|
* 1. ANTHROPIC_API_KEY environment variable (direct API key)
|
package/dist/core/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,SAAS,EAAE,OAAO,CAAC;IACnB,yDAAyD;IACzD,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,uEAAuE;IACvE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA6HD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAiB5G;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CA0D5D;AAwBD;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAkCzC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,CAIpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAoBrF;AAkDD;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,KAAK,GAAG,kBAAkB,GAAG,UAAU,GAAG,MAAM,CAkBlF"}
|
package/dist/core/auth.js
CHANGED
|
@@ -88,6 +88,10 @@ function getCredentialsFromFile() {
|
|
|
88
88
|
/**
|
|
89
89
|
* Check if a token is expired based on ISO8601 expiresAt date
|
|
90
90
|
* Returns false if date is invalid or missing (assume token is valid)
|
|
91
|
+
*
|
|
92
|
+
* Includes a 30-second clock skew buffer to handle minor time differences
|
|
93
|
+
* between client and server clocks. A token is considered expired if:
|
|
94
|
+
* current_time >= expiry_time - 30_seconds
|
|
91
95
|
*/
|
|
92
96
|
function isTokenExpired(expiresAt) {
|
|
93
97
|
if (!expiresAt) {
|
|
@@ -99,12 +103,112 @@ function isTokenExpired(expiresAt) {
|
|
|
99
103
|
if (isNaN(expiry.getTime())) {
|
|
100
104
|
return false; // Invalid date, skip expiration check
|
|
101
105
|
}
|
|
102
|
-
|
|
106
|
+
// 30-second clock skew buffer (30000ms)
|
|
107
|
+
const CLOCK_SKEW_BUFFER_MS = 30000;
|
|
108
|
+
return Date.now() >= expiry.getTime() - CLOCK_SKEW_BUFFER_MS;
|
|
103
109
|
}
|
|
104
110
|
catch {
|
|
105
111
|
return false; // Parse error, skip expiration check
|
|
106
112
|
}
|
|
107
113
|
}
|
|
114
|
+
/**
|
|
115
|
+
* Check if a token expires within the given buffer period
|
|
116
|
+
* Returns false if date is invalid or missing
|
|
117
|
+
*
|
|
118
|
+
* @param expiresAt - ISO 8601 date string
|
|
119
|
+
* @param bufferMs - Time buffer in milliseconds (default: 5 minutes)
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* // Check if token expires in next 5 minutes
|
|
123
|
+
* isTokenExpiringSoon('2026-01-15T12:05:00Z') // true if current time is after 12:00:00
|
|
124
|
+
*
|
|
125
|
+
* // Check with custom buffer (10 minutes)
|
|
126
|
+
* isTokenExpiringSoon('2026-01-15T12:10:00Z', 10 * 60 * 1000) // true if current time is after 12:00:00
|
|
127
|
+
*/
|
|
128
|
+
export function isTokenExpiringSoon(expiresAt, bufferMs = 5 * 60 * 1000) {
|
|
129
|
+
if (!expiresAt) {
|
|
130
|
+
return false; // No expiration date, assume not expiring soon
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const expiry = new Date(expiresAt);
|
|
134
|
+
// Check if date is valid (not NaN)
|
|
135
|
+
if (isNaN(expiry.getTime())) {
|
|
136
|
+
return false; // Invalid date, skip check
|
|
137
|
+
}
|
|
138
|
+
const expiresInMs = expiry.getTime() - Date.now();
|
|
139
|
+
return expiresInMs > 0 && expiresInMs <= bufferMs;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false; // Parse error, skip check
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Get token expiration information from credentials file
|
|
147
|
+
* Returns null fields if expiresAt is missing or unparseable
|
|
148
|
+
*
|
|
149
|
+
* @returns TokenExpirationInfo with expiration details
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* const info = getTokenExpirationInfo();
|
|
153
|
+
* if (info.isExpired) {
|
|
154
|
+
* console.error('Token expired. Please run `claude login`');
|
|
155
|
+
* } else if (info.expiresInMs && info.expiresInMs < 5 * 60 * 1000) {
|
|
156
|
+
* console.warn('Token expires soon');
|
|
157
|
+
* }
|
|
158
|
+
*/
|
|
159
|
+
export function getTokenExpirationInfo() {
|
|
160
|
+
const credentials = getCredentialsFromFile();
|
|
161
|
+
// If no credentials file, return null fields
|
|
162
|
+
if (!credentials) {
|
|
163
|
+
return {
|
|
164
|
+
isExpired: false,
|
|
165
|
+
expiresAt: null,
|
|
166
|
+
expiresInMs: null,
|
|
167
|
+
source: null,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
const credentialPath = path.join(homedir(), '.claude', '.credentials.json');
|
|
171
|
+
const expiresAtStr = credentials.expiresAt;
|
|
172
|
+
// If no expiresAt field, return null expiration fields
|
|
173
|
+
if (!expiresAtStr) {
|
|
174
|
+
return {
|
|
175
|
+
isExpired: false,
|
|
176
|
+
expiresAt: null,
|
|
177
|
+
expiresInMs: null,
|
|
178
|
+
source: credentialPath,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const expiry = new Date(expiresAtStr);
|
|
183
|
+
// Check if date is valid
|
|
184
|
+
if (isNaN(expiry.getTime())) {
|
|
185
|
+
console.debug(`Invalid date format in expiresAt: ${expiresAtStr}`);
|
|
186
|
+
return {
|
|
187
|
+
isExpired: false,
|
|
188
|
+
expiresAt: null,
|
|
189
|
+
expiresInMs: null,
|
|
190
|
+
source: credentialPath,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const expiresInMs = expiry.getTime() - Date.now();
|
|
194
|
+
const isExpired = isTokenExpired(expiresAtStr);
|
|
195
|
+
return {
|
|
196
|
+
isExpired,
|
|
197
|
+
expiresAt: expiry,
|
|
198
|
+
expiresInMs,
|
|
199
|
+
source: credentialPath,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
console.debug(`Error parsing expiresAt: ${error}`);
|
|
204
|
+
return {
|
|
205
|
+
isExpired: false,
|
|
206
|
+
expiresAt: null,
|
|
207
|
+
expiresInMs: null,
|
|
208
|
+
source: credentialPath,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
108
212
|
/**
|
|
109
213
|
* Check credential file permissions and warn if insecure
|
|
110
214
|
* Only 600 (owner read/write) and 400 (owner read-only) are considered secure
|
package/dist/core/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/client.d.ts
CHANGED
|
@@ -5,6 +5,12 @@ import { CredentialType } from './auth.js';
|
|
|
5
5
|
export declare class AgentTimeoutError extends Error {
|
|
6
6
|
constructor(timeoutMs: number);
|
|
7
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when authentication fails (e.g., expired token)
|
|
10
|
+
*/
|
|
11
|
+
export declare class AuthenticationError extends Error {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
8
14
|
/**
|
|
9
15
|
* Progress event types from the Agent SDK
|
|
10
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAuD,cAAc,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAuD,cAAc,EAA0B,MAAM,WAAW,CAAC;AAMxH;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,SAAS,EAAE,MAAM;CAK9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACzE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,qBAAqB,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgBD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwK/E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
|
package/dist/core/client.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { query } from '@anthropic-ai/claude-agent-sdk';
|
|
2
|
-
import { configureAgentSdkAuth, getApiKey, getCredentialType } from './auth.js';
|
|
2
|
+
import { configureAgentSdkAuth, getApiKey, getCredentialType, getTokenExpirationInfo } from './auth.js';
|
|
3
3
|
import { loadConfig, DEFAULT_TIMEOUTS } from './config.js';
|
|
4
|
+
import { getLogger } from './logger.js';
|
|
4
5
|
import { platform, homedir } from 'os';
|
|
5
6
|
import path from 'path';
|
|
6
7
|
/**
|
|
@@ -13,6 +14,15 @@ export class AgentTimeoutError extends Error {
|
|
|
13
14
|
this.name = 'AgentTimeoutError';
|
|
14
15
|
}
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Error thrown when authentication fails (e.g., expired token)
|
|
19
|
+
*/
|
|
20
|
+
export class AuthenticationError extends Error {
|
|
21
|
+
constructor(message) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'AuthenticationError';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
16
26
|
/**
|
|
17
27
|
* Validate that the working directory is within safe boundaries
|
|
18
28
|
*/
|
|
@@ -33,6 +43,8 @@ function isValidWorkingDirectory(workingDir) {
|
|
|
33
43
|
* CLAUDE.md discovery is handled automatically by the SDK when settingSources includes 'project'.
|
|
34
44
|
*/
|
|
35
45
|
export async function runAgentQuery(options) {
|
|
46
|
+
const logger = getLogger();
|
|
47
|
+
const queryStartTime = Date.now();
|
|
36
48
|
// Configure authentication
|
|
37
49
|
const authResult = configureAgentSdkAuth();
|
|
38
50
|
if (!authResult.configured) {
|
|
@@ -47,6 +59,19 @@ export async function runAgentQuery(options) {
|
|
|
47
59
|
errorMessage += '.';
|
|
48
60
|
throw new Error(errorMessage);
|
|
49
61
|
}
|
|
62
|
+
// Check token expiration (only for OAuth tokens from credential file)
|
|
63
|
+
if (authResult.type === 'oauth_token') {
|
|
64
|
+
const tokenInfo = getTokenExpirationInfo();
|
|
65
|
+
// If token is expired, throw authentication error
|
|
66
|
+
if (tokenInfo.isExpired) {
|
|
67
|
+
const source = tokenInfo.source ? `Token from ${tokenInfo.source}` : 'OAuth token';
|
|
68
|
+
throw new AuthenticationError(`${source} has expired. Please run \`claude login\` to refresh your credentials.`);
|
|
69
|
+
}
|
|
70
|
+
// If token expires within 5 minutes, show warning but proceed
|
|
71
|
+
if (tokenInfo.expiresInMs !== null && tokenInfo.expiresInMs < 5 * 60 * 1000) {
|
|
72
|
+
console.warn('⚠️ OAuth token expires in less than 5 minutes. Consider running `claude login`.');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
50
75
|
// Validate and normalize working directory
|
|
51
76
|
const workingDir = path.resolve(options.workingDirectory || process.cwd());
|
|
52
77
|
if (!isValidWorkingDirectory(workingDir)) {
|
|
@@ -56,6 +81,14 @@ export async function runAgentQuery(options) {
|
|
|
56
81
|
const config = loadConfig(workingDir);
|
|
57
82
|
const settingSources = config.settingSources || [];
|
|
58
83
|
const timeout = options.timeout ?? config.timeouts?.agentTimeout ?? DEFAULT_TIMEOUTS.agentTimeout;
|
|
84
|
+
// Log query start
|
|
85
|
+
logger.debug('agent-sdk', 'Starting agent query', {
|
|
86
|
+
model: options.model || 'claude-sonnet-4-5-20250929',
|
|
87
|
+
workingDirectory: workingDir,
|
|
88
|
+
timeoutMs: timeout,
|
|
89
|
+
authType: authResult.type,
|
|
90
|
+
promptLength: options.prompt.length,
|
|
91
|
+
});
|
|
59
92
|
const results = [];
|
|
60
93
|
const response = query({
|
|
61
94
|
prompt: options.prompt,
|
|
@@ -127,9 +160,19 @@ export async function runAgentQuery(options) {
|
|
|
127
160
|
break;
|
|
128
161
|
case 'error':
|
|
129
162
|
options.onProgress?.({ type: 'error', message: message.error?.message || 'Agent error' });
|
|
130
|
-
|
|
163
|
+
const agentError = new Error(message.error?.message || 'Agent error');
|
|
164
|
+
logger.error('agent-sdk', 'Agent query error', {
|
|
165
|
+
durationMs: Date.now() - queryStartTime,
|
|
166
|
+
error: agentError.message,
|
|
167
|
+
});
|
|
168
|
+
throw agentError;
|
|
131
169
|
}
|
|
132
170
|
}
|
|
171
|
+
const queryDuration = Date.now() - queryStartTime;
|
|
172
|
+
logger.info('agent-sdk', 'Agent query completed', {
|
|
173
|
+
durationMs: queryDuration,
|
|
174
|
+
resultLength: results.join('\n').length,
|
|
175
|
+
});
|
|
133
176
|
return results.join('\n');
|
|
134
177
|
}
|
|
135
178
|
finally {
|
|
@@ -139,7 +182,18 @@ export async function runAgentQuery(options) {
|
|
|
139
182
|
}
|
|
140
183
|
};
|
|
141
184
|
// Race between the agent query and the timeout
|
|
142
|
-
|
|
185
|
+
try {
|
|
186
|
+
return await Promise.race([processMessages(), timeoutPromise]);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
if (error instanceof AgentTimeoutError) {
|
|
190
|
+
logger.error('agent-sdk', 'Agent query timed out', {
|
|
191
|
+
durationMs: Date.now() - queryStartTime,
|
|
192
|
+
timeoutMs: timeout,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
143
197
|
}
|
|
144
198
|
/**
|
|
145
199
|
* Get the current credential type being used
|
package/dist/core/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,iBAAiB,EAAkB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Config, StageGateConfig, RefinementConfig, ReviewConfig, ImplementationConfig, TimeoutConfig, DaemonConfig, TDDConfig } from '../types/index.js';
|
|
1
|
+
import { Config, StageGateConfig, RefinementConfig, ReviewConfig, ImplementationConfig, TimeoutConfig, DaemonConfig, TDDConfig, WorktreeConfig, LogConfig } from '../types/index.js';
|
|
2
2
|
/**
|
|
3
3
|
* Default timeout configuration
|
|
4
4
|
*/
|
|
@@ -11,10 +11,18 @@ export declare const DEFAULT_DAEMON_CONFIG: DaemonConfig;
|
|
|
11
11
|
* Default TDD configuration
|
|
12
12
|
*/
|
|
13
13
|
export declare const DEFAULT_TDD_CONFIG: TDDConfig;
|
|
14
|
+
/**
|
|
15
|
+
* Default worktree configuration
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_WORKTREE_CONFIG: WorktreeConfig;
|
|
14
18
|
/**
|
|
15
19
|
* Default implementation configuration
|
|
16
20
|
*/
|
|
17
21
|
export declare const DEFAULT_IMPLEMENTATION_CONFIG: ImplementationConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Default logging configuration
|
|
24
|
+
*/
|
|
25
|
+
export declare const DEFAULT_LOGGING_CONFIG: LogConfig;
|
|
18
26
|
export declare const DEFAULT_CONFIG: Config;
|
|
19
27
|
/**
|
|
20
28
|
* Get the SDLC root folder path
|
|
@@ -65,4 +73,19 @@ export declare function validateImplementationConfig(implementationConfig: Imple
|
|
|
65
73
|
* Update implementation configuration
|
|
66
74
|
*/
|
|
67
75
|
export declare function updateImplementationConfig(implementationConfig: Partial<ImplementationConfig>, workingDir?: string): Config;
|
|
76
|
+
/**
|
|
77
|
+
* Validate and resolve worktree basePath
|
|
78
|
+
* @param basePath - The configured base path (may be relative)
|
|
79
|
+
* @param projectRoot - The project root directory
|
|
80
|
+
* @returns The resolved absolute path
|
|
81
|
+
* @throws Error if the parent directory does not exist
|
|
82
|
+
*/
|
|
83
|
+
export declare function validateWorktreeBasePath(basePath: string, projectRoot: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* Get resolved worktree configuration with validated paths
|
|
86
|
+
* @param config - The loaded configuration
|
|
87
|
+
* @param projectRoot - The project root directory
|
|
88
|
+
* @returns Resolved worktree config with absolute basePath
|
|
89
|
+
*/
|
|
90
|
+
export declare function getWorktreeConfig(config: Config, projectRoot: string): WorktreeConfig;
|
|
68
91
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAIrL;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAI9B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAQnC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAMhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,cAGrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,oBAG3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,SAKpC,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MA0C5B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAOtE;AAiMD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAsIrE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAsB,GAAG,IAAI,CAGnF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,EAC/B,UAAU,GAAE,MAAsB,GACjC,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,eAAe,EAC3B,UAAU,GAAE,MAAsB,GACjC,OAAO,CAGT;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAQrE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC3C,UAAU,GAAE,MAAsB,GACjC,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,GAAE,MAAsB,GAAG,MAAM,CAGrF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,YAAY,GAAG,YAAY,CA8B7E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,EACnC,UAAU,GAAE,MAAsB,GACjC,MAAM,CASR;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,oBAAoB,CA8B7G;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACnD,UAAU,GAAE,MAAsB,GACjC,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAYtF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,cAAc,CAOrF"}
|
package/dist/core/config.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
1
|
+
import * as fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
const CONFIG_FILENAME = '.ai-sdlc.json';
|
|
4
4
|
/**
|
|
@@ -31,6 +31,13 @@ export const DEFAULT_TDD_CONFIG = {
|
|
|
31
31
|
requireApprovalPerCycle: false,
|
|
32
32
|
requirePassingTestsForComplete: true,
|
|
33
33
|
};
|
|
34
|
+
/**
|
|
35
|
+
* Default worktree configuration
|
|
36
|
+
*/
|
|
37
|
+
export const DEFAULT_WORKTREE_CONFIG = {
|
|
38
|
+
enabled: false,
|
|
39
|
+
basePath: '.ai-sdlc/worktrees',
|
|
40
|
+
};
|
|
34
41
|
/**
|
|
35
42
|
* Default implementation configuration
|
|
36
43
|
*/
|
|
@@ -38,6 +45,15 @@ export const DEFAULT_IMPLEMENTATION_CONFIG = {
|
|
|
38
45
|
maxRetries: 3,
|
|
39
46
|
maxRetriesUpperBound: 10,
|
|
40
47
|
};
|
|
48
|
+
/**
|
|
49
|
+
* Default logging configuration
|
|
50
|
+
*/
|
|
51
|
+
export const DEFAULT_LOGGING_CONFIG = {
|
|
52
|
+
enabled: true,
|
|
53
|
+
level: 'info',
|
|
54
|
+
maxFileSizeMb: 10,
|
|
55
|
+
maxFiles: 5,
|
|
56
|
+
};
|
|
41
57
|
export const DEFAULT_CONFIG = {
|
|
42
58
|
sdlcFolder: '.ai-sdlc',
|
|
43
59
|
stageGates: {
|
|
@@ -57,6 +73,8 @@ export const DEFAULT_CONFIG = {
|
|
|
57
73
|
maxRetriesUpperBound: 10,
|
|
58
74
|
autoCompleteOnApproval: true,
|
|
59
75
|
autoRestartOnRejection: true,
|
|
76
|
+
detectTestAntipatterns: true,
|
|
77
|
+
autoCreatePROnApproval: false, // Set to true in automated mode at runtime
|
|
60
78
|
},
|
|
61
79
|
implementation: { ...DEFAULT_IMPLEMENTATION_CONFIG },
|
|
62
80
|
defaultLabels: [],
|
|
@@ -64,14 +82,20 @@ export const DEFAULT_CONFIG = {
|
|
|
64
82
|
// Test and build commands - auto-detected from package.json if present
|
|
65
83
|
testCommand: 'npm test',
|
|
66
84
|
buildCommand: 'npm run build',
|
|
67
|
-
// Agent SDK settings sources -
|
|
68
|
-
settingSources: [],
|
|
85
|
+
// Agent SDK settings sources - enables Skills discovery from .claude/skills/
|
|
86
|
+
settingSources: ['project'],
|
|
69
87
|
// Timeout configuration
|
|
70
88
|
timeouts: { ...DEFAULT_TIMEOUTS },
|
|
71
89
|
// Daemon configuration
|
|
72
90
|
daemon: { ...DEFAULT_DAEMON_CONFIG },
|
|
73
91
|
// TDD configuration
|
|
74
92
|
tdd: { ...DEFAULT_TDD_CONFIG },
|
|
93
|
+
// Worktree configuration
|
|
94
|
+
worktree: { ...DEFAULT_WORKTREE_CONFIG },
|
|
95
|
+
// Logging configuration
|
|
96
|
+
logging: { ...DEFAULT_LOGGING_CONFIG },
|
|
97
|
+
// Orchestrator configuration
|
|
98
|
+
useOrchestrator: false,
|
|
75
99
|
};
|
|
76
100
|
/**
|
|
77
101
|
* Get the SDLC root folder path
|
|
@@ -228,6 +252,29 @@ function sanitizeUserConfig(userConfig) {
|
|
|
228
252
|
}
|
|
229
253
|
}
|
|
230
254
|
}
|
|
255
|
+
// Validate worktree configuration if present
|
|
256
|
+
if (userConfig.worktree !== undefined) {
|
|
257
|
+
if (typeof userConfig.worktree !== 'object' || userConfig.worktree === null) {
|
|
258
|
+
console.warn('Invalid worktree in config (must be object), ignoring');
|
|
259
|
+
delete userConfig.worktree;
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// Validate worktree.enabled (must be boolean)
|
|
263
|
+
if (userConfig.worktree.enabled !== undefined) {
|
|
264
|
+
if (typeof userConfig.worktree.enabled !== 'boolean') {
|
|
265
|
+
console.warn('Invalid worktree.enabled in config (must be boolean), using default');
|
|
266
|
+
delete userConfig.worktree.enabled;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// Validate worktree.basePath (must be string)
|
|
270
|
+
if (userConfig.worktree.basePath !== undefined) {
|
|
271
|
+
if (typeof userConfig.worktree.basePath !== 'string') {
|
|
272
|
+
console.warn('Invalid worktree.basePath in config (must be string), using default');
|
|
273
|
+
delete userConfig.worktree.basePath;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
231
278
|
return userConfig;
|
|
232
279
|
}
|
|
233
280
|
/**
|
|
@@ -275,6 +322,14 @@ export function loadConfig(workingDir = process.cwd()) {
|
|
|
275
322
|
...DEFAULT_TDD_CONFIG,
|
|
276
323
|
...userConfig.tdd,
|
|
277
324
|
},
|
|
325
|
+
worktree: {
|
|
326
|
+
...DEFAULT_WORKTREE_CONFIG,
|
|
327
|
+
...userConfig.worktree,
|
|
328
|
+
},
|
|
329
|
+
logging: {
|
|
330
|
+
...DEFAULT_LOGGING_CONFIG,
|
|
331
|
+
...userConfig.logging,
|
|
332
|
+
},
|
|
278
333
|
};
|
|
279
334
|
}
|
|
280
335
|
catch (error) {
|
|
@@ -333,6 +388,17 @@ export function loadConfig(workingDir = process.cwd()) {
|
|
|
333
388
|
console.warn(`Invalid AI_SDLC_AUTO_RESTART value "${value}" (must be "true" or "false"), ignoring`);
|
|
334
389
|
}
|
|
335
390
|
}
|
|
391
|
+
if (process.env.AI_SDLC_LOG_LEVEL) {
|
|
392
|
+
const value = process.env.AI_SDLC_LOG_LEVEL.toLowerCase();
|
|
393
|
+
const validLevels = ['debug', 'info', 'warn', 'error'];
|
|
394
|
+
if (validLevels.includes(value)) {
|
|
395
|
+
config.logging = config.logging || { ...DEFAULT_LOGGING_CONFIG };
|
|
396
|
+
config.logging.level = value;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.warn(`Invalid AI_SDLC_LOG_LEVEL value "${process.env.AI_SDLC_LOG_LEVEL}" (must be debug, info, warn, or error), ignoring`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
336
402
|
// Validate review config
|
|
337
403
|
config.reviewConfig = validateReviewConfig(config.reviewConfig);
|
|
338
404
|
// Validate implementation config
|
|
@@ -474,4 +540,35 @@ export function updateImplementationConfig(implementationConfig, workingDir = pr
|
|
|
474
540
|
saveConfig(config, workingDir);
|
|
475
541
|
return config;
|
|
476
542
|
}
|
|
543
|
+
/**
|
|
544
|
+
* Validate and resolve worktree basePath
|
|
545
|
+
* @param basePath - The configured base path (may be relative)
|
|
546
|
+
* @param projectRoot - The project root directory
|
|
547
|
+
* @returns The resolved absolute path
|
|
548
|
+
* @throws Error if the parent directory does not exist
|
|
549
|
+
*/
|
|
550
|
+
export function validateWorktreeBasePath(basePath, projectRoot) {
|
|
551
|
+
const resolvedPath = path.isAbsolute(basePath)
|
|
552
|
+
? basePath
|
|
553
|
+
: path.resolve(projectRoot, basePath);
|
|
554
|
+
// Check parent directory exists (worktree dir itself may not exist yet)
|
|
555
|
+
const parentDir = path.dirname(resolvedPath);
|
|
556
|
+
if (!fs.existsSync(parentDir)) {
|
|
557
|
+
throw new Error(`Worktree basePath parent directory does not exist: ${parentDir}`);
|
|
558
|
+
}
|
|
559
|
+
return resolvedPath;
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Get resolved worktree configuration with validated paths
|
|
563
|
+
* @param config - The loaded configuration
|
|
564
|
+
* @param projectRoot - The project root directory
|
|
565
|
+
* @returns Resolved worktree config with absolute basePath
|
|
566
|
+
*/
|
|
567
|
+
export function getWorktreeConfig(config, projectRoot) {
|
|
568
|
+
const worktreeConfig = config.worktree ?? DEFAULT_WORKTREE_CONFIG;
|
|
569
|
+
return {
|
|
570
|
+
enabled: worktreeConfig.enabled,
|
|
571
|
+
basePath: validateWorktreeBasePath(worktreeConfig.basePath, projectRoot),
|
|
572
|
+
};
|
|
573
|
+
}
|
|
477
574
|
//# sourceMappingURL=config.js.map
|