jerad-cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/dist/commands/auth.d.ts +3 -0
  2. package/dist/commands/auth.d.ts.map +1 -0
  3. package/dist/commands/auth.js +21 -0
  4. package/dist/commands/auth.js.map +1 -0
  5. package/dist/commands/dev.d.ts.map +1 -1
  6. package/dist/commands/dev.js +201 -62
  7. package/dist/commands/dev.js.map +1 -1
  8. package/dist/components/ConfirmPrompt.d.ts +8 -0
  9. package/dist/components/ConfirmPrompt.d.ts.map +1 -0
  10. package/dist/components/ConfirmPrompt.js +19 -0
  11. package/dist/components/ConfirmPrompt.js.map +1 -0
  12. package/dist/components/DevApp.d.ts +30 -0
  13. package/dist/components/DevApp.d.ts.map +1 -0
  14. package/dist/components/DevApp.js +97 -0
  15. package/dist/components/DevApp.js.map +1 -0
  16. package/dist/components/ExecutionView.d.ts +25 -0
  17. package/dist/components/ExecutionView.d.ts.map +1 -0
  18. package/dist/components/ExecutionView.js +498 -0
  19. package/dist/components/ExecutionView.js.map +1 -0
  20. package/dist/components/Header.d.ts +10 -0
  21. package/dist/components/Header.d.ts.map +1 -0
  22. package/dist/components/Header.js +22 -0
  23. package/dist/components/Header.js.map +1 -0
  24. package/dist/components/InputPrompt.d.ts +13 -0
  25. package/dist/components/InputPrompt.d.ts.map +1 -0
  26. package/dist/components/InputPrompt.js +33 -0
  27. package/dist/components/InputPrompt.js.map +1 -0
  28. package/dist/components/MarkdownText.d.ts +6 -0
  29. package/dist/components/MarkdownText.d.ts.map +1 -0
  30. package/dist/components/MarkdownText.js +200 -0
  31. package/dist/components/MarkdownText.js.map +1 -0
  32. package/dist/components/MessageList.d.ts +13 -0
  33. package/dist/components/MessageList.d.ts.map +1 -0
  34. package/dist/components/MessageList.js +23 -0
  35. package/dist/components/MessageList.js.map +1 -0
  36. package/dist/components/Select.d.ts +14 -0
  37. package/dist/components/Select.d.ts.map +1 -0
  38. package/dist/components/Select.js +35 -0
  39. package/dist/components/Select.js.map +1 -0
  40. package/dist/components/Spinner.d.ts +7 -0
  41. package/dist/components/Spinner.d.ts.map +1 -0
  42. package/dist/components/Spinner.js +7 -0
  43. package/dist/components/Spinner.js.map +1 -0
  44. package/dist/components/StreamingText.d.ts +7 -0
  45. package/dist/components/StreamingText.d.ts.map +1 -0
  46. package/dist/components/StreamingText.js +9 -0
  47. package/dist/components/StreamingText.js.map +1 -0
  48. package/dist/components/TaskCard.d.ts +14 -0
  49. package/dist/components/TaskCard.d.ts.map +1 -0
  50. package/dist/components/TaskCard.js +6 -0
  51. package/dist/components/TaskCard.js.map +1 -0
  52. package/dist/components/ToolUseDisplay.d.ts +9 -0
  53. package/dist/components/ToolUseDisplay.d.ts.map +1 -0
  54. package/dist/components/ToolUseDisplay.js +38 -0
  55. package/dist/components/ToolUseDisplay.js.map +1 -0
  56. package/dist/components/index.d.ts +13 -0
  57. package/dist/components/index.d.ts.map +1 -0
  58. package/dist/components/index.js +13 -0
  59. package/dist/components/index.js.map +1 -0
  60. package/dist/hooks/index.d.ts +3 -0
  61. package/dist/hooks/index.d.ts.map +1 -0
  62. package/dist/hooks/index.js +3 -0
  63. package/dist/hooks/index.js.map +1 -0
  64. package/dist/hooks/useClaudeAgent.d.ts +25 -0
  65. package/dist/hooks/useClaudeAgent.d.ts.map +1 -0
  66. package/dist/hooks/useClaudeAgent.js +114 -0
  67. package/dist/hooks/useClaudeAgent.js.map +1 -0
  68. package/dist/hooks/useMessageQueue.d.ts +21 -0
  69. package/dist/hooks/useMessageQueue.d.ts.map +1 -0
  70. package/dist/hooks/useMessageQueue.js +77 -0
  71. package/dist/hooks/useMessageQueue.js.map +1 -0
  72. package/dist/index.js +3 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/lib/agent.d.ts +28 -0
  75. package/dist/lib/agent.d.ts.map +1 -0
  76. package/dist/lib/agent.js +184 -0
  77. package/dist/lib/agent.js.map +1 -0
  78. package/dist/lib/api.d.ts +3 -0
  79. package/dist/lib/api.d.ts.map +1 -1
  80. package/dist/lib/api.js.map +1 -1
  81. package/dist/lib/auth-check.d.ts +8 -0
  82. package/dist/lib/auth-check.d.ts.map +1 -0
  83. package/dist/lib/auth-check.js +68 -0
  84. package/dist/lib/auth-check.js.map +1 -0
  85. package/dist/lib/claude-md.d.ts +5 -0
  86. package/dist/lib/claude-md.d.ts.map +1 -0
  87. package/dist/lib/claude-md.js +61 -0
  88. package/dist/lib/claude-md.js.map +1 -0
  89. package/dist/lib/execution-logger.d.ts +77 -0
  90. package/dist/lib/execution-logger.d.ts.map +1 -0
  91. package/dist/lib/execution-logger.js +233 -0
  92. package/dist/lib/execution-logger.js.map +1 -0
  93. package/dist/lib/git.d.ts +6 -0
  94. package/dist/lib/git.d.ts.map +1 -1
  95. package/dist/lib/git.js +32 -0
  96. package/dist/lib/git.js.map +1 -1
  97. package/dist/lib/input-monitor.d.ts +21 -0
  98. package/dist/lib/input-monitor.d.ts.map +1 -0
  99. package/dist/lib/input-monitor.js +110 -0
  100. package/dist/lib/input-monitor.js.map +1 -0
  101. package/dist/lib/manual-steps.d.ts +16 -0
  102. package/dist/lib/manual-steps.d.ts.map +1 -0
  103. package/dist/lib/manual-steps.js +149 -0
  104. package/dist/lib/manual-steps.js.map +1 -0
  105. package/dist/lib/mode.d.ts +42 -0
  106. package/dist/lib/mode.d.ts.map +1 -0
  107. package/dist/lib/mode.js +128 -0
  108. package/dist/lib/mode.js.map +1 -0
  109. package/dist/lib/prompts.d.ts +8 -0
  110. package/dist/lib/prompts.d.ts.map +1 -0
  111. package/dist/lib/prompts.js +58 -0
  112. package/dist/lib/prompts.js.map +1 -0
  113. package/dist/lib/question-handler.d.ts +23 -0
  114. package/dist/lib/question-handler.d.ts.map +1 -0
  115. package/dist/lib/question-handler.js +99 -0
  116. package/dist/lib/question-handler.js.map +1 -0
  117. package/dist/lib/sync.d.ts +40 -0
  118. package/dist/lib/sync.d.ts.map +1 -0
  119. package/dist/lib/sync.js +287 -0
  120. package/dist/lib/sync.js.map +1 -0
  121. package/dist/lib/user-input.d.ts +9 -0
  122. package/dist/lib/user-input.d.ts.map +1 -0
  123. package/dist/lib/user-input.js +62 -0
  124. package/dist/lib/user-input.js.map +1 -0
  125. package/dist/ui/inline-input.d.ts +25 -0
  126. package/dist/ui/inline-input.d.ts.map +1 -0
  127. package/dist/ui/inline-input.js +157 -0
  128. package/dist/ui/inline-input.js.map +1 -0
  129. package/dist/ui/prompts/index.d.ts +4 -0
  130. package/dist/ui/prompts/index.d.ts.map +1 -0
  131. package/dist/ui/prompts/index.js +4 -0
  132. package/dist/ui/prompts/index.js.map +1 -0
  133. package/dist/ui/prompts/input.d.ts +9 -0
  134. package/dist/ui/prompts/input.d.ts.map +1 -0
  135. package/dist/ui/prompts/input.js +124 -0
  136. package/dist/ui/prompts/input.js.map +1 -0
  137. package/dist/ui/prompts/select.d.ts +17 -0
  138. package/dist/ui/prompts/select.d.ts.map +1 -0
  139. package/dist/ui/prompts/select.js +214 -0
  140. package/dist/ui/prompts/select.js.map +1 -0
  141. package/dist/ui/prompts/utils.d.ts +81 -0
  142. package/dist/ui/prompts/utils.d.ts.map +1 -0
  143. package/dist/ui/prompts/utils.js +164 -0
  144. package/dist/ui/prompts/utils.js.map +1 -0
  145. package/dist/ui/task-display.d.ts +2 -0
  146. package/dist/ui/task-display.d.ts.map +1 -1
  147. package/dist/ui/task-display.js +48 -0
  148. package/dist/ui/task-display.js.map +1 -1
  149. package/package.json +13 -5
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const authCommand: Command;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,WAAW,SAkBpB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { checkAuth, getAuthInstructions } from '../lib/auth-check.js';
4
+ export const authCommand = new Command('auth')
5
+ .description('Check Claude API authentication status')
6
+ .action(async () => {
7
+ const status = checkAuth();
8
+ console.log('\n' + chalk.bold('Claude API Authentication Status'));
9
+ console.log('━'.repeat(40));
10
+ if (status.valid) {
11
+ console.log(chalk.green('✓ Authenticated'));
12
+ console.log(` Method: ${chalk.cyan(status.method)}`);
13
+ console.log(` ${chalk.gray(status.details)}`);
14
+ }
15
+ else {
16
+ console.log(chalk.red('✗ Not authenticated'));
17
+ console.log(getAuthInstructions());
18
+ }
19
+ console.log('');
20
+ });
21
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,UAAU,SA6KnB,CAAC"}
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,eAAO,MAAM,UAAU,SAyUnB,CAAC"}
@@ -1,133 +1,273 @@
1
1
  import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
- import inquirer from 'inquirer';
4
- import { isAuthenticated, isProjectLinked, getProjectConfig } from '../lib/config.js';
3
+ import React from 'react';
4
+ import { render } from 'ink';
5
+ import { isAuthenticated, isProjectLinked, getProjectConfig, getToken, getApiUrl } from '../lib/config.js';
5
6
  import { getApiClient } from '../lib/api.js';
6
- import { isGitRepo, createBranch, createStoryBranchName } from '../lib/git.js';
7
- import { checkClaudeInstalled, runClaudeCodeInteractive } from '../lib/claude-code.js';
8
- import { displayHeader, displayTaskCard, displayError, displayWarning, displayBranchCreated, displayStartingClaude, displayClaudeComplete, displaySuccess, } from '../ui/task-display.js';
7
+ import { isGitRepo, createBranch, createStoryBranchName, commitChanges, hasUncommittedChanges, getCurrentBranch } from '../lib/git.js';
8
+ import { checkAuth, getAuthInstructions } from '../lib/auth-check.js';
9
+ import { ActivitySync } from '../lib/sync.js';
10
+ import { selectMode, fetchProjectDefaultMode, getModeDisplay, getModeEmoji } from '../lib/mode.js';
11
+ import { displayTaskCard, displayError, displayWarning, displayBranchCreated, displaySuccess, displayInfo, } from '../ui/task-display.js';
12
+ import { select, confirmYN, input } from '../ui/prompts/index.js';
13
+ import { ExecutionView } from '../components/index.js';
14
+ import { ensureClaudeMd } from '../lib/claude-md.js';
9
15
  const POLL_INTERVAL = 5000; // 5 seconds
10
16
  export const devCommand = new Command('dev')
11
- .description('Start dev mode - watch for in-progress tasks and run Claude Code')
17
+ .description('Start dev mode - watch for in-progress tasks and execute with Claude Agent SDK')
12
18
  .option('-n, --no-git', 'Skip git branch creation')
13
19
  .option('-p, --poll <seconds>', 'Poll interval in seconds', '5')
20
+ .option('--auto-commit', 'Automatically commit and push on completion')
21
+ .option('--mode <mode>', 'Execution mode: auto, balanced, manual')
22
+ .option('-y, --yes', 'Skip confirmation prompts, use preset modes')
14
23
  .action(async (options) => {
15
- // Validate environment
24
+ // Validate mode flag if provided
25
+ const cliModeFlag = options.mode;
26
+ if (cliModeFlag && !['auto', 'balanced', 'manual'].includes(cliModeFlag)) {
27
+ console.log(chalk.red(`\n ✗ Invalid mode: "${cliModeFlag}"`));
28
+ console.log(chalk.gray(' Valid modes: auto, balanced, manual\n'));
29
+ process.exit(1);
30
+ }
31
+ // Check Jerad authentication (web app)
16
32
  if (!isAuthenticated()) {
17
- displayError('Not logged in. Run: jerad login <token>');
33
+ displayError('Not logged in to Jerad. Run: jerad login <token>');
18
34
  process.exit(1);
19
35
  }
20
36
  if (!isProjectLinked()) {
21
37
  displayError('No project linked. Run: jerad link <project-id>');
22
38
  process.exit(1);
23
39
  }
24
- // Check Claude Code installation
25
- const claudeInstalled = await checkClaudeInstalled();
26
- if (!claudeInstalled) {
27
- displayError('Claude Code is not installed.');
28
- console.log(chalk.gray('Install it with: npm install -g @anthropic-ai/claude-code'));
40
+ // Check Claude API authentication (BYOK)
41
+ const claudeAuth = checkAuth();
42
+ if (!claudeAuth.valid) {
43
+ displayError('Claude API not authenticated.');
44
+ console.log(getAuthInstructions());
29
45
  process.exit(1);
30
46
  }
31
47
  // Check git repo if git is enabled
32
- if (options.git !== false) {
48
+ let gitEnabled = options.git !== false;
49
+ if (gitEnabled) {
33
50
  const isGit = await isGitRepo();
34
51
  if (!isGit) {
35
52
  displayWarning('Not in a git repository. Git features will be disabled.');
36
- options.git = false;
53
+ gitEnabled = false;
37
54
  }
38
55
  }
39
56
  const projectConfig = getProjectConfig();
40
57
  const pollInterval = (parseInt(options.poll || '5', 10) || 5) * 1000;
58
+ // Initialize activity sync
59
+ const apiUrl = getApiUrl();
60
+ const token = getToken();
61
+ const sync = new ActivitySync(apiUrl, token || '', projectConfig.projectId);
62
+ // Fetch project default mode
63
+ const projectDefaultMode = await fetchProjectDefaultMode(projectConfig.projectId, apiUrl, token || '');
41
64
  // Display header
42
- displayHeader(projectConfig.projectName);
65
+ console.log();
66
+ console.log(chalk.bold.cyan(' 🤖 Jerad CLI v0.3.0'));
67
+ console.log(chalk.gray(` Project: ${projectConfig.projectName}`));
68
+ console.log(chalk.gray(` Auth: ${claudeAuth.method} - ${claudeAuth.details}`));
69
+ if (cliModeFlag) {
70
+ console.log(chalk.gray(` Mode Override: ${getModeDisplay(cliModeFlag)}`));
71
+ }
72
+ else {
73
+ console.log(chalk.gray(` Project Default: ${getModeDisplay(projectDefaultMode)}`));
74
+ }
75
+ console.log(chalk.gray(' Status: Watching for tasks...'));
76
+ console.log();
43
77
  const api = getApiClient();
44
78
  let lastProcessedStoryId = null;
45
- let isProcessing = false; // Prevent concurrent prompts
79
+ let isProcessing = false;
46
80
  // Main polling loop
47
81
  const poll = async () => {
48
- // Skip if we're already processing a task
49
- if (isProcessing) {
82
+ if (isProcessing)
50
83
  return;
51
- }
52
84
  try {
53
85
  const inProgressStories = await api.getInProgressStories(projectConfig.projectId);
54
86
  if (inProgressStories.length > 0) {
55
87
  const story = inProgressStories[0];
56
88
  // Skip if we already processed this story
57
- if (story._id === lastProcessedStoryId) {
89
+ if (story._id === lastProcessedStoryId)
58
90
  return;
59
- }
60
- // Mark as processing to prevent duplicate prompts
61
91
  isProcessing = true;
92
+ // Check for uncommitted changes before starting
93
+ if (gitEnabled && await hasUncommittedChanges()) {
94
+ console.log(chalk.yellow('\n⚠️ You have uncommitted changes.\n'));
95
+ try {
96
+ const action = await select({
97
+ message: 'What would you like to do?',
98
+ header: 'Uncommitted Changes',
99
+ options: [
100
+ { label: 'Commit changes now', value: 'commit' },
101
+ { label: 'Stash changes and continue', value: 'stash' },
102
+ { label: 'Skip this task for now', value: 'skip' },
103
+ ],
104
+ });
105
+ if (action === 'commit') {
106
+ const message = await input({
107
+ message: 'Commit message:',
108
+ defaultValue: 'WIP: Save progress before next task',
109
+ });
110
+ try {
111
+ await commitChanges(message || 'WIP: Save progress before next task');
112
+ displaySuccess('Changes committed');
113
+ }
114
+ catch (error) {
115
+ displayError(`Failed to commit: ${error instanceof Error ? error.message : 'Unknown error'}`);
116
+ isProcessing = false;
117
+ return;
118
+ }
119
+ }
120
+ else if (action === 'stash') {
121
+ try {
122
+ const { exec } = await import('child_process');
123
+ const { promisify } = await import('util');
124
+ const execAsync = promisify(exec);
125
+ await execAsync('git stash push -m "jerad-auto-stash"');
126
+ displaySuccess('Changes stashed');
127
+ }
128
+ catch (error) {
129
+ displayError(`Failed to stash: ${error instanceof Error ? error.message : 'Unknown error'}`);
130
+ isProcessing = false;
131
+ return;
132
+ }
133
+ }
134
+ else {
135
+ console.log(chalk.gray('\nSkipping task. Waiting for changes to be committed...\n'));
136
+ isProcessing = false;
137
+ return;
138
+ }
139
+ }
140
+ catch {
141
+ // User cancelled
142
+ isProcessing = false;
143
+ return;
144
+ }
145
+ }
62
146
  // Get full story with prompt
63
147
  const fullStory = await api.getStory(projectConfig.projectId, story._id);
64
148
  // Display task card
65
149
  displayTaskCard(fullStory);
66
- // Ask user if they want to start
67
- const { confirm } = await inquirer.prompt([
68
- {
69
- type: 'confirm',
70
- name: 'confirm',
71
- message: 'Start this task?',
72
- default: true,
73
- },
74
- ]);
75
- // Mark as processed immediately to prevent re-prompting
150
+ // Select execution mode
151
+ const modeSelection = await selectMode({
152
+ executionMode: fullStory.executionMode,
153
+ suggestedMode: fullStory.suggestedMode,
154
+ suggestedModeReason: fullStory.suggestedModeReason,
155
+ }, projectDefaultMode, cliModeFlag, options.yes);
156
+ console.log('');
157
+ console.log(chalk.gray(` Mode: ${getModeDisplay(modeSelection.mode)} (${modeSelection.source.replace(/_/g, ' ')})`));
158
+ console.log('');
159
+ // Ask user if they want to start (unless --yes flag)
160
+ let shouldStart = options.yes;
161
+ if (!shouldStart) {
162
+ try {
163
+ shouldStart = await confirmYN(`Start this task in ${getModeDisplay(modeSelection.mode)} mode?`, true);
164
+ }
165
+ catch {
166
+ shouldStart = false;
167
+ }
168
+ }
76
169
  lastProcessedStoryId = story._id;
77
- if (confirm) {
170
+ if (shouldStart) {
171
+ let branchName;
78
172
  // Create git branch if enabled
79
- if (options.git !== false) {
80
- const branchName = createStoryBranchName(story._id, story.title);
173
+ if (gitEnabled) {
174
+ branchName = createStoryBranchName(story._id, story.title);
81
175
  displayBranchCreated(branchName);
82
176
  try {
83
177
  await createBranch(branchName);
84
- // Update story with branch name
85
178
  await api.updateStoryStatus(projectConfig.projectId, story._id, 'in_progress', branchName);
86
179
  }
87
180
  catch (error) {
88
181
  displayWarning(`Could not create branch: ${error instanceof Error ? error.message : 'Unknown error'}`);
182
+ // Continue without branch - will commit to current branch
183
+ branchName = await getCurrentBranch();
184
+ displayInfo(`Will commit to current branch: ${branchName}`);
89
185
  }
90
186
  }
91
- // Start Claude Code
92
- displayStartingClaude();
187
+ // Generate CLAUDE.md with project context
188
+ await ensureClaudeMd(apiUrl, token || '', projectConfig.projectId, story._id, process.cwd());
189
+ // Start Claude Agent with React UI
190
+ console.log(chalk.cyan(`\n ${getModeEmoji(modeSelection.mode)} Starting Claude Agent in ${modeSelection.mode} mode...\n`));
93
191
  try {
94
- await runClaudeCodeInteractive(fullStory.prompt);
95
- displayClaudeComplete();
96
- // Ask if task is complete
97
- const { taskComplete } = await inquirer.prompt([
98
- {
99
- type: 'confirm',
100
- name: 'taskComplete',
101
- message: 'Mark task as complete and move to Review?',
102
- default: false,
192
+ // Track execution result
193
+ let executionSuccess = false;
194
+ let queuedUserMessages = [];
195
+ let commitResult;
196
+ // Render the React execution view (handles Git commit flow internally)
197
+ const { waitUntilExit } = render(React.createElement(ExecutionView, {
198
+ prompt: fullStory.prompt,
199
+ workingDir: process.cwd(),
200
+ mode: modeSelection.mode,
201
+ storyTitle: story.title,
202
+ storyId: story._id,
203
+ branchName: branchName,
204
+ onComplete: (success, queued, result) => {
205
+ executionSuccess = success;
206
+ queuedUserMessages = queued;
207
+ commitResult = result;
103
208
  },
104
- ]);
105
- if (taskComplete) {
106
- await api.updateStoryStatus(projectConfig.projectId, story._id, 'review');
107
- displaySuccess('Task moved to Review');
108
- // Clear processed ID so we can pick up next task
109
- lastProcessedStoryId = null;
209
+ onMessage: (message) => {
210
+ // Sync to web app
211
+ sync.sendMessage(message, story._id);
212
+ },
213
+ }));
214
+ // Wait for execution to complete (including Git commit flow)
215
+ await waitUntilExit();
216
+ // Post-execution handling
217
+ if (executionSuccess) {
218
+ console.log(''); // New line after React UI
219
+ // Show queued messages if any
220
+ if (queuedUserMessages.length > 0) {
221
+ console.log(chalk.yellow('━'.repeat(60)));
222
+ console.log(chalk.yellow(' 📝 QUEUED USER MESSAGES'));
223
+ console.log(chalk.yellow('━'.repeat(60)));
224
+ console.log('');
225
+ queuedUserMessages.forEach((msg, i) => {
226
+ console.log(chalk.white(` ${i + 1}. ${msg.message}`));
227
+ });
228
+ console.log('');
229
+ }
230
+ // Move story to review if committed
231
+ if (commitResult?.committed) {
232
+ try {
233
+ await api.updateStoryStatus(projectConfig.projectId, story._id, 'review', commitResult.branchName || branchName);
234
+ displaySuccess('Story moved to Review');
235
+ sync.sendStatusChange(story._id, 'review', commitResult.branchName || branchName);
236
+ // Only clear processed ID if story was moved to review
237
+ // This allows picking up the next task
238
+ lastProcessedStoryId = null;
239
+ }
240
+ catch (error) {
241
+ displayWarning(`Could not update story status: ${error instanceof Error ? error.message : 'Unknown error'}`);
242
+ // Still clear if status update failed but commit succeeded
243
+ // User will need to manually move story
244
+ lastProcessedStoryId = null;
245
+ }
246
+ }
247
+ // If no commit was made, keep lastProcessedStoryId set
248
+ // This prevents re-processing the same in_progress story
249
+ }
250
+ else {
251
+ // Execution failed
252
+ sync.sendError(story._id, 'Execution failed or was interrupted');
110
253
  }
111
254
  }
112
255
  catch (error) {
113
- displayError(`Claude Code error: ${error instanceof Error ? error.message : 'Unknown error'}`);
256
+ displayError(`Claude Agent error: ${error instanceof Error ? error.message : 'Unknown error'}`);
257
+ sync.sendError(story._id, error instanceof Error ? error.message : 'Unknown error');
114
258
  }
115
- // Re-display header
259
+ // Re-display status
116
260
  console.log();
117
- displayHeader(projectConfig.projectName);
261
+ console.log(chalk.gray(' Status: Watching for tasks...\n'));
118
262
  }
119
263
  else {
120
- // User declined
121
264
  console.log(chalk.gray('\nWaiting for task status change...\n'));
122
265
  }
123
- // Done processing
124
266
  isProcessing = false;
125
267
  }
126
268
  }
127
269
  catch (error) {
128
- // Reset processing flag on error
129
270
  isProcessing = false;
130
- // Silently handle polling errors to avoid spamming the console
131
271
  if (process.env.DEBUG) {
132
272
  console.error('Polling error:', error);
133
273
  }
@@ -143,7 +283,6 @@ export const devCommand = new Command('dev')
143
283
  console.log(chalk.gray('\n\nExiting dev mode...'));
144
284
  process.exit(0);
145
285
  });
146
- // Keep the process running
147
286
  console.log(chalk.gray(`Polling every ${pollInterval / 1000} seconds. Press Ctrl+C to exit.\n`));
148
287
  });
149
288
  //# sourceMappingURL=dev.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface ConfirmPromptProps {
2
+ message: string;
3
+ onConfirm: (confirmed: boolean) => void;
4
+ defaultValue?: boolean;
5
+ }
6
+ export declare function ConfirmPrompt({ message, onConfirm, defaultValue }: ConfirmPromptProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=ConfirmPrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmPrompt.d.ts","sourceRoot":"","sources":["../../src/components/ConfirmPrompt.tsx"],"names":[],"mappings":"AAGA,UAAU,kBAAkB;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,YAAmB,EAAE,EAAE,kBAAkB,2CAsB5F"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text, useInput } from 'ink';
3
+ export function ConfirmPrompt({ message, onConfirm, defaultValue = true }) {
4
+ useInput((input) => {
5
+ const lower = input.toLowerCase();
6
+ if (lower === 'y') {
7
+ onConfirm(true);
8
+ }
9
+ else if (lower === 'n') {
10
+ onConfirm(false);
11
+ }
12
+ else if (input === '\r') {
13
+ // Enter key - use default
14
+ onConfirm(defaultValue);
15
+ }
16
+ });
17
+ return (_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "? " }), _jsxs(Text, { children: [message, " "] }), _jsx(Text, { color: "gray", children: defaultValue ? '[Y/n]' : '[y/N]' })] }));
18
+ }
19
+ //# sourceMappingURL=ConfirmPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmPrompt.js","sourceRoot":"","sources":["../../src/components/ConfirmPrompt.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAQ1C,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI,EAAsB;IAC3F,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAClB,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YACzB,SAAS,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1B,0BAA0B;YAC1B,SAAS,CAAC,YAAY,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAU,EAC5B,MAAC,IAAI,eAAE,OAAO,SAAS,EACvB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YACf,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAC5B,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ExecutionMode } from '../lib/mode.js';
2
+ interface Story {
3
+ _id: string;
4
+ title: string;
5
+ description?: string;
6
+ acceptanceCriteria?: string[];
7
+ notes?: string;
8
+ priority?: string;
9
+ prompt: string;
10
+ }
11
+ interface ProjectConfig {
12
+ projectId: string;
13
+ projectName: string;
14
+ }
15
+ interface DevAppProps {
16
+ story: Story;
17
+ mode: ExecutionMode;
18
+ modeSource: string;
19
+ project: ProjectConfig;
20
+ authMethod?: string;
21
+ authDetails?: string;
22
+ onComplete?: (success: boolean) => void;
23
+ onQueuedMessages?: (messages: Array<{
24
+ message: string;
25
+ timestamp: Date;
26
+ }>) => void;
27
+ }
28
+ export declare function DevApp({ story, mode, modeSource, project, authMethod, authDetails, onComplete, onQueuedMessages, }: DevAppProps): import("react/jsx-runtime").JSX.Element;
29
+ export {};
30
+ //# sourceMappingURL=DevApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevApp.d.ts","sourceRoot":"","sources":["../../src/components/DevApp.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,UAAU,KAAK;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CACpF;AASD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,IAAI,EACJ,UAAU,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,EAAE,WAAW,2CAgNb"}
@@ -0,0 +1,97 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from 'react';
3
+ import { Box, Text, useApp, useInput } from 'ink';
4
+ import { Header } from './Header.js';
5
+ import { TaskCard } from './TaskCard.js';
6
+ import { MessageList } from './MessageList.js';
7
+ import { StreamingText } from './StreamingText.js';
8
+ import { ToolUseDisplay } from './ToolUseDisplay.js';
9
+ import { Spinner } from './Spinner.js';
10
+ import { InputPrompt } from './InputPrompt.js';
11
+ import { ConfirmPrompt } from './ConfirmPrompt.js';
12
+ import { useClaudeAgent } from '../hooks/useClaudeAgent.js';
13
+ import { useMessageQueue } from '../hooks/useMessageQueue.js';
14
+ export function DevApp({ story, mode, modeSource, project, authMethod, authDetails, onComplete, onQueuedMessages, }) {
15
+ const { exit } = useApp();
16
+ const [state, setState] = useState('showing_task');
17
+ const [error, setError] = useState(null);
18
+ const [inputActive, setInputActive] = useState(false);
19
+ const [inputValue, setInputValue] = useState('');
20
+ const { messages, queuedUserMessages, addAssistantMessage, addSystemMessage, queueUserMessage, clearQueue, } = useMessageQueue();
21
+ const { isProcessing, currentTool, streamingText, sendPrompt, interrupt, } = useClaudeAgent({
22
+ workingDir: process.cwd(),
23
+ mode,
24
+ onMessage: (msg) => {
25
+ if (msg.role === 'assistant') {
26
+ addAssistantMessage(msg.content);
27
+ }
28
+ },
29
+ onComplete: () => {
30
+ setState('completed');
31
+ // Report queued messages
32
+ if (queuedUserMessages.length > 0) {
33
+ onQueuedMessages?.(queuedUserMessages.map(m => ({
34
+ message: m.message,
35
+ timestamp: m.timestamp,
36
+ })));
37
+ }
38
+ onComplete?.(true);
39
+ },
40
+ onError: (err) => {
41
+ setError(err.message);
42
+ setState('error');
43
+ onComplete?.(false);
44
+ },
45
+ });
46
+ // Handle keyboard input
47
+ useInput((input, key) => {
48
+ // Ctrl+C to exit
49
+ if (key.ctrl && input === 'c') {
50
+ if (isProcessing) {
51
+ interrupt();
52
+ }
53
+ exit();
54
+ return;
55
+ }
56
+ // Esc to toggle input mode (only when executing)
57
+ if (key.escape && state === 'executing') {
58
+ if (inputActive) {
59
+ setInputValue('');
60
+ setInputActive(false);
61
+ }
62
+ else {
63
+ setInputActive(true);
64
+ }
65
+ return;
66
+ }
67
+ });
68
+ // Start execution after brief delay to show task card
69
+ useEffect(() => {
70
+ if (state === 'showing_task') {
71
+ const timer = setTimeout(() => {
72
+ setState('confirming_start');
73
+ }, 1000);
74
+ return () => clearTimeout(timer);
75
+ }
76
+ }, [state]);
77
+ const handleStartConfirm = useCallback((confirmed) => {
78
+ if (confirmed) {
79
+ setState('executing');
80
+ addSystemMessage(`Starting execution in ${mode} mode...`);
81
+ sendPrompt(story.prompt);
82
+ }
83
+ else {
84
+ exit();
85
+ }
86
+ }, [mode, story.prompt, sendPrompt, addSystemMessage, exit]);
87
+ const handleUserInput = useCallback((value) => {
88
+ queueUserMessage(value);
89
+ addSystemMessage(`Message queued: "${value}"`);
90
+ }, [queueUserMessage, addSystemMessage]);
91
+ return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Header, { projectName: project.projectName, mode: mode, authMethod: authMethod, authDetails: authDetails }), _jsx(TaskCard, { story: story }), _jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { color: "gray", children: "Mode: " }), _jsx(Text, { color: "cyan", children: mode }), _jsxs(Text, { color: "gray", children: [" (", modeSource.replace(/_/g, ' '), ")"] })] }), state === 'confirming_start' && (_jsx(ConfirmPrompt, { message: `Start this task in ${mode} mode?`, onConfirm: handleStartConfirm, defaultValue: true })), (state === 'executing' || state === 'completed') && (_jsxs(_Fragment, { children: [_jsx(Box, { marginY: 1, children: _jsx(Text, { color: "gray", children: '─'.repeat(60) }) }), _jsx(MessageList, { messages: messages }), streamingText && state === 'executing' && (_jsx(StreamingText, { text: streamingText })), currentTool && (_jsx(ToolUseDisplay, { toolName: currentTool.name, input: currentTool.input })), isProcessing && !streamingText && !currentTool && (_jsx(Spinner, { text: "Thinking..." })), state === 'executing' && (_jsx(InputPrompt, { isActive: inputActive, value: inputValue, onChange: setInputValue, onSubmit: (val) => {
92
+ handleUserInput(val);
93
+ setInputActive(false);
94
+ setInputValue('');
95
+ }, queueCount: queuedUserMessages.length })), state === 'completed' && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "gray", children: '─'.repeat(60) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", children: "\u2713 Task completed!" }) }), queuedUserMessages.length > 0 && (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { color: "yellow", children: ["Queued messages (", queuedUserMessages.length, "):"] }), queuedUserMessages.map((msg, i) => (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { color: "gray", children: [i + 1, ". ", msg.message] }) }, msg.id)))] }))] }))] })), state === 'error' && error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "red", children: ["\u2717 Error: ", error] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", dimColor: true, children: isProcessing ? 'Ctrl+C to interrupt' : 'Ctrl+C to exit' }) })] }));
96
+ }
97
+ //# sourceMappingURL=DevApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevApp.js","sourceRoot":"","sources":["../../src/components/DevApp.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type SDKMessage } from '@anthropic-ai/claude-agent-sdk';
2
+ import { type ExecutionMode } from '../lib/mode.js';
3
+ interface QueuedMessage {
4
+ message: string;
5
+ timestamp: Date;
6
+ }
7
+ export interface CommitResult {
8
+ committed: boolean;
9
+ pushed: boolean;
10
+ commitMessage?: string;
11
+ branchName?: string;
12
+ }
13
+ interface ExecutionViewProps {
14
+ prompt: string;
15
+ workingDir: string;
16
+ mode: ExecutionMode;
17
+ storyTitle: string;
18
+ storyId: string;
19
+ branchName?: string;
20
+ onComplete: (success: boolean, queuedMessages: QueuedMessage[], commitResult?: CommitResult) => void;
21
+ onMessage?: (message: SDKMessage) => void;
22
+ }
23
+ export declare function ExecutionView({ prompt, workingDir, mode, storyTitle, storyId, branchName, onComplete, onMessage, }: ExecutionViewProps): import("react/jsx-runtime").JSX.Element;
24
+ export {};
25
+ //# sourceMappingURL=ExecutionView.d.ts.map