@productbrain/cli 0.1.0-beta.35 → 0.1.0-beta.37

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 (105) hide show
  1. package/dist/__tests__/capture.test.js +22 -0
  2. package/dist/__tests__/capture.test.js.map +1 -1
  3. package/dist/__tests__/experiment.test.d.ts +6 -0
  4. package/dist/__tests__/experiment.test.d.ts.map +1 -0
  5. package/dist/__tests__/experiment.test.js +69 -0
  6. package/dist/__tests__/experiment.test.js.map +1 -0
  7. package/dist/__tests__/onboarding-path-b.test.d.ts +2 -0
  8. package/dist/__tests__/onboarding-path-b.test.d.ts.map +1 -0
  9. package/dist/__tests__/onboarding-path-b.test.js +46 -0
  10. package/dist/__tests__/onboarding-path-b.test.js.map +1 -0
  11. package/dist/__tests__/onboarding.test.d.ts +1 -1
  12. package/dist/__tests__/onboarding.test.js +304 -156
  13. package/dist/__tests__/onboarding.test.js.map +1 -1
  14. package/dist/__tests__/setup.test.js +22 -74
  15. package/dist/__tests__/setup.test.js.map +1 -1
  16. package/dist/commands/connect-integration.test.d.ts +7 -0
  17. package/dist/commands/connect-integration.test.d.ts.map +1 -0
  18. package/dist/commands/connect-integration.test.js +148 -0
  19. package/dist/commands/connect-integration.test.js.map +1 -0
  20. package/dist/commands/connect.d.ts +17 -0
  21. package/dist/commands/connect.d.ts.map +1 -0
  22. package/dist/commands/connect.js +280 -0
  23. package/dist/commands/connect.js.map +1 -0
  24. package/dist/commands/connect.test.d.ts +6 -0
  25. package/dist/commands/connect.test.d.ts.map +1 -0
  26. package/dist/commands/connect.test.js +230 -0
  27. package/dist/commands/connect.test.js.map +1 -0
  28. package/dist/commands/handshake.d.ts +2 -0
  29. package/dist/commands/handshake.d.ts.map +1 -1
  30. package/dist/commands/handshake.js +20 -5
  31. package/dist/commands/handshake.js.map +1 -1
  32. package/dist/commands/setup.d.ts.map +1 -1
  33. package/dist/commands/setup.js +57 -81
  34. package/dist/commands/setup.js.map +1 -1
  35. package/dist/generators/context-md.d.ts +1 -1
  36. package/dist/generators/context-md.d.ts.map +1 -1
  37. package/dist/generators/context-md.js +12 -1
  38. package/dist/generators/context-md.js.map +1 -1
  39. package/dist/index.js +13 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/lib/config.d.ts +1 -0
  42. package/dist/lib/config.d.ts.map +1 -1
  43. package/dist/lib/config.js +25 -1
  44. package/dist/lib/config.js.map +1 -1
  45. package/dist/lib/conversation-engine.d.ts +45 -0
  46. package/dist/lib/conversation-engine.d.ts.map +1 -0
  47. package/dist/lib/conversation-engine.js +112 -0
  48. package/dist/lib/conversation-engine.js.map +1 -0
  49. package/dist/lib/conversation-phases.d.ts +59 -0
  50. package/dist/lib/conversation-phases.d.ts.map +1 -0
  51. package/dist/lib/conversation-phases.js +11 -0
  52. package/dist/lib/conversation-phases.js.map +1 -0
  53. package/dist/lib/conversation-signals.d.ts +30 -0
  54. package/dist/lib/conversation-signals.d.ts.map +1 -0
  55. package/dist/lib/conversation-signals.js +64 -0
  56. package/dist/lib/conversation-signals.js.map +1 -0
  57. package/dist/lib/experiment.d.ts +18 -0
  58. package/dist/lib/experiment.d.ts.map +1 -0
  59. package/dist/lib/experiment.js +28 -0
  60. package/dist/lib/experiment.js.map +1 -0
  61. package/dist/lib/onboarding-path-b.d.ts +10 -0
  62. package/dist/lib/onboarding-path-b.d.ts.map +1 -0
  63. package/dist/lib/onboarding-path-b.js +214 -0
  64. package/dist/lib/onboarding-path-b.js.map +1 -0
  65. package/dist/lib/onboarding-phases.d.ts +9 -0
  66. package/dist/lib/onboarding-phases.d.ts.map +1 -0
  67. package/dist/lib/onboarding-phases.js +120 -0
  68. package/dist/lib/onboarding-phases.js.map +1 -0
  69. package/dist/lib/onboarding-shared.d.ts +81 -0
  70. package/dist/lib/onboarding-shared.d.ts.map +1 -0
  71. package/dist/lib/onboarding-shared.js +190 -0
  72. package/dist/lib/onboarding-shared.js.map +1 -0
  73. package/dist/lib/onboarding-topics.d.ts +27 -0
  74. package/dist/lib/onboarding-topics.d.ts.map +1 -0
  75. package/dist/lib/onboarding-topics.js +57 -0
  76. package/dist/lib/onboarding-topics.js.map +1 -0
  77. package/dist/lib/onboarding.d.ts +3 -5
  78. package/dist/lib/onboarding.d.ts.map +1 -1
  79. package/dist/lib/onboarding.js +224 -247
  80. package/dist/lib/onboarding.js.map +1 -1
  81. package/dist/lib/profiles.d.ts +5 -0
  82. package/dist/lib/profiles.d.ts.map +1 -1
  83. package/dist/lib/profiles.js +7 -0
  84. package/dist/lib/profiles.js.map +1 -1
  85. package/dist/lib/telemetry.d.ts +5 -5
  86. package/dist/lib/telemetry.d.ts.map +1 -1
  87. package/dist/lib/telemetry.js +34 -16
  88. package/dist/lib/telemetry.js.map +1 -1
  89. package/dist/lib/wizard-surfaces.d.ts +47 -0
  90. package/dist/lib/wizard-surfaces.d.ts.map +1 -0
  91. package/dist/lib/wizard-surfaces.js +176 -0
  92. package/dist/lib/wizard-surfaces.js.map +1 -0
  93. package/dist/lib/wizard-surfaces.test.d.ts +2 -0
  94. package/dist/lib/wizard-surfaces.test.d.ts.map +1 -0
  95. package/dist/lib/wizard-surfaces.test.js +127 -0
  96. package/dist/lib/wizard-surfaces.test.js.map +1 -0
  97. package/dist/lib/wizard-trust.d.ts +31 -0
  98. package/dist/lib/wizard-trust.d.ts.map +1 -0
  99. package/dist/lib/wizard-trust.js +66 -0
  100. package/dist/lib/wizard-trust.js.map +1 -0
  101. package/dist/lib/wizard-trust.test.d.ts +2 -0
  102. package/dist/lib/wizard-trust.test.d.ts.map +1 -0
  103. package/dist/lib/wizard-trust.test.js +32 -0
  104. package/dist/lib/wizard-trust.test.js.map +1 -0
  105. package/package.json +1 -1
@@ -1,316 +1,284 @@
1
1
  /**
2
- * Onboarding conversation — LLM-powered natural conversation for new workspaces.
3
- * WP-304 Slice 0: Single-turn proof of concept.
4
- * WP-304 Slice 1: Multi-turn conversation + extraction + auto-capture.
2
+ * Onboarding conversation — coach-pattern LLM conversation for new workspaces.
3
+ * WP-304: Topics with goal/behaviour/criteria. LLM judges completion, heuristic backup.
5
4
  *
6
5
  * Uses @clack/prompts (WP-303 S1) and the MCP gateway to call the
7
6
  * Convex onboardingChat action for conversation and extraction,
8
7
  * then chain.createEntry for batch-capture.
9
8
  */
10
- import { mcpCall, mcpCallWithSession } from './client.js';
11
- import { ask, confirm } from './prompts.js';
9
+ import { mcpCall } from './client.js';
10
+ import { ask, confirm, select } from './prompts.js';
12
11
  import { bold, dim, green, icons } from './style.js';
13
12
  import { trackEvent } from './telemetry.js';
14
- /** Max conversation exchanges (including the initial greeting). */
15
- const MAX_TURNS = 5;
16
- /** Signals that the LLM is ready to synthesize (present in its response). */
17
- const SYNTHESIS_SIGNALS = [
18
- 'good picture',
19
- 'organize what',
20
- 'let me organize',
21
- 'enough to get started',
22
- 'have a good sense',
23
- 'got a clear picture',
24
- 'great start',
25
- 'let me pull',
26
- 'let me put',
27
- ];
28
- // ── Extraction → Entries Mapping ────────────────────────────────────────────
29
- // SYNC: Must match packages/mcp-server/src/tools/start-interview.ts:extractionToBatchEntries
30
- // Duplicated due to monorepo import boundary (BR-165). TEN tracked for shared-package extraction.
31
- function truncate(str, maxLen) {
32
- return str.length <= maxLen ? str : str.slice(0, maxLen);
33
- }
34
- function firstNWords(str, n) {
35
- return str.split(/\s+/).slice(0, n).join(' ');
36
- }
37
- function extractionToEntries(extracted) {
38
- const entries = [];
39
- if (extracted.vision?.trim()) {
40
- entries.push({
41
- collection: 'strategy',
42
- name: 'Product Vision',
43
- description: extracted.vision,
44
- });
45
- }
46
- if (extracted.audience) {
47
- entries.push({
48
- collection: 'audiences',
49
- name: firstNWords(extracted.audience, 6),
50
- description: extracted.audience,
51
- });
52
- }
53
- if (extracted.techStack?.length) {
54
- entries.push({
55
- collection: 'architecture',
56
- name: 'Tech Stack',
57
- description: `Technology choices: ${extracted.techStack.join(', ')}`,
58
- });
59
- for (const tech of extracted.techStack.slice(0, 3)) {
60
- entries.push({
61
- collection: 'glossary',
62
- name: tech,
63
- description: `${tech} — part of the tech stack`,
64
- });
65
- }
66
- }
67
- if (extracted.keyTerms?.length) {
68
- for (const term of extracted.keyTerms) {
69
- const alreadyAdded = entries.some((e) => e.collection === 'glossary' && e.name.toLowerCase() === term.toLowerCase());
70
- if (!alreadyAdded) {
71
- entries.push({
72
- collection: 'glossary',
73
- name: term,
74
- description: `Core domain term: ${term}`,
75
- });
76
- }
77
- }
78
- }
79
- if (extracted.keyDecisions?.length) {
80
- for (const decision of extracted.keyDecisions) {
81
- entries.push({
82
- collection: 'decisions',
83
- name: truncate(decision, 80),
84
- description: decision,
85
- });
86
- }
87
- }
88
- if (extracted.tensions?.length) {
89
- for (const tension of extracted.tensions) {
90
- entries.push({
91
- collection: 'tensions',
92
- name: truncate(tension, 80),
93
- description: tension,
94
- });
95
- }
96
- }
97
- return entries;
98
- }
99
- // ── Display helpers ─────────────────────────────────────────────────────────
100
- function displayExtraction(extracted) {
101
- process.stdout.write(`\n Here's what I picked up:\n\n`);
102
- if (extracted.vision) {
103
- process.stdout.write(` ${green('\u2726')} Your product vision: ${extracted.vision}\n`);
104
- }
105
- if (extracted.audience) {
106
- process.stdout.write(` ${green('\u2726')} Your audience: ${extracted.audience}\n`);
107
- }
108
- if (extracted.techStack?.length) {
109
- process.stdout.write(` ${green('\u2726')} Tech stack: ${extracted.techStack.join(', ')}\n`);
110
- }
111
- if (extracted.keyTerms?.length) {
112
- process.stdout.write(` ${green('\u2726')} Key terms: ${extracted.keyTerms.join(', ')}\n`);
113
- }
114
- if (extracted.keyDecisions?.length) {
115
- process.stdout.write(` ${green('\u2726')} Key decisions: ${extracted.keyDecisions.join('; ')}\n`);
116
- }
117
- if (extracted.tensions?.length) {
118
- process.stdout.write(` ${green('\u2726')} Challenges: ${extracted.tensions.join('; ')}\n`);
119
- }
120
- process.stdout.write('\n');
121
- }
122
- function hasSynthesisSignal(text) {
123
- const lower = text.toLowerCase();
124
- return SYNTHESIS_SIGNALS.some((signal) => lower.includes(signal));
125
- }
13
+ import { detectSignals, mergeSignals } from './conversation-signals.js';
14
+ import { evaluateTopic, buildTopicDirective, sanitizeResponse, shouldSkipTopic, isTooSimilar } from './conversation-engine.js';
15
+ import { ONBOARDING_TOPICS, userWantsToSkip } from './onboarding-topics.js';
16
+ import { countWords, validateExtractedEntries, displayEntryExample, showCapturedSummary, batchCaptureEntries, truncate, firstNWords, } from './onboarding-shared.js';
17
+ /** Hard cap on total exchanges across all topics. */
18
+ const MAX_TOTAL_EXCHANGES = 10;
126
19
  // ── Main conversation ───────────────────────────────────────────────────────
127
20
  /**
128
- * Run the onboarding conversation: multi-turn chat, extraction, and auto-capture.
21
+ * Run the onboarding conversation: topic-by-topic coach pattern, extraction, and auto-capture.
129
22
  */
130
23
  export async function runOnboardingConversation(workspaceName) {
131
24
  trackEvent('setup_started', { mode: 'llm' });
132
- const messages = [];
133
- // Step 1: Get the LLM's opening greeting
25
+ // Initialize conversation state
26
+ const state = {
27
+ messages: [],
28
+ userMessageCount: 0,
29
+ totalUserWords: 0,
30
+ topicExchanges: {},
31
+ completedTopics: new Set(),
32
+ currentTopicId: ONBOARDING_TOPICS[0].id,
33
+ completedQA: [],
34
+ // Legacy aliases — kept for type compat during transition
35
+ phaseExchanges: {},
36
+ completedPhases: new Set(),
37
+ currentPhaseId: ONBOARDING_TOPICS[0].id,
38
+ signals: detectSignals([]),
39
+ refusalStreak: 0,
40
+ };
41
+ let totalExchanges = 0;
42
+ let emptyAttempts = 0;
43
+ const recentAssistantMessages = [];
44
+ // Step 1: Get the LLM's opening (topic 1 generates the greeting)
45
+ const firstTopic = ONBOARDING_TOPICS[0];
46
+ const openingDirective = buildTopicDirective(firstTopic, 0, ONBOARDING_TOPICS.length, [], workspaceName);
134
47
  let greeting;
135
48
  try {
136
49
  const result = await mcpCall('onboarding.chat', {
137
50
  messages: [],
138
51
  workspaceName,
52
+ phaseDirective: openingDirective,
53
+ turnNumber: 1,
54
+ totalUserWords: 0,
55
+ refusalStreak: 0,
139
56
  });
140
57
  if (!result?.content) {
141
- // LLM unavailable — fall back to deterministic conversation
142
58
  await runFallbackOnboarding(workspaceName);
143
59
  return;
144
60
  }
145
- greeting = result.content;
61
+ greeting = sanitizeResponse(result.content);
146
62
  }
147
63
  catch {
148
- // LLM unavailable — fall back to deterministic conversation
149
64
  await runFallbackOnboarding(workspaceName);
150
65
  return;
151
66
  }
152
- // Display greeting and start conversation loop
153
67
  process.stdout.write(`\n ${greeting}\n\n`);
154
- messages.push({ role: 'assistant', content: greeting });
155
- // Step 2: Multi-turn conversation (max MAX_TURNS exchanges total)
156
- let turnCount = 1; // greeting counts as turn 1
157
- let readyToExtract = false;
158
- while (turnCount < MAX_TURNS && !readyToExtract) {
68
+ state.messages.push({ role: 'assistant', content: greeting });
69
+ recentAssistantMessages.push(greeting);
70
+ // Step 2: Topic-by-topic conversation loop
71
+ let currentTopicIndex = 0;
72
+ while (currentTopicIndex < ONBOARDING_TOPICS.length && totalExchanges < MAX_TOTAL_EXCHANGES) {
73
+ const topic = ONBOARDING_TOPICS[currentTopicIndex];
74
+ state.currentTopicId = topic.id;
75
+ // DEBUG: trace loop state
76
+ if (process.env.PB_DEBUG) {
77
+ console.error(`[DEBUG] topic=${topic.id} idx=${currentTopicIndex} exchanges=${totalExchanges} words=${state.totalUserWords} skip=${shouldSkipTopic(topic, state.signals, state.totalUserWords)}`);
78
+ }
79
+ // Skip check: if the signal for this topic is already present AND we have enough content
80
+ if (shouldSkipTopic(topic, state.signals, state.totalUserWords)) {
81
+ state.completedTopics.add(topic.id);
82
+ currentTopicIndex++;
83
+ continue;
84
+ }
159
85
  // Get user input
160
86
  let userInput;
161
87
  try {
162
88
  userInput = await ask({
163
89
  message: 'You',
164
- placeholder: turnCount === 1 ? 'Tell me about your product...' : 'Continue...',
90
+ placeholder: totalExchanges === 0 ? 'Tell me about your product...' : '',
165
91
  });
166
92
  }
167
93
  catch {
168
- // User cancelled
169
- process.stdout.write(`\n ${dim('No worries! Tell me about your product anytime with')} ${bold('pb capture')}\n\n`);
94
+ process.stdout.write(`\n ${dim('No worries! Run')} ${bold('pb capture')} ${dim('anytime to add knowledge.')}\n\n`);
170
95
  return;
171
96
  }
172
97
  if (!userInput.trim()) {
173
- process.stdout.write(`\n ${dim('No worries! Tell me about your product anytime with')} ${bold('pb capture')}\n\n`);
174
- return;
98
+ emptyAttempts++;
99
+ if (emptyAttempts >= 2) {
100
+ process.stdout.write(`\n ${dim('No worries — run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
101
+ return;
102
+ }
103
+ process.stdout.write(` ${dim('Just hit Enter again to skip, or type anything to continue.')}\n\n`);
104
+ continue;
105
+ }
106
+ emptyAttempts = 0;
107
+ // Check if user wants to skip
108
+ if (userWantsToSkip(userInput) && state.totalUserWords > 10) {
109
+ break;
175
110
  }
176
- messages.push({ role: 'user', content: userInput });
177
- turnCount++;
178
- // Get LLM response
111
+ // Update state
112
+ state.messages.push({ role: 'user', content: userInput });
113
+ state.userMessageCount++;
114
+ state.totalUserWords += countWords(userInput);
115
+ state.topicExchanges[topic.id] = (state.topicExchanges[topic.id] ?? 0) + 1;
116
+ totalExchanges++;
117
+ // Detect refusals (very short non-answers)
118
+ const wordCount = countWords(userInput);
119
+ if (wordCount <= 2) {
120
+ state.refusalStreak++;
121
+ }
122
+ else {
123
+ state.refusalStreak = 0;
124
+ }
125
+ // Update heuristic signals
126
+ state.signals = detectSignals(state.messages);
127
+ // Get LLM response with topic directive
128
+ const topicDirective = buildTopicDirective(topic, currentTopicIndex, ONBOARDING_TOPICS.length, state.completedQA, workspaceName);
129
+ let topicComplete = false;
179
130
  try {
180
131
  const result = await mcpCall('onboarding.chat', {
181
- messages,
132
+ messages: state.messages,
182
133
  workspaceName,
134
+ phaseDirective: topicDirective,
135
+ turnNumber: totalExchanges + 1,
136
+ totalUserWords: state.totalUserWords,
137
+ refusalStreak: state.refusalStreak,
183
138
  });
184
139
  if (result?.content) {
185
- process.stdout.write(`\n ${result.content}\n\n`);
186
- messages.push({ role: 'assistant', content: result.content });
187
- // Check if LLM signals readiness to synthesize
188
- if (hasSynthesisSignal(result.content)) {
189
- readyToExtract = true;
140
+ // Merge LLM-reported signals with heuristic signals
141
+ if (result.signals) {
142
+ state.signals = mergeSignals(state.signals, result.signals);
190
143
  }
191
- }
192
- else {
193
- // LLM returned nothing — extract what we have
194
- readyToExtract = true;
144
+ // Read LLM's topic completion judgment
145
+ topicComplete = result.topicComplete ?? false;
146
+ // Post-process response
147
+ let displayMessage = sanitizeResponse(result.content);
148
+ // Detect repetition — if too similar, bump refusal streak for next call
149
+ if (isTooSimilar(displayMessage, recentAssistantMessages)) {
150
+ state.refusalStreak++;
151
+ }
152
+ process.stdout.write(`\n ${displayMessage}\n\n`);
153
+ state.messages.push({ role: 'assistant', content: displayMessage });
154
+ recentAssistantMessages.push(displayMessage);
195
155
  }
196
156
  }
197
- catch {
198
- // LLM call failed — extract what we have
199
- readyToExtract = true;
157
+ catch (err) {
158
+ // LLM call failed — try to continue with what we have
159
+ if (process.env.PB_DEBUG)
160
+ console.error(`[DEBUG] LLM catch, breaking. Error:`, err);
161
+ break;
162
+ }
163
+ // Evaluate topic completion: LLM judgment + heuristic backup + forced advancement
164
+ const evalResult = evaluateTopic(topic, state, topicComplete);
165
+ if (process.env.PB_DEBUG) {
166
+ console.error(`[DEBUG] eval: complete=${evalResult.complete} forced=${evalResult.forced} skip=${evalResult.skip} topicComplete=${topicComplete} topicExchanges=${state.topicExchanges[topic.id]}`);
167
+ }
168
+ if (evalResult.complete) {
169
+ // Accumulate the last Q&A for context in later topics
170
+ const lastAssistant = recentAssistantMessages[recentAssistantMessages.length - 1] ?? '';
171
+ state.completedQA.push({
172
+ topicId: topic.id,
173
+ question: lastAssistant,
174
+ answer: userInput,
175
+ });
176
+ state.completedTopics.add(topic.id);
177
+ currentTopicIndex++;
200
178
  }
179
+ // else: stay in current topic, loop again
180
+ }
181
+ // Hard floor: barely any content — offer manual capture
182
+ // Threshold: 3 words means basically no real content. Previous threshold of 10
183
+ // was too aggressive — 3 short answers can be valid (e.g., "a finance app" + "me" = 4 words).
184
+ if (state.totalUserWords < 3 && state.userMessageCount > 0) {
185
+ process.stdout.write(`\n ${dim('No problem — you can add knowledge at your own pace with')} ${bold('pb capture')}\n\n`);
186
+ trackEvent('setup_completed', { capturedCount: 0, reason: 'insufficient_content' });
187
+ return;
201
188
  }
202
- trackEvent('first_capture_prompted', { mode: 'llm', turnCount });
189
+ trackEvent('first_capture_prompted', { mode: 'llm', exchanges: totalExchanges });
203
190
  // Step 3: Extract structured data from conversation
204
- if (messages.filter((m) => m.role === 'user').length === 0) {
205
- // No user messages nothing to extract
206
- process.stdout.write(`\n ${dim('No worries! Tell me about your product anytime with')} ${bold('pb capture')}\n\n`);
191
+ if (state.messages.filter((m) => m.role === 'user').length === 0) {
192
+ process.stdout.write(`\n ${dim('No worries! Run')} ${bold('pb capture')} ${dim('anytime to add knowledge.')}\n\n`);
207
193
  return;
208
194
  }
209
- let extraction;
195
+ let entriesToCapture;
210
196
  try {
211
197
  const result = await mcpCall('onboarding.chat', {
212
- messages,
198
+ messages: state.messages,
213
199
  workspaceName,
214
200
  mode: 'extract',
215
201
  });
216
- if (!result?.extraction?.vision) {
202
+ if (!result?.entries?.length) {
217
203
  process.stdout.write(`\n ${dim("Couldn't organize your answers just yet. Try")} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
218
204
  return;
219
205
  }
220
- extraction = result.extraction;
206
+ entriesToCapture = validateExtractedEntries(result.entries).slice(0, 5);
221
207
  }
222
208
  catch {
223
209
  process.stdout.write(`\n ${dim("Couldn't organize your answers just yet. Try")} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
224
210
  return;
225
211
  }
226
- // Step 4: Display extracted items and ask for approval
227
- displayExtraction(extraction);
228
- let approved;
229
- try {
230
- approved = await confirm({
231
- message: 'Ready to save these to your product brain?',
232
- initialValue: true,
233
- });
234
- }
235
- catch {
236
- process.stdout.write(`\n ${dim('No problem. Your answers are safe — run')} ${bold('pb capture')} ${dim('anytime.')}\n\n`);
237
- return;
238
- }
239
- if (!approved) {
240
- process.stdout.write(`\n ${dim('No problem. Your answers are safe — run')} ${bold('pb capture')} ${dim('anytime.')}\n\n`);
241
- return;
242
- }
243
- // Step 5: Batch-capture entries via chain.createEntry
244
- const entriesToCapture = extractionToEntries(extraction);
245
212
  if (entriesToCapture.length === 0) {
246
- process.stdout.write(`\n ${dim('Nothing to save. Try')} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
213
+ process.stdout.write(`\n ${dim('Nothing to save yet. Try')} ${bold('pb capture')} ${dim('to add knowledge manually.')}\n\n`);
247
214
  return;
248
215
  }
249
- let capturedCount = 0;
250
- const errors = [];
251
- for (const entry of entriesToCapture) {
216
+ // Step 4: Show ONE example with schema, offer to browse more
217
+ const itemCount = entriesToCapture.length;
218
+ process.stdout.write(`\n From this conversation, I'd remember ${bold(String(itemCount))} item${itemCount === 1 ? '' : 's'}.\n`);
219
+ process.stdout.write(` Here's an example:\n\n`);
220
+ displayEntryExample(entriesToCapture[0]);
221
+ let exampleIndex = 1;
222
+ let shouldSave = false;
223
+ // eslint-disable-next-line no-constant-condition
224
+ while (true) {
225
+ const hasMoreExamples = exampleIndex < entriesToCapture.length;
226
+ const options = [
227
+ { value: 'save', label: 'Save all to my product brain', hint: `${itemCount} item${itemCount === 1 ? '' : 's'}` },
228
+ ];
229
+ if (hasMoreExamples) {
230
+ options.push({ value: 'another', label: 'Show another example' });
231
+ }
232
+ options.push({ value: 'skip', label: 'Not right now' });
233
+ let choice;
252
234
  try {
253
- await mcpCallWithSession('chain.createEntry', {
254
- collectionSlug: entry.collection,
255
- name: entry.name,
256
- status: 'active',
257
- data: { description: entry.description },
235
+ choice = await select({
236
+ message: '',
237
+ options,
258
238
  });
259
- capturedCount++;
260
239
  }
261
- catch (err) {
262
- const msg = err instanceof Error ? err.message : String(err);
263
- errors.push(`${entry.name}: ${msg}`);
240
+ catch {
241
+ process.stdout.write(`\n ${dim('No problem run')} ${bold('pb capture')} ${dim('anytime.')}\n\n`);
242
+ return;
243
+ }
244
+ if (choice === 'skip') {
245
+ process.stdout.write(`\n ${dim('No problem — run')} ${bold('pb capture')} ${dim('anytime to add more.')}\n\n`);
246
+ return;
247
+ }
248
+ if (choice === 'save') {
249
+ shouldSave = true;
250
+ break;
251
+ }
252
+ if (choice === 'another') {
253
+ displayEntryExample(entriesToCapture[exampleIndex]);
254
+ exampleIndex++;
264
255
  }
265
256
  }
257
+ if (!shouldSave)
258
+ return;
259
+ // Step 5: Batch-capture entries
260
+ const { capturedCount, errors } = await batchCaptureEntries(entriesToCapture);
266
261
  // Step 6: Report results
267
262
  if (capturedCount > 0) {
268
263
  process.stdout.write(`\n ${green(icons.pass)} Saved ${capturedCount} item${capturedCount === 1 ? '' : 's'} to your product brain.\n`);
269
264
  trackEvent('capture_completed', { mode: 'llm', count: capturedCount });
270
265
  }
271
266
  if (errors.length > 0) {
272
- process.stdout.write(`\n ${dim(`${errors.length} item${errors.length === 1 ? '' : 's'} couldn't be saved:`)}\n`);
273
- for (const err of errors.slice(0, 3)) {
274
- process.stdout.write(` ${dim(err)}\n`);
275
- }
267
+ process.stdout.write(`\n ${dim(`${errors.length} couldn't be saved.`)}\n`);
276
268
  }
277
- // Step 7: Auto-retrieval proof (BR-141, PRI-58, FEAT-149)
278
- await showRetrievalProof();
279
- // Step 8: Closing message with community link
280
- process.stdout.write(` ${dim('Join the community:')} ${bold('community.productbrain.io')}\n`);
281
- process.stdout.write(` ${dim('Your product brain gets smarter every time you capture.')}\n\n`);
282
- process.stdout.write(` ${dim('Explore with')} ${bold('pb orient -b')} ${dim('or add more with')} ${bold('pb capture')}\n\n`);
269
+ // Step 7: Deterministic proof + closing
270
+ showCapturedSummary(entriesToCapture, capturedCount);
271
+ process.stdout.write(` ${dim('Run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
283
272
  trackEvent('setup_completed', { capturedCount });
284
273
  }
285
- // ── Auto-retrieval proof ──────────────────────────────────────────────────
286
- async function showRetrievalProof() {
287
- try {
288
- const orient = await mcpCall('orient', { brief: true });
289
- const items = orient?.sections?.flatMap((s) => s.items ?? []).filter((i) => i.name) ?? [];
290
- if (items.length > 0) {
291
- process.stdout.write(`\n ${bold('Here\'s how your product brain will use this:')}\n\n`);
292
- for (const item of items.slice(0, 5)) {
293
- process.stdout.write(` ${dim(icons.dot)} ${item.name}\n`);
294
- }
295
- if (items.length > 5) {
296
- process.stdout.write(` ${dim(`...and ${items.length - 5} more`)}\n`);
297
- }
298
- process.stdout.write('\n');
299
- }
300
- }
301
- catch {
302
- // Retrieval proof is best-effort — never block onboarding
303
- }
304
- }
305
- // ── Deterministic fallback ────────────────────────────────────────────────
274
+ // ── Deterministic fallback ──────────────────────────────────────────��─────
306
275
  const FALLBACK_QUESTIONS = [
307
276
  { message: 'What are you building?', placeholder: 'A tool for...' },
308
277
  { message: 'Who is it for?', placeholder: 'Developers, designers, teams...' },
309
- { message: 'What\'s the biggest challenge right now?', placeholder: 'Scaling, onboarding, pricing...' },
278
+ { message: "What's the biggest challenge right now?", placeholder: 'Scaling, onboarding, pricing...' },
310
279
  ];
311
280
  /**
312
281
  * Deterministic fallback when LLM is unavailable.
313
- * Asks 3 hardcoded questions and maps answers to the same capture pipeline.
314
282
  */
315
283
  export async function runFallbackOnboarding(workspaceName) {
316
284
  trackEvent('setup_started', { mode: 'fallback' });
@@ -331,13 +299,36 @@ export async function runFallbackOnboarding(workspaceName) {
331
299
  return;
332
300
  }
333
301
  trackEvent('first_capture_prompted', { mode: 'fallback' });
334
- // Build extraction from answers
335
- const extraction = {
336
- vision: answers[0],
337
- audience: answers[1] || null,
338
- tensions: answers[2] ? [answers[2]] : null,
339
- };
340
- displayExtraction(extraction);
302
+ const entriesToCapture = [];
303
+ if (answers[0]) {
304
+ entriesToCapture.push({
305
+ collection: 'strategy',
306
+ name: 'Product Vision',
307
+ description: answers[0],
308
+ typeLabel: "What you're building",
309
+ });
310
+ }
311
+ if (answers[1]) {
312
+ entriesToCapture.push({
313
+ collection: 'audiences',
314
+ name: firstNWords(answers[1], 6),
315
+ description: answers[1],
316
+ typeLabel: "Who it's for",
317
+ });
318
+ }
319
+ if (answers[2]) {
320
+ entriesToCapture.push({
321
+ collection: 'tensions',
322
+ name: truncate(answers[2], 120),
323
+ description: answers[2],
324
+ typeLabel: "A challenge you're facing",
325
+ });
326
+ }
327
+ // Show extraction
328
+ process.stdout.write('\n');
329
+ for (const entry of entriesToCapture) {
330
+ displayEntryExample(entry);
331
+ }
341
332
  let approved;
342
333
  try {
343
334
  approved = await confirm({ message: 'Ready to save these to your product brain?', initialValue: true });
@@ -347,27 +338,13 @@ export async function runFallbackOnboarding(workspaceName) {
347
338
  }
348
339
  if (!approved)
349
340
  return;
350
- const entriesToCapture = extractionToEntries(extraction);
351
- let capturedCount = 0;
352
- for (const entry of entriesToCapture) {
353
- try {
354
- await mcpCallWithSession('chain.createEntry', {
355
- collectionSlug: entry.collection,
356
- name: entry.name,
357
- status: 'active',
358
- data: { description: entry.description },
359
- });
360
- capturedCount++;
361
- }
362
- catch { /* continue on error */ }
363
- }
341
+ const { capturedCount } = await batchCaptureEntries(entriesToCapture);
364
342
  if (capturedCount > 0) {
365
343
  process.stdout.write(`\n ${green(icons.pass)} Saved ${capturedCount} item${capturedCount === 1 ? '' : 's'} to your product brain.\n`);
366
344
  trackEvent('capture_completed', { mode: 'fallback', count: capturedCount });
367
345
  }
368
- await showRetrievalProof();
369
- process.stdout.write(` ${dim('Join the community:')} ${bold('community.productbrain.io')}\n`);
370
- process.stdout.write(` ${dim('Your product brain gets smarter every time you capture.')}\n\n`);
346
+ showCapturedSummary(entriesToCapture, capturedCount);
347
+ process.stdout.write(` ${dim('Run')} ${bold('pb capture')} ${dim('anytime to teach your AI tools more.')}\n\n`);
371
348
  trackEvent('setup_completed', { mode: 'fallback', capturedCount });
372
349
  }
373
350
  //# sourceMappingURL=onboarding.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC/H,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EACL,UAAU,EACV,wBAAwB,EAAE,mBAAmB,EAAE,mBAAmB,EAClE,mBAAmB,EACnB,QAAQ,EAAE,WAAW,GAItB,MAAM,wBAAwB,CAAC;AAEhC,qDAAqD;AACrD,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAE/B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,aAAqB;IACnE,UAAU,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE7C,gCAAgC;IAChC,MAAM,KAAK,GAAsB;QAC/B,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,CAAC;QACnB,cAAc,EAAE,CAAC;QACjB,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,IAAI,GAAG,EAAE;QAC1B,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;QACvC,WAAW,EAAE,EAAE;QACf,0DAA0D;QAC1D,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,IAAI,GAAG,EAAE;QAC1B,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE;QACvC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;QAC1B,aAAa,EAAE,CAAC;KACjB,CAAC;IAEF,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,uBAAuB,GAAa,EAAE,CAAC;IAE7C,iEAAiE;IACjE,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,EAAE,CAAC,EAAE,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;IAEzG,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAA8B,iBAAiB,EAAE;YAC3E,QAAQ,EAAE,EAAE;YACZ,aAAa;YACb,cAAc,EAAE,gBAAgB;YAChC,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,CAAC;YACjB,aAAa,EAAE,CAAC;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YACrB,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,QAAQ,MAAM,CAAC,CAAC;IAC5C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9D,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvC,2CAA2C;IAC3C,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,OAAO,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,IAAI,cAAc,GAAG,mBAAmB,EAAE,CAAC;QAC5F,MAAM,KAAK,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QACnD,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC,EAAE,CAAC;QAEhC,0BAA0B;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,EAAE,QAAQ,iBAAiB,cAAc,cAAc,UAAU,KAAK,CAAC,cAAc,SAAS,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACpM,CAAC;QAED,yFAAyF;QACzF,IAAI,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpC,iBAAiB,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,iBAAiB;QACjB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,GAAG,CAAC;gBACpB,OAAO,EAAE,KAAK;gBACd,WAAW,EAAE,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE;aACzE,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,2BAA2B,CAAC,MAAM,CAC9F,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,MAAM,CAC1G,CAAC;gBACF,OAAO;YACT,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,6DAA6D,CAAC,MAAM,CAAC,CAAC;YACpG,SAAS;QACX,CAAC;QAED,aAAa,GAAG,CAAC,CAAC;QAElB,8BAA8B;QAC9B,IAAI,eAAe,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC;YAC5D,MAAM;QACR,CAAC;QAED,eAAe;QACf,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzB,KAAK,CAAC,cAAc,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3E,cAAc,EAAE,CAAC;QAEjB,2CAA2C;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,2BAA2B;QAC3B,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE9C,wCAAwC;QACxC,MAAM,cAAc,GAAG,mBAAmB,CACxC,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,MAAM,EAClD,KAAK,CAAC,WAAW,EAAE,aAAa,CACjC,CAAC;QAEF,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAA8B,iBAAiB,EAAE;gBAC3E,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,aAAa;gBACb,cAAc,EAAE,cAAc;gBAC9B,UAAU,EAAE,cAAc,GAAG,CAAC;gBAC9B,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CAAC;YAEH,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,oDAAoD;gBACpD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC9D,CAAC;gBAED,uCAAuC;gBACvC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC;gBAE9C,wBAAwB;gBACxB,IAAI,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEtD,wEAAwE;gBACxE,IAAI,YAAY,CAAC,cAAc,EAAE,uBAAuB,CAAC,EAAE,CAAC;oBAC1D,KAAK,CAAC,aAAa,EAAE,CAAC;gBACxB,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,cAAc,MAAM,CAAC,CAAC;gBAClD,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBACpE,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,sDAAsD;YACtD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;YACpF,MAAM;QACR,CAAC;QAED,kFAAkF;QAClF,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,0BAA0B,UAAU,CAAC,QAAQ,WAAW,UAAU,CAAC,MAAM,SAAS,UAAU,CAAC,IAAI,kBAAkB,aAAa,mBAAmB,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACrM,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,sDAAsD;YACtD,MAAM,aAAa,GAAG,uBAAuB,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACxF,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC;gBACrB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,QAAQ,EAAE,aAAa;gBACvB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YAEH,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACpC,iBAAiB,EAAE,CAAC;QACtB,CAAC;QACD,0CAA0C;IAC5C,CAAC;IAED,wDAAwD;IACxD,+EAA+E;IAC/E,8FAA8F;IAC9F,IAAI,KAAK,CAAC,cAAc,GAAG,CAAC,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAC3D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,0DAA0D,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CACnG,CAAC;QACF,UAAU,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACpF,OAAO;IACT,CAAC;IAED,UAAU,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAEjF,oDAAoD;IACpD,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,2BAA2B,CAAC,MAAM,CAC9F,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,gBAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAiC,iBAAiB,EAAE;YAC9E,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa;YACb,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,8CAA8C,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,4BAA4B,CAAC,MAAM,CAC5H,CAAC;YACF,OAAO;QACT,CAAC;QAED,gBAAgB,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,GAAG,CAAC,8CAA8C,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,4BAA4B,CAAC,MAAM,CAC5H,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,0BAA0B,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;QAC9H,OAAO;IACT,CAAC;IAED,6DAA6D;IAC7D,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACjI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEjD,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,iDAAiD;IACjD,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,eAAe,GAAG,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAG/D,MAAM,OAAO,GAAsE;YACjF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,GAAG,SAAS,QAAQ,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;SACjH,CAAC;QACF,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAExD,IAAI,MAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,MAAM,CAAoB;gBACvC,OAAO,EAAE,EAAE;gBACX,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACpG,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAChH,OAAO;QACT,CAAC;QAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM;QACR,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,mBAAmB,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;YACpD,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,gCAAgC;IAChC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAE9E,yBAAyB;IACzB,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,aAAa,QAAQ,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2BAA2B,CACjH,CAAC;QACF,UAAU,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAED,wCAAwC;IACxC,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC;IACjH,UAAU,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,8EAA8E;AAE9E,MAAM,kBAAkB,GAAG;IACzB,EAAE,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,eAAe,EAAE;IACnE,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,iCAAiC,EAAE;IAC7E,EAAE,OAAO,EAAE,yCAAyC,EAAE,WAAW,EAAE,iCAAiC,EAAE;CACvG,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,aAAqB;IAC/D,UAAU,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,sBAAsB,aAAa,GAAG,CAAC,IAAI,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAEhH,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7E,IAAI,MAAM,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,wCAAwC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvG,OAAO;IACT,CAAC;IAED,UAAU,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IAE3D,MAAM,gBAAgB,GAAmB,EAAE,CAAC;IAC5C,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,gBAAgB,CAAC,IAAI,CAAC;YACpB,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACvB,SAAS,EAAE,sBAAsB;SAClC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,gBAAgB,CAAC,IAAI,CAAC;YACpB,UAAU,EAAE,WAAW;YACvB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACvB,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACf,gBAAgB,CAAC,IAAI,CAAC;YACpB,UAAU,EAAE,UAAU;YACtB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;YAC/B,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YACvB,SAAS,EAAE,2BAA2B;SACvC,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;QACrC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,QAAiB,CAAC;IACtB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,4CAA4C,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1G,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;IAEtE,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,aAAa,QAAQ,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,2BAA2B,CAAC,CAAC;QACvI,UAAU,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,mBAAmB,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;IACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,sCAAsC,CAAC,MAAM,CAAC,CAAC;IACjH,UAAU,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;AACrE,CAAC"}
@@ -30,5 +30,10 @@ export declare function deleteProfile(name: string): void;
30
30
  * Returns null if no profile or config is available.
31
31
  */
32
32
  export declare function resolveProfileConfig(): ProfileConfig | null;
33
+ /**
34
+ * Resolve config for a specific named profile.
35
+ * Returns null if the profile doesn't exist.
36
+ */
37
+ export declare function resolveNamedProfileConfig(name: string): ProfileConfig | null;
33
38
  export { PROFILES_DIR, ACTIVE_PROFILE_PATH, LEGACY_ENV_PATH, HOME_CONFIG_DIR };
34
39
  //# sourceMappingURL=profiles.d.ts.map