instar 1.2.13 → 1.2.14

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.
@@ -1 +1 @@
1
- {"version":3,"file":"codex-driver.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-wizard/codex-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgBH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA8VD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC/E"}
1
+ {"version":3,"file":"codex-driver.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-wizard/codex-driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAeH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA+ZD;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiC/E"}
@@ -112,13 +112,46 @@ const FALLBACK_NARRATIVES = {
112
112
  autonomy: 'A starting point — you can change this anytime.',
113
113
  messaging: 'Messaging is the interface you\'ll use day-to-day.',
114
114
  };
115
+ /**
116
+ * Spinner state for the composing indicator. Animates a single line
117
+ * during the codex narrative call so the user sees feedback instead
118
+ * of a silent terminal. Cleared (via carriage-return + spaces)
119
+ * before the narrative paragraph is printed.
120
+ */
121
+ const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
122
+ function startSpinner(label) {
123
+ let i = 0;
124
+ const tty = process.stdout.isTTY;
125
+ if (!tty) {
126
+ process.stdout.write(` ${label}\n`);
127
+ return { stop: () => { } };
128
+ }
129
+ const render = () => {
130
+ process.stdout.write(`\r ${pc.cyan(SPINNER_FRAMES[i % SPINNER_FRAMES.length])} ${pc.dim(label)}`);
131
+ i++;
132
+ };
133
+ render();
134
+ const handle = setInterval(render, 100);
135
+ return {
136
+ stop: () => {
137
+ clearInterval(handle);
138
+ // Clear the spinner line so the narrative paragraph renders cleanly.
139
+ process.stdout.write(`\r${' '.repeat(label.length + 6)}\r`);
140
+ },
141
+ };
142
+ }
115
143
  /**
116
144
  * Run `codex exec` for one narrative-generation turn. Returns the
117
145
  * text body of Codex's response (stdout), or null on failure /
118
146
  * timeout. Bounded to a short per-turn timeout so a flaky network
119
147
  * doesn't stall the wizard.
148
+ *
149
+ * Shows a spinner while the call is running so the user sees
150
+ * visible feedback during the latency window (avoids the
151
+ * "is-it-frozen?" reflex that triggers buffered-Enter bugs).
120
152
  */
121
153
  function runCodexNarrative(codexPath, prompt, options) {
154
+ const spinner = startSpinner('composing…');
122
155
  try {
123
156
  const result = spawnSync(codexPath, [
124
157
  'exec',
@@ -153,6 +186,9 @@ function runCodexNarrative(codexPath, prompt, options) {
153
186
  catch {
154
187
  return null;
155
188
  }
189
+ finally {
190
+ spinner.stop();
191
+ }
156
192
  }
157
193
  /**
158
194
  * Prompt the user with readline. Returns the trimmed answer (may be
@@ -169,10 +205,23 @@ async function askUser(promptText) {
169
205
  }
170
206
  /**
171
207
  * Render a state to the user: narrative paragraph (LLM-generated) +
172
- * structural prompt (verbatim). Then read the answer.
208
+ * structural prompt (verbatim). Then read the answer, validating it
209
+ * against the state's `validate` function. On invalid input, prints
210
+ * the validator's friendly retry message and re-asks WITHOUT
211
+ * regenerating the narrative paragraph (cheap loop, no extra codex
212
+ * exec calls). Returns the first answer that passes validation.
213
+ *
214
+ * This is the structural answer to the buffered-Enter bug from
215
+ * v1.2.13 — the user could press Enter during the silent codex
216
+ * narrative window, that Enter would buffer in stdin, and the next
217
+ * readline would consume it as an empty answer to a required field
218
+ * (silently defaulting agent-name to "agent"). With validate +
219
+ * retry-loop, an empty submission to a required field surfaces a
220
+ * friendly reprompt instead of accepting the default.
173
221
  */
174
222
  async function renderNarrativeState(state, answers, options) {
175
- // Generate narrative
223
+ // Generate narrative once per state entry (re-asks on validation
224
+ // failure skip this and just re-print the question).
176
225
  let narrative = null;
177
226
  if (options.enableNarrative !== false) {
178
227
  const prompt = narrativeFor(state.id, answers, { projectDir: options.projectDir });
@@ -193,6 +242,23 @@ async function renderNarrativeState(state, answers, options) {
193
242
  : '';
194
243
  if (placeholderHint)
195
244
  console.log(placeholderHint);
245
+ // Retry loop: at most 5 attempts so a wedged input doesn't trap
246
+ // the wizard forever. After 5 invalid attempts we let the answer
247
+ // through; the state machine's `next` function still has its own
248
+ // resolveChoice fallback so the wizard doesn't crash.
249
+ for (let attempt = 0; attempt < 5; attempt++) {
250
+ const answer = await askUser(' > ');
251
+ if (!state.validate)
252
+ return answer;
253
+ const validationMsg = state.validate(answer);
254
+ if (validationMsg === null)
255
+ return answer;
256
+ console.log();
257
+ console.log(pc.yellow(` ${validationMsg}`));
258
+ console.log();
259
+ }
260
+ // Last-resort: take whatever was last typed even if invalid. The
261
+ // state machine's `next` should still produce a usable transition.
196
262
  return askUser(' > ');
197
263
  }
198
264
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"codex-driver.js","sourceRoot":"","sources":["../../../src/commands/setup-wizard/codex-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-driver.js","sourceRoot":"","sources":["../../../src/commands/setup-wizard/codex-driver.ts"],"names":[],"mappings":"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"}
@@ -53,6 +53,7 @@ export interface NarrativeState {
53
53
  input: {
54
54
  kind: 'text';
55
55
  placeholder?: string;
56
+ required?: boolean;
56
57
  } | {
57
58
  kind: 'choice';
58
59
  choices: Array<{
@@ -60,6 +61,16 @@ export interface NarrativeState {
60
61
  label: string;
61
62
  }>;
62
63
  };
64
+ /**
65
+ * Validate the user's raw answer BEFORE the driver routes it through
66
+ * `next`. Return `null` to accept; return a friendly message to
67
+ * surface to the user and re-render the same state. This is how
68
+ * the wizard catches buffered-Enter empty submissions on required
69
+ * fields and unmatched choice inputs — surfaces an "I think
70
+ * something slipped through, try again" reprompt instead of
71
+ * silently defaulting.
72
+ */
73
+ validate?: (answer: string) => string | null;
63
74
  /** Where to go next based on the user's answer. Driver invokes this. */
64
75
  next: (answer: string, answers: WizardAnswers) => {
65
76
  state: string;
@@ -92,6 +103,21 @@ export declare function resolveChoice(answer: string, choices: Array<{
92
103
  value: string;
93
104
  label: string;
94
105
  }>): string | null;
106
+ /**
107
+ * Standard validator: require non-empty trimmed text. Surfaces a
108
+ * friendly reprompt when the user submits whitespace-only (the
109
+ * classic buffered-Enter problem).
110
+ */
111
+ export declare function requireNonEmpty(fieldLabel: string): (answer: string) => string | null;
112
+ /**
113
+ * Standard validator for a choice prompt: surfaces a friendly retry
114
+ * when the user's input matches none of the offered choices (by
115
+ * number, value, or label prefix).
116
+ */
117
+ export declare function requireChoice(choices: Array<{
118
+ value: string;
119
+ label: string;
120
+ }>): (answer: string) => string | null;
95
121
  /**
96
122
  * Build the wizard state machine for a fresh project-bound install
97
123
  * (the most common entry point — and the one observed broken in the
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-wizard/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,UAAU,GACV,wBAAwB,GACxB,wBAAwB,GACxB,qBAAqB,GACrB,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,eAAe,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,uBAAuB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EACD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACzE,wEAAwE;IACxE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;KAAE,CAAC;CACtG;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,MAAM,GAAG,IAAI,CAYf;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAuNtE;AAED,eAAO,MAAM,aAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../../src/commands/setup-wizard/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,UAAU,GACV,wBAAwB,GACxB,wBAAwB,GACxB,qBAAqB,GACrB,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,eAAe,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,SAAS,GAAG,uBAAuB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,uBAAuB,CAAC;IAC9B;;;;;OAKG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EACD;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAC1D;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IACzE;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC7C,wEAAwE;IACxE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;KAAE,CAAC;CACtG;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,MAAM,CAAC;CAC1C;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,WAAW,GAAG,aAAa,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,MAAM,GAAG,IAAI,CAYf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAOrF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAOnC;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAwOtE;AAED,eAAO,MAAM,aAAa,YAAY,CAAC"}
@@ -39,6 +39,32 @@ export function resolveChoice(answer, choices) {
39
39
  }
40
40
  return null;
41
41
  }
42
+ /**
43
+ * Standard validator: require non-empty trimmed text. Surfaces a
44
+ * friendly reprompt when the user submits whitespace-only (the
45
+ * classic buffered-Enter problem).
46
+ */
47
+ export function requireNonEmpty(fieldLabel) {
48
+ return (answer) => {
49
+ if (answer.trim().length === 0) {
50
+ return `That looked blank — did an extra Enter slip through? Try typing a ${fieldLabel}.`;
51
+ }
52
+ return null;
53
+ };
54
+ }
55
+ /**
56
+ * Standard validator for a choice prompt: surfaces a friendly retry
57
+ * when the user's input matches none of the offered choices (by
58
+ * number, value, or label prefix).
59
+ */
60
+ export function requireChoice(choices) {
61
+ return (answer) => {
62
+ if (resolveChoice(answer, choices) === null) {
63
+ return `I didn't recognize that — try typing one of the numbers (1-${choices.length}) or the option name.`;
64
+ }
65
+ return null;
66
+ };
67
+ }
42
68
  /**
43
69
  * Build the wizard state machine for a fresh project-bound install
44
70
  * (the most common entry point — and the one observed broken in the
@@ -67,11 +93,15 @@ export function buildFreshProjectInstall() {
67
93
  { value: 'no', label: 'Not right now' },
68
94
  ],
69
95
  },
96
+ validate: requireChoice([
97
+ { value: 'yes', label: 'Yes, let\'s go' },
98
+ { value: 'no', label: 'Not right now' },
99
+ ]),
70
100
  next: (answer) => {
71
101
  const choice = resolveChoice(answer, [
72
102
  { value: 'yes', label: 'Yes, let\'s go' },
73
103
  { value: 'no', label: 'Not right now' },
74
- ]) ?? 'yes';
104
+ ]); // validator guarantees non-null here
75
105
  return choice === 'no'
76
106
  ? { state: 'declined', updates: {} }
77
107
  : { state: 'agent-name', updates: {} };
@@ -82,10 +112,11 @@ export function buildFreshProjectInstall() {
82
112
  kind: 'narrative-then-prompt',
83
113
  narrativeContext: 'agent-name',
84
114
  prompt: 'What would you like to call your agent? (a single word works best)',
85
- input: { kind: 'text', placeholder: 'e.g. echo, scout, codey' },
115
+ input: { kind: 'text', placeholder: 'e.g. echo, scout, codey', required: true },
116
+ validate: requireNonEmpty('name'),
86
117
  next: (answer) => ({
87
118
  state: 'agent-role',
88
- updates: { agentName: answer.trim() || 'agent' },
119
+ updates: { agentName: answer.trim() },
89
120
  }),
90
121
  },
91
122
  'agent-role': {
@@ -93,10 +124,11 @@ export function buildFreshProjectInstall() {
93
124
  kind: 'narrative-then-prompt',
94
125
  narrativeContext: 'agent-role',
95
126
  prompt: 'In one sentence, what should this agent focus on? (you can change this anytime)',
96
- input: { kind: 'text', placeholder: 'e.g. coding assistant for this project' },
127
+ input: { kind: 'text', placeholder: 'e.g. coding assistant for this project', required: true },
128
+ validate: requireNonEmpty('focus or purpose'),
97
129
  next: (answer) => ({
98
130
  state: 'user-name',
99
- updates: { agentRole: answer.trim() || 'general-purpose autonomous agent' },
131
+ updates: { agentRole: answer.trim() },
100
132
  }),
101
133
  },
102
134
  'user-name': {
@@ -104,10 +136,11 @@ export function buildFreshProjectInstall() {
104
136
  kind: 'narrative-then-prompt',
105
137
  narrativeContext: 'user-name',
106
138
  prompt: 'And what should the agent call you?',
107
- input: { kind: 'text', placeholder: 'your first name is fine' },
139
+ input: { kind: 'text', placeholder: 'your first name is fine', required: true },
140
+ validate: requireNonEmpty('name'),
108
141
  next: (answer) => ({
109
142
  state: 'autonomy',
110
- updates: { userName: answer.trim() || 'friend' },
143
+ updates: { userName: answer.trim() },
111
144
  }),
112
145
  },
113
146
  autonomy: {
@@ -127,13 +160,18 @@ export function buildFreshProjectInstall() {
127
160
  { value: 'autonomous', label: 'Autonomous' },
128
161
  ],
129
162
  },
163
+ validate: requireChoice([
164
+ { value: 'guided', label: 'Guided' },
165
+ { value: 'proactive', label: 'Proactive' },
166
+ { value: 'autonomous', label: 'Autonomous' },
167
+ ]),
130
168
  next: (answer) => {
131
169
  const a = resolveChoice(answer, [
132
170
  { value: 'guided', label: 'Guided' },
133
171
  { value: 'proactive', label: 'Proactive' },
134
172
  { value: 'autonomous', label: 'Autonomous' },
135
173
  ]);
136
- return { state: 'do-init', updates: { autonomy: a ?? 'proactive' } };
174
+ return { state: 'do-init', updates: { autonomy: a } };
137
175
  },
138
176
  },
139
177
  'do-init': {
@@ -167,14 +205,19 @@ export function buildFreshProjectInstall() {
167
205
  { value: 'skip', label: 'Skip' },
168
206
  ],
169
207
  },
208
+ validate: requireChoice([
209
+ { value: 'telegram', label: 'Telegram' },
210
+ { value: 'whatsapp', label: 'WhatsApp' },
211
+ { value: 'slack', label: 'Slack' },
212
+ { value: 'skip', label: 'Skip' },
213
+ ]),
170
214
  next: (answer) => {
171
- const m = resolveChoice(answer, [
215
+ const messaging = resolveChoice(answer, [
172
216
  { value: 'telegram', label: 'Telegram' },
173
217
  { value: 'whatsapp', label: 'WhatsApp' },
174
218
  { value: 'slack', label: 'Slack' },
175
219
  { value: 'skip', label: 'Skip' },
176
220
  ]);
177
- const messaging = m ?? 'skip';
178
221
  if (messaging === 'telegram')
179
222
  return { state: 'do-telegram', updates: { messaging } };
180
223
  if (messaging === 'whatsapp')
@@ -1 +1 @@
1
- {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/commands/setup-wizard/state-machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-machine.js","sourceRoot":"","sources":["../../../src/commands/setup-wizard/state-machine.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.2.13",
3
+ "version": "1.2.14",
4
4
  "description": "Persistent autonomy infrastructure for AI agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-21T21:36:06.272Z",
5
- "instarVersion": "1.2.13",
4
+ "generatedAt": "2026-05-21T23:32:22.253Z",
5
+ "instarVersion": "1.2.14",
6
6
  "entryCount": 191,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -0,0 +1,79 @@
1
+ # Upgrade Guide — v1.2.14 (wizard validation + composing indicator)
2
+
3
+ <!-- bump: patch -->
4
+ <!-- patch = bug fixes, refactors, test additions, doc updates -->
5
+
6
+ ## What Changed
7
+
8
+ **Fix: the wizard now catches buffered-Enter and surfaces a visible
9
+ indicator during Codex narrative calls.**
10
+
11
+ End-to-end testing v1.2.13 on a real Codex install surfaced a UX
12
+ failure. The user typed an answer and pressed Enter, then — because
13
+ the next Codex-narrative call took several seconds with no visible
14
+ feedback — pressed Enter again thinking the terminal was frozen. The
15
+ extra Enter buffered in stdin, was consumed by the next prompt as
16
+ an empty submission, and the wizard silently defaulted the agent's
17
+ name to "agent". The user ended up with an agent that had a generic
18
+ identity they never picked.
19
+
20
+ Two structural fixes, both in `src/commands/setup-wizard/`:
21
+
22
+ 1. **Per-state validators** on the state machine. Each
23
+ narrative-then-prompt state can now declare a `validate` function
24
+ that rejects invalid input and surfaces a friendly retry message
25
+ without re-generating the Codex narrative paragraph (cheap loop,
26
+ no extra LLM calls). Reusable validators:
27
+ - `requireNonEmpty(fieldLabel)`: rejects whitespace-only
28
+ submissions on required text fields with an explicit
29
+ "did an extra Enter slip through?" nudge.
30
+ - `requireChoice(choices)`: rejects unmatched input on choice
31
+ prompts with a "try one of these numbers" nudge.
32
+
33
+ Wired on every narrative state in the fresh-project-install
34
+ graph. Bounded at 5 retry attempts to prevent infinite loops
35
+ on wedged input.
36
+
37
+ 2. **Composing spinner** during codex narrative calls. A braille
38
+ spinner ("⠋ composing…") animates on a single line while
39
+ `codex exec` runs; clears cleanly when the paragraph arrives.
40
+ On non-TTY (CI, piped output) it prints "composing…" once and
41
+ stops. Eliminates the silent-dead-air window that triggered
42
+ buffered-Enter in the first place.
43
+
44
+ The silent-default fallback that accepted empty agent-name as
45
+ "agent" is removed. With validators upstream, the state machine
46
+ only ever sees valid input.
47
+
48
+ Spec: `specs/dev-infrastructure/wizard-validation.md`.
49
+ ELI16: `specs/dev-infrastructure/wizard-validation.eli16.md`.
50
+ Side-effects review: `upgrades/side-effects/fix-wizard-validation.md`.
51
+
52
+ ## What to Tell Your User
53
+
54
+ The setup wizard now shows a spinner while it's thinking, so you
55
+ can tell the system is working during the longer steps. If you
56
+ accidentally press Enter twice (which is easy to do during the
57
+ think pauses), the wizard will catch it and re-ask the question
58
+ instead of silently moving on with a blank answer.
59
+
60
+ ## Summary of New Capabilities
61
+
62
+ No new capabilities. UX hardening on top of v1.2.13's hybrid wizard.
63
+
64
+ ## Evidence
65
+
66
+ Reproduction prior to fix: v1.2.13 install on `instar-codey` with
67
+ Codex CLI. User entered "1" + Enter at welcome, then pressed Enter
68
+ again during the silent codex-narrative call. The second Enter was
69
+ consumed by the agent-name prompt as an empty submission;
70
+ agentName defaulted to "agent"; wizard proceeded with the generic
71
+ identity.
72
+
73
+ After fix:
74
+ - 14 new state-machine unit tests cover the two validator helpers
75
+ and the per-state validator wiring (welcome, agent-name,
76
+ agent-role, user-name, autonomy, messaging).
77
+ - Existing 12 state-graph tests still pass.
78
+ - Existing 5 dispatch canary tests still pass.
79
+ - Manual end-to-end re-test pending on publish.
@@ -0,0 +1,98 @@
1
+ # Side-effects review — Wizard input validation + spinner
2
+
3
+ Per L6. Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ Before: UNDER. The v1.2.13 hybrid wizard accepted empty submissions
8
+ on required identity fields with a silent fallback default
9
+ (agentName: 'agent'). Combined with the invisible-latency window on
10
+ codex-narrative calls, this produced the buffered-Enter bug Justin
11
+ hit on his first real Codex install — agent named "agent" without
12
+ the user ever typing a name.
13
+
14
+ After: precisely targeted. Validators enforce non-empty input on
15
+ required text fields and reject unmatched input on choice prompts.
16
+ Spinner during codex calls eliminates the silent-dead-air window
17
+ that triggers buffered-Enter in the first place. No over-block:
18
+ optional/derived fields keep their defaults; the validation
19
+ machinery only kicks in for fields the wizard explicitly marks as
20
+ required.
21
+
22
+ ## 2. Level-of-abstraction fit
23
+
24
+ The `validate?` field is an optional addition to the existing
25
+ `NarrativeState` interface. Two reusable validators
26
+ (`requireNonEmpty`, `requireChoice`) live alongside the state
27
+ graph in `state-machine.ts`. The driver's `renderNarrativeState`
28
+ adds a bounded retry loop around `askUser`. The spinner is a
29
+ single utility function with a `{stop}` handle pattern.
30
+
31
+ No new module, no new abstraction layer. The state machine's API
32
+ grew by exactly one optional field.
33
+
34
+ ## 3. Signal vs Authority compliance
35
+
36
+ - The validator's return value is the AUTHORITY for "is this
37
+ answer accepted." The driver respects it without second-guessing.
38
+ - The user's input remains the SIGNAL; the validator transforms
39
+ invalid SIGNALs into "retry with this hint" rather than silently
40
+ defaulting.
41
+ - The spinner is purely visual feedback — no authority, no signal.
42
+
43
+ ## 4. Interactions with adjacent systems
44
+
45
+ - **State machine `next` functions**: simplified. The pre-fix code
46
+ on agent-name etc. was `answer.trim() || 'agent'`; post-fix is
47
+ `answer.trim()`. The validator ensures `next` only sees non-empty
48
+ trimmed input.
49
+ - **Codex driver dispatch in setup.ts**: unchanged. setup.ts still
50
+ routes codex-cli installs through `runCodexWizard`.
51
+ - **runCodexNarrative**: now wraps its spawnSync in a spinner
52
+ start/stop. Spinner is a no-op on non-TTY (CI, piped output) so
53
+ test environments aren't affected.
54
+ - **Existing canary test** (`tests/unit/setup-codex-model-canary.test.ts`):
55
+ unchanged. Asserts the same dispatch contract; the validator
56
+ additions don't touch the dispatch shape.
57
+ - **State-machine unit tests**: expanded from 12 to 26 cases.
58
+ Added validator-specific tests (requireNonEmpty, requireChoice,
59
+ per-state validator wiring).
60
+ - **Claude wizard path**: completely unaffected. Validators live on
61
+ the state-machine API, but the Claude path doesn't go through
62
+ the state machine — it spawns the existing /setup-wizard
63
+ slash-command directly.
64
+
65
+ ## 5. Rollback cost
66
+
67
+ Low. New optional `validate` field on NarrativeState; new
68
+ validators; new spinner helper; one retry loop in the driver.
69
+ `git revert` restores v1.2.13 (with the buffered-Enter bug).
70
+
71
+ ## 6. Backwards compatibility / drift surface
72
+
73
+ Fully backwards-compatible.
74
+
75
+ - States without a `validate` function skip validation entirely
76
+ and accept the answer immediately. No existing state is broken
77
+ by the addition.
78
+ - Validators are pure functions with stable contracts. Drift
79
+ surface: validator messages. If a message text needs to change,
80
+ update the validator's return value — visible in PR diff.
81
+ - No config schema change. No agent-installed-files change. No
82
+ PostUpdateMigrator work.
83
+
84
+ ## 7. Authorization / Trust posture
85
+
86
+ No new authority. The validator is run inside the same wizard
87
+ process with the same user. No new privilege, no new sandbox, no
88
+ new auth.
89
+
90
+ ## Outcome
91
+
92
+ Ship. Closes the broken-on-buffered-Enter UX hole that the
93
+ instar-codey real-user test surfaced. Structural validation +
94
+ visible composing indicator together address the failure-mode
95
+ chain (silent latency → user reflex → buffered Enter → empty
96
+ submission accepted). Validator extensibility lands cleanly on
97
+ the existing state-machine API. 26 unit tests cover the
98
+ validators + wiring.