@deepseek-insight/dsi 0.6.19 → 0.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/build/client/_app/immutable/assets/0.BQzh2ktU.css +2 -0
  2. package/build/client/_app/immutable/assets/{2.CulOeYPh.css → 2.ByYVysCj.css} +1 -1
  3. package/build/client/_app/immutable/chunks/6lkFuaQJ.js +1 -0
  4. package/build/client/_app/immutable/chunks/BtiOY3LQ.js +2 -0
  5. package/build/client/_app/immutable/chunks/Ct20Yiq1.js +1 -0
  6. package/build/client/_app/immutable/chunks/{CcfE8WnY.js → DygY_IXG.js} +1 -1
  7. package/build/client/_app/immutable/entry/{app.By0um08-.js → app.a14BvSUo.js} +2 -2
  8. package/build/client/_app/immutable/entry/start.DwHZM5ia.js +1 -0
  9. package/build/client/_app/immutable/nodes/{1.zMtTl7W9.js → 1.BKoLqRXA.js} +1 -1
  10. package/build/client/_app/immutable/nodes/2.CSRBDmmw.js +337 -0
  11. package/build/client/_app/version.json +1 -1
  12. package/build/handler.js +4 -4
  13. package/build/index.js +4 -4
  14. package/build/server/chunks/chunks/deliverables.js-Dg6XzNkW.js +46 -0
  15. package/build/server/chunks/chunks/{dsh-events.js-35seDLwL.js → dsh-events.js-CGuF_had.js} +2 -1
  16. package/build/server/chunks/chunks/{git-probe.js-D4DjBXSY.js → git-probe.js-6ARRicD2.js} +2 -2
  17. package/build/server/chunks/chunks/{internal2.js-BGlVENi_.js → internal2.js-Bcxjr5x2.js} +2 -2
  18. package/build/server/chunks/chunks/{state.js-BT8iDJXe.js → state.js-ez_uUx9I.js} +2 -2
  19. package/build/server/chunks/chunks/{watcher.js-CACduBB9.js → watcher.js-Dogr6xsl.js} +2 -2
  20. package/build/server/chunks/entries/endpoints/api/a2a/{_server.ts.js-DHFHuGSm.js → _server.ts.js-BkLuKDZr.js} +3 -3
  21. package/build/server/chunks/entries/endpoints/api/a2a/register/{_server.ts.js-CUUfDBcc.js → _server.ts.js-BOyrp9zt.js} +3 -3
  22. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/events/{_server.ts.js-BiAJcPpb.js → _server.ts.js-LWw-YpVI.js} +7 -3
  23. package/build/server/chunks/entries/endpoints/api/dsh/session/_sessionId_/history/{_server.ts.js-ecbtat_C.js → _server.ts.js-CYt4aYoc.js} +2 -2
  24. package/build/server/chunks/entries/endpoints/api/workspace/file-write/{_server.ts.js-Cb7X2G82.js → _server.ts.js-CWWi0aa8.js} +3 -3
  25. package/build/server/chunks/entries/endpoints/api/workspace/git-events/{_server.ts.js-DZ67v729.js → _server.ts.js-Dc0g7HPl.js} +3 -3
  26. package/build/server/chunks/entries/endpoints/api/workspace/git-file-head/{_server.ts.js-BuO5Stmm.js → _server.ts.js-CvPoP9yH.js} +3 -3
  27. package/build/server/chunks/entries/endpoints/api/workspace/git-map/{_server.ts.js-Bb_I5Ze7.js → _server.ts.js-f5Gk_lb6.js} +3 -3
  28. package/build/server/chunks/entries/endpoints/api/workspace/git-status/{_server.ts.js-cHWxh5VB.js → _server.ts.js-BMkKlCgS.js} +3 -3
  29. package/build/server/chunks/entries/endpoints/api/workspace/write-gate/{_server.ts.js-Blcfn0zm.js → _server.ts.js-DUL-2q1R.js} +3 -3
  30. package/build/server/chunks/entries/pages/{_error.svelte.js-DrXSHJGM.js → _error.svelte.js-DDQEX5e3.js} +3 -3
  31. package/build/server/chunks/entries/pages/{_page.server.ts.js-C_ydvzuE.js → _page.server.ts.js-DFRnK-I2.js} +7 -2
  32. package/build/server/chunks/entries/pages/{_page.svelte.js-BoCqON33.js → _page.svelte.js-DrMNc6ih.js} +461 -130
  33. package/build/server/chunks/{handler-CxEHv3N9.js → handler-Cqw6zPgE.js} +3 -3
  34. package/build/server/chunks/{index.js-Co6HpgIt.js → index.js-CZ6hvqti.js} +2 -2
  35. package/build/server/chunks/{manifest.js-BoZ1Tnyu.js → manifest.js-SFcYF8ua.js} +15 -15
  36. package/build/server/chunks/nodes/{0.js-zSkx80Fq.js → 0.js-BqYWZcQy.js} +3 -3
  37. package/build/server/chunks/nodes/1.js-CoGgQITW.js +9 -0
  38. package/build/server/chunks/nodes/{2.js-DNAbnuXD.js → 2.js-CnybOb74.js} +7 -6
  39. package/package.json +1 -1
  40. package/template/.dsi/prompts.sqlite-shm +0 -0
  41. package/template/.dsi/prompts.sqlite-wal +0 -0
  42. package/build/client/_app/immutable/assets/0.KhAZv9mf.css +0 -2
  43. package/build/client/_app/immutable/chunks/DR7O6pQK.js +0 -1
  44. package/build/client/_app/immutable/chunks/Db_zFoAP.js +0 -1
  45. package/build/client/_app/immutable/chunks/L81Qm9WF.js +0 -2
  46. package/build/client/_app/immutable/entry/start.DovVSimi.js +0 -1
  47. package/build/client/_app/immutable/nodes/2.C9y-bmIa.js +0 -337
  48. package/build/server/chunks/nodes/1.js-BWaCxXNn.js +0 -9
  49. /package/build/client/_app/immutable/nodes/{0.Jl8y_yU6.js → 0.BE97Xr19.js} +0 -0
@@ -8,7 +8,7 @@ import { D as DEFAULT_IMAGE_LIMITS } from '../../chunks/image-limits.js-CUdJ0f7r
8
8
  import { s as sanitizeWorkspaceProfile, d as dsiKey, t as themePrefs } from '../../chunks/theme-prefs.svelte.js-8CaWz46g.js';
9
9
  import { a as appConfig, p as previewSegments, b as parseTagWords, i as isValidTagWord, s as shouldRecordPrompt, g as getTrigger, t as triggerMode, c as searchKey, d as textPreviewOf } from '../../chunks/app-config.svelte.js-D7wkLUkK.js';
10
10
  import { c as getLocale } from '../../chunks/runtime.js-CCJi3XaY.js';
11
- import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-BT8iDJXe.js';
11
+ import { p as page, a as afterNavigate, t, c as currentLocale, e as replaceState, u as unexpectederror1, s as sessionnotfound2, r as reapednote1, d as dshunreachable1, b as backtoworkspace2 } from '../../chunks/state.js-ez_uUx9I.js';
12
12
  import 'yaml';
13
13
  import 'html-to-image';
14
14
  import hljs from 'highlight.js/lib/core';
@@ -20,7 +20,7 @@ import xml from 'highlight.js/lib/languages/xml';
20
20
  import css from 'highlight.js/lib/languages/css';
21
21
  import '../../chunks/uneval.js-BJ9Qq2SF.js';
22
22
  import '../../chunks/shared.js-HQ0rfhm4.js';
23
- import '../../chunks/internal2.js-BGlVENi_.js';
23
+ import '../../chunks/internal2.js-Bcxjr5x2.js';
24
24
  import '../../chunks/exports.js-DH_tjtdv.js';
25
25
  import '../../chunks/utils.js-CAdNO8Tu.js';
26
26
 
@@ -3224,6 +3224,70 @@ var deleting = ((inputs = {}, options = {}) => {
3224
3224
  return en_deleting();
3225
3225
  });
3226
3226
  //#endregion
3227
+ //#region src/lib/paraglide/messages/deliverablesfiles1.js
3228
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3229
+ /** @typedef {{}} Deliverablesfiles1Inputs */
3230
+ var en_deliverablesfiles1 = () => {
3231
+ return ` files)`;
3232
+ };
3233
+ var zh_deliverablesfiles1 = () => {
3234
+ return ` 个文件)`;
3235
+ };
3236
+ var id_deliverablesfiles1 = () => {
3237
+ return ` berkas)`;
3238
+ };
3239
+ var es_deliverablesfiles1 = () => {
3240
+ return ` archivos)`;
3241
+ };
3242
+ /**
3243
+ * | output |
3244
+ * | --- |
3245
+ * | "files)" |
3246
+ *
3247
+ * @param {Deliverablesfiles1Inputs} inputs
3248
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3249
+ * @returns {LocalizedString}
3250
+ */
3251
+ var deliverablesfiles1 = ((inputs = {}, options = {}) => {
3252
+ const locale = options.locale ?? getLocale();
3253
+ if (locale === "zh") return zh_deliverablesfiles1();
3254
+ if (locale === "id") return id_deliverablesfiles1();
3255
+ if (locale === "es") return es_deliverablesfiles1();
3256
+ return en_deliverablesfiles1();
3257
+ });
3258
+ //#endregion
3259
+ //#region src/lib/paraglide/messages/deliverablestitle1.js
3260
+ /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3261
+ /** @typedef {{}} Deliverablestitle1Inputs */
3262
+ var en_deliverablestitle1 = () => {
3263
+ return `Deliverables (`;
3264
+ };
3265
+ var zh_deliverablestitle1 = () => {
3266
+ return `交付文件(`;
3267
+ };
3268
+ var id_deliverablestitle1 = () => {
3269
+ return `Hasil kerja (`;
3270
+ };
3271
+ var es_deliverablestitle1 = () => {
3272
+ return `Entregables (`;
3273
+ };
3274
+ /**
3275
+ * | output |
3276
+ * | --- |
3277
+ * | "Deliverables (" |
3278
+ *
3279
+ * @param {Deliverablestitle1Inputs} inputs
3280
+ * @param {{ locale?: "en" | "zh" | "id" | "es" }} options
3281
+ * @returns {LocalizedString}
3282
+ */
3283
+ var deliverablestitle1 = ((inputs = {}, options = {}) => {
3284
+ const locale = options.locale ?? getLocale();
3285
+ if (locale === "zh") return zh_deliverablestitle1();
3286
+ if (locale === "id") return id_deliverablestitle1();
3287
+ if (locale === "es") return es_deliverablestitle1();
3288
+ return en_deliverablestitle1();
3289
+ });
3290
+ //#endregion
3227
3291
  //#region src/lib/paraglide/messages/dirbreadcrumbs1.js
3228
3292
  /** @typedef {import('../runtime.js').LocalizedString} LocalizedString */
3229
3293
  /** @typedef {{}} Dirbreadcrumbs1Inputs */
@@ -14495,6 +14559,8 @@ var _index_exports = /* @__PURE__ */ __exportAll({
14495
14559
  del: () => del,
14496
14560
  delete: () => _delete,
14497
14561
  deleting: () => deleting,
14562
+ deliverablesFiles: () => deliverablesfiles1,
14563
+ deliverablesTitle: () => deliverablestitle1,
14498
14564
  dirBreadcrumbs: () => dirbreadcrumbs1,
14499
14565
  discardBroadcast: () => discardbroadcast1,
14500
14566
  discardBroadcastTitle: () => discardbroadcasttitle2,
@@ -14953,6 +15019,8 @@ var messages_exports = /* @__PURE__ */ __exportAll({
14953
15019
  del: () => del,
14954
15020
  delete: () => _delete,
14955
15021
  deleting: () => deleting,
15022
+ deliverablesFiles: () => deliverablesfiles1,
15023
+ deliverablesTitle: () => deliverablestitle1,
14956
15024
  dirBreadcrumbs: () => dirbreadcrumbs1,
14957
15025
  discardBroadcast: () => discardbroadcast1,
14958
15026
  discardBroadcastTitle: () => discardbroadcasttitle2,
@@ -15461,6 +15529,29 @@ function Bookmark_plus($$renderer, $$props) {
15461
15529
  ]));
15462
15530
  }
15463
15531
  //#endregion
15532
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/bot.svelte
15533
+ function Bot($$renderer, $$props) {
15534
+ let { $$slots, $$events, ...props } = $$props;
15535
+ Icon($$renderer, spread_props([
15536
+ { name: "bot" },
15537
+ props,
15538
+ { iconNode: [
15539
+ ["path", { "d": "M12 8V4H8" }],
15540
+ ["rect", {
15541
+ "width": "16",
15542
+ "height": "12",
15543
+ "x": "4",
15544
+ "y": "8",
15545
+ "rx": "2"
15546
+ }],
15547
+ ["path", { "d": "M2 14h2" }],
15548
+ ["path", { "d": "M20 14h2" }],
15549
+ ["path", { "d": "M15 13v2" }],
15550
+ ["path", { "d": "M9 13v2" }]
15551
+ ] }
15552
+ ]));
15553
+ }
15554
+ //#endregion
15464
15555
  //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/camera.svelte
15465
15556
  function Camera($$renderer, $$props) {
15466
15557
  let { $$slots, $$events, ...props } = $$props;
@@ -15853,6 +15944,21 @@ function Moon($$renderer, $$props) {
15853
15944
  ]));
15854
15945
  }
15855
15946
  //#endregion
15947
+ //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/package.svelte
15948
+ function Package($$renderer, $$props) {
15949
+ let { $$slots, $$events, ...props } = $$props;
15950
+ Icon($$renderer, spread_props([
15951
+ { name: "package" },
15952
+ props,
15953
+ { iconNode: [
15954
+ ["path", { "d": "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z" }],
15955
+ ["path", { "d": "M12 22V12" }],
15956
+ ["polyline", { "points": "3.29 7 12 12 20.71 7" }],
15957
+ ["path", { "d": "m7.5 4.27 9 5.15" }]
15958
+ ] }
15959
+ ]));
15960
+ }
15961
+ //#endregion
15856
15962
  //#region node_modules/.pnpm/@lucide+svelte@1.35.0_svelte@5.56.10/node_modules/@lucide/svelte/dist/icons/panel-left-close.svelte
15857
15963
  function Panel_left_close($$renderer, $$props) {
15858
15964
  let { $$slots, $$events, ...props } = $$props;
@@ -17140,7 +17246,7 @@ function SlashMenu($$renderer, $$props) {
17140
17246
  * the submit ladder's own priority order) — filtered as the operator
17141
17247
  * types the `/` draft.
17142
17248
  *
17143
- * Presentational (the MacroRunSheet rule): rows + filter query +
17249
+ * Presentational (the MacroBar rule): rows + filter query +
17144
17250
  * lifecycle state in; kind-aware pick events out. No fetch, no store
17145
17251
  * import — the HOST (Composer) owns the draft, the trigger, the
17146
17252
  * catalog state, and the keyboard lifecycle. This component renders;
@@ -18337,7 +18443,7 @@ function ThemeToggle($$renderer, $$props) {
18337
18443
  }
18338
18444
  //#endregion
18339
18445
  //#region package.json
18340
- var version = "0.6.19";
18446
+ var version = "0.6.21";
18341
18447
  var dsh = { "webVersion": "0.2.1-rc.2" };
18342
18448
  //#endregion
18343
18449
  //#region src/lib/version.ts
@@ -19031,6 +19137,11 @@ function createConversationStore(sessionId) {
19031
19137
  * server first delivers the pair (older host / projections not
19032
19138
  * composed); the panel keeps its partial fold then. */
19033
19139
  let ledgerStats = null;
19140
+ /** The session's presented-file inventory (ADR-0027f D1): raw-lane
19141
+ * deliveries, cold-seeded/resync-replaced wholesale, delta-appended by
19142
+ * callId (idempotent — at-least-once polls never duplicate). Empty =
19143
+ * no presents yet (the anchor button's render gate). */
19144
+ let deliverables = [];
19034
19145
  /**
19035
19146
  * Cold/resync seed (authoritative replace, the entries semantics): the
19036
19147
  * projections baseline (null = the host ships none) and the window's
@@ -19146,6 +19257,25 @@ function createConversationStore(sessionId) {
19146
19257
  if (poll.plan !== void 0) planMode = poll.plan;
19147
19258
  if (poll.goal !== void 0) goal = poll.goal;
19148
19259
  if (poll.ledgerStats !== void 0) ledgerStats = poll.ledgerStats;
19260
+ if (poll.deliverables !== void 0) applyDeliverables(poll.deliverables);
19261
+ }
19262
+ /**
19263
+ * Fold raw-lane deliveries in (ADR-0027f D1): append by callId — an
19264
+ * already-known callId is a re-delivered poll delta, skipped whole.
19265
+ */
19266
+ function applyDeliverables(delta) {
19267
+ if (delta.length === 0) return;
19268
+ const known = new Set(deliverables.map((d) => d.callId));
19269
+ const fresh = delta.filter((d) => !known.has(d.callId));
19270
+ if (fresh.length === 0) return;
19271
+ deliverables = [...deliverables, ...fresh];
19272
+ }
19273
+ /**
19274
+ * Seed the inventory (cold load + resync — authoritative replace, the
19275
+ * ledger's append-only truth re-read whole; ADR-0027f D1).
19276
+ */
19277
+ function seedDeliverables(next) {
19278
+ deliverables = [...next];
19149
19279
  }
19150
19280
  /**
19151
19281
  * Seed the live imageLimits projection (resync path — the delta seed
@@ -19198,13 +19328,14 @@ function createConversationStore(sessionId) {
19198
19328
  * SAME replace-by-rpcId rules as the delta path, so a page stuck
19199
19329
  * resyncing still renders pending/settled cards.
19200
19330
  */
19201
- function resyncFromLedgerEntries(next, lastSeq, running, permissionSeed, answers) {
19331
+ function resyncFromLedgerEntries(next, lastSeq, running, permissionSeed, answers, deliverablesSeed) {
19202
19332
  const pendingOptimistic = entries.filter((e) => e.kind === "user-message" && "local" in e && e.local === true);
19203
19333
  replaceAll(next);
19204
19334
  if (pendingOptimistic.length > 0) entries = mergeEntries(entries, pendingOptimistic);
19205
19335
  applyStatus(running, lastSeq);
19206
19336
  dedupeOptimistic();
19207
19337
  if (permissionSeed !== void 0) seedPermission(permissionSeed.permission, permissionSeed.knobEvents);
19338
+ if (deliverablesSeed !== void 0) seedDeliverables(deliverablesSeed);
19208
19339
  applyAnswers(answers?.pendingAnswers, answers?.settledAnswers);
19209
19340
  }
19210
19341
  /** Acquire the per-rpcId in-flight lock (false = already locked). */
@@ -19312,7 +19443,13 @@ function createConversationStore(sessionId) {
19312
19443
  get ledgerStats() {
19313
19444
  return ledgerStats;
19314
19445
  },
19446
+ /** The session's presented-file inventory (ADR-0027f); empty =
19447
+ * no presents (the DeliverablesButton gate). */
19448
+ get deliverables() {
19449
+ return deliverables;
19450
+ },
19315
19451
  seedImageLimits,
19452
+ seedDeliverables,
19316
19453
  seedTodos,
19317
19454
  seedPlanMode,
19318
19455
  seedGoal,
@@ -19427,7 +19564,7 @@ function createPollingOrchestrator(store, deps = {}) {
19427
19564
  }, {
19428
19565
  pendingAnswers: body.pendingAnswers,
19429
19566
  settledAnswers: body.settledAnswers
19430
- });
19567
+ }, body.deliverables ?? []);
19431
19568
  store.applyLiveStream(body.liveStream);
19432
19569
  store.seedImageLimits(body.imageLimits ?? null);
19433
19570
  store.seedTodos(body.todos ?? null);
@@ -22774,7 +22911,7 @@ function Composer($$renderer, $$props) {
22774
22911
  * the panel never reaches into the component). */
22775
22912
  /** Slash Menu (ADR "The Slash Menu", 2026-08-30): the session's
22776
22913
  * cached host catalog + lifecycle, bridged from the panel — the
22777
- * component never fetches (props-only, the MacroRunSheet rule);
22914
+ * component never fetches (props-only, the MacroBar rule);
22778
22915
  * null/absent renders the menu's loading row until the bridge
22779
22916
  * lands the first read. */
22780
22917
  /** Fired while the menu is open-shaped and its query moved (the
@@ -23457,20 +23594,26 @@ function ToolsAndStatusHeader($$renderer, $$props) {
23457
23594
  $$renderer.push(`<div data-svelte="ToolsAndStatusHeader" class="ml-auto flex items-center gap-1">`);
23458
23595
  OpenParentButton($$renderer, { parentSessionId });
23459
23596
  $$renderer.push(`<!----> `);
23597
+ if (agentId) {
23598
+ $$renderer.push("<!--[0-->");
23599
+ $$renderer.push(`<button type="button" class="shrink-0 rounded-md p-1 text-text-muted hover:bg-surface-alt hover:text-text-secondary" data-testid="agent-chip-copy-id"${attr("aria-label", t(copyagentpresetid3))}${attr("title", agentId)}>`);
23600
+ $$renderer.push("<!--[-1-->");
23601
+ Copy($$renderer, {
23602
+ size: 12,
23603
+ "aria-hidden": "true"
23604
+ });
23605
+ $$renderer.push(`<!--]--></button>`);
23606
+ } else $$renderer.push("<!--[-1-->");
23607
+ $$renderer.push(`<!--]--> `);
23460
23608
  if (agent) {
23461
23609
  $$renderer.push("<!--[0-->");
23462
23610
  $$renderer.push(`<span class="agent-chip svelte-1uiman" data-testid="agent-chip"${attr("title", agentId ? `agent preset — ${agentId}` : void 0)}>`);
23463
- if (agentId) {
23464
- $$renderer.push("<!--[0-->");
23465
- $$renderer.push(`<button type="button" class="shrink-0" data-testid="agent-chip-copy-id"${attr("aria-label", t(copyagentpresetid3))}${attr("title", agentId)}>`);
23466
- $$renderer.push("<!--[-1-->");
23467
- Copy($$renderer, {
23468
- size: 10,
23469
- "aria-hidden": "true"
23470
- });
23471
- $$renderer.push(`<!--]--></button>`);
23472
- } else $$renderer.push("<!--[-1-->");
23473
- $$renderer.push(`<!--]--> ${escape_html(agent)}</span>`);
23611
+ Bot($$renderer, {
23612
+ size: 12,
23613
+ class: "shrink-0",
23614
+ "aria-hidden": "true"
23615
+ });
23616
+ $$renderer.push(`<!----> ${escape_html(agent)}</span>`);
23474
23617
  } else $$renderer.push("<!--[-1-->");
23475
23618
  $$renderer.push(`<!--]--> `);
23476
23619
  PlanModeChip($$renderer, { plan });
@@ -27935,13 +28078,13 @@ function FloatingAnchorContainerPopup($$renderer, $$props) {
27935
28078
  * `titleTestId` exists because the header's data-testid is part of
27936
28079
  * each leaf's pinned surface (plan-popup-header, user-message-jumper-header).
27937
28080
  */
27938
- let { open = false, triggerEl = void 0, title = void 0, titleTestId = void 0, popupTestId = "floating-anchor-popup", children } = $$props;
28081
+ let { open = false, triggerEl = void 0, title = void 0, titleTestId = void 0, popupTestId = "floating-anchor-popup", fitWidth = false, children } = $$props;
27939
28082
  /** Focus the box — leaves call it through bind:this when an action
27940
28083
  * must hand focus back (the jumper's stay-open jump). */
27941
28084
  function focus() {}
27942
28085
  if (open) {
27943
28086
  $$renderer.push("<!--[0-->");
27944
- $$renderer.push(`<div data-svelte="FloatingAnchorContainerPopup" tabindex="-1" class="pointer-events-auto absolute right-full top-1/2 z-50 mr-2 max-h-[60vh] w-96 max-w-[80vw] -translate-y-1/2 overflow-y-auto rounded-lg border border-surface-border bg-surface-elevated py-1 shadow-xl outline-none focus:outline-none"${attr("data-testid", popupTestId)}>`);
28087
+ $$renderer.push(`<div data-svelte="FloatingAnchorContainerPopup" tabindex="-1"${attr_class(`pointer-events-auto absolute right-full top-1/2 z-50 mr-2 max-h-[60vh] max-w-[80vw] -translate-y-1/2 overflow-y-auto rounded-lg border border-surface-border bg-surface-elevated py-1 shadow-xl outline-none focus:outline-none ${fitWidth ? "w-fit" : "w-96"}`)}${attr("data-testid", popupTestId)}>`);
27945
28088
  if (title !== void 0) {
27946
28089
  $$renderer.push("<!--[0-->");
27947
28090
  $$renderer.push(`<div class="border-b border-surface-border px-2.5 py-1.5 text-[10px] font-medium uppercase tracking-wider text-text-muted"${attr("data-testid", titleTestId)}>${escape_html(title)}</div>`);
@@ -27958,7 +28101,7 @@ function FloatingAnchorContainerPopup($$renderer, $$props) {
27958
28101
  });
27959
28102
  }
27960
28103
  //#endregion
27961
- //#region src/lib/components/common/layout/UserMessageJumper.svelte
28104
+ //#region src/lib/components/anchor/user-msg-anchor/UserMessageJumper.svelte
27962
28105
  function UserMessageJumper($$renderer, $$props) {
27963
28106
  $$renderer.component(($$renderer) => {
27964
28107
  /**
@@ -28013,7 +28156,7 @@ function UserMessageJumper($$renderer, $$props) {
28013
28156
  });
28014
28157
  }
28015
28158
  //#endregion
28016
- //#region src/lib/components/common/buttons/UserMessagesButton.svelte
28159
+ //#region src/lib/components/anchor/user-msg-anchor/UserMessagesButton.svelte
28017
28160
  function UserMessagesButton($$renderer, $$props) {
28018
28161
  $$renderer.component(($$renderer) => {
28019
28162
  /**
@@ -28045,7 +28188,7 @@ function UserMessagesButton($$renderer, $$props) {
28045
28188
  function $$render_inner($$renderer) {
28046
28189
  if (container !== void 0 && groups.some((g) => g.kind === "prompt")) {
28047
28190
  $$renderer.push("<!--[0-->");
28048
- $$renderer.push(`<div data-svelte="UserMessagesButton" class="relative"><button type="button"${attr_class("floating-anchor-btn tone-cyan svelte-1ebzurb", void 0, { "active": open })}${attr("title", t(usermessagestitle2))} data-testid="user-messages-button">`);
28191
+ $$renderer.push(`<div data-svelte="UserMessagesButton" class="relative"><button type="button"${attr_class("floating-anchor-btn tone-cyan svelte-7ykxqh", void 0, { "active": open })}${attr("title", t(usermessagestitle2))} data-testid="user-messages-button">`);
28049
28192
  Message_square_text($$renderer, { size: 14 });
28050
28193
  $$renderer.push(`<!----></button> `);
28051
28194
  UserMessageJumper($$renderer, {
@@ -28081,7 +28224,7 @@ function BackToTheEdgeButton($$renderer, $$props) {
28081
28224
  });
28082
28225
  }
28083
28226
  //#endregion
28084
- //#region src/lib/components/anchor/plan/PlanPopup.svelte
28227
+ //#region src/lib/components/anchor/plan-anchor/PlanPopup.svelte
28085
28228
  function PlanPopup($$renderer, $$props) {
28086
28229
  $$renderer.component(($$renderer) => {
28087
28230
  /**
@@ -28130,7 +28273,7 @@ function PlanPopup($$renderer, $$props) {
28130
28273
  });
28131
28274
  }
28132
28275
  //#endregion
28133
- //#region src/lib/components/anchor/plan/PlanButton.svelte
28276
+ //#region src/lib/components/anchor/plan-anchor/PlanButton.svelte
28134
28277
  function PlanButton($$renderer, $$props) {
28135
28278
  $$renderer.component(($$renderer) => {
28136
28279
  /**
@@ -28164,7 +28307,7 @@ function PlanButton($$renderer, $$props) {
28164
28307
  function $$render_inner($$renderer) {
28165
28308
  if (items().length > 0) {
28166
28309
  $$renderer.push("<!--[0-->");
28167
- $$renderer.push(`<div data-svelte="PlanButton" class="relative"><button type="button"${attr_class("floating-anchor-btn tone-purple svelte-d0p77f", void 0, { "active": open })}${attr("title", t(currentplan1) + done() + "/" + items().length + t(donepart1))} data-testid="plan-button">`);
28310
+ $$renderer.push(`<div data-svelte="PlanButton" class="relative"><button type="button"${attr_class("floating-anchor-btn tone-purple svelte-65h8xp", void 0, { "active": open })}${attr("title", t(currentplan1) + done() + "/" + items().length + t(donepart1))} data-testid="plan-button">`);
28168
28311
  List_checks($$renderer, { size: 14 });
28169
28312
  $$renderer.push(`<!----></button> `);
28170
28313
  PlanPopup($$renderer, {
@@ -28191,7 +28334,127 @@ function PlanButton($$renderer, $$props) {
28191
28334
  });
28192
28335
  }
28193
28336
  //#endregion
28194
- //#region src/lib/components/anchor/job/JobsPopup.svelte
28337
+ //#region src/lib/components/anchor/deliverables-anchor/DeliverablesPopup.svelte
28338
+ function DeliverablesPopup($$renderer, $$props) {
28339
+ $$renderer.component(($$renderer) => {
28340
+ /**
28341
+ * DeliverablesPopup — the session's presented-file inventory
28342
+ * (ADR-0027f, D3, row format amended 2026-10-19): ONE line per file
28343
+ * across every present event, newest turn last — the description is
28344
+ * the label (active foreground), falling back to the bare filename
28345
+ * when the model supplied none; the full path rides the hover title
28346
+ * and the row's CopyButton, never the visible line. Extracted from
28347
+ * DeliverablesButton on
28348
+ * the PlanPopup pattern (content vs chrome): hosting lives in
28349
+ * FloatingAnchorContainerPopup (placement, width cap, close
28350
+ * contract); this leaf renders ONLY the rows. A row click opens the
28351
+ * file through the transcript's file-open seat — the popup is an
28352
+ * inventory with a jump, never a copy (the ledger's path is truth).
28353
+ */
28354
+ let { deliveries, triggerEl, open = false, onopen } = $$props;
28355
+ const fileCount = derived(() => deliveries.reduce((n, d) => n + d.files.length, 0));
28356
+ /** The row's label: bare filename, extension stripped (ADR-0027f
28357
+ * D3 amendment 2026-10-19 — the full path rides the hover title
28358
+ * and the row's CopyButton, never the visible line). */
28359
+ function displayName(path) {
28360
+ const base = path.split("/").pop() ?? path;
28361
+ const dot = base.lastIndexOf(".");
28362
+ return dot > 0 ? base.slice(0, dot) : base;
28363
+ }
28364
+ FloatingAnchorContainerPopup($$renderer, {
28365
+ open,
28366
+ triggerEl,
28367
+ fitWidth: true,
28368
+ title: `${stringify(t(deliverablestitle1))}${stringify(fileCount())}${stringify(t(deliverablesfiles1))}`,
28369
+ titleTestId: "deliverables-popup-header",
28370
+ popupTestId: "deliverables-popup",
28371
+ children: ($$renderer) => {
28372
+ $$renderer.push(`<!--[-->`);
28373
+ const each_array = ensure_array_like(deliveries);
28374
+ for (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {
28375
+ let delivery = each_array[$$index_1];
28376
+ $$renderer.push(`<!--[-->`);
28377
+ const each_array_1 = ensure_array_like(delivery.files);
28378
+ for (let $$index = 0, $$length = each_array_1.length; $$index < $$length; $$index++) {
28379
+ let file = each_array_1[$$index];
28380
+ $$renderer.push(`<button type="button" class="flex w-full items-center gap-1.5 border-b border-surface-border/30 px-2 py-1 text-left text-xs last:border-b-0 hover:bg-surface-border/20" data-testid="deliverables-popup-row"${attr("data-turn", delivery.turn)}${attr("title", file.path)}>`);
28381
+ CopyButton($$renderer, {
28382
+ value: file.path,
28383
+ title: t(copyfullpath2),
28384
+ size: 10,
28385
+ class: "shrink-0 rounded p-0.5 text-text-muted hover:bg-surface-hover hover:text-text-secondary"
28386
+ });
28387
+ $$renderer.push(`<!----> <span class="min-w-0 flex-1 truncate text-text-primary">${escape_html(file.description ?? displayName(file.path))}</span></button>`);
28388
+ }
28389
+ $$renderer.push(`<!--]-->`);
28390
+ }
28391
+ $$renderer.push(`<!--]-->`);
28392
+ },
28393
+ $$slots: { default: true }
28394
+ });
28395
+ bind_props($$props, { open });
28396
+ });
28397
+ }
28398
+ //#endregion
28399
+ //#region src/lib/components/anchor/deliverables-anchor/DeliverablesButton.svelte
28400
+ function DeliverablesButton($$renderer, $$props) {
28401
+ $$renderer.component(($$renderer) => {
28402
+ /**
28403
+ * DeliverablesButton — the Deliverables leaf of the floating anchor
28404
+ * stack (ADR-0027f, D2): the session's presented-file inventory as
28405
+ * one click, beside the transcript. Behaves like PlanButton: the
28406
+ * button owns its popup's open state and the trigger element while
28407
+ * DeliverablesPopup renders the rows — the wrapper div is the
28408
+ * popup's triggerEl, and the opening click bubbles to the window
28409
+ * outside-click handler without closing what it just opened.
28410
+ *
28411
+ * Renders NOTHING while the inventory is empty (null/[] — no present
28412
+ * ever landed; omit, never approximate). Tone CSS is OCI's verbatim
28413
+ * pattern (scoped style, var + fallback) — teal marks the hand-off
28414
+ * family (files the agent gave you).
28415
+ */
28416
+ let { deliveries, onfileopen } = $$props;
28417
+ /** Popup open state — the active tone mirrors it on the button. */
28418
+ let open = false;
28419
+ /** The popup's trigger exclusion element (the wrapper div). */
28420
+ let triggerEl = void 0;
28421
+ /** Null-safe list — the render gate reads this, never the raw prop. */
28422
+ const items = derived(() => deliveries ?? []);
28423
+ const fileCount = derived(() => items().reduce((n, d) => n + d.files.length, 0));
28424
+ let $$settled = true;
28425
+ let $$inner_renderer;
28426
+ function $$render_inner($$renderer) {
28427
+ if (items().length > 0) {
28428
+ $$renderer.push("<!--[0-->");
28429
+ $$renderer.push(`<div data-svelte="DeliverablesButton" class="relative"><button type="button"${attr_class("floating-anchor-btn tone-teal svelte-1mhticx", void 0, { "active": open })}${attr("title", t(deliverablestitle1) + fileCount() + t(deliverablesfiles1))} data-testid="deliverables-button">`);
28430
+ Package($$renderer, { size: 14 });
28431
+ $$renderer.push(`<!----></button> `);
28432
+ DeliverablesPopup($$renderer, {
28433
+ deliveries: items(),
28434
+ triggerEl,
28435
+ onopen: onfileopen,
28436
+ get open() {
28437
+ return open;
28438
+ },
28439
+ set open($$value) {
28440
+ open = $$value;
28441
+ $$settled = false;
28442
+ }
28443
+ });
28444
+ $$renderer.push(`<!----></div>`);
28445
+ } else $$renderer.push("<!--[-1-->");
28446
+ $$renderer.push(`<!--]-->`);
28447
+ }
28448
+ do {
28449
+ $$settled = true;
28450
+ $$inner_renderer = $$renderer.copy();
28451
+ $$render_inner($$inner_renderer);
28452
+ } while (!$$settled);
28453
+ $$renderer.subsume($$inner_renderer);
28454
+ });
28455
+ }
28456
+ //#endregion
28457
+ //#region src/lib/components/anchor/job-anchor/JobsPopup.svelte
28195
28458
  function JobsPopup($$renderer, $$props) {
28196
28459
  $$renderer.component(($$renderer) => {
28197
28460
  /**
@@ -28233,7 +28496,7 @@ function JobsPopup($$renderer, $$props) {
28233
28496
  });
28234
28497
  }
28235
28498
  //#endregion
28236
- //#region src/lib/components/anchor/job/JobsButton.svelte
28499
+ //#region src/lib/components/anchor/job-anchor/JobsButton.svelte
28237
28500
  function JobsButton($$renderer, $$props) {
28238
28501
  $$renderer.component(($$renderer) => {
28239
28502
  /**
@@ -28263,7 +28526,7 @@ function JobsButton($$renderer, $$props) {
28263
28526
  function $$render_inner($$renderer) {
28264
28527
  if (liveCount() > 0) {
28265
28528
  $$renderer.push("<!--[0-->");
28266
- $$renderer.push(`<div data-svelte="JobsButton" class="relative" data-testid="jobs-button"><button type="button"${attr_class("floating-anchor-btn tone-amber svelte-bs4s7e", void 0, { "active": open })}${attr("title", t(() => liveCount() === 1 ? jobslivetitle_one2({ n: liveCount() }) : jobslivetitle_other2({ n: liveCount() })))} data-testid="jobs-button-trigger"><span class="dot svelte-bs4s7e"></span>${escape_html(liveCount())}</button> `);
28529
+ $$renderer.push(`<div data-svelte="JobsButton" class="relative" data-testid="jobs-button"><button type="button"${attr_class("floating-anchor-btn tone-amber svelte-1jfxn7m", void 0, { "active": open })}${attr("title", t(() => liveCount() === 1 ? jobslivetitle_one2({ n: liveCount() }) : jobslivetitle_other2({ n: liveCount() })))} data-testid="jobs-button-trigger"><span class="dot svelte-1jfxn7m"></span>${escape_html(liveCount())}</button> `);
28267
28530
  JobsPopup($$renderer, {
28268
28531
  triggerEl,
28269
28532
  jobs: jobs(),
@@ -28289,7 +28552,7 @@ function JobsButton($$renderer, $$props) {
28289
28552
  });
28290
28553
  }
28291
28554
  //#endregion
28292
- //#region src/lib/components/anchor/inject/InjectedShelfPopup.svelte
28555
+ //#region src/lib/components/anchor/inject-anchor/InjectedShelfPopup.svelte
28293
28556
  function InjectedShelfPopup($$renderer, $$props) {
28294
28557
  $$renderer.component(($$renderer) => {
28295
28558
  /**
@@ -28312,6 +28575,7 @@ function InjectedShelfPopup($$renderer, $$props) {
28312
28575
  function $$render_inner($$renderer) {
28313
28576
  FloatingAnchorContainerPopup($$renderer, {
28314
28577
  triggerEl,
28578
+ fitWidth: true,
28315
28579
  title: t(() => injectedfiles1({ n: members.length })),
28316
28580
  titleTestId: "injected-shelf-popup-header",
28317
28581
  popupTestId: "injected-shelf-popup",
@@ -28329,15 +28593,15 @@ function InjectedShelfPopup($$renderer, $$props) {
28329
28593
  let m = each_array[i];
28330
28594
  if (i > 0 && members[i - 1].firstLoad === true && m.firstLoad === false) {
28331
28595
  $$renderer.push("<!--[0-->");
28332
- $$renderer.push(`<hr class="shelf-divider svelte-vu3jcu" data-testid="shelf-first-load-divider"/>`);
28596
+ $$renderer.push(`<hr class="shelf-divider svelte-f316d6" data-testid="shelf-first-load-divider"/>`);
28333
28597
  } else $$renderer.push("<!--[-1-->");
28334
- $$renderer.push(`<!--]--> <div class="shelf-item svelte-vu3jcu" data-testid="injected-shelf-item"${attr("data-display-path", m.displayPath)}>`);
28598
+ $$renderer.push(`<!--]--> <div class="shelf-item svelte-f316d6" data-testid="injected-shelf-item"${attr("data-display-path", m.displayPath)}>`);
28335
28599
  CopyButton($$renderer, {
28336
28600
  value: m.origin === "system-prompt" ? injectedRecordFor(entries, m.displayPath)?.text ?? m.displayPath : injectedFullPath(workspace, m.displayPath),
28337
28601
  title: m.origin === "system-prompt" ? "Copy prompt text — a shelf name, not a file" : "Copy full path",
28338
28602
  class: "shelf-copy"
28339
28603
  });
28340
- $$renderer.push(`<!----> <button type="button" role="menuitem" class="shelf-pick svelte-vu3jcu" data-testid="injected-shelf-pick"${attr("title", m.displayPath)}><span class="shelf-pick-path svelte-vu3jcu">${escape_html(m.displayPath)}</span></button></div>`);
28604
+ $$renderer.push(`<!----> <button type="button" role="menuitem" class="shelf-pick svelte-f316d6" data-testid="injected-shelf-pick"${attr("title", m.displayPath)}><span class="shelf-pick-path svelte-f316d6">${escape_html(m.displayPath)}</span></button></div>`);
28341
28605
  }
28342
28606
  $$renderer.push(`<!--]-->`);
28343
28607
  },
@@ -29204,7 +29468,7 @@ async function executeHostCommand(line, ctx, onNote) {
29204
29468
  }
29205
29469
  }
29206
29470
  //#endregion
29207
- //#region src/lib/components/anchor/inject/InjectedShelfButton.svelte
29471
+ //#region src/lib/components/anchor/inject-anchor/InjectedShelfButton.svelte
29208
29472
  function InjectedShelfButton($$renderer, $$props) {
29209
29473
  $$renderer.component(($$renderer) => {
29210
29474
  /**
@@ -29251,7 +29515,7 @@ function InjectedShelfButton($$renderer, $$props) {
29251
29515
  function $$render_inner($$renderer) {
29252
29516
  if (members().length > 0) {
29253
29517
  $$renderer.push("<!--[0-->");
29254
- $$renderer.push(`<div data-svelte="InjectedShelfButton" class="relative svelte-1nrpld0"><button type="button"${attr_class("floating-anchor-btn tone-maroon svelte-1nrpld0", void 0, { "active": open })}${attr("title", t(injectedtitle1))} data-testid="injected-shelf-button">`);
29518
+ $$renderer.push(`<div data-svelte="InjectedShelfButton" class="relative svelte-145ip4c"><button type="button"${attr_class("floating-anchor-btn tone-maroon svelte-145ip4c", void 0, { "active": open })}${attr("title", t(injectedtitle1))} data-testid="injected-shelf-button">`);
29255
29519
  File_text($$renderer, { size: 14 });
29256
29520
  $$renderer.push(`<!----></button> `);
29257
29521
  InjectedShelfPopup($$renderer, {
@@ -29292,13 +29556,18 @@ function ConversationFloatingAnchor($$renderer, $$props) {
29292
29556
  * far-edge jump. Purely presentational — the viewport and turn groups
29293
29557
  * arrive as props.
29294
29558
  */
29295
- let { groups, container, todos = null, jobsessionid = "", shelfentries = void 0, shelfsessionid = "", shelfworkspace = null, shelfpanelid = null, onshelfnote } = $$props;
29559
+ let { groups, container, todos = null, deliverables = null, onfileopen = void 0, jobsessionid = "", shelfentries = void 0, shelfsessionid = "", shelfworkspace = null, shelfpanelid = null, onshelfnote } = $$props;
29296
29560
  if (container !== void 0) {
29297
29561
  $$renderer.push("<!--[0-->");
29298
29562
  FloatingAnchor($$renderer, {
29299
29563
  children: ($$renderer) => {
29300
29564
  PlanButton($$renderer, { todos: todos ?? [] });
29301
29565
  $$renderer.push(`<!----> `);
29566
+ DeliverablesButton($$renderer, {
29567
+ deliveries: deliverables,
29568
+ onfileopen
29569
+ });
29570
+ $$renderer.push(`<!----> `);
29302
29571
  JobsButton($$renderer, { sessionId: jobsessionid });
29303
29572
  $$renderer.push(`<!----> `);
29304
29573
  if (shelfentries !== void 0) {
@@ -30204,48 +30473,30 @@ var Paging = class {
30204
30473
  }
30205
30474
  };
30206
30475
  //#endregion
30207
- //#region src/lib/components/conversation/MacroRunSheet.svelte
30208
- function MacroRunSheet($$renderer, $$props) {
30476
+ //#region src/lib/components/bar/macro-bar/MacroChip.svelte
30477
+ function MacroChip($$renderer, $$props) {
30209
30478
  $$renderer.component(($$renderer) => {
30210
30479
  /**
30211
- * MacroRunSheet — the Prompt Macro's status surface (ADR D7 + D9,
30212
- * 2026-08-29): a collapsed CHIP above the composer that expands into
30213
- * the run SHEET — one row per executed line, each with one of six
30214
- * state marks (✓ ▶ ⏳ ⊙ ⊘ ✕).
30215
- *
30216
- * Presentational by contract (PRD Module Map): run state, per-line
30217
- * records, and the panel's own poll truth (running, pendingAnswers)
30218
- * arrive as props; every control leaves as a callback. The component
30219
- * never fetches, never polls, never imports the runner — the panel
30220
- * owns the wiring (D7: "the chip reads the panel's existing poll
30221
- * state; the runner itself never polls").
30480
+ * MacroChip — the Prompt Macro's COLLAPSED CHIP (ADR D7, 2026-08-29):
30481
+ * the always-visible layer above the composer. Click toggles the
30482
+ * sheet; Stop is forward-only (unfed lines drop; queued are the
30483
+ * host's — the suffix names the boundary).
30222
30484
  *
30223
- * Three truth layers (D9), honestly kept apart:
30224
- * - runner-exact: ⊙ pending(held) · ⏳ queued · ⊘ skipped · ✕ failed
30225
- * (and ✓ for command lines — they complete host-side, no turn)
30226
- * - host-derived (≤ one events poll): ✓ done / ▶ running — the panel
30227
- * computes `lineMarks` from its OWN store (groupTurns pairing);
30228
- * this component only renders what it is handed
30229
- * - the transcript is the ground truth — this sheet is a map
30485
+ * Extracted from MacroBar (2026-10-19) — the bar owns the expand
30486
+ * state and renders MacroSheet; this component owns the chip label
30487
+ * derivation (phase labels + honest suffixes) and the Stop / Close
30488
+ * buttons.
30230
30489
  *
30231
- * ▶/✓ derivation inputs (props, never fetched): `landedTurns` = how
30232
- * many of the run's turns have landed at this render (the panel pairs
30233
- * fed lines to assistant-turn groups), `running` = the panel's own
30234
- * store.isStreaming — gates ▶ (the first fed line without a landed
30235
- * turn while a turn is in flight).
30236
- *
30237
- * Mention rows (D9): a turn in ANOTHER session cannot derive ✓ from
30238
- * this panel's poll — the row renders its executor note (`sent to
30239
- * <target>`) and progress delegates to the a2a chip stack.
30490
+ * Presentational by contract: run state and the panel's own poll
30491
+ * truth (running, pendingAnswers) arrive as props; every control
30492
+ * leaves as a callback. Never fetches, never polls.
30240
30493
  */
30241
- let { run, running = false, pendingAnswers = 0, onabort, onclose } = $$props;
30242
- /** Sheet expanded state — the chip toggles it (click again to collapse). */
30243
- let expanded = false;
30244
- /** The run is over (either ending) — [Run again] appears (D10). */
30494
+ let { run, running = false, pendingAnswers = 0, expanded = false, onabort, onclose } = $$props;
30495
+ /** The run is over (either ending) — Close (✕) appears (D10). */
30245
30496
  const ended = derived(() => run.phase === "fed" || run.phase === "stopped" || run.phase === "failed");
30246
30497
  /** A live run could still feed (held or mid-feed) — Stop means
30247
- * "stop sending more"; once everything is queued there is nothing
30248
- * left to hold (abort-after-queued honesty, D10). */
30498
+ * "stop sending more"; once everything is queued there is nothing
30499
+ * left to hold (abort-after-queued honesty, D10). */
30249
30500
  const unfedRemain = derived(() => run.fed < run.total);
30250
30501
  const canAbort = derived(() => (run.phase === "held" || run.phase === "feeding") && unfedRemain());
30251
30502
  /** Collapsed-chip suffixes (D5/D7): the honest queued/asking labels. */
@@ -30256,16 +30507,16 @@ function MacroRunSheet($$renderer, $$props) {
30256
30507
  return "";
30257
30508
  });
30258
30509
  /** The line the chip names while feeding/held — the next unfed
30259
- * section's display (feeding k/n · <display>), else the last
30260
- * record's display. */
30510
+ * section's display (feeding k/n · <display>), else the last
30511
+ * record's display. */
30261
30512
  const currentLine = derived(() => {
30262
30513
  const next = run.lines.find((l) => l.state === "pending" && !l.isQuery);
30263
30514
  if (next) return next.display;
30264
30515
  return run.lines.length > 0 ? run.lines[run.lines.length - 1].display : "";
30265
30516
  });
30266
30517
  /** Chip label per phase (D7): feeding k/n · all-queued k queued ·
30267
- * stopped · failed — plus the suffixes above. Sections counted (a
30268
- * block is one — D15). */
30518
+ * stopped · failed — plus the suffixes above. Sections counted (a
30519
+ * block is one — D15). */
30269
30520
  const chipLabel = derived(() => {
30270
30521
  if (run.phase === "feeding") return `macro ▸ ${run.fed + 1}/${run.total} · ${currentLine()}`;
30271
30522
  if (run.phase === "held") return `macro ⏸ held · ${run.fed}/${run.total}${queuedSuffix()}`;
@@ -30273,19 +30524,52 @@ function MacroRunSheet($$renderer, $$props) {
30273
30524
  if (run.phase === "stopped") return `macro ⏹ stopped · ${run.note ?? ""}`;
30274
30525
  return `macro ✕ failed · ${run.note ?? ""}`;
30275
30526
  });
30527
+ $$renderer.push(`<div data-svelte="MacroChip" class="macro-chip svelte-8fijc3"${attr("data-phase", run.phase)} data-testid="macro-chip"><button type="button" class="macro-chip-label svelte-8fijc3"${attr("aria-expanded", expanded)}${attr("title", run.note ?? "Macro run")}><span class="macro-chip-text svelte-8fijc3">${escape_html(chipLabel())}</span> <span class="macro-chip-caret svelte-8fijc3">${escape_html(expanded ? "▾" : "▸")}</span></button> `);
30528
+ if (canAbort() && onabort) {
30529
+ $$renderer.push("<!--[0-->");
30530
+ $$renderer.push(`<button type="button" class="macro-stop svelte-8fijc3" data-testid="macro-stop"${attr("title", t(dropunsubmittedtitle2))}>${escape_html(t(stop))}</button>`);
30531
+ } else $$renderer.push("<!--[-1-->");
30532
+ $$renderer.push(`<!--]--> `);
30533
+ if (ended() && onclose) {
30534
+ $$renderer.push("<!--[0-->");
30535
+ $$renderer.push(`<button type="button" class="macro-close svelte-8fijc3" data-testid="macro-close"${attr("aria-label", t(dismissrunsheet2))}${attr("title", t(dismiss))}>✕</button>`);
30536
+ } else $$renderer.push("<!--[-1-->");
30537
+ $$renderer.push(`<!--]--></div>`);
30538
+ });
30539
+ }
30540
+ //#endregion
30541
+ //#region src/lib/components/bar/macro-bar/MacroBar.svelte
30542
+ function MacroBar($$renderer, $$props) {
30543
+ $$renderer.component(($$renderer) => {
30544
+ /**
30545
+ * MacroBar — the Prompt Macro's status surface (ADR D7 + D9,
30546
+ * 2026-08-29): the always-visible layer above the composer, split
30547
+ * into two children — MacroChip (the collapsed chip + Stop/Close)
30548
+ * and MacroSheet (the expanded per-line rows + held/ended controls).
30549
+ * The bar owns the expand state and forwards everything else.
30550
+ *
30551
+ * Presentational by contract (PRD Module Map): run state and the
30552
+ * panel's own poll truth (running, pendingAnswers) arrive as props;
30553
+ * every control leaves as a callback. The component never fetches,
30554
+ * never polls, never imports the runner — the panel owns the wiring
30555
+ * (D7: "the chip reads the panel's existing poll state; the runner
30556
+ * itself never polls").
30557
+ */
30558
+ let { run, running = false, pendingAnswers = 0, onabort, onclose } = $$props;
30559
+ /** Sheet expanded state — the chip toggles it (click again to collapse). */
30560
+ let expanded = false;
30276
30561
  if (run.phase !== "idle") {
30277
30562
  $$renderer.push("<!--[0-->");
30278
- $$renderer.push(`<div data-svelte="MacroRunSheet" class="macro-run svelte-1ojr83s" data-testid="macro-run"><div class="macro-chip svelte-1ojr83s"${attr("data-phase", run.phase)} data-testid="macro-chip"><button type="button" class="macro-chip-label svelte-1ojr83s"${attr("aria-expanded", expanded)}${attr("title", run.note ?? "Macro run")}><span class="macro-chip-text svelte-1ojr83s">${escape_html(chipLabel())}</span> <span class="macro-chip-caret svelte-1ojr83s">${escape_html("▸")}</span></button> `);
30279
- if (canAbort() && onabort) {
30280
- $$renderer.push("<!--[0-->");
30281
- $$renderer.push(`<button type="button" class="macro-stop svelte-1ojr83s" data-testid="macro-stop"${attr("title", t(dropunsubmittedtitle2))}>${escape_html(t(stop))}</button>`);
30282
- } else $$renderer.push("<!--[-1-->");
30283
- $$renderer.push(`<!--]--> `);
30284
- if (ended() && onclose) {
30285
- $$renderer.push("<!--[0-->");
30286
- $$renderer.push(`<button type="button" class="macro-close svelte-1ojr83s" data-testid="macro-close"${attr("aria-label", t(dismissrunsheet2))}${attr("title", t(dismiss))}>✕</button>`);
30287
- } else $$renderer.push("<!--[-1-->");
30288
- $$renderer.push(`<!--]--></div> `);
30563
+ $$renderer.push(`<div data-svelte="MacroBar" class="macro-run svelte-1xpxh82" data-testid="macro-run">`);
30564
+ MacroChip($$renderer, {
30565
+ run,
30566
+ running,
30567
+ pendingAnswers,
30568
+ expanded,
30569
+ onabort,
30570
+ onclose
30571
+ });
30572
+ $$renderer.push(`<!----> `);
30289
30573
  $$renderer.push("<!--[-1-->");
30290
30574
  $$renderer.push(`<!--]--></div>`);
30291
30575
  } else $$renderer.push("<!--[-1-->");
@@ -30293,7 +30577,72 @@ function MacroRunSheet($$renderer, $$props) {
30293
30577
  });
30294
30578
  }
30295
30579
  //#endregion
30296
- //#region src/lib/components/conversation/GoalBar.svelte
30580
+ //#region src/lib/components/bar/goal-bar/GoalChip.svelte
30581
+ function GoalChip($$renderer, $$props) {
30582
+ $$renderer.component(($$renderer) => {
30583
+ /**
30584
+ * GoalChip — the always-visible collapsed layer of the goal bar (ADR
30585
+ * "The Goal Bar", 2026-09-08, D2): phase glyph, phase label plus
30586
+ * truncated objective, caret that toggles the sheet, and the phase
30587
+ * action buttons (Pause/Resume, Edit, Clear). Extracted from GoalBar as
30588
+ * a presentational child; the expanded state stays GoalBar-owned and
30589
+ * arrives as a prop with a toggle callback.
30590
+ */
30591
+ let { goal, blockedTitle, expanded = false, onpause, onresume, onedit, onclear } = $$props;
30592
+ /** The chip's phase glyph (mirrors DSH's GoalBar language). */
30593
+ const glyph = derived(() => {
30594
+ if (goal.phase === "paused") return "⏸";
30595
+ if (goal.phase === "blocked") return "⚠";
30596
+ return "▶";
30597
+ });
30598
+ /** The objective the chip names, truncated for the one-line title. */
30599
+ const shortObjective = derived(() => goal.objective.length > 80 ? goal.objective.slice(0, 79) + "…" : goal.objective);
30600
+ /** Which phase action the chip offers: Pause on active, Resume on
30601
+ * paused, none on blocked (the host demands a reason fix first). */
30602
+ const phaseAction = derived(() => goal.phase === "active" ? "pause" : goal.phase === "paused" ? "resume" : void 0);
30603
+ $$renderer.push(`<div data-svelte="GoalChip" class="goal-chip svelte-ffx44v"${attr("data-phase", goal.phase)} data-testid="goal-chip"${attr("title", blockedTitle)}><button type="button" class="goal-chip-label svelte-ffx44v"${attr("aria-expanded", expanded)}${attr("title", blockedTitle ?? goal.objective)}><span class="goal-chip-glyph svelte-ffx44v" aria-hidden="true">${escape_html(glyph())}</span> <span class="goal-chip-text svelte-ffx44v">goal ${escape_html(goal.phase)} · ${escape_html(shortObjective())}</span> <span class="goal-chip-caret svelte-ffx44v">${escape_html(expanded ? "▾" : "▸")}</span></button> `);
30604
+ if (phaseAction() === "pause" && onpause) {
30605
+ $$renderer.push("<!--[0-->");
30606
+ $$renderer.push(`<button type="button" class="goal-action svelte-ffx44v" data-testid="goal-pause"${attr("title", t(pausegoal1))}>${escape_html(t(pause))}</button>`);
30607
+ } else $$renderer.push("<!--[-1-->");
30608
+ $$renderer.push(`<!--]--> `);
30609
+ if (phaseAction() === "resume" && onresume) {
30610
+ $$renderer.push("<!--[0-->");
30611
+ $$renderer.push(`<button type="button" class="goal-action svelte-ffx44v" data-testid="goal-resume"${attr("title", t(resumegoal1))}>${escape_html(t(resume))}</button>`);
30612
+ } else $$renderer.push("<!--[-1-->");
30613
+ $$renderer.push(`<!--]--> `);
30614
+ if (onedit) {
30615
+ $$renderer.push("<!--[0-->");
30616
+ $$renderer.push(`<button type="button" class="goal-action svelte-ffx44v" data-testid="goal-edit"${attr("title", t(editobjectivetitle2))}>${escape_html(t(edit))}</button>`);
30617
+ } else $$renderer.push("<!--[-1-->");
30618
+ $$renderer.push(`<!--]--> `);
30619
+ if (onclear) {
30620
+ $$renderer.push("<!--[0-->");
30621
+ $$renderer.push(`<button type="button" class="goal-action goal-clear svelte-ffx44v" data-testid="goal-clear"${attr("aria-label", t(clearthegoal2))}${attr("title", t(clearbtn1))}>✕</button>`);
30622
+ } else $$renderer.push("<!--[-1-->");
30623
+ $$renderer.push(`<!--]--></div>`);
30624
+ });
30625
+ }
30626
+ //#endregion
30627
+ //#region src/lib/components/bar/goal-bar/GoalEditor.svelte
30628
+ function GoalEditor($$renderer, $$props) {
30629
+ $$renderer.component(($$renderer) => {
30630
+ /**
30631
+ * GoalEditor — the goal editor form (Goal Editor ADR D2/D4): pre-filled
30632
+ * fields, Enter submits, Escape cancels; buttons mirror the keys.
30633
+ * Extracted from GoalBar as a presentational child; the editor state is
30634
+ * panel-owned (GoalBar passes it through) — this component renders
30635
+ * fields and emits callbacks only.
30636
+ */
30637
+ let { editor} = $$props;
30638
+ $$renderer.push(`<div data-svelte="GoalEditor" class="goal-edit-form svelte-c4750g" data-testid="goal-edit-form"><label class="goal-edit-label svelte-c4750g"><span>objective</span> <textarea data-testid="goal-edit-objective" rows="2" class="svelte-c4750g">`);
30639
+ const $$body = escape_html(editor.objective);
30640
+ if ($$body) $$renderer.push(`${$$body}`);
30641
+ $$renderer.push(`</textarea></label> <label class="goal-edit-label svelte-c4750g"><span>${escape_html(t(maxrounds1))}</span> <input type="number" min="1" step="1" data-testid="goal-edit-rounds"${attr("value", editor.maxGoalRounds)} class="svelte-c4750g"/></label> <div class="goal-controls svelte-c4750g"><button type="button" data-testid="goal-edit-submit" class="svelte-c4750g">${escape_html(t(save))}</button> <button type="button" data-testid="goal-edit-cancel" class="svelte-c4750g">${escape_html(t(cancel))}</button></div></div>`);
30642
+ });
30643
+ }
30644
+ //#endregion
30645
+ //#region src/lib/components/bar/goal-bar/GoalBar.svelte
30297
30646
  function GoalBar($$renderer, $$props) {
30298
30647
  $$renderer.component(($$renderer) => {
30299
30648
  /**
@@ -30302,7 +30651,7 @@ function GoalBar($$renderer, $$props) {
30302
30651
  * plus truncated objective — that expands into the goal SHEET (rounds
30303
30652
  * counter, blocked reason when present).
30304
30653
  *
30305
- * Presentational by contract (the MacroRunSheet template): the goal
30654
+ * Presentational by contract (the MacroBar template): the goal
30306
30655
  * value arrives as a prop; every action leaves as a zero-arg callback
30307
30656
  * the panel maps to `/goal <verb>` lines. The component never fetches,
30308
30657
  * never polls, imports no services and no projection module — the
@@ -30320,47 +30669,23 @@ function GoalBar($$renderer, $$props) {
30320
30669
  let expanded = false;
30321
30670
  /** The blocked phase carries its reason; the chip title shows it. */
30322
30671
  const blockedTitle = derived(() => goal?.phase === "blocked" && goal.blockedReason ? "blocked: " + goal.blockedReason.code + " — " + goal.blockedReason.message : void 0);
30323
- /** The chip's phase glyph (mirrors DSH's GoalBar language). */
30324
- const glyph = derived(() => {
30325
- if (!goal) return "";
30326
- if (goal.phase === "paused") return "⏸";
30327
- if (goal.phase === "blocked") return "⚠";
30328
- return "▶";
30329
- });
30330
- /** The objective the chip names, truncated for the one-line title. */
30331
- const shortObjective = derived(() => goal && goal.objective.length > 80 ? goal.objective.slice(0, 79) + "…" : goal?.objective ?? "");
30332
- /** Which phase action the chip offers: Pause on active, Resume on
30333
- * paused, none on blocked (the host demands a reason fix first). */
30334
- const phaseAction = derived(() => goal?.phase === "active" ? "pause" : goal?.phase === "paused" ? "resume" : void 0);
30335
30672
  if (goal && goal.phase !== "complete") {
30336
30673
  $$renderer.push("<!--[0-->");
30337
- $$renderer.push(`<div data-svelte="GoalBar" class="goal-bar svelte-132xors" data-testid="goal-bar"><div class="goal-chip svelte-132xors"${attr("data-phase", goal.phase)} data-testid="goal-chip"${attr("title", blockedTitle())}><button type="button" class="goal-chip-label svelte-132xors"${attr("aria-expanded", expanded)}${attr("title", blockedTitle() ?? goal.objective)}><span class="goal-chip-glyph svelte-132xors" aria-hidden="true">${escape_html(glyph())}</span> <span class="goal-chip-text svelte-132xors">goal ${escape_html(goal.phase)} · ${escape_html(shortObjective())}</span> <span class="goal-chip-caret svelte-132xors">${escape_html("▸")}</span></button> `);
30338
- if (phaseAction() === "pause" && onpause) {
30339
- $$renderer.push("<!--[0-->");
30340
- $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-pause"${attr("title", t(pausegoal1))}>${escape_html(t(pause))}</button>`);
30341
- } else $$renderer.push("<!--[-1-->");
30342
- $$renderer.push(`<!--]--> `);
30343
- if (phaseAction() === "resume" && onresume) {
30344
- $$renderer.push("<!--[0-->");
30345
- $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-resume"${attr("title", t(resumegoal1))}>${escape_html(t(resume))}</button>`);
30346
- } else $$renderer.push("<!--[-1-->");
30347
- $$renderer.push(`<!--]--> `);
30348
- if (onedit) {
30349
- $$renderer.push("<!--[0-->");
30350
- $$renderer.push(`<button type="button" class="goal-action svelte-132xors" data-testid="goal-edit"${attr("title", t(editobjectivetitle2))}>${escape_html(t(edit))}</button>`);
30351
- } else $$renderer.push("<!--[-1-->");
30352
- $$renderer.push(`<!--]--> `);
30353
- if (onclear) {
30354
- $$renderer.push("<!--[0-->");
30355
- $$renderer.push(`<button type="button" class="goal-action goal-clear svelte-132xors" data-testid="goal-clear"${attr("aria-label", t(clearthegoal2))}${attr("title", t(clearbtn1))}>✕</button>`);
30356
- } else $$renderer.push("<!--[-1-->");
30357
- $$renderer.push(`<!--]--></div> `);
30674
+ $$renderer.push(`<div data-svelte="GoalBar" class="goal-bar svelte-fcoddu" data-testid="goal-bar">`);
30675
+ GoalChip($$renderer, {
30676
+ goal,
30677
+ blockedTitle: blockedTitle(),
30678
+ expanded,
30679
+ onpause,
30680
+ onresume,
30681
+ onedit,
30682
+ onclear
30683
+ });
30684
+ $$renderer.push(`<!----> `);
30358
30685
  if (editor) {
30359
30686
  $$renderer.push("<!--[0-->");
30360
- $$renderer.push(`<div class="goal-edit-form svelte-132xors" data-testid="goal-edit-form"><label class="goal-edit-label svelte-132xors"><span>objective</span> <textarea data-testid="goal-edit-objective" rows="2" class="svelte-132xors">`);
30361
- const $$body = escape_html(editor.objective);
30362
- if ($$body) $$renderer.push(`${$$body}`);
30363
- $$renderer.push(`</textarea></label> <label class="goal-edit-label svelte-132xors"><span>${escape_html(t(maxrounds1))}</span> <input type="number" min="1" step="1" data-testid="goal-edit-rounds"${attr("value", editor.maxGoalRounds)} class="svelte-132xors"/></label> <div class="goal-controls svelte-132xors"><button type="button" data-testid="goal-edit-submit" class="svelte-132xors">${escape_html(t(save))}</button> <button type="button" data-testid="goal-edit-cancel" class="svelte-132xors">${escape_html(t(cancel))}</button></div></div>`);
30687
+ GoalEditor($$renderer, {
30688
+ editor});
30364
30689
  } else $$renderer.push("<!--[-1-->");
30365
30690
  $$renderer.push(`<!--]--> `);
30366
30691
  $$renderer.push("<!--[-1-->");
@@ -30485,7 +30810,7 @@ function ConversationPanel($$renderer, $$props) {
30485
30810
  * existing command banner. Catalog reads fire on first menu open,
30486
30811
  * never at mount (cold sessions stay cold).
30487
30812
  */
30488
- let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0, onFileLink = void 0, onFileOpen = void 0 } = $$props;
30813
+ let { panelId = null, sessionId, title: initialTitleProp = null, workspace = null, workspaces = [], agent, agentDisplay = null, subagent = false, depth = 0, parentSessionId = null, entries, lastSeq, running, hasMore = void 0, pendingAnswers = [], settledAnswers = [], permission = null, imageLimits = void 0, knobEvents = void 0, deliverables = void 0, a2aRows = [], a2aTitles = {}, onNeedCold = void 0, onClose = void 0, focusComposer = false, oncomposerfocus = void 0, focused = false, onOpenExplorer = void 0, onFileLink = void 0, onFileOpen = void 0 } = $$props;
30489
30814
  setPanelMode(true);
30490
30815
  setConversationSession(sessionId);
30491
30816
  const store = createConversationStore(sessionId);
@@ -30494,6 +30819,7 @@ function ConversationPanel($$renderer, $$props) {
30494
30819
  store.applyStatus(running, lastSeq);
30495
30820
  store.applyAnswers(pendingAnswers, settledAnswers);
30496
30821
  store.seedPermission(permission, knobEvents);
30822
+ if (deliverables !== void 0) store.seedDeliverables(deliverables);
30497
30823
  /** Chip popup state (2026-08-22, OCI pattern): ONE open chip at a time —
30498
30824
  * the id of the expanded entry; detail renders AFTER the chip row.
30499
30825
  * Per-panel by construction (moved here with the block). */
@@ -30761,6 +31087,8 @@ function ConversationPanel($$renderer, $$props) {
30761
31087
  groups: groups(),
30762
31088
  container: viewport,
30763
31089
  todos: store.todos ?? null,
31090
+ deliverables: store.deliverables,
31091
+ onfileopen: onFileOpen,
30764
31092
  jobsessionid: sessionId,
30765
31093
  shelfentries: store.entries,
30766
31094
  shelfsessionid: sessionId,
@@ -30795,7 +31123,7 @@ function ConversationPanel($$renderer, $$props) {
30795
31123
  $$renderer.push("<!--[0-->");
30796
31124
  if (macroOurs()) {
30797
31125
  $$renderer.push("<!--[0-->");
30798
- MacroRunSheet($$renderer, {
31126
+ MacroBar($$renderer, {
30799
31127
  run: macroRun(),
30800
31128
  landedTurns: macroLanded(),
30801
31129
  running: store.isStreaming,
@@ -33586,7 +33914,8 @@ async function fetchColdFromWire(sessionId) {
33586
33914
  settledAnswers: events.settledAnswers ?? [],
33587
33915
  permission: events.permission ?? null,
33588
33916
  imageLimits: events.imageLimits ?? null,
33589
- knobEvents: events.knobEvents ?? []
33917
+ knobEvents: events.knobEvents ?? [],
33918
+ deliverables: events.deliverables ?? []
33590
33919
  };
33591
33920
  }
33592
33921
  //#endregion
@@ -33810,7 +34139,8 @@ function seedColdOf(data) {
33810
34139
  settledAnswers: d.settledAnswers ?? [],
33811
34140
  permission: d.permission ?? null,
33812
34141
  imageLimits: d.imageLimits ?? null,
33813
- knobEvents: d.knobEvents ?? []
34142
+ knobEvents: d.knobEvents ?? [],
34143
+ deliverables: d.deliverables ?? []
33814
34144
  } : void 0;
33815
34145
  }
33816
34146
  //#endregion
@@ -34015,6 +34345,7 @@ function _page($$renderer, $$props) {
34015
34345
  permission: cold.permission,
34016
34346
  imageLimits: cold.imageLimits ?? void 0,
34017
34347
  knobEvents: cold.knobEvents,
34348
+ deliverables: cold.deliverables,
34018
34349
  a2aRows: a2aRowsFor(p.sessionId),
34019
34350
  a2aTitles: spineTitles(),
34020
34351
  onOpenExplorer: openWorkspaceExplorer,
@@ -34151,4 +34482,4 @@ function _page($$renderer, $$props) {
34151
34482
  }
34152
34483
 
34153
34484
  export { _page as default };
34154
- //# sourceMappingURL=_page.svelte.js-BoCqON33.js.map
34485
+ //# sourceMappingURL=_page.svelte.js-DrMNc6ih.js.map