@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.
Files changed (49) hide show
  1. package/README.md +33 -0
  2. package/dist/adapter/claude-adapter.d.ts +30 -0
  3. package/dist/adapter/claude-adapter.d.ts.map +1 -1
  4. package/dist/adapter/claude-adapter.js +155 -0
  5. package/dist/adapter/claude-adapter.js.map +1 -1
  6. package/dist/cli/autonav.d.ts +1 -0
  7. package/dist/cli/autonav.d.ts.map +1 -1
  8. package/dist/cli/autonav.js +23 -4
  9. package/dist/cli/autonav.js.map +1 -1
  10. package/dist/cli/nav-init.js +86 -13
  11. package/dist/cli/nav-init.js.map +1 -1
  12. package/dist/cli/nav-install.d.ts +3 -0
  13. package/dist/cli/nav-install.d.ts.map +1 -0
  14. package/dist/cli/nav-install.js +101 -0
  15. package/dist/cli/nav-install.js.map +1 -0
  16. package/dist/cli/nav-uninstall.d.ts +3 -0
  17. package/dist/cli/nav-uninstall.d.ts.map +1 -0
  18. package/dist/cli/nav-uninstall.js +123 -0
  19. package/dist/cli/nav-uninstall.js.map +1 -0
  20. package/dist/cli/nav-update.d.ts +3 -0
  21. package/dist/cli/nav-update.d.ts.map +1 -0
  22. package/dist/cli/nav-update.js +131 -0
  23. package/dist/cli/nav-update.js.map +1 -0
  24. package/dist/interview/App.d.ts +7 -1
  25. package/dist/interview/App.d.ts.map +1 -1
  26. package/dist/interview/App.js +211 -17
  27. package/dist/interview/App.js.map +1 -1
  28. package/dist/interview/index.d.ts +9 -2
  29. package/dist/interview/index.d.ts.map +1 -1
  30. package/dist/interview/index.js +12 -3
  31. package/dist/interview/index.js.map +1 -1
  32. package/dist/interview/progress.d.ts +55 -0
  33. package/dist/interview/progress.d.ts.map +1 -0
  34. package/dist/interview/progress.js +88 -0
  35. package/dist/interview/progress.js.map +1 -0
  36. package/dist/interview/prompts.d.ts +4 -1
  37. package/dist/interview/prompts.d.ts.map +1 -1
  38. package/dist/interview/prompts.js +46 -7
  39. package/dist/interview/prompts.js.map +1 -1
  40. package/dist/pack-installer/index.d.ts.map +1 -1
  41. package/dist/pack-installer/index.js +14 -2
  42. package/dist/pack-installer/index.js.map +1 -1
  43. package/dist/skill-generator/index.d.ts +89 -4
  44. package/dist/skill-generator/index.d.ts.map +1 -1
  45. package/dist/skill-generator/index.js +364 -143
  46. package/dist/skill-generator/index.js.map +1 -1
  47. package/dist/templates/.gitignore.template +3 -0
  48. package/package.json +11 -1
  49. package/dist/templates/CLAUDE-import.md.template +0 -90
@@ -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
- export function InterviewApp({ name, packContext, analysisContext, onComplete, }) {
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
- const [isLoading, setIsLoading] = useState(true);
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
- ...prev,
50
- { role: "assistant", content: text },
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, config parsed");
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
- onComplete(config);
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
- setMessages((prev) => [...prev, { role: "user", content: value }]);
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
- // Create a new query for each turn
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. Ask your next question OR if you have enough information, output the JSON configuration. Do NOT simulate user responses - only provide YOUR response as the assistant.`;
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 - Optional interview options (pack context, etc.)
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?: InterviewOptions): Promise<NavigatorConfig>;
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;AAEhE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qDAAqD;IACrD,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAAC,eAAe,CAAC,CAiC1B"}
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"}
@@ -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 - Optional interview options (pack context, etc.)
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
- packContext: options?.packContext,
42
- analysisContext: options?.analysisContext,
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;AAKxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAYxD;;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,OAA0B;IAE1B,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,SAAS,GAAG,IAAI,CAAC;YACjB,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CACrB,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;YAChC,IAAI;YACJ,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,eAAe,EAAE,OAAO,EAAE,eAAe;YACzC,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"}
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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"}