@event4u/agent-config 4.1.0 → 4.3.0

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 (66) hide show
  1. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/CHANGELOG.md +51 -0
  4. package/README.md +3 -2
  5. package/dist/cli/agent-config.js +9 -0
  6. package/dist/cli/agent-config.js.map +1 -1
  7. package/dist/cli/commands/uiServe.js +1 -1
  8. package/dist/cli/commands/uiServe.js.map +1 -1
  9. package/dist/cli/initRouting.js +101 -0
  10. package/dist/cli/initRouting.js.map +1 -0
  11. package/dist/discovery/deprecation-report.md +1 -1
  12. package/dist/discovery/discovery-manifest.json +1 -1
  13. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  14. package/dist/discovery/discovery-manifest.summary.md +1 -1
  15. package/dist/discovery/orphan-report.md +1 -1
  16. package/dist/discovery/packs.json +1 -1
  17. package/dist/discovery/trust-report.md +1 -1
  18. package/dist/discovery/workspaces.json +1 -1
  19. package/dist/mcp/registry-manifest.json +1 -1
  20. package/dist/server/routes/install.js +11 -200
  21. package/dist/server/routes/install.js.map +1 -1
  22. package/dist/server/routes/wizard.js +167 -26
  23. package/dist/server/routes/wizard.js.map +1 -1
  24. package/dist/server/schemas/settings.js +1 -0
  25. package/dist/server/schemas/settings.js.map +1 -1
  26. package/dist/ui/assets/index-BDAhhpDV.js +40 -0
  27. package/dist/ui/assets/index-BDAhhpDV.js.map +1 -0
  28. package/dist/ui/index.html +1 -1
  29. package/docs/contracts/gui-wizard.md +116 -96
  30. package/docs/decisions/ADR-021-deployment-shape.md +2 -2
  31. package/docs/deploy/connector-setup.md +2 -2
  32. package/docs/deploy/policy-cookbook.md +2 -2
  33. package/package.json +1 -1
  34. package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
  35. package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
  36. package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
  37. package/scripts/install.py +197 -34
  38. package/scripts/lint_framework_leakage_allowlist.json +8 -0
  39. package/dist/install/apply.js +0 -238
  40. package/dist/install/apply.js.map +0 -1
  41. package/dist/install/bridges/augment.js +0 -20
  42. package/dist/install/bridges/augment.js.map +0 -1
  43. package/dist/install/bridges/claude.js +0 -44
  44. package/dist/install/bridges/claude.js.map +0 -1
  45. package/dist/install/bridges/cline.js +0 -69
  46. package/dist/install/bridges/cline.js.map +0 -1
  47. package/dist/install/bridges/copilot.js +0 -28
  48. package/dist/install/bridges/copilot.js.map +0 -1
  49. package/dist/install/bridges/cursor.js +0 -34
  50. package/dist/install/bridges/cursor.js.map +0 -1
  51. package/dist/install/bridges/gemini.js +0 -39
  52. package/dist/install/bridges/gemini.js.map +0 -1
  53. package/dist/install/bridges/index.js +0 -88
  54. package/dist/install/bridges/index.js.map +0 -1
  55. package/dist/install/bridges/marker-content.js +0 -153
  56. package/dist/install/bridges/marker-content.js.map +0 -1
  57. package/dist/install/bridges/markers.js +0 -42
  58. package/dist/install/bridges/markers.js.map +0 -1
  59. package/dist/install/bridges/types.js +0 -31
  60. package/dist/install/bridges/types.js.map +0 -1
  61. package/dist/install/bridges/vscode.js +0 -26
  62. package/dist/install/bridges/vscode.js.map +0 -1
  63. package/dist/install/bridges/windsurf.js +0 -35
  64. package/dist/install/bridges/windsurf.js.map +0 -1
  65. package/dist/ui/assets/index-DLEuEW1V.js +0 -35
  66. package/dist/ui/assets/index-DLEuEW1V.js.map +0 -1
@@ -4,23 +4,16 @@
4
4
  * GET /api/v1/install/detect — scope + tool presence at `cwd`.
5
5
  * POST /api/v1/install/plan — build an {@link InstallPlan} from a
6
6
  * declarative {@link PlanSource}[] body.
7
- * POST /api/v1/install/apply — execute the plan; streams SSE frames
8
- * (`progress` / `conflict` / `error` / `done`).
9
7
  *
10
- * **Error schema (Finding #20):** every SSE frame carries a stable
11
- * `type` discriminator and errors carry a `code` from
12
- * {@link ErrorCode} so the UI maps them to localized copy without
13
- * parsing free-form messages.
14
- *
15
- * **Abort-on-disconnect (Finding #24):** the apply handler subscribes
16
- * to `req.raw.on("close")` and fires an `AbortController`; the engine
17
- * appends an `abort` marker to the transaction log and resolves the
18
- * partial {@link ApplyResult}. Next boot's recovery surfaces the marker
19
- * as `Resume` / `Rollback` / `Ignore`.
8
+ * The real *apply* path is owned by `scripts/install.py --apply-payload`
9
+ * (single source of truth, D12 / ADR-020) and surfaced to the GUI via
10
+ * `POST /api/v1/wizard/apply` (see `wizard.ts`). The legacy TypeScript
11
+ * apply engine + its `POST /api/v1/install/apply` SSE route were removed in
12
+ * road-to-single-install-source-of-truth § Phase 3 — this module now only
13
+ * serves the read-only detect / plan-preview / recovery / legacy-v3 routes.
20
14
  */
21
15
  import { z } from 'zod';
22
- import { applyPlanStreaming } from '../../install/apply.js';
23
- import { computeConflicts, expandBatchChoice, } from '../../install/conflict.js';
16
+ import { computeConflicts } from '../../install/conflict.js';
24
17
  import { cpSync, existsSync, mkdirSync } from 'node:fs';
25
18
  import { detectLegacyV3, detectPackageRoot, detectProjectShape, detectScope, detectToolPresence, } from '../../install/detect.js';
26
19
  import { getLogPath } from '../../install/paths.js';
@@ -89,7 +82,6 @@ const ConflictEntrySchema = z.object({
89
82
  existingSha256: z.string().nullable(),
90
83
  mergeable: z.boolean(),
91
84
  });
92
- const ConflictResolutionSchema = z.enum(['skip', 'overwrite', 'merge']);
93
85
  /**
94
86
  * Wire-shape of {@link InstallPlan} — Sets serialise as arrays over JSON,
95
87
  * so the apply request carries `knownPaths` / `knownPointers` as string
@@ -117,22 +109,6 @@ const InstallPlanWireSchema = z.object({
117
109
  }),
118
110
  conflicts: z.array(ConflictEntrySchema).default([]),
119
111
  });
120
- function wireToPlan(w) {
121
- return {
122
- version: 2,
123
- target: w.target,
124
- root: w.root,
125
- filesByTool: w.filesByTool,
126
- mergedKeysByTool: w.mergedKeysByTool,
127
- policy: {
128
- force: w.policy.force,
129
- interactive: w.policy.interactive,
130
- knownPaths: new Set(w.policy.knownPaths),
131
- knownPointers: new Set(w.policy.knownPointers),
132
- defaultStrategy: w.policy.defaultStrategy,
133
- },
134
- };
135
- }
136
112
  function planToWire(p) {
137
113
  return {
138
114
  version: 2,
@@ -150,33 +126,6 @@ function planToWire(p) {
150
126
  conflicts: [...computeConflicts(p)],
151
127
  };
152
128
  }
153
- /**
154
- * Batch-resolution choice — sent in lieu of an exhaustive `resolutions`
155
- * map when the wizard is in batch mode (≥ {@link CONFLICT_BATCH_THRESHOLD}
156
- * conflicts). The server fans the choice out via {@link expandBatchChoice}
157
- * so the apply layer always sees a per-path map regardless of UI mode.
158
- */
159
- const BatchChoiceSchema = z.enum(['skip-all', 'overwrite-all', 'merge-json']);
160
- const ApplyRequestSchema = z.object({
161
- plan: InstallPlanWireSchema,
162
- sourceByTarget: z.record(z.string(), z.string()),
163
- /** Optional override for the transaction-log path (tests only). */
164
- logPath: z.string().optional(),
165
- /**
166
- * Per-path conflict resolutions chosen by the wizard. Keys are
167
- * absolute target paths (matching `plan.conflicts[i].path`).
168
- * Paths missing from the map fall back to the policy default
169
- * (`surface` → `skip` at the apply layer).
170
- */
171
- resolutions: z.record(z.string(), ConflictResolutionSchema).optional(),
172
- /**
173
- * Optional batch choice — expanded server-side into `resolutions`
174
- * using the plan's conflict list. When both `resolutions` and
175
- * `batchChoice` are present, `resolutions` wins per path; the
176
- * batch choice fills the gaps.
177
- */
178
- batchChoice: BatchChoiceSchema.optional(),
179
- });
180
129
  export const DetectResponseSchema = z.object({
181
130
  cwd: z.string(),
182
131
  scope: z.object({ scope: z.enum(['project', 'prompt', 'global']), reason: z.string() }),
@@ -195,20 +144,6 @@ export const DetectResponseSchema = z.object({
195
144
  }),
196
145
  packageRoot: z.string().nullable(),
197
146
  });
198
- /** Map a Node `fs` error code to the stable SSE error code (Finding #20). */
199
- function mapErrorCode(code) {
200
- if (code === 'ENOSPC')
201
- return 'E_DISK_FULL';
202
- if (code === 'EACCES' || code === 'EPERM')
203
- return 'E_PERM';
204
- if (code === 'E_CONFLICT_UNRESOLVED')
205
- return 'E_CONFLICT_UNRESOLVED';
206
- return 'E_WRITE';
207
- }
208
- /** SSE frame writer — one event per `data:` line, blank line terminator. */
209
- function writeFrame(reply, payload) {
210
- reply.raw.write(`data: ${JSON.stringify(payload)}\n\n`);
211
- }
212
147
  /**
213
148
  * Resolve a {@link PlanRequest} into the low-level `PlanSource[]` array.
214
149
  * Sources branch passes through unchanged; wizard branch runs the
@@ -246,130 +181,6 @@ function planFromRequest(body, opts) {
246
181
  },
247
182
  });
248
183
  }
249
- /**
250
- * Merge a batch choice with per-path resolutions into the map the engine
251
- * consumes. Per-path entries always win; the batch choice fills the gaps
252
- * for paths the wizard did not address individually (Finding #19).
253
- *
254
- * Returns `undefined` when neither input is present so the engine keeps
255
- * its surface-to-skip default behaviour without an empty-map allocation.
256
- */
257
- function buildResolutionMap(conflicts, resolutions, batchChoice) {
258
- if (resolutions === undefined && batchChoice === undefined)
259
- return undefined;
260
- const map = new Map();
261
- if (batchChoice !== undefined) {
262
- const expanded = expandBatchChoice(conflicts, batchChoice);
263
- for (const [path, res] of Object.entries(expanded)) {
264
- map.set(path, res);
265
- }
266
- }
267
- if (resolutions !== undefined) {
268
- for (const [path, res] of Object.entries(resolutions)) {
269
- map.set(path, res);
270
- }
271
- }
272
- return map;
273
- }
274
- function mapApplyProgressToFrame(p) {
275
- if (p.status === 'written' || p.status === 'skipped') {
276
- return {
277
- type: 'progress',
278
- file: p.file.path,
279
- status: p.status,
280
- written: p.written,
281
- total: p.total,
282
- };
283
- }
284
- if (p.status === 'conflict') {
285
- return {
286
- type: 'conflict',
287
- entries: [{ path: p.file.path, kind: p.file.kind }],
288
- };
289
- }
290
- const code = p.error ? mapErrorCode(p.error.code) : 'E_WRITE';
291
- return {
292
- type: 'error',
293
- code,
294
- message: p.error?.message ?? 'unknown error',
295
- recoverable: code !== 'E_DISK_FULL' && code !== 'E_CRASH',
296
- file: p.file.path,
297
- };
298
- }
299
- function summaryFrame(result) {
300
- return {
301
- type: 'done',
302
- summary: {
303
- target: result.target,
304
- written: result.written.length,
305
- skipped: result.skipped.length,
306
- conflicts: result.conflicts.length,
307
- errors: result.errors.length,
308
- },
309
- };
310
- }
311
- async function applyHandler(req, reply, opts) {
312
- const parsed = ApplyRequestSchema.safeParse(req.body);
313
- if (!parsed.success) {
314
- await reply.code(400).send({ error: 'invalid apply request', details: parsed.error.flatten() });
315
- return;
316
- }
317
- // SSE headers — flush immediately so the browser opens the channel.
318
- reply.raw.writeHead(200, {
319
- 'Content-Type': 'text/event-stream',
320
- 'Cache-Control': 'no-cache, no-transform',
321
- Connection: 'keep-alive',
322
- 'X-Accel-Buffering': 'no',
323
- });
324
- reply.raw.flushHeaders?.();
325
- const controller = new AbortController();
326
- // Council Finding #24: tear down the apply loop when the client
327
- // disconnects so half-applied installs surface a clean partial result
328
- // instead of a zombie loop. The transaction log records an `abort`
329
- // marker so the next boot can offer Resume / Rollback / Ignore.
330
- //
331
- // Listen on `reply.raw` (ServerResponse), not `req.raw` (IncomingMessage):
332
- // the request stream emits `close` as soon as the body is fully
333
- // consumed (undici / fetch send-then-half-close), which would fire
334
- // mid-stream on every healthy request. The response stream only
335
- // emits `close` on actual client teardown. Guard with `writableEnded`
336
- // so the server's own `reply.raw.end()` (in `finally`) does not
337
- // trigger the abort.
338
- const onClose = () => {
339
- if (!reply.raw.writableEnded) {
340
- controller.abort();
341
- }
342
- };
343
- reply.raw.on('close', onClose);
344
- const sourceByTarget = new Map(Object.entries(parsed.data.sourceByTarget));
345
- const logPath = parsed.data.logPath ?? opts.logPath ?? getLogPath();
346
- const plan = wireToPlan(parsed.data.plan);
347
- const resolutions = buildResolutionMap(parsed.data.plan.conflicts, parsed.data.resolutions, parsed.data.batchChoice);
348
- try {
349
- const result = await applyPlanStreaming({
350
- plan,
351
- sourceByTarget,
352
- logPath,
353
- signal: controller.signal,
354
- onProgress: (p) => writeFrame(reply, mapApplyProgressToFrame(p)),
355
- ...(resolutions !== undefined ? { resolutions } : {}),
356
- });
357
- writeFrame(reply, summaryFrame(result));
358
- }
359
- catch (err) {
360
- const code = 'E_CRASH';
361
- writeFrame(reply, {
362
- type: 'error',
363
- code,
364
- message: err instanceof Error ? err.message : String(err),
365
- recoverable: false,
366
- });
367
- }
368
- finally {
369
- reply.raw.off('close', onClose);
370
- reply.raw.end();
371
- }
372
- }
373
184
  /**
374
185
  * Summarise a txlog tail into a recovery decision (Phase B4, council
375
186
  * Finding #24 closure).
@@ -444,7 +255,10 @@ export function installRoute(opts = {}) {
444
255
  return;
445
256
  }
446
257
  try {
447
- return planToWire(planFromRequest(parsed.data, opts));
258
+ // Validate the wire shape on the way out so the response
259
+ // contract stays enforced now that the schema is no longer
260
+ // referenced by the (removed) apply route.
261
+ return InstallPlanWireSchema.parse(planToWire(planFromRequest(parsed.data, opts)));
448
262
  }
449
263
  catch (err) {
450
264
  const message = err instanceof Error ? err.message : String(err);
@@ -458,9 +272,6 @@ export function installRoute(opts = {}) {
458
272
  throw err;
459
273
  }
460
274
  });
461
- app.post('/api/v1/install/apply', async (req, reply) => {
462
- await applyHandler(req, reply, opts);
463
- });
464
275
  // Phase B4 — recovery-pre-step: read the txlog tail and surface
465
276
  // an abort marker so the wizard can prompt Resume / Rollback /
466
277
  // Ignore before showing Step 1.
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/server/routes/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/server/routes/install.ts"],"names":[],"mappings":"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"}
@@ -149,6 +149,64 @@ async function spawnInstaller(scriptPath, args) {
149
149
  });
150
150
  });
151
151
  }
152
+ /** SSE frame writer — one event per `data:` line, blank-line terminator. */
153
+ function writeFrame(reply, payload) {
154
+ reply.raw.write(`data: ${JSON.stringify(payload)}\n\n`);
155
+ }
156
+ function streamInstaller(scriptPath, args, onLine, signal) {
157
+ return new Promise((resolve, reject) => {
158
+ const child = spawn('python3', [scriptPath, ...args], {
159
+ stdio: ['ignore', 'pipe', 'pipe'],
160
+ env: { ...process.env, AGENT_CONFIG_NO_UPDATE_CHECK: '1' },
161
+ });
162
+ const onAbort = () => {
163
+ child.kill('SIGTERM');
164
+ };
165
+ if (signal !== undefined) {
166
+ if (signal.aborted)
167
+ onAbort();
168
+ else
169
+ signal.addEventListener('abort', onAbort, { once: true });
170
+ }
171
+ const stderrChunks = [];
172
+ let buf = '';
173
+ const handleLine = (line) => {
174
+ const trimmed = line.trim();
175
+ if (trimmed.length === 0)
176
+ return;
177
+ try {
178
+ onLine(JSON.parse(trimmed));
179
+ }
180
+ catch {
181
+ // Non-JSON stdout (defensive — real-apply runs with QUIET so
182
+ // only NDJSON reaches stdout). Drop it rather than corrupt the
183
+ // SSE stream.
184
+ }
185
+ };
186
+ child.stdout?.on('data', (chunk) => {
187
+ buf += chunk.toString('utf8');
188
+ let nl = buf.indexOf('\n');
189
+ while (nl !== -1) {
190
+ handleLine(buf.slice(0, nl));
191
+ buf = buf.slice(nl + 1);
192
+ nl = buf.indexOf('\n');
193
+ }
194
+ });
195
+ child.stderr?.on('data', (chunk) => stderrChunks.push(chunk));
196
+ child.once('error', (err) => {
197
+ if (signal !== undefined)
198
+ signal.removeEventListener('abort', onAbort);
199
+ reject(err);
200
+ });
201
+ child.once('close', (code) => {
202
+ if (buf.trim().length > 0)
203
+ handleLine(buf);
204
+ if (signal !== undefined)
205
+ signal.removeEventListener('abort', onAbort);
206
+ resolve({ exitCode: code ?? 1, stderr: Buffer.concat(stderrChunks).toString('utf8') });
207
+ });
208
+ });
209
+ }
152
210
  async function spawnBash(scriptPath, args) {
153
211
  return new Promise((resolve, reject) => {
154
212
  const child = spawn('bash', [scriptPath, ...args], {
@@ -459,13 +517,17 @@ export function wizardRoute(opts) {
459
517
  await writeState(opts.writeRoot, parsed.data);
460
518
  return { ok: true };
461
519
  });
462
- // road-to-global-only-install § Phase 1.5 — Wizard Apply bridge.
463
- // Validates the WizardApplyPayload envelope, spills it to a temp
464
- // file, and spawns `python3 scripts/install.py --apply-payload
465
- // <tmp> --dry-run`. Returns the installer's plan-summary stdout
466
- // so the UI can render the preview before the maintainer commits.
467
- // Real-apply (non-dry-run) is gated until Phase 1.9 minor release
468
- // (kill-switch per D7 no dual code paths).
520
+ // road-to-single-install-source-of-truth § Phase 2 — Wizard Apply bridge.
521
+ // Validates the WizardApplyPayload envelope and spills it to a temp file,
522
+ // then dispatches `scripts/install.py --apply-payload <tmp>` — the single
523
+ // installer (D12 / ADR-020). Two modes on the SAME endpoint:
524
+ // dry_run:true → buffered plan-summary preview (JSON), used by the
525
+ // Review step. Adds `--dry-run`.
526
+ // dry_run:false REAL apply, streamed as SSE. install.py emits NDJSON
527
+ // (`{type:"file"|"done"|"error"}`); we map each line to the SSE frame
528
+ // vocabulary the UI consumes (`progress`/`done`/`error`) and abort the
529
+ // child on client disconnect (Finding #24). CSRF + Host/Origin
530
+ // allow-list are enforced by the app-level onRequest hooks.
469
531
  app.post('/api/v1/wizard/apply', async (request, reply) => {
470
532
  if (!extended) {
471
533
  await reply.code(404).send({ error: { code: 'NOT_FOUND', message: 'extended-mode endpoint disabled' } });
@@ -478,35 +540,114 @@ export function wizardRoute(opts) {
478
540
  });
479
541
  return reply;
480
542
  }
481
- // Force dry-run on the bridge until Phase 1.9 protects
482
- // against accidental real writes during the rollout window.
483
- const payload = { ...parsed.data, dry_run: true };
543
+ const isDryRun = parsed.data.dry_run === true;
544
+ const payload = parsed.data;
484
545
  const tmpPath = join(tmpdir(), `agent-config-apply-${randomBytes(8).toString('hex')}.json`);
546
+ const scriptPath = join(opts.packageRoot, 'scripts', 'install.py');
547
+ if (isDryRun) {
548
+ // Plan-summary preview — buffered JSON (Review step).
549
+ try {
550
+ await fs.writeFile(tmpPath, JSON.stringify(payload), { mode: 0o600 });
551
+ const result = await spawnInstaller(scriptPath, ['--apply-payload', tmpPath, '--dry-run']);
552
+ if (result.exitCode !== 0) {
553
+ await reply.code(500).send({
554
+ error: { code: 'BRIDGE_FAILED', message: result.stderr || 'installer bridge exited non-zero', exitCode: result.exitCode },
555
+ });
556
+ return reply;
557
+ }
558
+ return {
559
+ ok: true,
560
+ dryRun: true,
561
+ schemaVersion: payload.schema_version,
562
+ preview: result.stdout,
563
+ };
564
+ }
565
+ catch (err) {
566
+ const message = err instanceof Error ? err.message : 'apply bridge failed';
567
+ await reply.code(500).send({ error: { code: 'BRIDGE_FAILED', message } });
568
+ return reply;
569
+ }
570
+ finally {
571
+ await fs.unlink(tmpPath).catch(() => undefined);
572
+ }
573
+ }
574
+ // Real apply — SSE stream. Flush headers so the browser opens the
575
+ // channel immediately.
576
+ reply.raw.writeHead(200, {
577
+ 'Content-Type': 'text/event-stream',
578
+ 'Cache-Control': 'no-cache, no-transform',
579
+ Connection: 'keep-alive',
580
+ 'X-Accel-Buffering': 'no',
581
+ });
582
+ reply.raw.flushHeaders?.();
583
+ const controller = new AbortController();
584
+ const onClose = () => {
585
+ if (!reply.raw.writableEnded)
586
+ controller.abort();
587
+ };
588
+ reply.raw.on('close', onClose);
589
+ let written = 0;
590
+ let total = 0;
591
+ let sawTerminal = false;
485
592
  try {
486
593
  await fs.writeFile(tmpPath, JSON.stringify(payload), { mode: 0o600 });
487
- const scriptPath = join(opts.packageRoot, 'scripts', 'install.py');
488
- const result = await spawnInstaller(scriptPath, ['--apply-payload', tmpPath, '--dry-run']);
489
- if (result.exitCode !== 0) {
490
- await reply.code(500).send({
491
- error: { code: 'BRIDGE_FAILED', message: result.stderr || 'installer bridge exited non-zero', exitCode: result.exitCode },
492
- });
493
- return reply;
594
+ const result = await streamInstaller(scriptPath, ['--apply-payload', tmpPath], (obj) => {
595
+ const t = obj.type;
596
+ if (t === 'file') {
597
+ written = typeof obj.written === 'number' ? obj.written : written;
598
+ total = typeof obj.total === 'number' ? obj.total : total;
599
+ writeFrame(reply, {
600
+ type: 'progress',
601
+ file: obj.file,
602
+ status: obj.status,
603
+ written,
604
+ total,
605
+ });
606
+ }
607
+ else if (t === 'done') {
608
+ sawTerminal = true;
609
+ writeFrame(reply, { type: 'done', summary: { written, total } });
610
+ }
611
+ else if (t === 'error') {
612
+ sawTerminal = true;
613
+ writeFrame(reply, {
614
+ type: 'error',
615
+ code: typeof obj.code === 'string' ? obj.code : 'E_INSTALL',
616
+ message: typeof obj.message === 'string' ? obj.message : 'install failed',
617
+ recoverable: false,
618
+ });
619
+ }
620
+ }, controller.signal);
621
+ // install.py exited without a terminal frame (crash / kill): emit
622
+ // one so the UI never hangs waiting for `done`/`error`.
623
+ if (!sawTerminal) {
624
+ if (result.exitCode === 0) {
625
+ writeFrame(reply, { type: 'done', summary: { written, total } });
626
+ }
627
+ else {
628
+ writeFrame(reply, {
629
+ type: 'error',
630
+ code: 'BRIDGE_FAILED',
631
+ message: result.stderr.trim() || `installer exited ${result.exitCode}`,
632
+ recoverable: false,
633
+ });
634
+ }
494
635
  }
495
- return {
496
- ok: true,
497
- dryRun: true,
498
- schemaVersion: payload.schema_version,
499
- preview: result.stdout,
500
- };
501
636
  }
502
637
  catch (err) {
503
- const message = err instanceof Error ? err.message : 'apply bridge failed';
504
- await reply.code(500).send({ error: { code: 'BRIDGE_FAILED', message } });
505
- return reply;
638
+ writeFrame(reply, {
639
+ type: 'error',
640
+ code: 'E_CRASH',
641
+ message: err instanceof Error ? err.message : String(err),
642
+ recoverable: false,
643
+ });
506
644
  }
507
645
  finally {
646
+ reply.raw.off('close', onClose);
647
+ reply.raw.end();
508
648
  await fs.unlink(tmpPath).catch(() => undefined);
509
649
  }
650
+ return reply;
510
651
  });
511
652
  app.post('/api/v1/wizard/finish', async (request, reply) => {
512
653
  const body = (request.body ?? {});