@whisperr/wizard 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +27 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -687,7 +687,6 @@ async function runIntegrationAgent(opts) {
|
|
|
687
687
|
let costUsd = 0;
|
|
688
688
|
const summaries = [];
|
|
689
689
|
progress?.onPhase?.("Installing the SDK & wiring identify()");
|
|
690
|
-
const verifyHint = playbook.verifyCommand ? ` Finish with a single \`${playbook.verifyCommand}\` and fix only what it flags.` : "";
|
|
691
690
|
const corePrompt = [
|
|
692
691
|
`Integrate the Whisperr ${playbook.target.displayName} SDK \u2014 CORE SETUP ONLY.`,
|
|
693
692
|
`Project root: ${repoPath}`,
|
|
@@ -695,10 +694,16 @@ async function runIntegrationAgent(opts) {
|
|
|
695
694
|
"Do exactly these, then stop:",
|
|
696
695
|
`1. Add the Whisperr SDK dependency and install it (${playbook.packageRef}).`,
|
|
697
696
|
"2. Initialize it once at app startup with the key + base URL below.",
|
|
698
|
-
"3. Wire identify()
|
|
699
|
-
"
|
|
697
|
+
"3. Wire identify() at the PRIMARY place the user becomes authenticated",
|
|
698
|
+
" (after a successful login) and on session restore at app startup; call",
|
|
699
|
+
" reset() on logout. Do NOT enumerate every auth method \u2014 one primary",
|
|
700
|
+
" login path plus session restore is enough. Keep channels minimal: pass",
|
|
701
|
+
" email if it's readily at hand; phone/push are optional, skip them if not",
|
|
702
|
+
" obvious. Do not go hunting through every auth file.",
|
|
700
703
|
"",
|
|
701
|
-
"
|
|
704
|
+
"This is a real app \u2014 be quick and decisive, aim to finish in ~15 steps.",
|
|
705
|
+
"Do NOT instrument product events yet \u2014 that is a separate step. Do not run",
|
|
706
|
+
"the analyzer or build; the human will review the diff.",
|
|
702
707
|
"",
|
|
703
708
|
"----- IDENTIFY -----",
|
|
704
709
|
renderIdentifyBrief(manifest),
|
|
@@ -709,7 +714,7 @@ async function runIntegrationAgent(opts) {
|
|
|
709
714
|
systemPrompt: systemPrompt6,
|
|
710
715
|
repoPath,
|
|
711
716
|
model: config.model,
|
|
712
|
-
maxTurns:
|
|
717
|
+
maxTurns: 35,
|
|
713
718
|
progress
|
|
714
719
|
});
|
|
715
720
|
costUsd += core.costUsd;
|
|
@@ -991,7 +996,15 @@ Flutter is live today; ${theme.bright(
|
|
|
991
996
|
}
|
|
992
997
|
const spin = p.spinner();
|
|
993
998
|
let phaseLabel = "Integrating";
|
|
994
|
-
|
|
999
|
+
let lastLine = "";
|
|
1000
|
+
const startedAt = Date.now();
|
|
1001
|
+
spin.start(theme.bright(phaseLabel));
|
|
1002
|
+
const tick = setInterval(() => {
|
|
1003
|
+
const secs = Math.round((Date.now() - startedAt) / 1e3);
|
|
1004
|
+
spin.message(
|
|
1005
|
+
theme.bright(phaseLabel) + theme.muted(` \xB7 ${secs}s`) + (lastLine ? theme.muted(` \u2014 ${lastLine}`) : "")
|
|
1006
|
+
);
|
|
1007
|
+
}, 1e3);
|
|
995
1008
|
const outcome = await runIntegrationAgent({
|
|
996
1009
|
repoPath,
|
|
997
1010
|
config,
|
|
@@ -1001,18 +1014,21 @@ Flutter is live today; ${theme.bright(
|
|
|
1001
1014
|
progress: {
|
|
1002
1015
|
onPhase(label) {
|
|
1003
1016
|
phaseLabel = label;
|
|
1004
|
-
|
|
1017
|
+
lastLine = "";
|
|
1005
1018
|
},
|
|
1006
1019
|
onActivity(line) {
|
|
1007
|
-
|
|
1020
|
+
lastLine = line;
|
|
1008
1021
|
}
|
|
1009
1022
|
}
|
|
1010
1023
|
}).catch((err) => {
|
|
1011
|
-
spin.stop(theme.alert("Integration stopped"));
|
|
1012
1024
|
p.log.error(err.message);
|
|
1013
1025
|
return null;
|
|
1014
1026
|
});
|
|
1015
|
-
|
|
1027
|
+
clearInterval(tick);
|
|
1028
|
+
if (!outcome) {
|
|
1029
|
+
spin.stop(theme.alert("Integration stopped"));
|
|
1030
|
+
return 1;
|
|
1031
|
+
}
|
|
1016
1032
|
const stopLabel = !outcome.coreOk ? theme.warn("Stopped early \u2014 partial setup is in your working tree") : outcome.eventsComplete ? theme.success("Integration complete") : theme.success("Core integration done") + theme.muted(" \u2014 some events left as follow-ups");
|
|
1017
1033
|
spin.stop(stopLabel);
|
|
1018
1034
|
const files = await changedFiles(repoPath, checkpoint);
|
|
@@ -1193,7 +1209,7 @@ async function main() {
|
|
|
1193
1209
|
return;
|
|
1194
1210
|
}
|
|
1195
1211
|
if ("version" in parsed) {
|
|
1196
|
-
console.log("0.1.
|
|
1212
|
+
console.log("0.1.3");
|
|
1197
1213
|
return;
|
|
1198
1214
|
}
|
|
1199
1215
|
try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@whisperr/wizard",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Whisperr Wizard — one command to integrate the Whisperr SDK into your app. Authenticates with your onboarded account and uses an AI coding agent to wire up identify() and your business events automatically.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|