@autonav/core 1.1.3 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -0
- package/dist/adapter/claude-adapter.d.ts +30 -0
- package/dist/adapter/claude-adapter.d.ts.map +1 -1
- package/dist/adapter/claude-adapter.js +155 -0
- package/dist/adapter/claude-adapter.js.map +1 -1
- package/dist/cli/autonav.d.ts +1 -0
- package/dist/cli/autonav.d.ts.map +1 -1
- package/dist/cli/autonav.js +23 -4
- package/dist/cli/autonav.js.map +1 -1
- package/dist/cli/nav-init.js +86 -13
- package/dist/cli/nav-init.js.map +1 -1
- package/dist/cli/nav-install.d.ts +3 -0
- package/dist/cli/nav-install.d.ts.map +1 -0
- package/dist/cli/nav-install.js +101 -0
- package/dist/cli/nav-install.js.map +1 -0
- package/dist/cli/nav-uninstall.d.ts +3 -0
- package/dist/cli/nav-uninstall.d.ts.map +1 -0
- package/dist/cli/nav-uninstall.js +123 -0
- package/dist/cli/nav-uninstall.js.map +1 -0
- package/dist/cli/nav-update.d.ts +3 -0
- package/dist/cli/nav-update.d.ts.map +1 -0
- package/dist/cli/nav-update.js +131 -0
- package/dist/cli/nav-update.js.map +1 -0
- package/dist/interview/App.d.ts +7 -1
- package/dist/interview/App.d.ts.map +1 -1
- package/dist/interview/App.js +211 -17
- package/dist/interview/App.js.map +1 -1
- package/dist/interview/index.d.ts +9 -2
- package/dist/interview/index.d.ts.map +1 -1
- package/dist/interview/index.js +12 -3
- package/dist/interview/index.js.map +1 -1
- package/dist/interview/progress.d.ts +55 -0
- package/dist/interview/progress.d.ts.map +1 -0
- package/dist/interview/progress.js +88 -0
- package/dist/interview/progress.js.map +1 -0
- package/dist/interview/prompts.d.ts +4 -1
- package/dist/interview/prompts.d.ts.map +1 -1
- package/dist/interview/prompts.js +46 -7
- package/dist/interview/prompts.js.map +1 -1
- package/dist/pack-installer/index.d.ts.map +1 -1
- package/dist/pack-installer/index.js +14 -2
- package/dist/pack-installer/index.js.map +1 -1
- package/dist/skill-generator/index.d.ts +89 -4
- package/dist/skill-generator/index.d.ts.map +1 -1
- package/dist/skill-generator/index.js +364 -143
- package/dist/skill-generator/index.js.map +1 -1
- package/dist/templates/.gitignore.template +3 -0
- package/package.json +11 -1
- package/dist/templates/CLAUDE-import.md.template +0 -90
package/dist/interview/App.js
CHANGED
|
@@ -9,6 +9,7 @@ import { Box, Text, useApp, useInput } from "ink";
|
|
|
9
9
|
import TextInput from "ink-text-input";
|
|
10
10
|
import { query } from "@anthropic-ai/claude-agent-sdk";
|
|
11
11
|
import { getInterviewSystemPrompt, parseNavigatorConfig, } from "./prompts.js";
|
|
12
|
+
import { saveProgress, clearProgress } from "./progress.js";
|
|
12
13
|
// Check if debug mode is enabled
|
|
13
14
|
const DEBUG = process.env.AUTONAV_DEBUG === "1" || process.env.DEBUG === "1";
|
|
14
15
|
// Model to use for interview
|
|
@@ -18,13 +19,95 @@ function debugLog(...args) {
|
|
|
18
19
|
console.error("[DEBUG]", ...args);
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
+
/** Steps for config generation with user-friendly labels */
|
|
23
|
+
const CONFIG_GENERATION_STEPS = [
|
|
24
|
+
{ key: "purpose", label: "Defining purpose..." },
|
|
25
|
+
{ key: "scope", label: "Setting scope..." },
|
|
26
|
+
{ key: "knowledgeStructure", label: "Organizing knowledge structure..." },
|
|
27
|
+
{ key: "audience", label: "Identifying audience..." },
|
|
28
|
+
{ key: "autonomy", label: "Configuring autonomy..." },
|
|
29
|
+
{ key: "directories", label: "Suggesting directories..." },
|
|
30
|
+
{ key: "claudeMd", label: "Generating CLAUDE.md..." },
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Generate navigator config fields via separate LLM calls.
|
|
34
|
+
*
|
|
35
|
+
* This avoids the nested backtick problem where claudeMd contains markdown
|
|
36
|
+
* with code blocks that break the JSON extraction regex.
|
|
37
|
+
*/
|
|
38
|
+
async function generateConfigFields(conversationHistory, systemPrompt, name, onProgress) {
|
|
39
|
+
// Helper to make a single-field extraction call
|
|
40
|
+
const extractField = async (fieldPrompt) => {
|
|
41
|
+
const q = query({
|
|
42
|
+
prompt: `<conversation>\n${conversationHistory}\n</conversation>\n\n${fieldPrompt}`,
|
|
43
|
+
options: {
|
|
44
|
+
model: INTERVIEW_MODEL,
|
|
45
|
+
systemPrompt,
|
|
46
|
+
permissionMode: "bypassPermissions",
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
let result = "";
|
|
50
|
+
for await (const message of q) {
|
|
51
|
+
if (message.type === "assistant") {
|
|
52
|
+
const textBlocks = message.message.content.filter((b) => b.type === "text");
|
|
53
|
+
result = textBlocks.map((b) => b.text).join("\n");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return result.trim();
|
|
57
|
+
};
|
|
58
|
+
debugLog("Generating config fields separately...");
|
|
59
|
+
// Generate required fields
|
|
60
|
+
onProgress(1, CONFIG_GENERATION_STEPS[0].label);
|
|
61
|
+
debugLog(" - Extracting purpose...");
|
|
62
|
+
const purpose = await extractField("Based on the conversation, output ONLY a single sentence describing the navigator's purpose. No explanation, just the purpose statement.");
|
|
63
|
+
onProgress(2, CONFIG_GENERATION_STEPS[1].label);
|
|
64
|
+
debugLog(" - Extracting scope...");
|
|
65
|
+
const scope = await extractField("Based on the conversation, output ONLY a brief description of what is IN SCOPE and OUT OF SCOPE. Format: 'IN SCOPE: ... OUT OF SCOPE: ...'");
|
|
66
|
+
// Generate optional fields
|
|
67
|
+
onProgress(3, CONFIG_GENERATION_STEPS[2].label);
|
|
68
|
+
debugLog(" - Extracting knowledgeStructure...");
|
|
69
|
+
const knowledgeStructure = await extractField("Based on the conversation, describe how knowledge should be organized for this navigator. Output ONLY the description, 1-3 sentences. If not discussed, output 'default'.");
|
|
70
|
+
onProgress(4, CONFIG_GENERATION_STEPS[3].label);
|
|
71
|
+
debugLog(" - Extracting audience...");
|
|
72
|
+
const audience = await extractField("Based on the conversation, describe who the navigator serves and how communication style should adapt. Output ONLY the description. If not discussed, output 'default'.");
|
|
73
|
+
onProgress(5, CONFIG_GENERATION_STEPS[4].label);
|
|
74
|
+
debugLog(" - Extracting autonomy...");
|
|
75
|
+
const autonomy = await extractField("Based on the conversation, describe the navigator's level of autonomous action (e.g., 'fully autonomous', 'ask before changes', etc.). Output ONLY the description. If not discussed, output 'default'.");
|
|
76
|
+
onProgress(6, CONFIG_GENERATION_STEPS[5].label);
|
|
77
|
+
debugLog(" - Extracting suggestedDirectories...");
|
|
78
|
+
const suggestedDirsRaw = await extractField("Based on the conversation, list the suggested directories for this navigator as a comma-separated list (e.g., 'knowledge, projects, archive'). Output ONLY the comma-separated list. If not discussed, output 'knowledge'.");
|
|
79
|
+
// Generate claudeMd last (largest field)
|
|
80
|
+
onProgress(7, CONFIG_GENERATION_STEPS[6].label);
|
|
81
|
+
debugLog(" - Generating claudeMd...");
|
|
82
|
+
const claudeMd = await extractField(`Generate the complete CLAUDE.md file for the "${name}" navigator based on the conversation. Output ONLY the raw markdown content, starting with "# ${name}". Include sections for: Purpose, Critical Boundaries (if any), Scope, Knowledge Structure, Communication Style, Grounding Rules, and Autonomy. Make it comprehensive based on everything discussed.`);
|
|
83
|
+
// Parse suggestedDirectories from comma-separated string
|
|
84
|
+
const suggestedDirectories = suggestedDirsRaw
|
|
85
|
+
.split(",")
|
|
86
|
+
.map((d) => d.trim())
|
|
87
|
+
.filter((d) => d.length > 0 && d !== "default");
|
|
88
|
+
debugLog("Config fields generated successfully");
|
|
89
|
+
return {
|
|
90
|
+
purpose,
|
|
91
|
+
scope,
|
|
92
|
+
claudeMd,
|
|
93
|
+
// Only include optional fields if they have meaningful values
|
|
94
|
+
...(knowledgeStructure !== "default" && { knowledgeStructure }),
|
|
95
|
+
...(audience !== "default" && { audience }),
|
|
96
|
+
...(autonomy !== "default" && { autonomy }),
|
|
97
|
+
...(suggestedDirectories.length > 0 && { suggestedDirectories }),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function InterviewApp({ name, navigatorPath, packContext, analysisContext, initialMessages, onComplete, }) {
|
|
22
101
|
// Get the system prompt, customized for pack or analysis if provided
|
|
23
102
|
const systemPrompt = getInterviewSystemPrompt(packContext, analysisContext);
|
|
24
|
-
const [messages, setMessages] = useState([]);
|
|
103
|
+
const [messages, setMessages] = useState(initialMessages || []);
|
|
25
104
|
const [input, setInput] = useState("");
|
|
26
|
-
|
|
105
|
+
// Don't start loading when resuming - we already have messages to display
|
|
106
|
+
const [isLoading, setIsLoading] = useState(!initialMessages?.length);
|
|
107
|
+
const [isCompleting, setIsCompleting] = useState(false);
|
|
108
|
+
const [completionStep, setCompletionStep] = useState(null);
|
|
27
109
|
const [error, setError] = useState(null);
|
|
110
|
+
const [showHint, setShowHint] = useState(false);
|
|
28
111
|
const queryRef = useRef(null);
|
|
29
112
|
const completedRef = useRef(false);
|
|
30
113
|
const { exit } = useApp();
|
|
@@ -45,10 +128,28 @@ export function InterviewApp({ name, packContext, analysisContext, onComplete, }
|
|
|
45
128
|
const text = textBlocks.map((b) => b.text).join("\n");
|
|
46
129
|
if (text) {
|
|
47
130
|
fullText = text;
|
|
48
|
-
setMessages((prev) =>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
131
|
+
setMessages((prev) => {
|
|
132
|
+
const newMessages = [
|
|
133
|
+
...prev,
|
|
134
|
+
{ role: "assistant", content: text },
|
|
135
|
+
];
|
|
136
|
+
// Save progress after assistant message
|
|
137
|
+
try {
|
|
138
|
+
const progress = {
|
|
139
|
+
navigatorName: name,
|
|
140
|
+
messages: newMessages,
|
|
141
|
+
packContext,
|
|
142
|
+
analysisContext,
|
|
143
|
+
lastSaved: new Date().toISOString(),
|
|
144
|
+
};
|
|
145
|
+
saveProgress(navigatorPath, progress);
|
|
146
|
+
debugLog("Progress saved after assistant message:", newMessages.length, "messages");
|
|
147
|
+
}
|
|
148
|
+
catch (err) {
|
|
149
|
+
debugLog("Failed to save progress:", err);
|
|
150
|
+
}
|
|
151
|
+
return newMessages;
|
|
152
|
+
});
|
|
52
153
|
}
|
|
53
154
|
}
|
|
54
155
|
else if (message.type === "result") {
|
|
@@ -59,13 +160,31 @@ export function InterviewApp({ name, packContext, analysisContext, onComplete, }
|
|
|
59
160
|
}
|
|
60
161
|
// Check if the response contains a navigator config
|
|
61
162
|
if (fullText) {
|
|
163
|
+
debugLog("Checking for navigator config in response...");
|
|
62
164
|
const config = parseNavigatorConfig(fullText);
|
|
63
165
|
if (config) {
|
|
64
|
-
debugLog("Interview complete
|
|
166
|
+
debugLog("✓ Interview complete! Config parsed successfully");
|
|
167
|
+
debugLog(" - purpose:", config.purpose?.substring(0, 50) + "...");
|
|
168
|
+
debugLog(" - Calling onComplete to exit...");
|
|
65
169
|
completedRef.current = true;
|
|
66
|
-
|
|
170
|
+
// Clear progress file on successful completion
|
|
171
|
+
try {
|
|
172
|
+
clearProgress(navigatorPath);
|
|
173
|
+
debugLog("Progress cleared");
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
debugLog("Failed to clear progress:", err);
|
|
177
|
+
}
|
|
178
|
+
// Defer onComplete to next tick to avoid render race conditions
|
|
179
|
+
// This ensures the component finishes its current render before unmounting
|
|
180
|
+
setTimeout(() => onComplete(config), 0);
|
|
181
|
+
debugLog("onComplete scheduled, should be exiting soon");
|
|
67
182
|
return;
|
|
68
183
|
}
|
|
184
|
+
else {
|
|
185
|
+
debugLog("✗ No valid config found in response (or validation failed)");
|
|
186
|
+
debugLog(" Response preview:", fullText.substring(0, 200));
|
|
187
|
+
}
|
|
69
188
|
}
|
|
70
189
|
setIsLoading(false);
|
|
71
190
|
}
|
|
@@ -74,9 +193,14 @@ export function InterviewApp({ name, packContext, analysisContext, onComplete, }
|
|
|
74
193
|
setError(err instanceof Error ? err.message : "Error communicating with Claude");
|
|
75
194
|
setIsLoading(false);
|
|
76
195
|
}
|
|
77
|
-
}, [onComplete]);
|
|
196
|
+
}, [onComplete, name, navigatorPath, packContext, analysisContext]);
|
|
78
197
|
// Initialize query and send first message
|
|
79
198
|
useEffect(() => {
|
|
199
|
+
// Skip initialization when resuming - we already have messages
|
|
200
|
+
if (initialMessages?.length) {
|
|
201
|
+
debugLog("Resuming from saved progress with", initialMessages.length, "messages");
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
80
204
|
const initQuery = async () => {
|
|
81
205
|
try {
|
|
82
206
|
debugLog("Creating query with model:", INTERVIEW_MODEL);
|
|
@@ -116,21 +240,91 @@ export function InterviewApp({ name, packContext, analysisContext, onComplete, }
|
|
|
116
240
|
}
|
|
117
241
|
};
|
|
118
242
|
initQuery();
|
|
119
|
-
}, [name, processResponse]);
|
|
243
|
+
}, [name, processResponse, initialMessages]);
|
|
244
|
+
// Show hint after 5+ user messages
|
|
245
|
+
useEffect(() => {
|
|
246
|
+
const userMessageCount = messages.filter(m => m.role === 'user').length;
|
|
247
|
+
if (userMessageCount >= 5 && !showHint) {
|
|
248
|
+
setShowHint(true);
|
|
249
|
+
}
|
|
250
|
+
}, [messages, showHint]);
|
|
120
251
|
// Handle user input submission
|
|
121
252
|
const handleSubmit = useCallback(async (value) => {
|
|
122
253
|
if (!value.trim() || isLoading || completedRef.current)
|
|
123
254
|
return;
|
|
255
|
+
// Detect 'done' command - case-insensitive, trimmed
|
|
256
|
+
const normalizedInput = value.trim().toLowerCase();
|
|
257
|
+
const isDoneCommand = ['done', 'finish', 'ready', 'create'].includes(normalizedInput);
|
|
258
|
+
// Fast path: when user says "done", check if any recent assistant message already has valid config
|
|
259
|
+
// This handles the race condition where Claude generated valid JSON but the interview didn't exit
|
|
260
|
+
if (isDoneCommand) {
|
|
261
|
+
const assistantMessages = messages.filter(m => m.role === 'assistant');
|
|
262
|
+
// Check the last 3 assistant messages for a valid config
|
|
263
|
+
for (let i = assistantMessages.length - 1; i >= Math.max(0, assistantMessages.length - 3); i--) {
|
|
264
|
+
const msg = assistantMessages[i];
|
|
265
|
+
if (!msg)
|
|
266
|
+
continue;
|
|
267
|
+
const config = parseNavigatorConfig(msg.content);
|
|
268
|
+
if (config) {
|
|
269
|
+
debugLog("Fast path: found valid config in existing message, exiting");
|
|
270
|
+
completedRef.current = true;
|
|
271
|
+
clearProgress(navigatorPath);
|
|
272
|
+
setTimeout(() => onComplete(config), 0);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
debugLog("Fast path: no existing config found, generating fields separately");
|
|
277
|
+
// Generate config fields via separate LLM calls to avoid nested backtick issues
|
|
278
|
+
setInput("");
|
|
279
|
+
setIsCompleting(true);
|
|
280
|
+
setIsLoading(true);
|
|
281
|
+
setCompletionStep(CONFIG_GENERATION_STEPS[0].label);
|
|
282
|
+
try {
|
|
283
|
+
const conversationHistory = messages
|
|
284
|
+
.map((m) => `<${m.role}>\n${m.content}\n</${m.role}>`)
|
|
285
|
+
.join("\n\n");
|
|
286
|
+
const config = await generateConfigFields(conversationHistory, systemPrompt, name, (_step, label) => setCompletionStep(label));
|
|
287
|
+
completedRef.current = true;
|
|
288
|
+
clearProgress(navigatorPath);
|
|
289
|
+
setTimeout(() => onComplete(config), 0);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
debugLog("Error generating config fields:", err);
|
|
294
|
+
setError(err instanceof Error ? err.message : "Failed to generate config");
|
|
295
|
+
setIsLoading(false);
|
|
296
|
+
setIsCompleting(false);
|
|
297
|
+
setCompletionStep(null);
|
|
298
|
+
}
|
|
299
|
+
return; // Don't fall through to normal conversation flow
|
|
300
|
+
}
|
|
124
301
|
setInput("");
|
|
125
|
-
|
|
302
|
+
const newMessages = [...messages, { role: "user", content: value }];
|
|
303
|
+
setMessages(newMessages);
|
|
126
304
|
setIsLoading(true);
|
|
305
|
+
// Save progress after user input
|
|
306
|
+
try {
|
|
307
|
+
const progress = {
|
|
308
|
+
navigatorName: name,
|
|
309
|
+
messages: newMessages,
|
|
310
|
+
packContext,
|
|
311
|
+
analysisContext,
|
|
312
|
+
lastSaved: new Date().toISOString(),
|
|
313
|
+
};
|
|
314
|
+
saveProgress(navigatorPath, progress);
|
|
315
|
+
debugLog("Progress saved after user input:", newMessages.length, "messages");
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
debugLog("Failed to save progress:", err);
|
|
319
|
+
// Don't block on save failures
|
|
320
|
+
}
|
|
127
321
|
try {
|
|
128
322
|
debugLog("Sending user message:", value);
|
|
129
|
-
//
|
|
130
|
-
// Include conversation history in the prompt with clear separation
|
|
323
|
+
// Build conversation history
|
|
131
324
|
const conversationHistory = messages
|
|
132
325
|
.map((m) => `<${m.role}>\n${m.content}\n</${m.role}>`)
|
|
133
326
|
.join("\n\n");
|
|
327
|
+
// Normal conversation flow
|
|
134
328
|
const fullPrompt = `<conversation_history>
|
|
135
329
|
${conversationHistory}
|
|
136
330
|
</conversation_history>
|
|
@@ -140,7 +334,7 @@ The user just responded with:
|
|
|
140
334
|
${value}
|
|
141
335
|
</user_message>
|
|
142
336
|
|
|
143
|
-
Continue the interview by responding to their message.
|
|
337
|
+
Continue the interview by responding to their message. Remember: after gathering enough information (usually 4-6 exchanges), you should signal that you're ready to create the navigator and wait for the user to type 'done'. Do NOT output the JSON configuration until the user explicitly says they're ready. Do NOT simulate user responses - only provide YOUR response as the assistant.`;
|
|
144
338
|
const queryInstance = query({
|
|
145
339
|
prompt: fullPrompt,
|
|
146
340
|
options: {
|
|
@@ -157,13 +351,13 @@ Continue the interview by responding to their message. Ask your next question OR
|
|
|
157
351
|
setError(err instanceof Error ? err.message : "Failed to send message");
|
|
158
352
|
setIsLoading(false);
|
|
159
353
|
}
|
|
160
|
-
}, [isLoading, messages, processResponse]);
|
|
354
|
+
}, [isLoading, messages, systemPrompt, processResponse, name, navigatorPath, packContext, analysisContext, onComplete]);
|
|
161
355
|
// Handle Ctrl+C to exit
|
|
162
356
|
useInput((input, key) => {
|
|
163
357
|
if (key.ctrl && input === "c") {
|
|
164
358
|
exit();
|
|
165
359
|
}
|
|
166
360
|
});
|
|
167
|
-
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: ["\uD83E\uDDED Creating navigator: ", name] }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "gray", children: "Answer the questions below. Press Ctrl+C to cancel." }) }), messages.map((msg, i) => (_jsx(Box, { marginBottom: 1, flexDirection: "column", children: msg.role === "user" ? (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "› " }), _jsx(Text, { children: msg.content })] })) : (_jsx(Box, { children: _jsx(Text, { color: "white", children: msg.content }) })) }, i))), error && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) })), isLoading && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "gray", children: "Thinking..." }) })), !isLoading && !error && (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "› " }), _jsx(TextInput, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Type your response..." })] }))] }));
|
|
361
|
+
return (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { bold: true, color: "cyan", children: ["\uD83E\uDDED Creating navigator: ", name] }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "gray", children: "Answer the questions below. Press Ctrl+C to cancel." }) }), messages.map((msg, i) => (_jsx(Box, { marginBottom: 1, flexDirection: "column", children: msg.role === "user" ? (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "› " }), _jsx(Text, { children: msg.content })] })) : (_jsx(Box, { children: _jsx(Text, { color: "white", children: msg.content }) })) }, i))), error && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: "red", children: ["Error: ", error] }) })), isLoading && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: isCompleting ? "cyan" : "gray", children: isCompleting && completionStep ? completionStep : isCompleting ? "Completing interview..." : "Thinking..." }) })), showHint && !isLoading && !error && (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: "yellow", children: "\uD83D\uDCA1 Tip: Type 'done' when ready to create your navigator" }) })), !isLoading && !error && (_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "› " }), _jsx(TextInput, { value: input, onChange: setInput, onSubmit: handleSubmit, placeholder: "Type your response..." })] }))] }));
|
|
168
362
|
}
|
|
169
363
|
//# sourceMappingURL=App.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/interview/App.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/interview/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,16 +6,23 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { NavigatorConfig, PackContext } from "./prompts.js";
|
|
8
8
|
import type { AnalysisResult } from "../repo-analyzer/index.js";
|
|
9
|
+
import type { InterviewProgress } from "./progress.js";
|
|
9
10
|
export type { NavigatorConfig, PackContext } from "./prompts.js";
|
|
11
|
+
export type { InterviewProgress } from "./progress.js";
|
|
10
12
|
export { getInterviewSystemPrompt } from "./prompts.js";
|
|
13
|
+
export { hasProgress, loadProgress, clearProgress, getProgressSummary, } from "./progress.js";
|
|
11
14
|
/**
|
|
12
15
|
* Options for the interview TUI
|
|
13
16
|
*/
|
|
14
17
|
export interface InterviewOptions {
|
|
18
|
+
/** Path to the navigator directory */
|
|
19
|
+
navigatorPath: string;
|
|
15
20
|
/** Optional pack context to customize the interview */
|
|
16
21
|
packContext?: PackContext;
|
|
17
22
|
/** Optional analysis context from repository scan */
|
|
18
23
|
analysisContext?: AnalysisResult;
|
|
24
|
+
/** Optional saved progress to resume from */
|
|
25
|
+
savedProgress?: InterviewProgress;
|
|
19
26
|
}
|
|
20
27
|
/**
|
|
21
28
|
* Check if the current environment supports interactive TTY input
|
|
@@ -25,9 +32,9 @@ export declare function isInteractiveTerminal(): boolean;
|
|
|
25
32
|
* Run the interactive interview TUI
|
|
26
33
|
*
|
|
27
34
|
* @param name - Name of the navigator to create
|
|
28
|
-
* @param options -
|
|
35
|
+
* @param options - Interview options (navigatorPath required, pack context, saved progress optional)
|
|
29
36
|
* @returns Promise that resolves with the navigator configuration
|
|
30
37
|
* @throws Error if terminal doesn't support interactive mode
|
|
31
38
|
*/
|
|
32
|
-
export declare function runInterviewTUI(name: string, options
|
|
39
|
+
export declare function runInterviewTUI(name: string, options: InterviewOptions): Promise<NavigatorConfig>;
|
|
33
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interview/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interview/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qDAAqD;IACrD,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAyC1B"}
|
package/dist/interview/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import React from "react";
|
|
|
8
8
|
import { render } from "ink";
|
|
9
9
|
import { InterviewApp } from "./App.js";
|
|
10
10
|
export { getInterviewSystemPrompt } from "./prompts.js";
|
|
11
|
+
export { hasProgress, loadProgress, clearProgress, getProgressSummary, } from "./progress.js";
|
|
11
12
|
/**
|
|
12
13
|
* Check if the current environment supports interactive TTY input
|
|
13
14
|
*/
|
|
@@ -20,7 +21,7 @@ export function isInteractiveTerminal() {
|
|
|
20
21
|
* Run the interactive interview TUI
|
|
21
22
|
*
|
|
22
23
|
* @param name - Name of the navigator to create
|
|
23
|
-
* @param options -
|
|
24
|
+
* @param options - Interview options (navigatorPath required, pack context, saved progress optional)
|
|
24
25
|
* @returns Promise that resolves with the navigator configuration
|
|
25
26
|
* @throws Error if terminal doesn't support interactive mode
|
|
26
27
|
*/
|
|
@@ -32,14 +33,22 @@ export function runInterviewTUI(name, options) {
|
|
|
32
33
|
return new Promise((resolve, reject) => {
|
|
33
34
|
let completed = false;
|
|
34
35
|
const handleComplete = (config) => {
|
|
36
|
+
if (process.env.AUTONAV_DEBUG === "1" || process.env.DEBUG === "1") {
|
|
37
|
+
console.error("[DEBUG] handleComplete called - unmounting Ink instance");
|
|
38
|
+
}
|
|
35
39
|
completed = true;
|
|
36
40
|
instance.unmount();
|
|
41
|
+
if (process.env.AUTONAV_DEBUG === "1" || process.env.DEBUG === "1") {
|
|
42
|
+
console.error("[DEBUG] Ink unmounted, resolving promise");
|
|
43
|
+
}
|
|
37
44
|
resolve(config);
|
|
38
45
|
};
|
|
39
46
|
const instance = render(React.createElement(InterviewApp, {
|
|
40
47
|
name,
|
|
41
|
-
|
|
42
|
-
|
|
48
|
+
navigatorPath: options.navigatorPath,
|
|
49
|
+
packContext: options.packContext,
|
|
50
|
+
analysisContext: options.analysisContext,
|
|
51
|
+
initialMessages: options.savedProgress?.messages,
|
|
43
52
|
onComplete: handleComplete,
|
|
44
53
|
}));
|
|
45
54
|
// Handle unmount without completion (user cancelled)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interview/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interview/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAOxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAgBvB;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,OAAO,CACZ,OAAO,CAAC,KAAK,CAAC,KAAK;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK;QACpB,OAAO,CAAC,KAAK,CAAC,UAAU,CACzB,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,OAAyB;IAEzB,oDAAoD;IACpD,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAC7B,mFAAmF,CACpF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,cAAc,GAAG,CAAC,MAAuB,EAAE,EAAE;YACjD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBACnE,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC3E,CAAC;YACD,SAAS,GAAG,IAAI,CAAC;YACjB,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBACnE,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC5D,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;YAChC,IAAI;YACJ,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,eAAe,EAAE,OAAO,CAAC,aAAa,EAAE,QAAQ;YAChD,UAAU,EAAE,cAAc;SAC3B,CAAC,CACH,CAAC;QAEF,qDAAqD;QACrD,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview progress persistence
|
|
3
|
+
*
|
|
4
|
+
* Saves interview state after each user reply to prevent data loss on failure.
|
|
5
|
+
*/
|
|
6
|
+
export interface InterviewProgress {
|
|
7
|
+
/** Navigator name */
|
|
8
|
+
navigatorName: string;
|
|
9
|
+
/** Conversation messages */
|
|
10
|
+
messages: Array<{
|
|
11
|
+
role: "user" | "assistant";
|
|
12
|
+
content: string;
|
|
13
|
+
}>;
|
|
14
|
+
/** Pack context if provided */
|
|
15
|
+
packContext?: {
|
|
16
|
+
packName: string;
|
|
17
|
+
packVersion: string;
|
|
18
|
+
initGuide?: string;
|
|
19
|
+
};
|
|
20
|
+
/** Analysis context if provided */
|
|
21
|
+
analysisContext?: {
|
|
22
|
+
purpose: string;
|
|
23
|
+
scope: string;
|
|
24
|
+
audience: string;
|
|
25
|
+
suggestedKnowledgePaths: string[];
|
|
26
|
+
confidence: number;
|
|
27
|
+
};
|
|
28
|
+
/** Timestamp of last save */
|
|
29
|
+
lastSaved: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the path to the progress file for a navigator
|
|
33
|
+
*/
|
|
34
|
+
export declare function getProgressPath(navigatorPath: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a progress file exists for a navigator
|
|
37
|
+
*/
|
|
38
|
+
export declare function hasProgress(navigatorPath: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Save interview progress to disk
|
|
41
|
+
*/
|
|
42
|
+
export declare function saveProgress(navigatorPath: string, progress: InterviewProgress): void;
|
|
43
|
+
/**
|
|
44
|
+
* Load interview progress from disk
|
|
45
|
+
*/
|
|
46
|
+
export declare function loadProgress(navigatorPath: string): InterviewProgress | null;
|
|
47
|
+
/**
|
|
48
|
+
* Delete progress file after successful completion
|
|
49
|
+
*/
|
|
50
|
+
export declare function clearProgress(navigatorPath: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* Get a summary of saved progress for display to user
|
|
53
|
+
*/
|
|
54
|
+
export declare function getProgressSummary(progress: InterviewProgress): string;
|
|
55
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/interview/progress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,+BAA+B;IAC/B,WAAW,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,mCAAmC;IACnC,eAAe,CAAC,EAAE;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,uBAAuB,EAAE,MAAM,EAAE,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAiBN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAiB5E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAMzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAMtE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interview progress persistence
|
|
3
|
+
*
|
|
4
|
+
* Saves interview state after each user reply to prevent data loss on failure.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
const PROGRESS_FILENAME = ".autonav-init-progress.json";
|
|
9
|
+
/**
|
|
10
|
+
* Get the path to the progress file for a navigator
|
|
11
|
+
*/
|
|
12
|
+
export function getProgressPath(navigatorPath) {
|
|
13
|
+
return path.join(navigatorPath, PROGRESS_FILENAME);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if a progress file exists for a navigator
|
|
17
|
+
*/
|
|
18
|
+
export function hasProgress(navigatorPath) {
|
|
19
|
+
return fs.existsSync(getProgressPath(navigatorPath));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Save interview progress to disk
|
|
23
|
+
*/
|
|
24
|
+
export function saveProgress(navigatorPath, progress) {
|
|
25
|
+
const progressPath = getProgressPath(navigatorPath);
|
|
26
|
+
// Ensure directory exists
|
|
27
|
+
fs.mkdirSync(navigatorPath, { recursive: true });
|
|
28
|
+
// Save with pretty formatting for readability
|
|
29
|
+
const content = JSON.stringify({
|
|
30
|
+
...progress,
|
|
31
|
+
lastSaved: new Date().toISOString(),
|
|
32
|
+
}, null, 2);
|
|
33
|
+
fs.writeFileSync(progressPath, content, "utf-8");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load interview progress from disk
|
|
37
|
+
*/
|
|
38
|
+
export function loadProgress(navigatorPath) {
|
|
39
|
+
const progressPath = getProgressPath(navigatorPath);
|
|
40
|
+
if (!fs.existsSync(progressPath)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const content = fs.readFileSync(progressPath, "utf-8");
|
|
45
|
+
return JSON.parse(content);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
// If parsing fails, return null (corrupted file)
|
|
49
|
+
console.warn(`Warning: Could not parse progress file: ${error instanceof Error ? error.message : String(error)}`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Delete progress file after successful completion
|
|
55
|
+
*/
|
|
56
|
+
export function clearProgress(navigatorPath) {
|
|
57
|
+
const progressPath = getProgressPath(navigatorPath);
|
|
58
|
+
if (fs.existsSync(progressPath)) {
|
|
59
|
+
fs.unlinkSync(progressPath);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get a summary of saved progress for display to user
|
|
64
|
+
*/
|
|
65
|
+
export function getProgressSummary(progress) {
|
|
66
|
+
const messageCount = progress.messages.length;
|
|
67
|
+
const lastSaved = new Date(progress.lastSaved);
|
|
68
|
+
const timeAgo = getTimeAgo(lastSaved);
|
|
69
|
+
return `Found saved progress from ${timeAgo} (${messageCount} message${messageCount === 1 ? "" : "s"})`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Helper to get human-readable time difference
|
|
73
|
+
*/
|
|
74
|
+
function getTimeAgo(date) {
|
|
75
|
+
const now = new Date();
|
|
76
|
+
const diffMs = now.getTime() - date.getTime();
|
|
77
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
78
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
79
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
80
|
+
if (diffMins < 1)
|
|
81
|
+
return "just now";
|
|
82
|
+
if (diffMins < 60)
|
|
83
|
+
return `${diffMins} minute${diffMins === 1 ? "" : "s"} ago`;
|
|
84
|
+
if (diffHours < 24)
|
|
85
|
+
return `${diffHours} hour${diffHours === 1 ? "" : "s"} ago`;
|
|
86
|
+
return `${diffDays} day${diffDays === 1 ? "" : "s"} ago`;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/interview/progress.ts"],"names":[],"mappings":"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"}
|