jerad-cli 0.1.0 → 0.3.1
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/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +21 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +201 -62
- package/dist/commands/dev.js.map +1 -1
- package/dist/components/ConfirmPrompt.d.ts +8 -0
- package/dist/components/ConfirmPrompt.d.ts.map +1 -0
- package/dist/components/ConfirmPrompt.js +19 -0
- package/dist/components/ConfirmPrompt.js.map +1 -0
- package/dist/components/DevApp.d.ts +30 -0
- package/dist/components/DevApp.d.ts.map +1 -0
- package/dist/components/DevApp.js +97 -0
- package/dist/components/DevApp.js.map +1 -0
- package/dist/components/ExecutionView.d.ts +25 -0
- package/dist/components/ExecutionView.d.ts.map +1 -0
- package/dist/components/ExecutionView.js +498 -0
- package/dist/components/ExecutionView.js.map +1 -0
- package/dist/components/Header.d.ts +10 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +22 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/InputPrompt.d.ts +13 -0
- package/dist/components/InputPrompt.d.ts.map +1 -0
- package/dist/components/InputPrompt.js +33 -0
- package/dist/components/InputPrompt.js.map +1 -0
- package/dist/components/MarkdownText.d.ts +6 -0
- package/dist/components/MarkdownText.d.ts.map +1 -0
- package/dist/components/MarkdownText.js +200 -0
- package/dist/components/MarkdownText.js.map +1 -0
- package/dist/components/MessageList.d.ts +13 -0
- package/dist/components/MessageList.d.ts.map +1 -0
- package/dist/components/MessageList.js +23 -0
- package/dist/components/MessageList.js.map +1 -0
- package/dist/components/Select.d.ts +14 -0
- package/dist/components/Select.d.ts.map +1 -0
- package/dist/components/Select.js +35 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Spinner.d.ts +7 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +7 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/StreamingText.d.ts +7 -0
- package/dist/components/StreamingText.d.ts.map +1 -0
- package/dist/components/StreamingText.js +9 -0
- package/dist/components/StreamingText.js.map +1 -0
- package/dist/components/TaskCard.d.ts +14 -0
- package/dist/components/TaskCard.d.ts.map +1 -0
- package/dist/components/TaskCard.js +6 -0
- package/dist/components/TaskCard.js.map +1 -0
- package/dist/components/ToolUseDisplay.d.ts +9 -0
- package/dist/components/ToolUseDisplay.d.ts.map +1 -0
- package/dist/components/ToolUseDisplay.js +38 -0
- package/dist/components/ToolUseDisplay.js.map +1 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +13 -0
- package/dist/components/index.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useClaudeAgent.d.ts +25 -0
- package/dist/hooks/useClaudeAgent.d.ts.map +1 -0
- package/dist/hooks/useClaudeAgent.js +114 -0
- package/dist/hooks/useClaudeAgent.js.map +1 -0
- package/dist/hooks/useMessageQueue.d.ts +21 -0
- package/dist/hooks/useMessageQueue.d.ts.map +1 -0
- package/dist/hooks/useMessageQueue.js +77 -0
- package/dist/hooks/useMessageQueue.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/agent.d.ts +28 -0
- package/dist/lib/agent.d.ts.map +1 -0
- package/dist/lib/agent.js +184 -0
- package/dist/lib/agent.js.map +1 -0
- package/dist/lib/api.d.ts +3 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/auth-check.d.ts +8 -0
- package/dist/lib/auth-check.d.ts.map +1 -0
- package/dist/lib/auth-check.js +68 -0
- package/dist/lib/auth-check.js.map +1 -0
- package/dist/lib/claude-md.d.ts +5 -0
- package/dist/lib/claude-md.d.ts.map +1 -0
- package/dist/lib/claude-md.js +61 -0
- package/dist/lib/claude-md.js.map +1 -0
- package/dist/lib/config.d.ts +0 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -8
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/execution-logger.d.ts +77 -0
- package/dist/lib/execution-logger.d.ts.map +1 -0
- package/dist/lib/execution-logger.js +233 -0
- package/dist/lib/execution-logger.js.map +1 -0
- package/dist/lib/git.d.ts +6 -0
- package/dist/lib/git.d.ts.map +1 -1
- package/dist/lib/git.js +32 -0
- package/dist/lib/git.js.map +1 -1
- package/dist/lib/input-monitor.d.ts +21 -0
- package/dist/lib/input-monitor.d.ts.map +1 -0
- package/dist/lib/input-monitor.js +110 -0
- package/dist/lib/input-monitor.js.map +1 -0
- package/dist/lib/manual-steps.d.ts +16 -0
- package/dist/lib/manual-steps.d.ts.map +1 -0
- package/dist/lib/manual-steps.js +149 -0
- package/dist/lib/manual-steps.js.map +1 -0
- package/dist/lib/mode.d.ts +42 -0
- package/dist/lib/mode.d.ts.map +1 -0
- package/dist/lib/mode.js +128 -0
- package/dist/lib/mode.js.map +1 -0
- package/dist/lib/prompts.d.ts +8 -0
- package/dist/lib/prompts.d.ts.map +1 -0
- package/dist/lib/prompts.js +58 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/question-handler.d.ts +23 -0
- package/dist/lib/question-handler.d.ts.map +1 -0
- package/dist/lib/question-handler.js +99 -0
- package/dist/lib/question-handler.js.map +1 -0
- package/dist/lib/sync.d.ts +40 -0
- package/dist/lib/sync.d.ts.map +1 -0
- package/dist/lib/sync.js +287 -0
- package/dist/lib/sync.js.map +1 -0
- package/dist/lib/user-input.d.ts +9 -0
- package/dist/lib/user-input.d.ts.map +1 -0
- package/dist/lib/user-input.js +62 -0
- package/dist/lib/user-input.js.map +1 -0
- package/dist/ui/inline-input.d.ts +25 -0
- package/dist/ui/inline-input.d.ts.map +1 -0
- package/dist/ui/inline-input.js +157 -0
- package/dist/ui/inline-input.js.map +1 -0
- package/dist/ui/prompts/index.d.ts +4 -0
- package/dist/ui/prompts/index.d.ts.map +1 -0
- package/dist/ui/prompts/index.js +4 -0
- package/dist/ui/prompts/index.js.map +1 -0
- package/dist/ui/prompts/input.d.ts +9 -0
- package/dist/ui/prompts/input.d.ts.map +1 -0
- package/dist/ui/prompts/input.js +124 -0
- package/dist/ui/prompts/input.js.map +1 -0
- package/dist/ui/prompts/select.d.ts +17 -0
- package/dist/ui/prompts/select.d.ts.map +1 -0
- package/dist/ui/prompts/select.js +214 -0
- package/dist/ui/prompts/select.js.map +1 -0
- package/dist/ui/prompts/utils.d.ts +81 -0
- package/dist/ui/prompts/utils.d.ts.map +1 -0
- package/dist/ui/prompts/utils.js +164 -0
- package/dist/ui/prompts/utils.js.map +1 -0
- package/dist/ui/task-display.d.ts +2 -0
- package/dist/ui/task-display.d.ts.map +1 -1
- package/dist/ui/task-display.js +48 -0
- package/dist/ui/task-display.js.map +1 -1
- package/package.json +13 -5
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import readline from 'readline';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
export class InputMonitor extends EventEmitter {
|
|
5
|
+
rl = null;
|
|
6
|
+
active = false;
|
|
7
|
+
paused = false;
|
|
8
|
+
promptShown = false;
|
|
9
|
+
hintTimeout = null;
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
}
|
|
13
|
+
start() {
|
|
14
|
+
if (this.rl)
|
|
15
|
+
return;
|
|
16
|
+
this.active = true;
|
|
17
|
+
this.paused = false;
|
|
18
|
+
this.rl = readline.createInterface({
|
|
19
|
+
input: process.stdin,
|
|
20
|
+
output: process.stdout,
|
|
21
|
+
terminal: true,
|
|
22
|
+
});
|
|
23
|
+
// Handle line input
|
|
24
|
+
this.rl.on('line', (line) => {
|
|
25
|
+
if (!this.active || this.paused)
|
|
26
|
+
return;
|
|
27
|
+
const trimmed = line.trim();
|
|
28
|
+
if (trimmed) {
|
|
29
|
+
this.emit('input', trimmed);
|
|
30
|
+
this.promptShown = false;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
// Handle Ctrl+C
|
|
34
|
+
this.rl.on('SIGINT', () => {
|
|
35
|
+
this.emit('interrupt');
|
|
36
|
+
});
|
|
37
|
+
// Handle close
|
|
38
|
+
this.rl.on('close', () => {
|
|
39
|
+
this.active = false;
|
|
40
|
+
});
|
|
41
|
+
// Show initial hint after a delay
|
|
42
|
+
this.hintTimeout = setTimeout(() => {
|
|
43
|
+
if (this.active && !this.paused) {
|
|
44
|
+
this.showHint();
|
|
45
|
+
}
|
|
46
|
+
}, 2000);
|
|
47
|
+
}
|
|
48
|
+
stop() {
|
|
49
|
+
this.active = false;
|
|
50
|
+
this.paused = true;
|
|
51
|
+
// Clear any pending timeouts
|
|
52
|
+
if (this.hintTimeout) {
|
|
53
|
+
clearTimeout(this.hintTimeout);
|
|
54
|
+
this.hintTimeout = null;
|
|
55
|
+
}
|
|
56
|
+
// Close readline interface
|
|
57
|
+
if (this.rl) {
|
|
58
|
+
// Remove all listeners first to prevent any callbacks during close
|
|
59
|
+
this.rl.removeAllListeners();
|
|
60
|
+
this.rl.close();
|
|
61
|
+
this.rl = null;
|
|
62
|
+
}
|
|
63
|
+
// Remove our event listeners
|
|
64
|
+
this.removeAllListeners();
|
|
65
|
+
}
|
|
66
|
+
pause() {
|
|
67
|
+
this.paused = true;
|
|
68
|
+
// Actually pause the readline interface to release stdin for inquirer
|
|
69
|
+
if (this.rl) {
|
|
70
|
+
this.rl.pause();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
resume() {
|
|
74
|
+
this.paused = false;
|
|
75
|
+
// Resume the readline interface
|
|
76
|
+
if (this.rl) {
|
|
77
|
+
this.rl.resume();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
showHint() {
|
|
81
|
+
if (this.promptShown)
|
|
82
|
+
return;
|
|
83
|
+
this.promptShown = true;
|
|
84
|
+
console.log('');
|
|
85
|
+
console.log(chalk.gray(' 💡 Tip: Type a message anytime to give additional instructions'));
|
|
86
|
+
console.log('');
|
|
87
|
+
}
|
|
88
|
+
// Call this periodically to remind user they can type
|
|
89
|
+
remindInput() {
|
|
90
|
+
if (this.active && !this.paused && !this.promptShown) {
|
|
91
|
+
this.showHint();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Simpler alternative: just check for input between operations
|
|
96
|
+
export async function checkForUserInput(timeoutMs = 100) {
|
|
97
|
+
return new Promise((resolve) => {
|
|
98
|
+
const timeout = setTimeout(() => {
|
|
99
|
+
process.stdin.removeListener('data', onData);
|
|
100
|
+
resolve(null);
|
|
101
|
+
}, timeoutMs);
|
|
102
|
+
const onData = (data) => {
|
|
103
|
+
clearTimeout(timeout);
|
|
104
|
+
process.stdin.removeListener('data', onData);
|
|
105
|
+
resolve(data.toString().trim());
|
|
106
|
+
};
|
|
107
|
+
process.stdin.once('data', onData);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=input-monitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-monitor.js","sourceRoot":"","sources":["../../src/lib/input-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAOtC,MAAM,OAAO,YAAa,SAAQ,YAAY;IACpC,EAAE,GAA8B,IAAI,CAAC;IACrC,MAAM,GAAY,KAAK,CAAC;IACxB,MAAM,GAAY,KAAK,CAAC;IACxB,WAAW,GAAY,KAAK,CAAC;IAC7B,WAAW,GAA0B,IAAI,CAAC;IAElD;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO;QAEpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO;YAExC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,gBAAgB;QAChB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,eAAe;QACf,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,6BAA6B;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,2BAA2B;QAC3B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,mEAAmE;YACnE,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,sEAAsE;QACtE,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,gCAAgC;QAChC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;QAC5F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,sDAAsD;IACtD,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,YAAoB,GAAG;IAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE;YAC9B,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExecutionMode } from './mode.js';
|
|
2
|
+
export interface ManualStep {
|
|
3
|
+
id: string;
|
|
4
|
+
instruction: string;
|
|
5
|
+
details?: string;
|
|
6
|
+
codeBlock?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
detectedAt: Date;
|
|
9
|
+
completed: boolean;
|
|
10
|
+
completedAt?: Date;
|
|
11
|
+
completedVia?: 'cli' | 'webapp';
|
|
12
|
+
}
|
|
13
|
+
export declare function detectManualStep(text: string): ManualStep | null;
|
|
14
|
+
export declare function handleManualStep(step: ManualStep, mode: ExecutionMode, onLog: (step: ManualStep) => void): Promise<void>;
|
|
15
|
+
export declare function formatPendingSteps(steps: ManualStep[]): string;
|
|
16
|
+
//# sourceMappingURL=manual-steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-steps.d.ts","sourceRoot":"","sources":["../../src/lib/manual-steps.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;CACjC;AAkFD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAsBhE;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,GAChC,OAAO,CAAC,IAAI,CAAC,CAsDf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,MAAM,CAiB9D"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { promptToContinue } from './prompts.js';
|
|
4
|
+
// Patterns that indicate manual action is needed
|
|
5
|
+
const MANUAL_STEP_PATTERNS = [
|
|
6
|
+
// Environment variables
|
|
7
|
+
{ pattern: /please (add|set|update|put) .{1,100} (to|in) (your )?\.env/i, category: 'env' },
|
|
8
|
+
{ pattern: /add (the following|these) .{0,50} to (your )?\.env/i, category: 'env' },
|
|
9
|
+
{ pattern: /you('ll| will| need to| should) (need to )?(add|set|update) .{1,50} environment variable/i, category: 'env' },
|
|
10
|
+
{ pattern: /set (the )?following environment variable/i, category: 'env' },
|
|
11
|
+
// External actions
|
|
12
|
+
{ pattern: /please (open|visit|go to|navigate to) /i, category: 'external' },
|
|
13
|
+
{ pattern: /please (register|sign up|create an account)/i, category: 'external' },
|
|
14
|
+
{ pattern: /you('ll| will| need to) (need to )?(register|sign up|create)/i, category: 'external' },
|
|
15
|
+
// Manual configuration
|
|
16
|
+
{ pattern: /please (configure|set up) .{1,50} (manually|in your|outside)/i, category: 'config' },
|
|
17
|
+
{ pattern: /requires? manual (configuration|setup|action|intervention)/i, category: 'config' },
|
|
18
|
+
{ pattern: /you('ll| will| need to) (need to )?(manually|configure|set up)/i, category: 'config' },
|
|
19
|
+
// File system actions outside project
|
|
20
|
+
{ pattern: /please (create|add|modify) .{1,50} (file|directory|folder) (outside|in your home|globally)/i, category: 'filesystem' },
|
|
21
|
+
{ pattern: /please install .{1,50} globally/i, category: 'install' },
|
|
22
|
+
// Running commands elsewhere
|
|
23
|
+
{ pattern: /please run .{1,50} (in another|in a new|in a separate) terminal/i, category: 'terminal' },
|
|
24
|
+
{ pattern: /(run|execute) (this|the following) (command )?(manually|outside|in another)/i, category: 'terminal' },
|
|
25
|
+
// API keys and secrets
|
|
26
|
+
{ pattern: /you('ll| will) need (to get|to obtain|an?) .{1,50} (api key|secret|token|credential)/i, category: 'credentials' },
|
|
27
|
+
{ pattern: /get (your|an?) .{1,50} (api key|secret|token) from/i, category: 'credentials' },
|
|
28
|
+
// Dashboard/console actions
|
|
29
|
+
{ pattern: /in (your|the) (browser|dashboard|console|admin panel|settings)/i, category: 'dashboard' },
|
|
30
|
+
{ pattern: /from (your|the) .{1,50} (dashboard|console|portal)/i, category: 'dashboard' },
|
|
31
|
+
];
|
|
32
|
+
// Extract code blocks from text
|
|
33
|
+
function extractCodeBlock(text) {
|
|
34
|
+
const codeBlockMatch = text.match(/```[\s\S]*?```/);
|
|
35
|
+
if (codeBlockMatch) {
|
|
36
|
+
return codeBlockMatch[0];
|
|
37
|
+
}
|
|
38
|
+
// Also try to find inline code with env vars
|
|
39
|
+
const envMatch = text.match(/`[A-Z_]+=.+`/g);
|
|
40
|
+
if (envMatch) {
|
|
41
|
+
return envMatch.join('\n');
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
// Extract URL from text
|
|
46
|
+
function extractUrl(text) {
|
|
47
|
+
const urlMatch = text.match(/https?:\/\/[^\s)]+/);
|
|
48
|
+
return urlMatch ? urlMatch[0] : undefined;
|
|
49
|
+
}
|
|
50
|
+
// Extract the main instruction from the text
|
|
51
|
+
function extractInstruction(text) {
|
|
52
|
+
// Try to find sentences with action verbs
|
|
53
|
+
const sentences = text.split(/[.!]\s+/);
|
|
54
|
+
for (const sentence of sentences) {
|
|
55
|
+
const lowerSentence = sentence.toLowerCase();
|
|
56
|
+
if (lowerSentence.includes('please') ||
|
|
57
|
+
lowerSentence.includes("you'll need") ||
|
|
58
|
+
lowerSentence.includes('you will need') ||
|
|
59
|
+
lowerSentence.includes('you need to') ||
|
|
60
|
+
lowerSentence.includes('you should') ||
|
|
61
|
+
lowerSentence.includes('make sure to')) {
|
|
62
|
+
return sentence.trim();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Fallback to first sentence
|
|
66
|
+
return sentences[0]?.trim() || text.slice(0, 200);
|
|
67
|
+
}
|
|
68
|
+
export function detectManualStep(text) {
|
|
69
|
+
if (!text)
|
|
70
|
+
return null;
|
|
71
|
+
for (const { pattern } of MANUAL_STEP_PATTERNS) {
|
|
72
|
+
if (pattern.test(text)) {
|
|
73
|
+
const instruction = extractInstruction(text);
|
|
74
|
+
const codeBlock = extractCodeBlock(text);
|
|
75
|
+
const url = extractUrl(text);
|
|
76
|
+
return {
|
|
77
|
+
id: uuidv4(),
|
|
78
|
+
instruction,
|
|
79
|
+
details: text.length > instruction.length ? text : undefined,
|
|
80
|
+
codeBlock,
|
|
81
|
+
url,
|
|
82
|
+
detectedAt: new Date(),
|
|
83
|
+
completed: false,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
export async function handleManualStep(step, mode, onLog) {
|
|
90
|
+
// Display the manual step
|
|
91
|
+
console.log('');
|
|
92
|
+
console.log(chalk.yellow('━'.repeat(60)));
|
|
93
|
+
console.log(chalk.yellow(' ⚠️ MANUAL STEP REQUIRED'));
|
|
94
|
+
console.log(chalk.yellow('━'.repeat(60)));
|
|
95
|
+
console.log('');
|
|
96
|
+
console.log(` ${step.instruction}`);
|
|
97
|
+
// Show code block if present
|
|
98
|
+
if (step.codeBlock) {
|
|
99
|
+
console.log('');
|
|
100
|
+
console.log(chalk.gray(' ' + '─'.repeat(40)));
|
|
101
|
+
// Clean up and display code block
|
|
102
|
+
const cleanCode = step.codeBlock
|
|
103
|
+
.replace(/```\w*\n?/g, '')
|
|
104
|
+
.replace(/```/g, '')
|
|
105
|
+
.trim();
|
|
106
|
+
cleanCode.split('\n').forEach(line => {
|
|
107
|
+
console.log(chalk.cyan(` ${line}`));
|
|
108
|
+
});
|
|
109
|
+
console.log(chalk.gray(' ' + '─'.repeat(40)));
|
|
110
|
+
}
|
|
111
|
+
// Show URL if present
|
|
112
|
+
if (step.url) {
|
|
113
|
+
console.log('');
|
|
114
|
+
console.log(chalk.blue(` 🔗 ${step.url}`));
|
|
115
|
+
}
|
|
116
|
+
console.log('');
|
|
117
|
+
if (mode === 'auto') {
|
|
118
|
+
// In autopilot mode, log for later but don't wait
|
|
119
|
+
console.log(chalk.gray(' (Autopilot mode - logged for later, continuing...)'));
|
|
120
|
+
console.log('');
|
|
121
|
+
// Log as incomplete
|
|
122
|
+
onLog(step);
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
// In balanced/manual mode, wait for user confirmation
|
|
126
|
+
await promptToContinue('Press Enter when done...');
|
|
127
|
+
// Mark as completed
|
|
128
|
+
step.completed = true;
|
|
129
|
+
step.completedAt = new Date();
|
|
130
|
+
step.completedVia = 'cli';
|
|
131
|
+
onLog(step);
|
|
132
|
+
console.log(chalk.green(' ✓ Step confirmed'));
|
|
133
|
+
console.log('');
|
|
134
|
+
}
|
|
135
|
+
export function formatPendingSteps(steps) {
|
|
136
|
+
const pending = steps.filter(s => !s.completed);
|
|
137
|
+
if (pending.length === 0) {
|
|
138
|
+
return '';
|
|
139
|
+
}
|
|
140
|
+
let output = '\n' + chalk.yellow(' ⏳ Pending Manual Steps:') + '\n';
|
|
141
|
+
pending.forEach((step, i) => {
|
|
142
|
+
output += chalk.yellow(` ${i + 1}. ${step.instruction}`) + '\n';
|
|
143
|
+
if (step.url) {
|
|
144
|
+
output += chalk.gray(` ${step.url}`) + '\n';
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
return output;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=manual-steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-steps.js","sourceRoot":"","sources":["../../src/lib/manual-steps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type ExecutionMode = 'auto' | 'balanced' | 'manual';
|
|
2
|
+
export type ModeSource = 'cli_flag' | 'cli_prompt' | 'story_preset' | 'project_default' | 'global_default';
|
|
3
|
+
export interface ModeSelection {
|
|
4
|
+
mode: ExecutionMode;
|
|
5
|
+
source: ModeSource;
|
|
6
|
+
}
|
|
7
|
+
export declare const modeConfig: {
|
|
8
|
+
auto: {
|
|
9
|
+
emoji: string;
|
|
10
|
+
label: string;
|
|
11
|
+
description: string;
|
|
12
|
+
color: import("chalk").ChalkInstance;
|
|
13
|
+
};
|
|
14
|
+
balanced: {
|
|
15
|
+
emoji: string;
|
|
16
|
+
label: string;
|
|
17
|
+
description: string;
|
|
18
|
+
color: import("chalk").ChalkInstance;
|
|
19
|
+
};
|
|
20
|
+
manual: {
|
|
21
|
+
emoji: string;
|
|
22
|
+
label: string;
|
|
23
|
+
description: string;
|
|
24
|
+
color: import("chalk").ChalkInstance;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export declare function getModeDisplay(mode: ExecutionMode): string;
|
|
28
|
+
export declare function getModeEmoji(mode: ExecutionMode): string;
|
|
29
|
+
/**
|
|
30
|
+
* Map CLI execution mode to Claude Agent SDK permission mode
|
|
31
|
+
* - manual → default (user approves each action)
|
|
32
|
+
* - balanced → acceptEdits (auto-approve file edits, prompt for others)
|
|
33
|
+
* - auto → bypassPermissions (full automation, no prompts)
|
|
34
|
+
*/
|
|
35
|
+
export declare function getPermissionMode(mode: ExecutionMode): 'default' | 'acceptEdits' | 'bypassPermissions';
|
|
36
|
+
export declare function selectMode(story: {
|
|
37
|
+
executionMode?: ExecutionMode;
|
|
38
|
+
suggestedMode?: ExecutionMode;
|
|
39
|
+
suggestedModeReason?: string;
|
|
40
|
+
}, projectDefault: ExecutionMode, cliFlag?: ExecutionMode, skipPrompt?: boolean): Promise<ModeSelection>;
|
|
41
|
+
export declare function fetchProjectDefaultMode(projectId: string, apiUrl: string, token: string): Promise<ExecutionMode>;
|
|
42
|
+
//# sourceMappingURL=mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.d.ts","sourceRoot":"","sources":["../../src/lib/mode.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;AAE3G,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;CAmBtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAG1D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,GAAG,mBAAmB,CAMtG;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE;IACL,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,EACD,cAAc,EAAE,aAAa,EAC7B,OAAO,CAAC,EAAE,aAAa,EACvB,UAAU,GAAE,OAAe,GAC1B,OAAO,CAAC,aAAa,CAAC,CAwExB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
package/dist/lib/mode.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export const modeConfig = {
|
|
4
|
+
auto: {
|
|
5
|
+
emoji: '🤖',
|
|
6
|
+
label: 'Autopilot',
|
|
7
|
+
description: 'Fully automatic, minimal interaction',
|
|
8
|
+
color: chalk.blue,
|
|
9
|
+
},
|
|
10
|
+
balanced: {
|
|
11
|
+
emoji: '⚖️',
|
|
12
|
+
label: 'Balanced',
|
|
13
|
+
description: 'Auto-accept edits, pause for questions',
|
|
14
|
+
color: chalk.green,
|
|
15
|
+
},
|
|
16
|
+
manual: {
|
|
17
|
+
emoji: '🔧',
|
|
18
|
+
label: 'Manual',
|
|
19
|
+
description: 'Review every change before applying',
|
|
20
|
+
color: chalk.yellow,
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export function getModeDisplay(mode) {
|
|
24
|
+
const config = modeConfig[mode];
|
|
25
|
+
return `${config.emoji} ${config.label}`;
|
|
26
|
+
}
|
|
27
|
+
export function getModeEmoji(mode) {
|
|
28
|
+
return modeConfig[mode].emoji;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Map CLI execution mode to Claude Agent SDK permission mode
|
|
32
|
+
* - manual → default (user approves each action)
|
|
33
|
+
* - balanced → acceptEdits (auto-approve file edits, prompt for others)
|
|
34
|
+
* - auto → bypassPermissions (full automation, no prompts)
|
|
35
|
+
*/
|
|
36
|
+
export function getPermissionMode(mode) {
|
|
37
|
+
switch (mode) {
|
|
38
|
+
case 'manual': return 'default';
|
|
39
|
+
case 'balanced': return 'acceptEdits';
|
|
40
|
+
case 'auto': return 'bypassPermissions';
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export async function selectMode(story, projectDefault, cliFlag, skipPrompt = false) {
|
|
44
|
+
// 1. CLI flag takes absolute precedence
|
|
45
|
+
if (cliFlag) {
|
|
46
|
+
console.log(chalk.gray(` Using mode from --mode flag: ${getModeDisplay(cliFlag)}`));
|
|
47
|
+
return { mode: cliFlag, source: 'cli_flag' };
|
|
48
|
+
}
|
|
49
|
+
// Determine the effective preset mode and its source
|
|
50
|
+
let presetMode = 'balanced';
|
|
51
|
+
let presetSource = 'global_default';
|
|
52
|
+
if (story.executionMode) {
|
|
53
|
+
presetMode = story.executionMode;
|
|
54
|
+
presetSource = 'story_preset';
|
|
55
|
+
}
|
|
56
|
+
else if (projectDefault) {
|
|
57
|
+
presetMode = projectDefault;
|
|
58
|
+
presetSource = 'project_default';
|
|
59
|
+
}
|
|
60
|
+
// 2. Skip prompt if --yes flag, use preset
|
|
61
|
+
if (skipPrompt) {
|
|
62
|
+
console.log(chalk.gray(` Using ${presetSource.replace(/_/g, ' ')}: ${getModeDisplay(presetMode)}`));
|
|
63
|
+
return { mode: presetMode, source: presetSource };
|
|
64
|
+
}
|
|
65
|
+
// 3. Show AI suggestion if different from preset
|
|
66
|
+
if (story.suggestedMode && story.suggestedMode !== presetMode) {
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log(chalk.magenta(` 💡 AI Suggestion: ${getModeDisplay(story.suggestedMode)}`));
|
|
69
|
+
if (story.suggestedModeReason) {
|
|
70
|
+
console.log(chalk.gray(` "${story.suggestedModeReason}"`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 4. Prompt user to select mode
|
|
74
|
+
console.log('');
|
|
75
|
+
const choices = [
|
|
76
|
+
{
|
|
77
|
+
name: `${modeConfig.auto.emoji} Autopilot - ${modeConfig.auto.description}`,
|
|
78
|
+
value: 'auto',
|
|
79
|
+
short: 'Autopilot',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: `${modeConfig.balanced.emoji} Balanced - ${modeConfig.balanced.description} ${presetMode === 'balanced' ? chalk.gray('(default)') : ''}`,
|
|
83
|
+
value: 'balanced',
|
|
84
|
+
short: 'Balanced',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: `${modeConfig.manual.emoji} Manual - ${modeConfig.manual.description}`,
|
|
88
|
+
value: 'manual',
|
|
89
|
+
short: 'Manual',
|
|
90
|
+
},
|
|
91
|
+
];
|
|
92
|
+
// Find default index
|
|
93
|
+
const defaultIndex = choices.findIndex(c => c.value === presetMode);
|
|
94
|
+
const { selectedMode } = await inquirer.prompt([
|
|
95
|
+
{
|
|
96
|
+
type: 'list',
|
|
97
|
+
name: 'selectedMode',
|
|
98
|
+
message: `Execution mode ${chalk.gray(`(preset: ${getModeDisplay(presetMode)})`)}:`,
|
|
99
|
+
choices,
|
|
100
|
+
default: defaultIndex >= 0 ? defaultIndex : 1,
|
|
101
|
+
},
|
|
102
|
+
]);
|
|
103
|
+
// Determine final source
|
|
104
|
+
const finalSource = selectedMode === presetMode ? presetSource : 'cli_prompt';
|
|
105
|
+
return { mode: selectedMode, source: finalSource };
|
|
106
|
+
}
|
|
107
|
+
export async function fetchProjectDefaultMode(projectId, apiUrl, token) {
|
|
108
|
+
try {
|
|
109
|
+
const response = await fetch(`${apiUrl}/api/cli/projects/${projectId}/settings`, {
|
|
110
|
+
headers: {
|
|
111
|
+
'Authorization': `Bearer ${token}`,
|
|
112
|
+
'Content-Type': 'application/json'
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
if (response.ok) {
|
|
116
|
+
const { settings } = await response.json();
|
|
117
|
+
return settings?.defaultExecutionMode || 'balanced';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Silently fail and use default
|
|
122
|
+
if (process.env.DEBUG) {
|
|
123
|
+
console.log(chalk.gray(' Could not fetch project settings, using default mode'));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return 'balanced';
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mode.js","sourceRoot":"","sources":["../../src/lib/mode.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,IAAI,EAAE;QACJ,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,KAAK,CAAC,IAAI;KAClB;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,wCAAwC;QACrD,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB;IACD,MAAM,EAAE;QACN,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,qCAAqC;QAClD,KAAK,EAAE,KAAK,CAAC,MAAM;KACpB;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,IAAmB;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAmB;IAC9C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAmB;IACnD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ,CAAC,CAAC,OAAO,SAAS,CAAC;QAChC,KAAK,UAAU,CAAC,CAAC,OAAO,aAAa,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,mBAAmB,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,KAIC,EACD,cAA6B,EAC7B,OAAuB,EACvB,aAAsB,KAAK;IAE3B,wCAAwC;IACxC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAC/C,CAAC;IAED,qDAAqD;IACrD,IAAI,UAAU,GAAkB,UAAU,CAAC;IAC3C,IAAI,YAAY,GAAe,gBAAgB,CAAC;IAEhD,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC;QACjC,YAAY,GAAG,cAAc,CAAC;IAChC,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC1B,UAAU,GAAG,cAAc,CAAC;QAC5B,YAAY,GAAG,iBAAiB,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACrG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACpD,CAAC;IAED,iDAAiD;IACjD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,mBAAmB,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG;QACd;YACE,IAAI,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,iBAAiB,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE;YAC5E,KAAK,EAAE,MAAe;YACtB,KAAK,EAAE,WAAW;SACnB;QACD;YACE,IAAI,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,gBAAgB,UAAU,CAAC,QAAQ,CAAC,WAAW,IAAI,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/I,KAAK,EAAE,UAAmB;YAC1B,KAAK,EAAE,UAAU;SAClB;QACD;YACE,IAAI,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,cAAc,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE;YAC7E,KAAK,EAAE,QAAiB;YACxB,KAAK,EAAE,QAAQ;SAChB;KACF,CAAC;IAEF,qBAAqB;IACrB,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC;IAEpE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC7C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,kBAAkB,KAAK,CAAC,IAAI,CAAC,YAAY,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG;YACnF,OAAO;YACP,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC9C;KACF,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,WAAW,GAAe,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAE1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAiB,EACjB,MAAc,EACd,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,qBAAqB,SAAS,WAAW,EAAE;YAC/E,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,KAAK,EAAE;gBAClC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO,QAAQ,EAAE,oBAAoB,IAAI,UAAU,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function promptForAnswer(question: string): Promise<string>;
|
|
2
|
+
export declare function promptForConfirmation(message: string, defaultValue?: boolean): Promise<boolean>;
|
|
3
|
+
export declare function promptToContinue(message?: string): Promise<void>;
|
|
4
|
+
export declare function promptForChoice<T extends string>(message: string, choices: Array<{
|
|
5
|
+
name: string;
|
|
6
|
+
value: T;
|
|
7
|
+
}>, defaultValue?: T): Promise<T>;
|
|
8
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAGA,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBvE;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,GAAE,OAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAW3G;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,MAAmC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQlG;AAED,wBAAsB,eAAe,CAAC,CAAC,SAAS,MAAM,EACpD,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,EAC1C,YAAY,CAAC,EAAE,CAAC,GACf,OAAO,CAAC,CAAC,CAAC,CAgBZ"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export async function promptForAnswer(question) {
|
|
4
|
+
console.log('');
|
|
5
|
+
const { answer } = await inquirer.prompt([
|
|
6
|
+
{
|
|
7
|
+
type: 'input',
|
|
8
|
+
name: 'answer',
|
|
9
|
+
message: chalk.cyan('Your answer:'),
|
|
10
|
+
validate: (input) => {
|
|
11
|
+
if (!input.trim()) {
|
|
12
|
+
return 'Please provide an answer (or type "skip" to let agent decide)';
|
|
13
|
+
}
|
|
14
|
+
return true;
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
]);
|
|
18
|
+
if (answer.toLowerCase().trim() === 'skip') {
|
|
19
|
+
return "Please proceed with your best judgment.";
|
|
20
|
+
}
|
|
21
|
+
return answer.trim();
|
|
22
|
+
}
|
|
23
|
+
export async function promptForConfirmation(message, defaultValue = true) {
|
|
24
|
+
const { confirmed } = await inquirer.prompt([
|
|
25
|
+
{
|
|
26
|
+
type: 'confirm',
|
|
27
|
+
name: 'confirmed',
|
|
28
|
+
message,
|
|
29
|
+
default: defaultValue,
|
|
30
|
+
},
|
|
31
|
+
]);
|
|
32
|
+
return confirmed;
|
|
33
|
+
}
|
|
34
|
+
export async function promptToContinue(message = 'Press Enter when done...') {
|
|
35
|
+
await inquirer.prompt([
|
|
36
|
+
{
|
|
37
|
+
type: 'input',
|
|
38
|
+
name: 'continue',
|
|
39
|
+
message: chalk.gray(message),
|
|
40
|
+
},
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
export async function promptForChoice(message, choices, defaultValue) {
|
|
44
|
+
const defaultIndex = defaultValue
|
|
45
|
+
? choices.findIndex(c => c.value === defaultValue)
|
|
46
|
+
: 0;
|
|
47
|
+
const { choice } = await inquirer.prompt([
|
|
48
|
+
{
|
|
49
|
+
type: 'list',
|
|
50
|
+
name: 'choice',
|
|
51
|
+
message,
|
|
52
|
+
choices,
|
|
53
|
+
default: defaultIndex >= 0 ? defaultIndex : 0,
|
|
54
|
+
},
|
|
55
|
+
]);
|
|
56
|
+
return choice;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/lib/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAgB;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YACnC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,OAAO,+DAA+D,CAAC;gBACzE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,yCAAyC,CAAC;IACnD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,OAAe,EAAE,eAAwB,IAAI;IACvF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAC1C;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO;YACP,OAAO,EAAE,YAAY;SACtB;KACF,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB,0BAA0B;IACjF,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpB;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;SAC7B;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,OAA0C,EAC1C,YAAgB;IAEhB,MAAM,YAAY,GAAG,YAAY;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC;QAClD,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACvC;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,QAAQ;YACd,OAAO;YACP,OAAO;YACP,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC9C;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ExecutionMode } from './mode.js';
|
|
2
|
+
export interface QuestionContext {
|
|
3
|
+
question: string;
|
|
4
|
+
context?: string;
|
|
5
|
+
options?: string[];
|
|
6
|
+
}
|
|
7
|
+
export interface QuestionResult {
|
|
8
|
+
question: string;
|
|
9
|
+
answer: string;
|
|
10
|
+
autoAnswered: boolean;
|
|
11
|
+
timestamp: Date;
|
|
12
|
+
}
|
|
13
|
+
export declare function isQuestion(text: string): boolean;
|
|
14
|
+
export declare function extractQuestion(message: {
|
|
15
|
+
type: string;
|
|
16
|
+
question?: string;
|
|
17
|
+
content?: string;
|
|
18
|
+
text?: string;
|
|
19
|
+
context?: string;
|
|
20
|
+
options?: string[];
|
|
21
|
+
}): QuestionContext | null;
|
|
22
|
+
export declare function handleQuestion(questionCtx: QuestionContext, mode: ExecutionMode, onLog: (result: QuestionResult) => void): Promise<string | null>;
|
|
23
|
+
//# sourceMappingURL=question-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-handler.d.ts","sourceRoot":"","sources":["../../src/lib/question-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AAmBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAahD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,eAAe,GAAG,IAAI,CAoB3K;AAED,wBAAsB,cAAc,CAClC,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GACtC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4DxB"}
|