ai-sdlc 0.2.0-alpha.3 → 0.2.0-alpha.31

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 (103) hide show
  1. package/README.md +53 -1058
  2. package/dist/agents/implementation.d.ts +62 -0
  3. package/dist/agents/implementation.d.ts.map +1 -1
  4. package/dist/agents/implementation.js +494 -90
  5. package/dist/agents/implementation.js.map +1 -1
  6. package/dist/agents/planning.d.ts.map +1 -1
  7. package/dist/agents/planning.js +22 -3
  8. package/dist/agents/planning.js.map +1 -1
  9. package/dist/agents/refinement.d.ts.map +1 -1
  10. package/dist/agents/refinement.js +22 -3
  11. package/dist/agents/refinement.js.map +1 -1
  12. package/dist/agents/research.d.ts +85 -1
  13. package/dist/agents/research.d.ts.map +1 -1
  14. package/dist/agents/research.js +506 -16
  15. package/dist/agents/research.js.map +1 -1
  16. package/dist/agents/review.d.ts +79 -2
  17. package/dist/agents/review.d.ts.map +1 -1
  18. package/dist/agents/review.js +568 -68
  19. package/dist/agents/review.js.map +1 -1
  20. package/dist/agents/rework.d.ts.map +1 -1
  21. package/dist/agents/rework.js +22 -3
  22. package/dist/agents/rework.js.map +1 -1
  23. package/dist/agents/state-assessor.d.ts +3 -3
  24. package/dist/agents/state-assessor.d.ts.map +1 -1
  25. package/dist/agents/state-assessor.js +6 -6
  26. package/dist/agents/state-assessor.js.map +1 -1
  27. package/dist/agents/test-pattern-detector.d.ts +49 -0
  28. package/dist/agents/test-pattern-detector.d.ts.map +1 -0
  29. package/dist/agents/test-pattern-detector.js +273 -0
  30. package/dist/agents/test-pattern-detector.js.map +1 -0
  31. package/dist/agents/verification.d.ts +11 -0
  32. package/dist/agents/verification.d.ts.map +1 -1
  33. package/dist/agents/verification.js +74 -1
  34. package/dist/agents/verification.js.map +1 -1
  35. package/dist/cli/commands/migrate.js +1 -1
  36. package/dist/cli/commands/migrate.js.map +1 -1
  37. package/dist/cli/commands.d.ts +59 -3
  38. package/dist/cli/commands.d.ts.map +1 -1
  39. package/dist/cli/commands.js +1053 -217
  40. package/dist/cli/commands.js.map +1 -1
  41. package/dist/cli/daemon.d.ts.map +1 -1
  42. package/dist/cli/daemon.js +40 -10
  43. package/dist/cli/daemon.js.map +1 -1
  44. package/dist/cli/formatting.js +1 -1
  45. package/dist/cli/formatting.js.map +1 -1
  46. package/dist/cli/runner.d.ts.map +1 -1
  47. package/dist/cli/runner.js +51 -20
  48. package/dist/cli/runner.js.map +1 -1
  49. package/dist/core/auth.d.ts +51 -2
  50. package/dist/core/auth.d.ts.map +1 -1
  51. package/dist/core/auth.js +267 -7
  52. package/dist/core/auth.js.map +1 -1
  53. package/dist/core/client.d.ts +6 -0
  54. package/dist/core/client.d.ts.map +1 -1
  55. package/dist/core/client.js +68 -4
  56. package/dist/core/client.js.map +1 -1
  57. package/dist/core/config.d.ts +36 -1
  58. package/dist/core/config.d.ts.map +1 -1
  59. package/dist/core/config.js +162 -1
  60. package/dist/core/config.js.map +1 -1
  61. package/dist/core/conflict-detector.d.ts +108 -0
  62. package/dist/core/conflict-detector.d.ts.map +1 -0
  63. package/dist/core/conflict-detector.js +413 -0
  64. package/dist/core/conflict-detector.js.map +1 -0
  65. package/dist/core/git-utils.d.ts +28 -0
  66. package/dist/core/git-utils.d.ts.map +1 -0
  67. package/dist/core/git-utils.js +146 -0
  68. package/dist/core/git-utils.js.map +1 -0
  69. package/dist/core/index.d.ts +17 -0
  70. package/dist/core/index.d.ts.map +1 -0
  71. package/dist/core/index.js +17 -0
  72. package/dist/core/index.js.map +1 -0
  73. package/dist/core/kanban.d.ts +1 -6
  74. package/dist/core/kanban.d.ts.map +1 -1
  75. package/dist/core/kanban.js +10 -49
  76. package/dist/core/kanban.js.map +1 -1
  77. package/dist/core/logger.d.ts +92 -0
  78. package/dist/core/logger.d.ts.map +1 -0
  79. package/dist/core/logger.js +221 -0
  80. package/dist/core/logger.js.map +1 -0
  81. package/dist/core/story-logger.d.ts +102 -0
  82. package/dist/core/story-logger.d.ts.map +1 -0
  83. package/dist/core/story-logger.js +265 -0
  84. package/dist/core/story-logger.js.map +1 -0
  85. package/dist/core/story.d.ts +133 -20
  86. package/dist/core/story.d.ts.map +1 -1
  87. package/dist/core/story.js +426 -61
  88. package/dist/core/story.js.map +1 -1
  89. package/dist/core/workflow-state.d.ts +45 -6
  90. package/dist/core/workflow-state.d.ts.map +1 -1
  91. package/dist/core/workflow-state.js +201 -12
  92. package/dist/core/workflow-state.js.map +1 -1
  93. package/dist/core/worktree.d.ts +77 -0
  94. package/dist/core/worktree.d.ts.map +1 -0
  95. package/dist/core/worktree.js +246 -0
  96. package/dist/core/worktree.js.map +1 -0
  97. package/dist/index.js +135 -5
  98. package/dist/index.js.map +1 -1
  99. package/dist/types/index.d.ts +163 -1
  100. package/dist/types/index.d.ts.map +1 -1
  101. package/dist/types/index.js +1 -0
  102. package/dist/types/index.js.map +1 -1
  103. package/package.json +3 -1
@@ -1,15 +1,16 @@
1
1
  import ora from 'ora';
2
2
  import { getSdlcRoot, loadConfig, isStageGateEnabled } from '../core/config.js';
3
3
  import { assessState, kanbanExists } from '../core/kanban.js';
4
- import { parseStory, resetRPIVCycle, markStoryComplete, updateStoryStatus, isAtMaxRetries } from '../core/story.js';
4
+ import { parseStory, resetRPIVCycle, markStoryComplete, updateStoryStatus, isAtMaxRetries, getStory, incrementImplementationRetryCount } from '../core/story.js';
5
5
  import { ReviewDecision } from '../types/index.js';
6
6
  import { runRefinementAgent } from '../agents/refinement.js';
7
7
  import { runResearchAgent } from '../agents/research.js';
8
8
  import { runPlanningAgent } from '../agents/planning.js';
9
9
  import { runImplementationAgent } from '../agents/implementation.js';
10
- import { runReviewAgent, createPullRequest } from '../agents/review.js';
10
+ import { runReviewAgent, createPullRequest, generateReviewSummary } from '../agents/review.js';
11
11
  import { runReworkAgent, packageReworkContext } from '../agents/rework.js';
12
12
  import { getThemedChalk } from '../core/theme.js';
13
+ import { getTerminalWidth } from './formatting.js';
13
14
  /**
14
15
  * Workflow Runner
15
16
  *
@@ -33,7 +34,7 @@ export class WorkflowRunner {
33
34
  console.log(c.warning('ai-sdlc not initialized. Run `ai-sdlc init` first.'));
34
35
  return;
35
36
  }
36
- const assessment = assessState(this.sdlcRoot);
37
+ const assessment = await assessState(this.sdlcRoot);
37
38
  if (assessment.recommendedActions.length === 0) {
38
39
  console.log(c.success('No pending actions. Board is up to date!'));
39
40
  return;
@@ -89,7 +90,7 @@ export class WorkflowRunner {
89
90
  await this.runSingleAction(action);
90
91
  actionsProcessed++;
91
92
  // Re-assess after each action
92
- assessment = assessState(this.sdlcRoot);
93
+ assessment = await assessState(this.sdlcRoot);
93
94
  }
94
95
  if (actionsProcessed >= maxActions) {
95
96
  console.log(c.warning(`\nReached maximum actions limit (${maxActions}). Stopping.`));
@@ -133,20 +134,36 @@ export class WorkflowRunner {
133
134
  */
134
135
  async executeAction(action) {
135
136
  const config = loadConfig();
137
+ // Resolve story by ID to get current path (handles moves between folders)
138
+ let currentStoryPath;
139
+ try {
140
+ const story = getStory(this.sdlcRoot, action.storyId);
141
+ currentStoryPath = story.path;
142
+ }
143
+ catch (error) {
144
+ const c = getThemedChalk(config);
145
+ console.log(c.error(`Error: Cannot execute action "${action.type}"`));
146
+ console.log(c.dim(` Story ID: ${action.storyId}`));
147
+ console.log(c.dim(` Original path: ${action.storyPath}`));
148
+ if (error instanceof Error) {
149
+ console.log(c.dim(` ${error.message}`));
150
+ }
151
+ return { success: false, error: error instanceof Error ? error.message : 'Story not found', changesMade: [] };
152
+ }
136
153
  switch (action.type) {
137
154
  case 'refine':
138
- return runRefinementAgent(action.storyPath, this.sdlcRoot);
155
+ return runRefinementAgent(currentStoryPath, this.sdlcRoot);
139
156
  case 'research':
140
- return runResearchAgent(action.storyPath, this.sdlcRoot);
157
+ return runResearchAgent(currentStoryPath, this.sdlcRoot);
141
158
  case 'plan':
142
- return runPlanningAgent(action.storyPath, this.sdlcRoot);
159
+ return runPlanningAgent(currentStoryPath, this.sdlcRoot);
143
160
  case 'implement':
144
- return runImplementationAgent(action.storyPath, this.sdlcRoot);
161
+ return runImplementationAgent(currentStoryPath, this.sdlcRoot);
145
162
  case 'review': {
146
- const reviewResult = await runReviewAgent(action.storyPath, this.sdlcRoot);
163
+ const reviewResult = await runReviewAgent(currentStoryPath, this.sdlcRoot);
147
164
  // Handle review decision (auto-complete or restart RPIV)
148
165
  if (reviewResult.success) {
149
- await this.handleReviewDecision(action.storyPath, reviewResult);
166
+ await this.handleReviewDecision(currentStoryPath, reviewResult);
150
167
  }
151
168
  return reviewResult;
152
169
  }
@@ -157,22 +174,22 @@ export class WorkflowRunner {
157
174
  throw new Error('Rework action missing required context (targetPhase)');
158
175
  }
159
176
  // Run rework agent to prepare the story for refinement
160
- const reworkResult = await runReworkAgent(action.storyPath, this.sdlcRoot, reworkContext);
177
+ const reworkResult = await runReworkAgent(currentStoryPath, this.sdlcRoot, reworkContext);
161
178
  // If rework setup succeeded, automatically trigger the target phase agent
162
179
  if (reworkResult.success) {
163
180
  const c = getThemedChalk(config);
164
181
  console.log(c.info(`\n ↳ Triggering ${reworkContext.targetPhase} agent for refinement...`));
165
182
  // Package the review feedback as context for the agent
166
- const story = parseStory(action.storyPath);
183
+ const story = parseStory(currentStoryPath);
167
184
  const agentReworkContext = packageReworkContext(story, reworkContext.reviewFeedback);
168
185
  // Execute the appropriate agent based on target phase, passing the rework context
169
186
  switch (reworkContext.targetPhase) {
170
187
  case 'research':
171
- return runResearchAgent(action.storyPath, this.sdlcRoot, { reworkContext: agentReworkContext });
188
+ return runResearchAgent(currentStoryPath, this.sdlcRoot, { reworkContext: agentReworkContext });
172
189
  case 'plan':
173
- return runPlanningAgent(action.storyPath, this.sdlcRoot, { reworkContext: agentReworkContext });
190
+ return runPlanningAgent(currentStoryPath, this.sdlcRoot, { reworkContext: agentReworkContext });
174
191
  case 'implement':
175
- return runImplementationAgent(action.storyPath, this.sdlcRoot, { reworkContext: agentReworkContext });
192
+ return runImplementationAgent(currentStoryPath, this.sdlcRoot, { reworkContext: agentReworkContext });
176
193
  default:
177
194
  throw new Error(`Unknown target phase: ${reworkContext.targetPhase}`);
178
195
  }
@@ -180,7 +197,7 @@ export class WorkflowRunner {
180
197
  return reworkResult;
181
198
  }
182
199
  case 'create_pr':
183
- return createPullRequest(action.storyPath, this.sdlcRoot);
200
+ return createPullRequest(currentStoryPath, this.sdlcRoot);
184
201
  default:
185
202
  throw new Error(`Unknown action type: ${action.type}`);
186
203
  }
@@ -196,10 +213,10 @@ export class WorkflowRunner {
196
213
  // Auto-complete on approval
197
214
  if (config.reviewConfig.autoCompleteOnApproval) {
198
215
  console.log(c.success(`\n✅ Review approved! Auto-completing story "${story.frontmatter.title}"`));
199
- markStoryComplete(story);
216
+ await markStoryComplete(story);
200
217
  // Update status to done if in in-progress
201
218
  if (story.frontmatter.status === 'in-progress') {
202
- story = updateStoryStatus(story, 'done');
219
+ story = await updateStoryStatus(story, 'done');
203
220
  console.log(c.success(`Updated story status to done`));
204
221
  }
205
222
  }
@@ -221,11 +238,25 @@ export class WorkflowRunner {
221
238
  const maxRetries = story.frontmatter.max_retries ?? config.reviewConfig.maxRetries;
222
239
  const maxRetriesDisplay = Number.isFinite(maxRetries) ? maxRetries : '∞';
223
240
  console.log(c.warning(`\n🔄 Review rejected. Restarting RPIV cycle (attempt ${retryCount}/${maxRetriesDisplay})`));
224
- console.log(c.dim(`Reason: ${reviewResult.feedback.substring(0, 200)}...`));
225
- resetRPIVCycle(story, reviewResult.feedback);
241
+ // Display executive summary
242
+ const summary = generateReviewSummary(reviewResult.issues, getTerminalWidth());
243
+ console.log(c.dim(` Summary: ${summary}`));
244
+ await resetRPIVCycle(story, reviewResult.feedback);
226
245
  console.log(c.info('RPIV cycle reset. Planning phase will restart on next run.'));
227
246
  }
228
247
  }
248
+ else if (reviewResult.decision === ReviewDecision.RECOVERY) {
249
+ // Implementation recovery: reset implementation_complete and increment implementation retry count
250
+ // This is distinct from REJECTED which resets the entire RPIV cycle
251
+ const retryCount = story.frontmatter.implementation_retry_count || 0;
252
+ console.log(c.warning(`\n🔄 Implementation recovery triggered (attempt ${retryCount + 1})`));
253
+ console.log(c.dim(` Reason: ${story.frontmatter.last_restart_reason || 'No source code changes detected'}`));
254
+ // Reset implementation_complete flag (already done by review agent, but refresh story state)
255
+ story = parseStory(storyPath);
256
+ // Increment implementation retry count
257
+ await incrementImplementationRetryCount(story);
258
+ console.log(c.info('Implementation phase will re-run on next execution.'));
259
+ }
229
260
  else if (reviewResult.decision === ReviewDecision.FAILED) {
230
261
  // Review agent failed - don't increment retry count
231
262
  console.log(c.error(`\n❌ Review process failed: ${reviewResult.error}`));
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/cli/runner.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,53 @@
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)
5
48
  * 2. CLAUDE_CODE_OAUTH_TOKEN environment variable (OAuth token)
6
- * 3. macOS Keychain (Claude Code credentials)
49
+ * 3. Credential file at ~/.claude/.credentials.json (all platforms)
50
+ * 4. macOS Keychain (Claude Code credentials, darwin only)
7
51
  */
8
52
  export declare function getApiKey(): string | null;
9
53
  /**
@@ -23,6 +67,11 @@ export declare function getCredentialType(key: string | null): CredentialType;
23
67
  * The Agent SDK uses:
24
68
  * - ANTHROPIC_API_KEY for direct API keys
25
69
  * - CLAUDE_CODE_OAUTH_TOKEN for OAuth tokens
70
+ *
71
+ * SECURITY NOTE: Environment variables set by this function persist for the lifetime
72
+ * of the Node.js process. The tokens are not automatically cleared and will be
73
+ * accessible to any code running in the same process. This is intentional for the
74
+ * Agent SDK to work correctly, but callers should be aware of this behavior.
26
75
  */
27
76
  export declare function configureAgentSdkAuth(): {
28
77
  configured: boolean;
@@ -35,5 +84,5 @@ export declare function hasApiKey(): boolean;
35
84
  /**
36
85
  * Get the source of the API key (for display purposes)
37
86
  */
38
- export declare function getApiKeySource(): 'env' | 'keychain' | 'none';
87
+ export declare function getApiKeySource(): 'env' | 'credentials_file' | 'keychain' | 'none';
39
88
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAmBzC;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;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,cAAc,CAAA;CAAE,CAoBrF;AA0CD;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,KAAK,GAAG,UAAU,GAAG,MAAM,CAa7D"}
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
@@ -1,10 +1,241 @@
1
1
  import { execSync } from 'child_process';
2
- import { platform } from 'os';
2
+ import { platform, homedir } from 'os';
3
+ import { readFileSync, statSync } from 'fs';
4
+ import path from 'path';
5
+ /**
6
+ * Validate that homedir() returns a legitimate user home directory
7
+ * Prevents attacks via manipulated HOME environment variable
8
+ */
9
+ function isValidHomeDirectory(homeDir) {
10
+ if (!homeDir || typeof homeDir !== 'string') {
11
+ return false;
12
+ }
13
+ const plat = platform();
14
+ if (plat === 'darwin') {
15
+ // macOS: /Users/<username> or /var/root
16
+ return homeDir.startsWith('/Users/') || homeDir === '/var/root';
17
+ }
18
+ else if (plat === 'win32') {
19
+ // Windows: C:\Users\<username> (case-insensitive)
20
+ return /^[A-Za-z]:\\Users\\/i.test(homeDir);
21
+ }
22
+ else {
23
+ // Linux/Unix: /home/<username> or /root
24
+ return homeDir.startsWith('/home/') || homeDir === '/root';
25
+ }
26
+ }
27
+ /**
28
+ * Validate that the credential path is within ~/.claude/ directory
29
+ * Prevents directory traversal attacks via manipulated HOME env var
30
+ */
31
+ function validateCredentialPath(credentialPath) {
32
+ try {
33
+ const homeDir = homedir();
34
+ // First validate that homedir is a legitimate user home directory
35
+ if (!isValidHomeDirectory(homeDir)) {
36
+ return false;
37
+ }
38
+ const normalized = path.resolve(credentialPath);
39
+ const expectedDir = path.resolve(homeDir, '.claude');
40
+ return normalized.startsWith(expectedDir);
41
+ }
42
+ catch {
43
+ return false;
44
+ }
45
+ }
46
+ /**
47
+ * Read credentials from ~/.claude/.credentials.json file
48
+ * Returns null if file doesn't exist, is malformed, or missing accessToken
49
+ */
50
+ function getCredentialsFromFile() {
51
+ try {
52
+ const credentialPath = path.join(homedir(), '.claude', '.credentials.json');
53
+ // Validate path to prevent directory traversal
54
+ if (!validateCredentialPath(credentialPath)) {
55
+ return null;
56
+ }
57
+ const content = readFileSync(credentialPath, 'utf-8');
58
+ // Handle empty file
59
+ if (!content || content.trim() === '') {
60
+ return null;
61
+ }
62
+ const parsed = JSON.parse(content);
63
+ // Validate required accessToken field
64
+ if (!parsed.accessToken) {
65
+ return null;
66
+ }
67
+ return parsed;
68
+ }
69
+ catch (error) {
70
+ // File not found - expected case
71
+ if (error.code === 'ENOENT') {
72
+ return null;
73
+ }
74
+ // Permission denied - log warning
75
+ if (error.code === 'EACCES') {
76
+ console.warn('Warning: Cannot read credential file - permission denied');
77
+ return null;
78
+ }
79
+ // JSON parse error - malformed file
80
+ if (error instanceof SyntaxError) {
81
+ return null;
82
+ }
83
+ // Unknown error - log generic message without exposing details
84
+ console.warn('Warning: Unexpected error reading credential file');
85
+ return null;
86
+ }
87
+ }
88
+ /**
89
+ * Check if a token is expired based on ISO8601 expiresAt date
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
95
+ */
96
+ function isTokenExpired(expiresAt) {
97
+ if (!expiresAt) {
98
+ return false; // No expiration date, assume valid
99
+ }
100
+ try {
101
+ const expiry = new Date(expiresAt);
102
+ // Check if date is valid (not NaN)
103
+ if (isNaN(expiry.getTime())) {
104
+ return false; // Invalid date, skip expiration check
105
+ }
106
+ // 30-second clock skew buffer (30000ms)
107
+ const CLOCK_SKEW_BUFFER_MS = 30000;
108
+ return Date.now() >= expiry.getTime() - CLOCK_SKEW_BUFFER_MS;
109
+ }
110
+ catch {
111
+ return false; // Parse error, skip expiration check
112
+ }
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
+ }
212
+ /**
213
+ * Check credential file permissions and warn if insecure
214
+ * Only 600 (owner read/write) and 400 (owner read-only) are considered secure
215
+ */
216
+ function checkFilePermissions() {
217
+ try {
218
+ const credentialPath = path.join(homedir(), '.claude', '.credentials.json');
219
+ const stats = statSync(credentialPath);
220
+ const mode = stats.mode & parseInt('777', 8);
221
+ // Warn if permissions are NOT exactly 600 or 400
222
+ if (mode !== parseInt('600', 8) && mode !== parseInt('400', 8)) {
223
+ const isGroupReadable = (mode & parseInt('040', 8)) !== 0;
224
+ const isWorldReadable = (mode & parseInt('004', 8)) !== 0;
225
+ const readableType = isWorldReadable ? 'world readable' : (isGroupReadable ? 'group readable' : 'insecure');
226
+ console.warn(`Warning: Credential file ~/.claude/.credentials.json has insecure permissions (${mode.toString(8)}) - file is ${readableType}. Recommend: chmod 600`);
227
+ }
228
+ }
229
+ catch {
230
+ // If we can't stat the file, ignore (file might not exist)
231
+ }
232
+ }
3
233
  /**
4
234
  * Get API key/token from various sources in order of preference:
5
235
  * 1. ANTHROPIC_API_KEY environment variable (direct API key)
6
236
  * 2. CLAUDE_CODE_OAUTH_TOKEN environment variable (OAuth token)
7
- * 3. macOS Keychain (Claude Code credentials)
237
+ * 3. Credential file at ~/.claude/.credentials.json (all platforms)
238
+ * 4. macOS Keychain (Claude Code credentials, darwin only)
8
239
  */
9
240
  export function getApiKey() {
10
241
  // First check environment variables
@@ -14,6 +245,18 @@ export function getApiKey() {
14
245
  if (process.env.CLAUDE_CODE_OAUTH_TOKEN) {
15
246
  return process.env.CLAUDE_CODE_OAUTH_TOKEN;
16
247
  }
248
+ // Try credential file (all platforms)
249
+ // Check file permissions before reading (prevents TOCTOU vulnerability)
250
+ checkFilePermissions();
251
+ const credentials = getCredentialsFromFile();
252
+ if (credentials) {
253
+ // Check if token is expired and warn
254
+ if (isTokenExpired(credentials.expiresAt)) {
255
+ console.warn('Warning: Credential file token is expired. Run "claude login" to refresh.');
256
+ }
257
+ console.debug('Using credentials from: credentials_file');
258
+ return credentials.accessToken;
259
+ }
17
260
  // Try macOS Keychain
18
261
  if (platform() === 'darwin') {
19
262
  const keychainKey = getApiKeyFromKeychain();
@@ -50,6 +293,11 @@ export function getCredentialType(key) {
50
293
  * The Agent SDK uses:
51
294
  * - ANTHROPIC_API_KEY for direct API keys
52
295
  * - CLAUDE_CODE_OAUTH_TOKEN for OAuth tokens
296
+ *
297
+ * SECURITY NOTE: Environment variables set by this function persist for the lifetime
298
+ * of the Node.js process. The tokens are not automatically cleared and will be
299
+ * accessible to any code running in the same process. This is intentional for the
300
+ * Agent SDK to work correctly, but callers should be aware of this behavior.
53
301
  */
54
302
  export function configureAgentSdkAuth() {
55
303
  const key = getApiKey();
@@ -84,16 +332,24 @@ function getApiKeyFromKeychain() {
84
332
  const parsed = JSON.parse(credentials);
85
333
  // Check for Claude AI OAuth format: {"claudeAiOauth":{"accessToken":"..."}}
86
334
  if (parsed.claudeAiOauth?.accessToken) {
87
- return parsed.claudeAiOauth.accessToken;
335
+ const token = parsed.claudeAiOauth.accessToken;
336
+ // Validate token format before returning
337
+ if (isOAuthToken(token) || isDirectApiKey(token) || token.startsWith('sk-')) {
338
+ return token;
339
+ }
88
340
  }
89
341
  // Check for legacy format: {"accessToken":"..."}
90
342
  if (parsed.accessToken) {
91
- return parsed.accessToken;
343
+ const token = parsed.accessToken;
344
+ // Validate token format before returning
345
+ if (isOAuthToken(token) || isDirectApiKey(token) || token.startsWith('sk-')) {
346
+ return token;
347
+ }
92
348
  }
93
349
  }
94
350
  catch {
95
- // If not JSON, it might be the raw token
96
- if (credentials.startsWith('sk-') || credentials.length > 20) {
351
+ // If not JSON, it might be the raw token - validate before returning
352
+ if (isOAuthToken(credentials) || isDirectApiKey(credentials) || credentials.startsWith('sk-')) {
97
353
  return credentials;
98
354
  }
99
355
  }
@@ -114,9 +370,13 @@ export function hasApiKey() {
114
370
  * Get the source of the API key (for display purposes)
115
371
  */
116
372
  export function getApiKeySource() {
117
- if (process.env.ANTHROPIC_API_KEY) {
373
+ if (process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_CODE_OAUTH_TOKEN) {
118
374
  return 'env';
119
375
  }
376
+ const credentials = getCredentialsFromFile();
377
+ if (credentials) {
378
+ return 'credentials_file';
379
+ }
120
380
  if (platform() === 'darwin') {
121
381
  const keychainKey = getApiKeyFromKeychain();
122
382
  if (keychainKey) {
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
@@ -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,EAAE,MAAM,WAAW,CAAC;AAIhG;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,SAAS,EAAE,MAAM;CAK9B;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,CA2G/E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAEzD"}
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"}