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,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"}
@@ -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":"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"}
@@ -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"}
@@ -0,0 +1,99 @@
1
+ import chalk from 'chalk';
2
+ import { promptForAnswer } from './prompts.js';
3
+ // Patterns that indicate the agent is asking a question
4
+ const QUESTION_PATTERNS = [
5
+ /\?[\s]*$/, // Ends with question mark
6
+ /should i\s/i, // "Should I..."
7
+ /would you like/i, // "Would you like..."
8
+ /do you want/i, // "Do you want..."
9
+ /which (one|option|approach)/i, // "Which one/option..."
10
+ /please (choose|select|pick)/i, // "Please choose..."
11
+ /please (confirm|verify)/i, // "Please confirm..."
12
+ /let me know (if|what|which|how)/i, // "Let me know..."
13
+ /what would you prefer/i, // "What would you prefer..."
14
+ /how should i/i, // "How should I..."
15
+ /what (should|would) you/i, // "What should/would you..."
16
+ /is (this|that) (ok|okay|correct|right)/i, // "Is this ok..."
17
+ /does (this|that) (work|look)/i, // "Does this work..."
18
+ ];
19
+ export function isQuestion(text) {
20
+ if (!text)
21
+ return false;
22
+ const cleanText = text.trim();
23
+ // Check against patterns
24
+ for (const pattern of QUESTION_PATTERNS) {
25
+ if (pattern.test(cleanText)) {
26
+ return true;
27
+ }
28
+ }
29
+ return false;
30
+ }
31
+ export function extractQuestion(message) {
32
+ // Handle explicit ask_user message type
33
+ if (message.type === 'ask_user') {
34
+ return {
35
+ question: message.question || message.content || message.text || 'The agent has a question',
36
+ context: message.context,
37
+ options: message.options,
38
+ };
39
+ }
40
+ // Handle text messages that contain questions
41
+ if (message.type === 'text' && message.text) {
42
+ if (isQuestion(message.text)) {
43
+ return {
44
+ question: message.text,
45
+ };
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ export async function handleQuestion(questionCtx, mode, onLog) {
51
+ const { question, context, options } = questionCtx;
52
+ // Display the question
53
+ console.log('');
54
+ console.log(chalk.cyan('━'.repeat(60)));
55
+ console.log(chalk.cyan(' ❓ QUESTION FROM AGENT'));
56
+ console.log(chalk.cyan('━'.repeat(60)));
57
+ console.log('');
58
+ // Show context if available
59
+ if (context) {
60
+ console.log(chalk.gray(` Context: ${context}`));
61
+ console.log('');
62
+ }
63
+ // Show the question
64
+ console.log(` ${question}`);
65
+ // Show options if available
66
+ if (options && options.length > 0) {
67
+ console.log('');
68
+ console.log(chalk.gray(' Options:'));
69
+ options.forEach((opt, i) => {
70
+ console.log(chalk.gray(` ${i + 1}. ${opt}`));
71
+ });
72
+ }
73
+ console.log('');
74
+ if (mode === 'auto') {
75
+ // In autopilot mode, log but don't wait for answer
76
+ console.log(chalk.gray(' (Autopilot mode - agent will use best judgment)'));
77
+ console.log('');
78
+ onLog({
79
+ question,
80
+ answer: '[Auto-handled by agent]',
81
+ autoAnswered: true,
82
+ timestamp: new Date(),
83
+ });
84
+ return null; // Agent will proceed on its own
85
+ }
86
+ // In balanced/manual mode, prompt for answer
87
+ const answer = await promptForAnswer(question);
88
+ onLog({
89
+ question,
90
+ answer,
91
+ autoAnswered: false,
92
+ timestamp: new Date(),
93
+ });
94
+ console.log('');
95
+ console.log(chalk.green(' ✓ Answer sent to agent'));
96
+ console.log('');
97
+ return answer;
98
+ }
99
+ //# sourceMappingURL=question-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"question-handler.js","sourceRoot":"","sources":["../../src/lib/question-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAe/C,wDAAwD;AACxD,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAA4B,0BAA0B;IAChE,aAAa,EAAyB,gBAAgB;IACtD,iBAAiB,EAAqB,sBAAsB;IAC5D,cAAc,EAAwB,mBAAmB;IACzD,8BAA8B,EAAQ,wBAAwB;IAC9D,8BAA8B,EAAQ,qBAAqB;IAC3D,0BAA0B,EAAY,sBAAsB;IAC5D,kCAAkC,EAAI,mBAAmB;IACzD,wBAAwB,EAAc,6BAA6B;IACnE,eAAe,EAAuB,oBAAoB;IAC1D,0BAA0B,EAAY,6BAA6B;IACnE,yCAAyC,EAAG,kBAAkB;IAC9D,+BAA+B,EAAO,sBAAsB;CAC7D,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE9B,yBAAyB;IACzB,KAAK,MAAM,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAmH;IACjJ,wCAAwC;IACxC,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,IAAI,0BAA0B;YAC3F,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,QAAQ,EAAE,OAAO,CAAC,IAAI;aACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAA4B,EAC5B,IAAmB,EACnB,KAAuC;IAEvC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAEnD,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,4BAA4B;IAC5B,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,mDAAmD;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,KAAK,CAAC;YACJ,QAAQ;YACR,MAAM,EAAE,yBAAyB;YACjC,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,CAAC,gCAAgC;IAC/C,CAAC;IAED,6CAA6C;IAC7C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE/C,KAAK,CAAC;QACJ,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { SDKMessage } from '@anthropic-ai/claude-agent-sdk';
2
+ export interface ActivityMessage {
3
+ type: string;
4
+ summary: string;
5
+ storyId?: string;
6
+ timestamp: string;
7
+ details?: Record<string, unknown>;
8
+ runId?: string;
9
+ }
10
+ export declare class ActivitySync {
11
+ private apiUrl;
12
+ private token;
13
+ private projectId;
14
+ private buffer;
15
+ private flushTimer;
16
+ private flushInterval;
17
+ constructor(apiUrl: string, token: string, projectId: string);
18
+ queue(message: Omit<ActivityMessage, 'timestamp'>): void;
19
+ send(message: Omit<ActivityMessage, 'timestamp'>): Promise<void>;
20
+ private scheduleFlush;
21
+ flush(): Promise<void>;
22
+ sendStarted(storyId: string, mode: string): void;
23
+ sendCompleted(storyId: string, summary: Record<string, unknown>): void;
24
+ sendFileCreate(storyId: string, filePath: string): void;
25
+ sendFileEdit(storyId: string, filePath: string): void;
26
+ sendCommand(storyId: string, command: string): void;
27
+ sendQuestion(storyId: string, question: string, answer?: string, autoAnswered?: boolean): void;
28
+ sendManualStep(storyId: string, instruction: string, completed: boolean): void;
29
+ sendUserInput(storyId: string, message: string): void;
30
+ sendDeviation(storyId: string, description: string): void;
31
+ sendError(storyId: string, error: string): void;
32
+ sendInfo(storyId: string, info: string): void;
33
+ sendStatusChange(storyId: string, status: string, branch?: string, prUrl?: string): Promise<void>;
34
+ sendMessage(message: SDKMessage, storyId: string): void;
35
+ close(): Promise<void>;
36
+ private getActivityType;
37
+ private summarize;
38
+ private extractDetails;
39
+ }
40
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAGjE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,YAAY;IAMrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,SAAS;IAPnB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,aAAa,CAAgB;gBAG3B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM;IAI3B,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,IAAI;IAUlD,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE,OAAO,CAAC,aAAa;IASf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyC5B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAShD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IASvD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IASrD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASnD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,GAAE,OAAe,GAAG,IAAI;IASrG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAS9E,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IASrD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQzD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAS/C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQvC,gBAAgB,CACpB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAwBhB,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAcjD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,cAAc;CAkBvB"}