@yemi33/minions 0.1.2423 → 0.1.2425

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 (184) hide show
  1. package/bin/install-internal-minions.js +1209 -0
  2. package/bin/minions.js +75 -9
  3. package/dashboard/docs/typography.md +27 -12
  4. package/dashboard/js/command-center.js +13 -11
  5. package/dashboard/js/live-stream.js +1 -1
  6. package/dashboard/js/memory-search.js +388 -43
  7. package/dashboard/js/modal-qa.js +5 -5
  8. package/dashboard/js/qa.js +39 -26
  9. package/dashboard/js/refresh.js +37 -18
  10. package/dashboard/js/render-agents.js +14 -18
  11. package/dashboard/js/render-dispatch.js +14 -74
  12. package/dashboard/js/render-inbox.js +3 -3
  13. package/dashboard/js/render-meetings.js +8 -8
  14. package/dashboard/js/render-other.js +45 -20
  15. package/dashboard/js/render-pipelines.js +6 -6
  16. package/dashboard/js/render-plans.js +14 -14
  17. package/dashboard/js/render-prd.js +46 -46
  18. package/dashboard/js/render-prs.js +9 -65
  19. package/dashboard/js/render-schedules.js +5 -5
  20. package/dashboard/js/render-skills.js +6 -6
  21. package/dashboard/js/render-utils.js +4 -4
  22. package/dashboard/js/render-watches.js +4 -16
  23. package/dashboard/js/render-work-items.js +95 -107
  24. package/dashboard/js/settings.js +175 -74
  25. package/dashboard/layout.html +3 -2
  26. package/dashboard/pages/inbox.html +1 -1
  27. package/dashboard/pages/work.html +1 -1
  28. package/dashboard/shared/model-display.js +9 -0
  29. package/dashboard/shared/watches-source.js +43 -0
  30. package/dashboard/shared/welcome-popup.js +259 -0
  31. package/dashboard/slim/body.html +6 -6
  32. package/dashboard/slim/js/chat.js +4 -2
  33. package/dashboard/slim/js/history.js +10 -3
  34. package/dashboard/slim/js/modals-tiles.js +85 -16
  35. package/dashboard/slim/js/status.js +12 -16
  36. package/dashboard/slim/styles.css +24 -4
  37. package/dashboard/styles.css +62 -27
  38. package/dashboard-build.js +8 -2
  39. package/dashboard.js +3854 -2514
  40. package/docs/README.md +6 -4
  41. package/docs/api-errors.md +144 -0
  42. package/docs/auto-discovery.md +83 -61
  43. package/docs/capture-demos.js +173 -30
  44. package/docs/command-center.md +5 -1
  45. package/docs/completion-reports.md +127 -11
  46. package/docs/constants.md +15 -3
  47. package/docs/constellation-style-telemetry.md +2 -2
  48. package/docs/copilot-cli-schema.md +32 -22
  49. package/docs/cross-repo-plans.md +30 -30
  50. package/docs/demo/memory-system.html +1 -1
  51. package/docs/deprecated.json +132 -18
  52. package/docs/diagnostics-memory.md +8 -4
  53. package/docs/human-vs-automated.md +2 -2
  54. package/docs/internal-install.md +190 -0
  55. package/docs/kb-pr3223-cascade-archiving.md +16 -0
  56. package/docs/kb-pr696-merge-conflict-docs.md +23 -0
  57. package/docs/kb-sweep.md +2 -2
  58. package/docs/keep-processes.md +8 -1
  59. package/docs/live-checkout-mode.md +12 -7
  60. package/docs/managed-spawn.md +21 -3
  61. package/docs/named-agents.md +3 -2
  62. package/docs/plan-lifecycle.md +32 -32
  63. package/docs/pr-auto-fix-dispatch.md +3 -3
  64. package/docs/pr-review-fix-loop.md +6 -6
  65. package/docs/pr-screenshots/pr-899/worker-pool-worktrees-AFTER.png +0 -0
  66. package/docs/pr-screenshots/pr-899/worker-pool-worktrees-BEFORE.png +0 -0
  67. package/docs/pr-screenshots/pr-979/auto-fix-pane-AFTER.png +0 -0
  68. package/docs/pr-screenshots/pr-979/auto-fix-pane-BEFORE.png +0 -0
  69. package/docs/pr-screenshots/pr-985/pr-column-em-dash-AFTER.png +0 -0
  70. package/docs/pr-screenshots/pr-985/pr-column-em-dash-BEFORE.png +0 -0
  71. package/docs/qa-runbook-lifecycle.md +67 -51
  72. package/docs/qa-runbooks.md +2 -2
  73. package/docs/runtime-adapters.md +101 -50
  74. package/docs/security.md +28 -0
  75. package/docs/self-improvement.md +47 -13
  76. package/docs/skills.md +29 -0
  77. package/docs/slim-ux/concepts.md +2 -2
  78. package/docs/specs/agent-configurability.md +43 -41
  79. package/docs/specs/agent-rename.md +13 -13
  80. package/docs/team-memory.md +283 -14
  81. package/docs/tutorials/03-plan-driven-feature.md +3 -3
  82. package/docs/tutorials/04-runtimes-and-harness.md +18 -21
  83. package/docs/tutorials/08-operations-and-recovery.md +3 -2
  84. package/docs/tutorials/README.md +4 -3
  85. package/docs/visual-evidence-ci.md +103 -0
  86. package/docs/watches.md +35 -30
  87. package/docs/worktree-lifecycle.md +151 -13
  88. package/engine/acp-transport.js +1 -0
  89. package/engine/ado.js +80 -33
  90. package/engine/agent-api-validation.js +571 -0
  91. package/engine/agent-worker-pool.js +7 -6
  92. package/engine/api-contracts/agent-content.js +761 -0
  93. package/engine/api-contracts/cc-ops.js +219 -0
  94. package/engine/api-contracts/config-runtime.js +419 -0
  95. package/engine/api-contracts/core.js +138 -0
  96. package/engine/api-contracts/index.js +506 -0
  97. package/engine/api-contracts/orchestration.js +602 -0
  98. package/engine/api-contracts/pull-requests.js +323 -0
  99. package/engine/api-contracts/qa-process.js +764 -0
  100. package/engine/api-contracts/work-plan-prd.js +494 -0
  101. package/engine/api-validation.js +543 -0
  102. package/engine/cc-api-validation.js +586 -0
  103. package/engine/cc-worker-pool.js +9 -1
  104. package/engine/cleanup.js +393 -271
  105. package/engine/cli.js +65 -7
  106. package/engine/comment-classifier.js +70 -5
  107. package/engine/consolidation.js +123 -5
  108. package/engine/content-api-validation.js +606 -0
  109. package/engine/create-pr-worktree.js +22 -1
  110. package/engine/db/migrations/027-review-learning-lifecycle.js +162 -0
  111. package/engine/dispatch.js +33 -0
  112. package/engine/distribution.js +189 -0
  113. package/engine/execution-model.js +59 -0
  114. package/engine/features.js +12 -0
  115. package/engine/github.js +67 -25
  116. package/engine/harness-context.js +313 -0
  117. package/engine/inbox-store.js +1 -1
  118. package/engine/kb-sweep.js +161 -38
  119. package/engine/keep-process-sweep.js +43 -3
  120. package/engine/lifecycle.js +1066 -165
  121. package/engine/llm.js +4 -0
  122. package/engine/managed-spawn.js +463 -48
  123. package/engine/meeting.js +197 -34
  124. package/engine/memory-retrieval.js +280 -0
  125. package/engine/memory-store.js +821 -38
  126. package/engine/model-discovery.js +17 -3
  127. package/engine/pipeline.js +802 -14
  128. package/engine/plan-prd-validation.js +745 -0
  129. package/engine/playbook.js +206 -17
  130. package/engine/pooled-agent-process.js +6 -1
  131. package/engine/pr-action.js +1 -1
  132. package/engine/pr-issue-validation.js +653 -0
  133. package/engine/pr-resolve.js +75 -13
  134. package/engine/prd-store.js +39 -6
  135. package/engine/preflight.js +7 -2
  136. package/engine/process-utils.js +79 -31
  137. package/engine/projects.js +198 -12
  138. package/engine/promotion.js +371 -0
  139. package/engine/qa-from-prd.js +3 -0
  140. package/engine/qa-process-validation.js +572 -0
  141. package/engine/qa-runbooks.js +41 -37
  142. package/engine/qa-runners/maestro.js +11 -7
  143. package/engine/qa-runners/playwright.js +37 -14
  144. package/engine/qa-runners.js +9 -10
  145. package/engine/qa-runs.js +124 -11
  146. package/engine/qa-sessions.js +139 -40
  147. package/engine/quarantine-refs.js +81 -11
  148. package/engine/queries.js +163 -9
  149. package/engine/review-learning-backfill.js +482 -0
  150. package/engine/review-learning.js +1236 -0
  151. package/engine/runtimes/claude.js +60 -2
  152. package/engine/runtimes/codex.js +57 -16
  153. package/engine/runtimes/contract.js +21 -0
  154. package/engine/runtimes/copilot.js +51 -3
  155. package/engine/runtimes/index.js +1 -0
  156. package/engine/scheduler.js +201 -32
  157. package/engine/settings-validation.js +909 -0
  158. package/engine/shared.js +705 -208
  159. package/engine/spawn-agent.js +48 -21
  160. package/engine/steering-constraints.js +31 -0
  161. package/engine/steering-store.js +10 -2
  162. package/engine/steering.js +14 -2
  163. package/engine/timeout.js +404 -111
  164. package/engine/untrusted-fence.js +24 -10
  165. package/engine/watch-actions.js +7 -2
  166. package/engine/watches.js +353 -51
  167. package/engine/work-item-validation.js +561 -0
  168. package/engine/work-items-store.js +61 -1
  169. package/engine/worktree-gc.js +656 -37
  170. package/engine/worktree-preflight.js +154 -0
  171. package/engine.js +2068 -342
  172. package/package.json +1 -1
  173. package/playbooks/_pr-description-audit.md +88 -41
  174. package/playbooks/build-fix-complex.md +3 -3
  175. package/playbooks/docs.md +2 -2
  176. package/playbooks/fix.md +18 -18
  177. package/playbooks/implement.md +18 -18
  178. package/playbooks/qa-session-draft.md +10 -12
  179. package/playbooks/qa-session-execute.md +16 -12
  180. package/playbooks/qa-validate.md +8 -7
  181. package/playbooks/shared-rules.md +45 -0
  182. package/playbooks/test.md +4 -0
  183. package/prompts/cc-system.md +1 -1
  184. package/skills/check-self-authored-review-comment/SKILL.md +2 -2
@@ -119,19 +119,13 @@
119
119
  // Reflect the Command Center's resolved runtime + model in the Actions panel
120
120
  // header (slim-ux only — classic chrome is untouched). Source is the same
121
121
  // /api/status payload the cockpit polls: autoMode.ccModel (config.engine
122
- // ccModel → defaultModel → runtime default) and autoMode.ccCli. When no model
123
- // is resolvable (runtime picks its own default), the badge stays hidden rather
124
- // than guessing. textContent keeps it XSS-safe — the values come from config.
122
+ // ccModel → defaultModel → runtime default) and autoMode.ccCli. When the
123
+ // runtime picks its own model, autoMode.ccModelDisplay carries the latest
124
+ // concrete model reported by that runtime. textContent keeps config values XSS-safe.
125
125
  function updateCcModelBadge(model, cli) {
126
126
  var badge = document.getElementById('cc-model-badge');
127
127
  if (!badge) return;
128
- var m = (model === null || model === undefined) ? '' : String(model).trim();
129
- if (!m) {
130
- badge.hidden = true;
131
- badge.textContent = '';
132
- badge.removeAttribute('title');
133
- return;
134
- }
128
+ var m = MinionsModelDisplay.label(model);
135
129
  var c = (cli === null || cli === undefined) ? '' : String(cli).trim();
136
130
  var label = c ? (c + ' · ' + m) : m;
137
131
  badge.textContent = label;
@@ -144,7 +138,7 @@
144
138
  lastStatusData = data;
145
139
  // ── Command Center model badge (Actions panel header) ──────
146
140
  var autoMode = data.autoMode || {};
147
- updateCcModelBadge(autoMode.ccModel, autoMode.ccCli);
141
+ updateCcModelBadge(autoMode.ccModelDisplay || autoMode.ccModel, autoMode.ccCli);
148
142
 
149
143
  // ── Engine tile ────────────────────────────────────────────
150
144
  var engine = data.engine || {};
@@ -231,13 +225,17 @@
231
225
  activePrs.length === 0 ? null : (failingPrs.length ? 'red' : 'blue')
232
226
  );
233
227
 
234
- // ── Watches tile ───────────────────────────────────────────
228
+ // ── Automation tile (Watches · Schedules · Pipelines) ─────────
229
+ // The at-a-glance indicator stays watches-driven: schedule/pipeline
230
+ // counts are not carried by the status poll, and the task explicitly
231
+ // says not to invent new API calls just for the tile count. The detail
232
+ // modal (renderAutomationTileBody) embeds all three classic screens.
235
233
  var watches = Array.isArray(data.watches) ? data.watches : [];
236
234
  var activeWatches = watches.filter(function(w) { return w && w.status === 'active'; });
237
235
  updateTile(
238
- 'watches',
236
+ 'automation',
239
237
  activeWatches.length,
240
- activeWatches.length ? 'monitoring' : 'no watches set',
238
+ activeWatches.length ? 'monitoring' : 'no automation set',
241
239
  activeWatches.length ? 'blue' : null
242
240
  );
243
241
 
@@ -266,5 +264,3 @@
266
264
  if (hStamp) hStamp.textContent = relTime(data.timestamp || Date.now());
267
265
  }
268
266
 
269
-
270
-
@@ -368,16 +368,25 @@
368
368
  text-align: center;
369
369
  margin-top: 24px;
370
370
  }
371
+ /* Suggested starter prompts (W-ms0vc4d0000ve615). Slim's global scale only
372
+ defines --space-1..5 (4/8/12/16/20); --space-6 / --space-8 exist solely
373
+ inside the #detail-panel scope, so referencing them here made `padding`
374
+ and `margin` invalid at computed-value time — the pill rendered with
375
+ zero padding and the group lost its spacing. Stay on the slim scale. */
371
376
  .cc-suggestions {
372
377
  display: flex;
378
+ flex-wrap: wrap;
373
379
  justify-content: center;
380
+ align-items: center;
381
+ gap: var(--space-2);
374
382
  width: 100%;
375
- margin: var(--space-8) auto;
383
+ margin: var(--space-3) auto;
376
384
  }
385
+ #chat-suggestions-host .cc-suggestions { margin: var(--space-2) 0; }
377
386
  .cc-suggestion {
378
387
  appearance: none;
379
388
  max-width: 100%;
380
- padding: var(--space-4) var(--space-6);
389
+ padding: var(--space-2) var(--space-4);
381
390
  border: 1px solid var(--border);
382
391
  border-radius: 999px;
383
392
  background: var(--surface2);
@@ -721,11 +730,13 @@
721
730
  #slim-tile-modal.tile-modal--work .modal,
722
731
  #slim-tile-modal.tile-modal--plans .modal,
723
732
  #slim-tile-modal.tile-modal--prs .modal,
733
+ #slim-tile-modal.tile-modal--automation .modal,
724
734
  #slim-settings-modal .modal { width: calc(100vw - 32px); max-width: 1600px; }
725
735
  #slim-tile-modal.tile-modal--engine .modal-body,
726
736
  #slim-tile-modal.tile-modal--work .modal-body,
727
737
  #slim-tile-modal.tile-modal--plans .modal-body,
728
738
  #slim-tile-modal.tile-modal--prs .modal-body,
739
+ #slim-tile-modal.tile-modal--automation .modal-body,
729
740
  #slim-settings-modal .modal-body { padding: 0; }
730
741
  .slim-engine-embed,
731
742
  .slim-work-embed,
@@ -735,6 +746,15 @@
735
746
  display: block; width: 100%; height: calc(100vh - 96px); min-height: 420px;
736
747
  border: 0; background: var(--bg);
737
748
  }
749
+ /* Automation tile (Watches · Schedules · Pipelines) — a tabbed composite
750
+ inside the shared wide tile-modal. The tab bar sits above the embedded
751
+ classic screen, so the iframe height leaves room for it (vs the padless
752
+ full-height embeds above). Reuses the .kn-tab pill primitive. */
753
+ .slim-automation-tabs { padding: 12px 16px 0; }
754
+ .slim-automation-embed {
755
+ display: block; width: 100%; height: calc(100vh - 148px); min-height: 320px;
756
+ border: 0; background: var(--bg);
757
+ }
738
758
  .tile-item {
739
759
  display: block;
740
760
  text-decoration: none;
@@ -1049,8 +1069,8 @@
1049
1069
  .cockpit-grid > [data-tile="queued"],
1050
1070
  .cockpit-grid > [data-tile="dispatches"],
1051
1071
  .cockpit-grid > [data-tile="prs"] { grid-column: span 2; }
1052
- /* Row 3: Watches | Knowledge | Plans — three equal columns (2 of 6 each). */
1053
- .cockpit-grid > [data-tile="watches"],
1072
+ /* Row 3: Automation | Knowledge | Plans — three equal columns (2 of 6 each). */
1073
+ .cockpit-grid > [data-tile="automation"],
1054
1074
  .cockpit-grid > [data-tile="knowledge"],
1055
1075
  .cockpit-grid > [data-tile="plans"] { grid-column: span 2; }
1056
1076
  .cockpit-tile {
@@ -187,7 +187,7 @@
187
187
  .token-chart { display: flex; align-items: flex-end; gap: 3px; height: 80px; margin: 8px 0; }
188
188
  .token-bar { flex: 1; min-width: 8px; max-width: 24px; background: var(--blue); border-radius: 2px 2px 0 0; position: relative; cursor: default; transition: background 0.15s; }
189
189
  .token-bar:hover { background: var(--green); }
190
- .token-bar-tip { display: none; position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: var(--surface); border: 1px solid var(--border); border-radius: 4px; padding: 3px 6px; font-size: var(--text-xs); white-space: nowrap; z-index: 10; color: var(--text); }
190
+ .token-bar-tip { display: none; position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: var(--surface); border: 1px solid var(--border); border-radius: 4px; padding: 3px 6px; font-size: var(--text-sm); white-space: nowrap; z-index: 10; color: var(--text); }
191
191
  .token-bar:hover .token-bar-tip { display: block; }
192
192
  .token-chart-labels { display: flex; gap: 3px; }
193
193
  .token-chart-labels span { flex: 1; min-width: 8px; max-width: 24px; font-size: var(--text-xs); color: var(--muted); text-align: center; overflow: hidden; }
@@ -208,7 +208,7 @@
208
208
  .kb-tab { background: var(--surface2); border: 1px solid var(--border); color: var(--muted); font-size: var(--text-base); cursor: pointer; padding: var(--space-1) var(--space-5); border-radius: var(--radius-sm); transition: all var(--transition-base); }
209
209
  .kb-tab:hover { color: var(--text); border-color: var(--text); }
210
210
  .kb-tab.active { color: var(--blue); border-color: var(--blue); background: rgba(88,166,255,0.08); }
211
- .kb-tab .badge { background: var(--border); color: var(--text); font-size: var(--text-xs); padding: 0 5px; border-radius: var(--radius-lg); margin-left: var(--space-2); }
211
+ .kb-tab .badge { background: var(--border); color: var(--text); font-size: var(--text-sm); padding: 0 5px; border-radius: var(--radius-lg); margin-left: var(--space-2); }
212
212
  .kb-list { max-height: 400px; overflow-y: auto; padding: var(--space-3) var(--space-4) 0 0; }
213
213
  .kb-item { display: flex; align-items: flex-start; gap: var(--space-5); padding: var(--space-4) 0; border-bottom: 1px solid var(--border); cursor: pointer; transition: background var(--transition-fast); }
214
214
  .kb-item:hover { background: var(--surface2); }
@@ -293,7 +293,7 @@
293
293
  .prd-item-priority.high { background: rgba(248,81,73,0.15); color: var(--red); }
294
294
  .prd-item-priority.medium { background: rgba(210,153,34,0.15); color: var(--yellow); }
295
295
  .prd-item-priority.low { background: rgba(139,148,158,0.15); color: var(--muted); }
296
- .prd-project-badge { font-size: var(--text-xs); padding: var(--space-1) 5px; border-radius: var(--radius-md); background: rgba(56,139,253,0.12); color: var(--blue); border: 1px solid rgba(56,139,253,0.25); white-space: nowrap; }
296
+ .prd-project-badge { font-size: var(--text-sm); padding: var(--space-1) 5px; border-radius: var(--radius-md); background: rgba(56,139,253,0.12); color: var(--blue); border: 1px solid rgba(56,139,253,0.25); white-space: nowrap; }
297
297
 
298
298
  .notes-preview { max-height: 400px; overflow-y: auto; font-size: var(--text-md); line-height: 1.6; color: var(--muted); font-family: 'Segoe UI', system-ui, sans-serif; white-space: normal; word-wrap: break-word; background: var(--surface2); border: 1px solid var(--border); border-radius: var(--radius-md); padding: var(--space-6) var(--space-7); cursor: pointer; transition: border-color var(--transition-base); }
299
299
  .notes-preview:hover { border-color: var(--blue); }
@@ -421,7 +421,7 @@
421
421
  .pr-title:hover { text-decoration: underline; }
422
422
  .pr-desc { color: var(--muted); font-size: var(--text-sm); font-weight: 400; margin-top: 2px; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 400px; }
423
423
  .pr-id { color: var(--muted); font-family: Consolas, monospace; font-size: var(--text-base); }
424
- .pr-id-project { max-width: 120px; font-size: var(--text-xs); }
424
+ .pr-id-project { max-width: 120px; font-size: var(--text-sm); }
425
425
  .pr-agent { font-size: var(--text-base); color: var(--text); }
426
426
  .pr-branch { display: inline-block; max-width: 280px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; font-family: Consolas, monospace; font-size: var(--text-sm); color: var(--muted); background: var(--bg); padding: var(--space-1) var(--space-3); border-radius: 3px; border: 1px solid var(--border); }
427
427
  .pr-branch.branch-missing { color: var(--red); border-color: var(--red); background: rgba(248,81,73,0.12); }
@@ -538,7 +538,7 @@
538
538
  .btn:disabled { opacity: 0.4; cursor: not-allowed; }
539
539
  .btn-primary { background: var(--blue); color: #fff; border: none; }
540
540
  .btn-primary:hover { opacity: 0.9; }
541
- .btn-sm { font-size: var(--text-xs); padding: var(--space-1) var(--space-3); }
541
+ .btn-sm { font-size: var(--text-sm); padding: var(--space-1) var(--space-3); }
542
542
  .btn-success { color: var(--green); border-color: var(--green); }
543
543
  .btn-danger { color: var(--red); border-color: var(--red); }
544
544
  .btn-warning { color: var(--yellow); border-color: var(--yellow); }
@@ -559,7 +559,7 @@
559
559
  background: var(--surface2);
560
560
  border: 1px solid var(--green);
561
561
  color: var(--green);
562
- font-size: var(--text-xs);
562
+ font-size: var(--text-sm);
563
563
  padding: 1px 6px;
564
564
  border-radius: var(--radius-sm);
565
565
  cursor: pointer;
@@ -593,7 +593,7 @@
593
593
  background: var(--surface2);
594
594
  border: 1px solid var(--green);
595
595
  color: var(--green);
596
- font-size: var(--text-xs);
596
+ font-size: var(--text-sm);
597
597
  padding: 1px 6px;
598
598
  border-radius: var(--radius-sm);
599
599
  cursor: pointer;
@@ -626,7 +626,7 @@
626
626
  background: var(--surface2);
627
627
  border: 1px solid var(--red);
628
628
  color: var(--red);
629
- font-size: var(--text-xs);
629
+ font-size: var(--text-sm);
630
630
  padding: 1px 6px;
631
631
  border-radius: var(--radius-sm);
632
632
  cursor: pointer;
@@ -653,7 +653,7 @@
653
653
  background: var(--surface2);
654
654
  border: 1px solid var(--blue);
655
655
  color: var(--blue);
656
- font-size: var(--text-xs);
656
+ font-size: var(--text-sm);
657
657
  padding: 1px 6px;
658
658
  border-radius: var(--radius-sm);
659
659
  cursor: pointer;
@@ -1205,7 +1205,7 @@
1205
1205
  .modal-back-btn:hover { color: var(--text); border-color: var(--blue); }
1206
1206
  .modal-stack-chip {
1207
1207
  display: inline-flex; align-items: center; padding: var(--space-1) var(--space-4);
1208
- border-radius: 10px; font-size: var(--text-xs); color: var(--muted);
1208
+ border-radius: 10px; font-size: var(--text-sm); color: var(--muted);
1209
1209
  background: var(--surface2); border: 1px solid var(--border);
1210
1210
  font-variant-numeric: tabular-nums;
1211
1211
  }
@@ -1254,15 +1254,20 @@
1254
1254
  normal spacing relative to non-action neighbors (parent flex gap:10px). */
1255
1255
  #cc-messages > .cc-msg-action + .cc-msg-action { margin-top: -8px; }
1256
1256
 
1257
+ /* Suggested starter prompts (W-ms0vc4d0000ve615): content-sized pills in a
1258
+ centered wrapping row, NOT full-width bars. `max-width` (not `width`) keeps
1259
+ a long prompt inside the 420px drawer without stretching a short one. */
1257
1260
  .cc-suggestions {
1258
- display: flex; flex-direction: column; align-items: stretch; gap: var(--space-3);
1261
+ display: flex; flex-wrap: wrap; justify-content: center; align-items: center;
1262
+ gap: var(--space-3);
1259
1263
  width: 100%; margin: var(--space-7) auto 0;
1260
1264
  }
1265
+ #cc-suggestions-host .cc-suggestions { margin: 0 0 var(--space-4); }
1261
1266
  .cc-suggestion {
1262
- appearance: none; width: 100%; padding: var(--space-4) var(--space-5);
1263
- border: 1px solid var(--border); border-radius: var(--radius-md);
1267
+ appearance: none; max-width: 100%; padding: var(--space-3) var(--space-7);
1268
+ border: 1px solid var(--border); border-radius: 999px;
1264
1269
  background: var(--surface2); color: var(--text); font: inherit;
1265
- font-size: var(--text-md); line-height: 1.4; text-align: left; cursor: pointer;
1270
+ font-size: var(--text-md); line-height: 1.4; text-align: center; cursor: pointer;
1266
1271
  transition: border-color var(--transition-base), color var(--transition-base);
1267
1272
  }
1268
1273
  .cc-suggestion:hover { border-color: var(--blue); color: var(--blue); }
@@ -1295,7 +1300,7 @@
1295
1300
  #cc-drawer.cc-dragover { outline: 2px dashed var(--blue); outline-offset: -2px; }
1296
1301
  .cc-attach-chip { display: inline-flex; align-items: center; gap: 6px; max-width: 180px;
1297
1302
  padding: 4px 6px; background: var(--surface2); border: 1px solid var(--border);
1298
- border-radius: var(--radius-sm); font-size: var(--text-xs); }
1303
+ border-radius: var(--radius-sm); font-size: var(--text-sm); }
1299
1304
  .cc-attach-thumb { width: 28px; height: 28px; object-fit: cover; border-radius: 3px;
1300
1305
  flex-shrink: 0; background: var(--bg); }
1301
1306
  .cc-attach-name { color: var(--muted); white-space: nowrap; overflow: hidden;
@@ -1303,7 +1308,7 @@
1303
1308
  .cc-attach-remove { flex-shrink: 0; background: none; border: none; color: var(--muted);
1304
1309
  cursor: pointer; font-size: var(--text-md); line-height: 1; padding: 0 2px; }
1305
1310
  .cc-attach-remove:hover { color: var(--red); }
1306
- .cc-msg-attach-note { margin-top: 4px; font-size: var(--text-xs); opacity: 0.85; }
1311
+ .cc-msg-attach-note { margin-top: 4px; font-size: var(--text-sm); opacity: 0.85; }
1307
1312
 
1308
1313
  .modal-body { padding: var(--space-7) var(--space-8); overflow-y: auto; overflow-x: auto; white-space: pre-wrap; font-size: var(--text-md); line-height: 1.7; color: var(--muted); font-family: Consolas, monospace; }
1309
1314
 
@@ -1328,7 +1333,7 @@
1328
1333
  .settings-rail-btn:hover { color: var(--text); background: var(--surface); }
1329
1334
  .settings-rail-btn.active { color: var(--blue); border-left-color: var(--blue); background: var(--surface); font-weight: 600; }
1330
1335
  .settings-rail-btn.no-match { opacity: 0.3; }
1331
- .settings-rail-btn .match-count { font-size: var(--text-xs); color: var(--blue); background: var(--bg); border-radius: var(--radius-xl); padding: 1px 6px; min-width: 18px; text-align: center; }
1336
+ .settings-rail-btn .match-count { font-size: var(--text-sm); color: var(--blue); background: var(--bg); border-radius: var(--radius-xl); padding: 1px 6px; min-width: 18px; text-align: center; }
1332
1337
  /* W-mryz3r7h — collapsible rail fold ("Advanced"). The fold header is a real
1333
1338
  <button> (keyboard-operable); child rail buttons live in a container that
1334
1339
  is hidden unless the fold is .open. Children are indented under the header. */
@@ -1363,6 +1368,36 @@
1363
1368
  .settings-body.searching .settings-project-block.project-config-hidden { display: block; }
1364
1369
  .settings-pane-empty { font-size: var(--text-base); color: var(--muted); padding: var(--space-6) 0; font-style: italic; }
1365
1370
 
1371
+ /* W-mryyzhug000454b7 — enable/disabled tile grid for the per-cause auto-fix
1372
+ gates. The real checkbox stays the source of truth (id-based save path is
1373
+ untouched); it is visually hidden but still focusable so the tile is fully
1374
+ keyboard-accessible. The visible box is .settings-tile-inner so we can flip
1375
+ its enabled/dimmed state via the :checked sibling selector without :has(). */
1376
+ .settings-tile-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: var(--space-3); }
1377
+ .settings-tile { display: block; position: relative; cursor: pointer; margin: 0; }
1378
+ .settings-tile.no-match { display: none; }
1379
+ .settings-tile-input { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; pointer-events: none; }
1380
+ .settings-tile-inner {
1381
+ display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-1);
1382
+ padding: var(--space-4) var(--space-4); height: 100%;
1383
+ border: 1px solid var(--border); border-radius: var(--radius-md, 8px);
1384
+ background: var(--surface); opacity: 0.55;
1385
+ transition: border-color .12s ease, background .12s ease, opacity .12s ease;
1386
+ }
1387
+ .settings-tile:hover .settings-tile-inner { border-color: var(--blue); }
1388
+ .settings-tile-input:focus-visible ~ .settings-tile-inner,
1389
+ .settings-tile-input:focus ~ .settings-tile-inner { outline: 2px solid var(--blue); outline-offset: 2px; }
1390
+ .settings-tile-input:checked ~ .settings-tile-inner {
1391
+ opacity: 1; border-color: var(--blue); background: rgba(88,166,255,0.10);
1392
+ }
1393
+ .settings-tile.match-highlight .settings-tile-inner { box-shadow: 0 0 0 2px var(--blue); }
1394
+ .settings-tile-icon { font-size: var(--text-2xl, 20px); line-height: 1; }
1395
+ .settings-tile-label { font-size: var(--text-md); color: var(--text); font-weight: 600; }
1396
+ .settings-tile-state { font-size: var(--text-xs); color: var(--muted); text-transform: uppercase; letter-spacing: 0.04em; }
1397
+ .settings-tile-state::after { content: "Off"; }
1398
+ .settings-tile-input:checked ~ .settings-tile-inner .settings-tile-state { color: var(--blue); }
1399
+ .settings-tile-input:checked ~ .settings-tile-inner .settings-tile-state::after { content: "On"; }
1400
+
1366
1401
  /* Responsive: tablet / narrow window */
1367
1402
  @media (max-width: 1100px) {
1368
1403
  .layout { grid-template-columns: 1fr; }
@@ -1458,7 +1493,7 @@
1458
1493
  * runs in-place in the operator's working tree — the riskier/special mode,
1459
1494
  * so it gets a more prominent (yellow) color. Mirrors the .badge palette. */
1460
1495
  .project-mode-pill {
1461
- font-size: var(--text-xs); font-weight: 600;
1496
+ font-size: var(--text-sm); font-weight: 600;
1462
1497
  border-radius: var(--radius-lg); padding: 0 6px;
1463
1498
  white-space: nowrap; vertical-align: bottom; cursor: help;
1464
1499
  }
@@ -1505,7 +1540,7 @@
1505
1540
  }
1506
1541
  .checkout-mode-menu-item-active { color: var(--blue); font-weight: 600; }
1507
1542
  .checkout-mode-menu-item-desc {
1508
- font-size: var(--text-xs); color: var(--muted); font-weight: 400;
1543
+ font-size: var(--text-sm); color: var(--muted); font-weight: 400;
1509
1544
  margin-top: 2px; line-height: 1.35;
1510
1545
  }
1511
1546
  .checkout-mode-menu-checkboxes {
@@ -1570,7 +1605,7 @@
1570
1605
  .qa-target-project { color: var(--muted); font-size: var(--text-base); }
1571
1606
  .qa-target-source {
1572
1607
  display: inline-block; margin-left: var(--space-3);
1573
- font-size: var(--text-xs); color: var(--muted);
1608
+ font-size: var(--text-sm); color: var(--muted);
1574
1609
  border: 1px solid var(--border); border-radius: var(--radius-sm);
1575
1610
  padding: 1px var(--space-3); text-transform: uppercase;
1576
1611
  }
@@ -1633,7 +1668,7 @@
1633
1668
  }
1634
1669
  .qa-run-head { display: flex; align-items: center; gap: var(--space-4); flex-wrap: wrap; font-size: var(--text-md); }
1635
1670
  .qa-run-status {
1636
- display: inline-block; font-size: var(--text-xs); font-weight: 700;
1671
+ display: inline-block; font-size: var(--text-sm); font-weight: 700;
1637
1672
  padding: 2px var(--space-3); border-radius: var(--radius-sm);
1638
1673
  text-transform: uppercase; letter-spacing: 0.5px;
1639
1674
  background: var(--surface); color: var(--muted); border: 1px solid var(--border);
@@ -1665,7 +1700,7 @@
1665
1700
  background: var(--bg);
1666
1701
  }
1667
1702
  .qa-artifact-caption {
1668
- font-size: var(--text-xs); color: var(--muted);
1703
+ font-size: var(--text-sm); color: var(--muted);
1669
1704
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1670
1705
  word-break: break-all;
1671
1706
  }
@@ -1674,7 +1709,7 @@
1674
1709
  .qa-artifact-log-preview {
1675
1710
  background: var(--bg); color: var(--text);
1676
1711
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1677
- font-size: var(--text-xs); padding: var(--space-3);
1712
+ font-size: var(--text-sm); padding: var(--space-3);
1678
1713
  border-radius: var(--radius-sm); margin: 0;
1679
1714
  max-height: 160px; overflow: auto; white-space: pre;
1680
1715
  }
@@ -1720,7 +1755,7 @@
1720
1755
  }
1721
1756
  .qa-session-id { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--text); }
1722
1757
  .qa-session-state {
1723
- display: inline-block; font-size: var(--text-xs); font-weight: 700;
1758
+ display: inline-block; font-size: var(--text-sm); font-weight: 700;
1724
1759
  padding: 2px var(--space-3); border-radius: var(--radius-sm);
1725
1760
  text-transform: uppercase; letter-spacing: 0.5px;
1726
1761
  background: var(--surface); color: var(--muted); border: 1px solid var(--border);
@@ -1743,7 +1778,7 @@
1743
1778
  background: var(--surface); color: var(--muted);
1744
1779
  border: 1px solid var(--border);
1745
1780
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1746
- font-size: var(--text-xs);
1781
+ font-size: var(--text-sm);
1747
1782
  }
1748
1783
  .qa-phase-chip--pending { opacity: 0.5; }
1749
1784
  .qa-phase-chip--active {
@@ -1778,7 +1813,7 @@
1778
1813
  .qa-session-flows-preview,
1779
1814
  .qa-session-flows-full { overflow-wrap: anywhere; }
1780
1815
  .qa-session-flows-affordance {
1781
- color: var(--blue); font-size: var(--text-xs); white-space: nowrap;
1816
+ color: var(--blue); font-size: var(--text-sm); white-space: nowrap;
1782
1817
  }
1783
1818
  .qa-session-flows-affordance::before { content: '+ '; }
1784
1819
  .qa-session-flows-collapse-label { display: none; }
@@ -1815,7 +1850,7 @@
1815
1850
  border-left: 3px solid var(--red); border-radius: var(--radius-sm);
1816
1851
  color: var(--red); font-size: var(--text-sm); }
1817
1852
  .cc-error strong { color: var(--red); }
1818
- .cc-error code { font-family: monospace; font-size: var(--text-xs);
1853
+ .cc-error code { font-family: monospace; font-size: var(--text-sm);
1819
1854
  color: var(--muted); }
1820
1855
 
1821
1856
  /* W-mqrdggys000f94a4 — chrome-off "embed" mode (?embed=1). Strips the global
@@ -8,7 +8,7 @@ const shared = require('./engine/shared');
8
8
  const { safeRead } = shared;
9
9
 
10
10
  const MINIONS_DIR = __dirname;
11
- const DASHBOARD_SHARED_JS = ['pr-merge-state', 'pr-filters', 'cc-suggestions'];
11
+ const DASHBOARD_SHARED_JS = ['pr-merge-state', 'pr-filters', 'cc-suggestions', 'model-display', 'watches-source', 'welcome-popup'];
12
12
 
13
13
  function buildDashboardHtml() {
14
14
  const dashDir = path.join(MINIONS_DIR, 'dashboard');
@@ -171,4 +171,10 @@ function buildSlimHtml(opts) {
171
171
  // observe a cold first call without depending on test execution order.
172
172
  function _resetSlimPartsCacheForTest() { _slimPartsCache = null; }
173
173
 
174
- module.exports = { buildDashboardHtml, buildSlimHtml, SLIM_JS_ORDER, _resetSlimPartsCacheForTest };
174
+ module.exports = {
175
+ buildDashboardHtml,
176
+ buildSlimHtml,
177
+ DASHBOARD_SHARED_JS,
178
+ SLIM_JS_ORDER,
179
+ _resetSlimPartsCacheForTest,
180
+ };