dsh-mnemon 0.5.25 → 0.5.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -29,7 +29,14 @@ window.__ModuleLoader__.load({
29
29
  const MNEMON_ACTIVATION_CHANNEL = "/dsh-mnemon-activation";
30
30
  const MNEMON_WRITE_CHANNEL = "/dsh-mnemon-write";
31
31
  const MNEMON_PACK_CHANNEL = "/dsh-mnemon-pack";
32
+ const MNEMON_SYNC_CHANNEL = "/dsh-mnemon-sync";
32
33
  const MNEMON_SETTINGS_CHANNEL = "/dsh-mnemon-settings";
34
+ /**
35
+ * Reconciliation is the only channel that changes memory after a human read it:
36
+ * it stages proposals into a review ledger, takes opinions, and applies an
37
+ * accepted entry. It is deliberately separate from the write channel.
38
+ */
39
+ const MNEMON_REVIEW_CHANNEL = "/dsh-mnemon-review";
33
40
  /** DSH API Gateway endpoints used by paired remote Web clients. */
34
41
  const MNEMON_REMOTE_CHANNEL = "/api";
35
42
  const MNEMON_REMOTE_NAMESPACE = "dshMnemon";
@@ -37,9 +44,11 @@ window.__ModuleLoader__.load({
37
44
  const MNEMON_REMOTE_ACTIVATION_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/activation`;
38
45
  const MNEMON_REMOTE_WRITE_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/write`;
39
46
  const MNEMON_REMOTE_PACK_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/pack`;
47
+ const MNEMON_REMOTE_SYNC_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/sync`;
40
48
  const MNEMON_REMOTE_SETTINGS_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/settings`;
41
49
  const MNEMON_REMOTE_VIEW_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/view`;
42
50
  const MNEMON_REMOTE_VIEW_WRITE_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/viewWrite`;
51
+ const MNEMON_REMOTE_REVIEW_ENDPOINT = `${MNEMON_REMOTE_NAMESPACE}/review`;
43
52
  const MNEMON_SETTINGS_NAMESPACE = "mnemon";
44
53
  const MNEMON_UI_SETTINGS_NAMESPACE = "mnemon-ui";
45
54
  function isWorkspaceStorageScope(scope) {
@@ -158,6 +167,8 @@ window.__ModuleLoader__.load({
158
167
  [MNEMON_ACTIVATION_CHANNEL, MNEMON_REMOTE_ACTIVATION_ENDPOINT],
159
168
  [MNEMON_WRITE_CHANNEL, MNEMON_REMOTE_WRITE_ENDPOINT],
160
169
  [MNEMON_PACK_CHANNEL, MNEMON_REMOTE_PACK_ENDPOINT],
170
+ [MNEMON_SYNC_CHANNEL, MNEMON_REMOTE_SYNC_ENDPOINT],
171
+ [MNEMON_REVIEW_CHANNEL, MNEMON_REMOTE_REVIEW_ENDPOINT],
161
172
  [MNEMON_SETTINGS_CHANNEL, MNEMON_REMOTE_SETTINGS_ENDPOINT],
162
173
  [MNEMON_VIEW_CHANNEL, MNEMON_REMOTE_VIEW_ENDPOINT],
163
174
  [MNEMON_VIEW_WRITE_CHANNEL, MNEMON_REMOTE_VIEW_WRITE_ENDPOINT]
@@ -364,6 +375,102 @@ window.__ModuleLoader__.load({
364
375
  importPack(base64) {
365
376
  return this.call(MNEMON_PACK_CHANNEL, "import", this.scoped({ base64 }));
366
377
  }
378
+ /** Every reconciliation proposal this machine still holds. */
379
+ reviewLedger() {
380
+ return this.call(MNEMON_REVIEW_CHANNEL, "view", {});
381
+ }
382
+ /**
383
+ * One reconciliation run: it stages a proposal and writes no memory. Guidance is what
384
+ * the reviewer wants the plan to accomplish, in their own words; blank means the plan
385
+ * reads the memory and the branch with no instruction beyond its own rules.
386
+ */
387
+ reconcile(guidance) {
388
+ const text = guidance?.trim() ?? "";
389
+ return this.call(MNEMON_REVIEW_CHANNEL, "reconcile", this.scoped(text === "" ? {} : { guidance: text }));
390
+ }
391
+ reviewOpinion(id, text, author = "user") {
392
+ return this.call(MNEMON_REVIEW_CHANNEL, "opinion", {
393
+ id,
394
+ text,
395
+ author
396
+ });
397
+ }
398
+ decideReview(id, status) {
399
+ return this.call(MNEMON_REVIEW_CHANNEL, "decide", {
400
+ id,
401
+ status
402
+ });
403
+ }
404
+ reopenReview(id) {
405
+ return this.call(MNEMON_REVIEW_CHANNEL, "reopen", { id });
406
+ }
407
+ /** Applying a subset leaves the rest in the entry, which stays accepted. */
408
+ applyReview(id, operations) {
409
+ return this.call(MNEMON_REVIEW_CHANNEL, "apply", this.scoped({
410
+ id,
411
+ ...operations === void 0 ? {} : { operations }
412
+ }));
413
+ }
414
+ syncStatus() {
415
+ return this.call(MNEMON_SYNC_CHANNEL, "status", this.scoped());
416
+ }
417
+ /** Saves a patch; the answer never carries the token back. */
418
+ configureSync(patch) {
419
+ return this.call(MNEMON_SYNC_CHANNEL, "configure", this.scoped(patch));
420
+ }
421
+ pushSync(message) {
422
+ return this.call(MNEMON_SYNC_CHANNEL, "push", this.scoped({
423
+ ...message === void 0 ? {} : { message },
424
+ confirmed: true
425
+ }));
426
+ }
427
+ previewSync() {
428
+ return this.call(MNEMON_SYNC_CHANNEL, "preview", this.scoped());
429
+ }
430
+ /** The commits on the branch that carry a payload, newest first. */
431
+ syncBackups(limit) {
432
+ return this.call(MNEMON_SYNC_CHANNEL, "backups", this.scoped(limit === void 0 ? {} : { limit }));
433
+ }
434
+ /** Which memories are only here and which are only on the branch. */
435
+ syncDiff() {
436
+ return this.call(MNEMON_SYNC_CHANNEL, "diff", this.scoped());
437
+ }
438
+ pullSync(components, revive) {
439
+ return this.call(MNEMON_SYNC_CHANNEL, "pull", this.scoped({
440
+ ...components === void 0 ? {} : { components },
441
+ ...revive === true ? { revive: true } : {},
442
+ confirmed: true
443
+ }));
444
+ }
445
+ /** Whether GitHub sign-in is possible here, and how far it has come. */
446
+ githubStatus() {
447
+ return this.call(MNEMON_SYNC_CHANNEL, "github-status", this.scoped());
448
+ }
449
+ /** Ask GitHub for the code the user types into the browser. */
450
+ githubStart() {
451
+ return this.call(MNEMON_SYNC_CHANNEL, "github-start", this.scoped());
452
+ }
453
+ /** Ask once whether the browser step happened; the Host keeps the cadence. */
454
+ githubPoll() {
455
+ return this.call(MNEMON_SYNC_CHANNEL, "github-poll", this.scoped());
456
+ }
457
+ githubCancel() {
458
+ return this.call(MNEMON_SYNC_CHANNEL, "github-cancel", this.scoped());
459
+ }
460
+ /** Forgets the stored grant; the next push asks for a sign-in again. */
461
+ githubSignOut() {
462
+ return this.call(MNEMON_SYNC_CHANNEL, "github-signout", this.scoped());
463
+ }
464
+ githubRepositories() {
465
+ return this.call(MNEMON_SYNC_CHANNEL, "github-repositories", this.scoped());
466
+ }
467
+ /** Creates a repository under the signed-in account and answers with it. */
468
+ githubCreateRepository(name, isPrivate) {
469
+ return this.call(MNEMON_SYNC_CHANNEL, "github-create", this.scoped({
470
+ name,
471
+ private: isPrivate
472
+ }));
473
+ }
367
474
  };
368
475
  //#endregion
369
476
  //#region src/client/component-copy.ts
@@ -555,7 +662,7 @@ window.__ModuleLoader__.load({
555
662
  }
556
663
  //#endregion
557
664
  //#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonSettingsCard.module.css.mjs
558
- const css$13 = "._v_wrq_page{box-sizing:border-box;width:100%;min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;gap:32px;font-family:inherit;display:flex}._v_wrq_surface{color:var(--dsw-alias-label-primary)}:where(._v_wrq_page,._v_wrq_surface) *,:where(._v_wrq_page,._v_wrq_surface) :before,:where(._v_wrq_page,._v_wrq_surface) :after{box-sizing:border-box}:where(._v_wrq_page,._v_wrq_surface) :where(button,input,select,textarea){color:inherit;font:inherit}._v_wrq_loading{min-height:140px;color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:13px;line-height:140px}._v_wrq_section{flex-direction:column;gap:4px;min-width:0;display:flex}._v_wrq_sectionHeading{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;min-width:0;display:grid}._v_wrq_sectionHeading h2{grid-column:1;margin:0;font-size:14px;font-weight:500;line-height:20px}._v_wrq_sectionHeading p{max-width:66ch;color:var(--dsw-alias-label-tertiary);grid-column:1;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_sectionHeading ._v_wrq_miniSpinner{grid-area:1/2}._v_wrq_sectionHeading>._v_wrq_boardLinks{grid-column:1;padding-top:6px}._v_wrq_componentListNote{max-width:72ch;color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_appliesNow{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-secondary);white-space:nowrap;grid-area:1/2;align-self:center;padding:1px 6px;font-size:11px;line-height:16px}._v_wrq_rows{flex-direction:column;min-width:0;display:flex}._v_wrq_settingRow,._v_wrq_toggleRow{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;padding:14px 0;display:flex;position:relative}._v_wrq_rows>:last-child,._v_wrq_rows>._v_wrq_packRow:last-child>._v_wrq_settingRow{border-bottom:0}._v_wrq_rows>._v_wrq_packRow:last-child{padding-bottom:0}._v_wrq_settingRow[data-stacked]{flex-direction:column;align-items:stretch}._v_wrq_settingCopy{flex-direction:column;flex:1 1 0;gap:2px;min-width:min(240px,100%);display:flex}._v_wrq_settingCopy strong,._v_wrq_settingCopy label{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}._v_wrq_settingCopy small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_settingCopy code{font-family:var(--ds-font-family-code,ui-monospace, monospace)}._v_wrq_settingControl{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_settingRow[data-stacked] ._v_wrq_settingControl{flex:auto;justify-content:stretch}._v_wrq_switch{flex:none}._v_wrq_rowNote{min-width:0;color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:4px 8px;padding-top:4px;font-size:12px;line-height:18px;display:flex}._v_wrq_groupCallout{margin:8px 0 4px}._v_wrq_boardSection{container-type:inline-size}._v_wrq_board{flex-direction:column;min-width:0;margin-top:10px;display:flex}._v_wrq_boardProblem{margin:0 0 4px}._v_wrq_boardLoading{min-height:40px;color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin:0;font-size:13px;line-height:20px;display:flex}._v_wrq_boardGroup{flex-direction:column;min-width:0;padding-top:14px;display:flex}._v_wrq_boardGroupHead{justify-content:space-between;align-items:baseline;gap:8px;min-width:0;display:flex}._v_wrq_boardGroupHead h3{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;font-weight:500;line-height:18px}._v_wrq_boardGroupHead span{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:12px;line-height:18px}._v_wrq_pageLink{appearance:none;border-radius:var(--dsw-radius-sm);max-width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;padding:0;display:inline-flex}._v_wrq_pageLink>span{overflow-wrap:anywhere;min-width:0}._v_wrq_pageLink:hover>span{text-underline-offset:3px;text-decoration:underline}._v_wrq_settingCopy ._v_wrq_pageLink{width:fit-content;color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}._v_wrq_boardIconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;display:inline-grid}._v_wrq_boardIconButton:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_boardLinks{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;padding-top:4px;display:flex}._v_wrq_boardLink{appearance:none;border:.5px solid var(--dsw-alias-border-l3);max-width:100%;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 8px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s;display:inline-flex}._v_wrq_boardLink[data-on]{color:var(--dsw-alias-label-secondary)}._v_wrq_boardLink:hover{border-color:var(--dsw-alias-border-l4);color:var(--dsw-alias-label-primary)}._v_wrq_boardLink>svg{flex:none}._v_wrq_boardLinksLabel{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_pageLink:focus-visible,._v_wrq_boardIconButton:focus-visible,._v_wrq_boardLink:focus-visible,._v_wrq_detailsBack:focus-visible,._v_wrq_boardSearch:focus-within{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_boardSearch{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-base);align-items:center;gap:8px;margin:12px 0 0;padding:0 10px;display:flex}._v_wrq_boardSearch input{min-width:0;height:32px;color:var(--dsw-alias-label-primary);font:inherit;background:0 0;border:0;outline:none;flex:1;font-size:13px}._v_wrq_detailsDialog{width:min(560px,100%);max-height:100%}._v_wrq_detailsScroll{overscroll-behavior:contain;min-height:0;overflow-y:auto}._v_wrq_detailsBody{flex-direction:column;gap:16px;min-width:0;display:flex}._v_wrq_detailsHead{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_detailsHeadLine{flex-wrap:wrap;align-items:center;gap:8px 10px;min-width:0;display:flex}._v_wrq_detailsPackage{min-width:0;color:var(--dsw-alias-label-tertiary);font-family:var(--ds-font-family-code,ui-monospace, monospace);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}._v_wrq_detailsControl{align-items:center;margin-left:auto;display:flex}._v_wrq_detailsSection{border-top:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:8px;min-width:0;padding-top:14px;display:flex}._v_wrq_detailsSection>h3{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;font-weight:500;line-height:18px}._v_wrq_detailsRelations{grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;min-width:0;margin:0;font-size:13px;line-height:20px;display:grid}._v_wrq_detailsRelations>div{display:contents}._v_wrq_detailsRelations dt{color:var(--dsw-alias-label-secondary)}._v_wrq_detailsRelations dd{min-width:0;color:var(--dsw-alias-label-primary);flex-wrap:wrap;gap:4px 12px;margin:0;display:flex}._v_wrq_detailsName{appearance:none;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;display:inline-flex}._v_wrq_detailsName:hover>span{text-underline-offset:3px;text-decoration:underline}._v_wrq_detailsBack{appearance:none;border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:2px;margin:-4px 0 -6px -4px;padding:2px 4px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_detailsBack:hover{color:var(--dsw-alias-label-primary)}._v_wrq_detailsMissing{color:var(--dsw-alias-label-secondary)}._v_wrq_detailsEffect{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}._v_wrq_detailsBody ._v_wrq_optionsPanel{background:0 0;border-radius:0;margin:0;padding:0}._v_wrq_componentRowPage{flex-direction:column;gap:16px;min-width:0;display:flex}._v_wrq_detailsContributed{border-top:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:16px;min-width:0;padding-top:14px;display:flex}._v_wrq_panelSection{flex-direction:column;gap:8px;min-width:0;display:flex}._v_wrq_panelHeading{grid-template-columns:minmax(0,1fr) auto;column-gap:12px;min-width:0;display:grid}._v_wrq_panelHeading h3{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:500;line-height:20px}._v_wrq_panelHeading p{color:var(--dsw-alias-label-tertiary);grid-column:1;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_panelHeading ._v_wrq_miniSpinner{grid-area:1/2}._v_wrq_panelNote{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}._v_wrq_panelActions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;padding-top:8px;display:flex}._v_wrq_panelActions>span{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:18px}._v_wrq_panelActions>span._v_wrq_panelError,._v_wrq_panelError{color:var(--dsw-alias-state-error-primary)}._v_wrq_rows>._v_wrq_panelActions{border-bottom:.5px solid var(--dsw-alias-border-l2);padding:10px 0}._v_wrq_rows>._v_wrq_panelNote{padding:8px 0}._v_wrq_panelError{margin:0;font-size:12px;line-height:18px}._v_wrq_boardRow{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-direction:column;min-width:0;padding:14px 0;display:flex}._v_wrq_boardRowLine{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;display:flex}._v_wrq_boardGroup>._v_wrq_boardRow:last-child,._v_wrq_boardOthersList>._v_wrq_boardRow:last-child{border-bottom:0;padding-bottom:4px}._v_wrq_boardMain{padding-top:12px}._v_wrq_boardEmpty{color:var(--dsw-alias-label-tertiary);margin:0;padding:12px 0 4px;font-size:12px;line-height:18px}._v_wrq_boardOthers{flex-direction:column;min-width:0;padding-top:10px;display:flex}._v_wrq_boardOthersToggle{border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}._v_wrq_boardOthersToggle:hover{color:var(--dsw-alias-label-primary)}._v_wrq_boardOthersToggle>svg{transition:transform .14s;transform:rotate(-90deg)}._v_wrq_boardOthersToggle[aria-expanded=true]>svg{transform:rotate(0)}._v_wrq_boardOthersList{flex-direction:column;min-width:0;display:flex}._v_wrq_boardFootnote{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:18px}._v_wrq_optionsPanel{border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-module-platform);flex-direction:column;gap:14px;min-width:0;margin-top:12px;padding:14px 16px;display:flex}._v_wrq_optionField{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_optionLabel{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_optionLabel label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}._v_wrq_optionDefault{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-tertiary);padding:0 6px;font-size:11px;line-height:16px}._v_wrq_optionReset{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:12px;line-height:18px}._v_wrq_optionReset:disabled{cursor:default;opacity:.5}._v_wrq_optionInput{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);width:100%;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font:inherit;resize:vertical;outline:none;padding:7px 10px;font-size:13px;line-height:20px}._v_wrq_optionInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_optionInput[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_optionInput:disabled{opacity:.5}._v_wrq_optionHint{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_optionHint[data-error]{color:var(--dsw-alias-state-error-primary)}._v_wrq_optionChoices{flex-wrap:wrap;gap:6px 16px;min-width:0;display:flex}._v_wrq_optionEmpty{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_boardControl{flex-wrap:wrap;flex:0 auto;justify-content:flex-end;align-items:center;gap:6px 12px;min-width:0;margin-left:auto;display:flex}._v_wrq_boardState{min-width:0;color:var(--dsw-alias-label-tertiary);white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_boardState[data-tone=warning],._v_wrq_boardState[data-tone=error]{color:var(--dsw-alias-label-secondary)}._v_wrq_boardValue{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}@container (width<=420px){._v_wrq_boardMain ._v_wrq_boardControl{justify-content:stretch;width:100%}._v_wrq_boardMain ._v_wrq_boardControl>:last-child{flex:1}}@container (width<=180px){._v_wrq_boardSection ._v_wrq_sectionHeading p,._v_wrq_boardSection ._v_wrq_settingCopy small{display:none}._v_wrq_boardSection ._v_wrq_boardRow{padding:10px 0}._v_wrq_boardSection ._v_wrq_boardRowLine{grid-template-columns:minmax(0,1fr);gap:6px;display:grid}._v_wrq_boardSection ._v_wrq_settingCopy{min-width:0}._v_wrq_boardSection ._v_wrq_settingCopy strong{overflow-wrap:anywhere}._v_wrq_boardSection ._v_wrq_boardControl{justify-self:end}}._v_wrq_placeholderRow{border-bottom:.5px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;min-height:70px;display:flex}._v_wrq_placeholderRow span{background:var(--dsw-alias-bg-module-platform);border-radius:6px;height:12px;animation:1.4s ease-in-out infinite _v_wrq_placeholder-pulse}._v_wrq_placeholderRow span:first-child{width:38%}._v_wrq_placeholderRow span:last-child{border-radius:10px;width:36px;height:20px}@keyframes _v_wrq_placeholder-pulse{50%{opacity:.45}}@media (prefers-reduced-motion:reduce){._v_wrq_boardRowCopy,._v_wrq_boardOthersToggle>svg{transition:none}._v_wrq_placeholderRow span{animation:none}}._v_wrq_selector{appearance:none;border-radius:var(--dsw-radius-md);max-width:280px;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);white-space:nowrap;cursor:pointer;border:0;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}._v_wrq_selector>span{text-overflow:ellipsis;min-width:0;overflow:hidden}._v_wrq_selector>svg{color:var(--dsw-alias-label-tertiary);flex:none}._v_wrq_selector:hover:not(:disabled),._v_wrq_selector[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_selector:disabled{cursor:default;opacity:.4}._v_wrq_selectMenu{min-width:220px}._v_wrq_selectOption{white-space:normal;gap:1px;min-width:0;display:grid}._v_wrq_selectOption>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_directoryInput{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font-family:var(--ds-font-family-code,ui-monospace, monospace);outline:none;padding:0 12px;font-size:12px;line-height:20px}._v_wrq_directoryInput::placeholder{color:var(--dsw-alias-label-dimmed);font-family:var(--dsw-font-family);font-size:13px}._v_wrq_directoryInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_directoryInput[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_directoryInput:disabled{cursor:default;opacity:.5}._v_wrq_rowDetail{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:10px;min-width:0;padding:0 0 14px;display:flex}._v_wrq_settingRow:has(+._v_wrq_rowDetail){border-bottom:0;padding-bottom:10px}._v_wrq_effectiveRoute{min-width:0;color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:12px;font-size:12px;line-height:18px;display:flex}._v_wrq_effectiveRoute code{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);min-width:0;color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, monospace);text-overflow:ellipsis;white-space:nowrap;padding:1px 6px;font-size:11px;line-height:16px;overflow:hidden}._v_wrq_effectiveRoute small{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}._v_wrq_warning{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_advanced{min-width:0;padding:12px 0 2px}._v_wrq_advanced>summary{border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;list-style:none;display:inline-flex}._v_wrq_advanced>summary::-webkit-details-marker{display:none}._v_wrq_advanced>summary>svg{transition:transform .14s}._v_wrq_advanced[open]>summary>svg{transform:rotate(180deg)}._v_wrq_advanced>summary:hover{color:var(--dsw-alias-label-primary)}._v_wrq_advanced>._v_wrq_fieldGrid{padding-top:12px}._v_wrq_miniSpinner{border:2px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-label-secondary);border-radius:50%;flex:none;width:14px;height:14px;margin-top:4px;animation:.7s linear infinite _v_wrq_settings-spin}@keyframes _v_wrq_settings-spin{to{transform:rotate(360deg)}}._v_wrq_providerList{flex-direction:column;gap:8px;min-width:0;margin-top:10px;display:flex}._v_wrq_providerRow{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-settings-card-fill);overflow:hidden}._v_wrq_providerRowHeader{align-items:center;gap:12px;min-width:0;padding:12px 14px;display:flex}summary._v_wrq_providerRowHeader{cursor:pointer;list-style:none}summary._v_wrq_providerRowHeader::-webkit-details-marker{display:none}._v_wrq_providerDisclosure{appearance:none;min-width:0;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;outline:none;flex:1;align-items:center;gap:8px;padding:0;display:flex}._v_wrq_providerDisclosure:disabled{cursor:default}._v_wrq_providerDisclosure:focus-visible,summary._v_wrq_providerRowHeader:focus-visible{border-radius:var(--dsw-radius-md);box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}._v_wrq_providerIdentity{flex:1;align-items:center;gap:12px;min-width:0;display:flex}._v_wrq_providerIdentity>span{flex-direction:column;min-width:0;display:flex}._v_wrq_providerIdentity strong{font-size:14px;font-weight:500;line-height:22px}._v_wrq_providerIdentity small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}._v_wrq_providerMark{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}._v_wrq_providerMark>img,._v_wrq_providerMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}._v_wrq_providerEnableControl{flex:none;align-items:center;gap:10px;display:flex}._v_wrq_providerScopeTag{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-secondary);flex:none;padding:1px 6px;font-size:11px;line-height:16px}._v_wrq_providerScopeTag[data-scope=workspace]{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, transparent);color:var(--dsw-alias-state-business-primary)}._v_wrq_providerState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_providerState:before{content:\"\";background:var(--dsw-alias-state-idle-primary);border-radius:50%;flex:none;width:6px;height:6px}._v_wrq_providerState[data-enabled]:before{background:var(--dsw-alias-state-success-primary)}._v_wrq_providerChevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .14s}._v_wrq_providerDisclosure[aria-expanded=true] ._v_wrq_providerChevron,details[open]>summary ._v_wrq_providerChevron{transform:rotate(180deg)}._v_wrq_providerToggle{cursor:pointer;display:inline-flex;position:relative}._v_wrq_providerInlineBody{padding:0 14px 14px}._v_wrq_providerToggleError{color:var(--dsw-alias-state-error-primary);margin:0;padding:0 14px 12px;font-size:12px;line-height:18px}._v_wrq_providerServiceForm,._v_wrq_editor{border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-module-platform);flex-direction:column;gap:12px;min-width:0;padding:14px 16px;display:flex}._v_wrq_providerServicePrompt,._v_wrq_editorNote{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_editorHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}._v_wrq_editorHeading p{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_editor ._v_wrq_toggleRow{border-top:.5px solid var(--dsw-alias-border-l3);border-bottom:.5px solid var(--dsw-alias-border-l3);padding:10px 0}._v_wrq_embeddingTest{justify-content:space-between;align-items:center;gap:12px;min-width:0;display:flex}._v_wrq_embeddingTest>span{min-width:0;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_embeddingTest>span._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_globalLocationSetting{flex-direction:column;min-width:0;display:flex}._v_wrq_providerServiceLocation{border-bottom:.5px solid var(--dsw-alias-border-l3);padding-bottom:12px}._v_wrq_providerServiceLocation>._v_wrq_nativeLocation{padding:0 0 12px}._v_wrq_providerLocationField{padding-top:2px}._v_wrq_nativeLocation{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;display:flex}._v_wrq_inlineChoices{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);flex:none;align-items:center;gap:2px;padding:3px;display:inline-flex}._v_wrq_inlineChoices label{cursor:pointer;position:relative}._v_wrq_inlineChoices input{z-index:1;opacity:0;width:100%;height:100%;cursor:inherit;margin:0;position:absolute;inset:0}._v_wrq_inlineChoices span{border-radius:var(--dsw-radius-sm);height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;align-items:center;padding:0 12px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}._v_wrq_inlineChoices input:checked+span{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);box-shadow:var(--dsw-elevation-soft)}._v_wrq_inlineChoices input:focus-visible+span{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}._v_wrq_inlineChoices input:disabled+span{cursor:default;opacity:.4}._v_wrq_fieldGrid,._v_wrq_providerSettingsGrid{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:12px;min-width:0;display:grid}._v_wrq_providerSettingsGrid{grid-template-columns:minmax(0,1fr)}._v_wrq_fieldGrid>label,._v_wrq_providerFieldControl>label:not(._v_wrq_providerBoolean){min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;gap:6px;font-size:13px;font-weight:500;line-height:20px;display:flex}._v_wrq_fieldGrid input,._v_wrq_fieldGrid select,._v_wrq_providerFieldControl input:not([type=checkbox]),._v_wrq_providerFieldControl select{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;padding:0 12px;font-size:13px;font-weight:400;line-height:20px}._v_wrq_fieldGrid input::placeholder,._v_wrq_providerFieldControl input::placeholder{color:var(--dsw-alias-label-dimmed)}._v_wrq_fieldGrid select,._v_wrq_providerFieldControl select{appearance:none;cursor:pointer;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 12px center;background-repeat:no-repeat;background-size:12px 12px;padding-right:32px}._v_wrq_fieldGrid select:disabled,._v_wrq_providerFieldControl select:disabled{cursor:default}._v_wrq_fieldGrid input:focus-visible,._v_wrq_fieldGrid select:focus-visible,._v_wrq_providerFieldControl input:focus-visible,._v_wrq_providerFieldControl select:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_fieldGrid input[aria-invalid=true],._v_wrq_providerFieldControl input:invalid{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_fieldGrid input:disabled,._v_wrq_fieldGrid select:disabled,._v_wrq_providerFieldControl input:disabled,._v_wrq_providerFieldControl select:disabled{opacity:.5}._v_wrq_providerFieldControl{flex-direction:column;justify-content:flex-end;gap:4px;min-width:0;display:flex}._v_wrq_providerBoolean{min-height:34px;color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:13px;display:flex}._v_wrq_providerBoolean input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);margin:0}._v_wrq_providerSecretInput{min-width:0;position:relative}._v_wrq_providerSecretInput>input{padding-right:40px}._v_wrq_providerSecretVisibility{appearance:none;border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid;position:absolute;top:3px;right:3px}._v_wrq_providerSecretVisibility:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_providerSecretVisibility:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_providerSecretVisibility:disabled{cursor:default;opacity:.35}._v_wrq_providerSecretVisibility svg{width:16px;height:16px}._v_wrq_memoryConfigFooter{justify-content:space-between;align-items:center;gap:10px;min-height:36px;display:flex}._v_wrq_memoryConfigFooter>div{align-items:center;gap:6px;display:flex}._v_wrq_providerServiceFooter{align-items:flex-end;min-height:0}._v_wrq_configFeedback{flex:1;min-width:0;font-size:12px;line-height:18px}._v_wrq_scopeChanging,._v_wrq_providerTarget{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_scopeChanging{border-radius:var(--dsw-radius-md);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-label-secondary));background:var(--dsw-alias-state-warn-tertiary,var(--dsw-alias-bg-module-platform));padding:8px 12px}._v_wrq_providerLoadError{justify-content:space-between;align-items:center;gap:10px;font-size:12px;display:flex}._v_wrq_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}._v_wrq_location{align-items:baseline;gap:6px;min-width:0;display:flex}._v_wrq_locationRow{border-bottom:.5px solid var(--dsw-alias-border-l2);gap:10px;padding:14px 0}._v_wrq_rowActions{flex:none;align-items:center;gap:8px;display:flex}._v_wrq_packRow{flex-direction:column;gap:8px;min-width:0;padding-bottom:14px;display:flex}._v_wrq_packRow>._v_wrq_settingRow{border-bottom:0;padding-bottom:6px}._v_wrq_packRow:has(>._v_wrq_packFeedback:empty):not(:has(>._v_wrq_importBar))>._v_wrq_settingRow{padding-bottom:0}._v_wrq_rows>._v_wrq_packRow:not(:last-child){border-bottom:.5px solid var(--dsw-alias-border-l2)}._v_wrq_importBar{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}._v_wrq_importBar>div{min-width:0;display:grid}._v_wrq_importBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}._v_wrq_importBar small{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_packFeedback{gap:4px;display:grid}._v_wrq_packFeedback:empty{display:none}._v_wrq_packFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_readOnlyNotice{color:var(--dsw-alias-label-tertiary);margin:0 0 -20px;font-size:12px;line-height:18px}._v_wrq_packSuccess{color:var(--dsw-alias-state-success-primary)}._v_wrq_selector:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}@media (width<=620px){._v_wrq_page{gap:28px}._v_wrq_rowActions{width:100%}._v_wrq_rowActions button{flex:1}._v_wrq_importBar{grid-template-columns:minmax(0,1fr) auto}._v_wrq_importBar>button:last-child{grid-column:1/-1}._v_wrq_inlineChoices{width:100%}._v_wrq_inlineChoices label{flex:1}._v_wrq_inlineChoices span{justify-content:center;width:100%}._v_wrq_providerRowHeader{align-items:flex-start;gap:8px}._v_wrq_providerEnableControl{flex-wrap:wrap;justify-content:flex-end;gap:6px;max-width:132px}._v_wrq_providerState{text-overflow:ellipsis;max-width:120px;overflow:hidden}._v_wrq_memoryConfigFooter{flex-direction:column;align-items:stretch}._v_wrq_memoryConfigFooter>div:last-child{width:100%}._v_wrq_memoryConfigFooter button{flex:1}}@media (prefers-reduced-motion:reduce){._v_wrq_providerChevron,._v_wrq_advanced>summary>svg{transition:none}._v_wrq_miniSpinner{animation:none}}";
665
+ const css$13 = "._v_wrq_page{box-sizing:border-box;width:100%;min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;gap:32px;font-family:inherit;display:flex}._v_wrq_surface{color:var(--dsw-alias-label-primary)}:where(._v_wrq_page,._v_wrq_surface) *,:where(._v_wrq_page,._v_wrq_surface) :before,:where(._v_wrq_page,._v_wrq_surface) :after{box-sizing:border-box}:where(._v_wrq_page,._v_wrq_surface) :where(button,input,select,textarea){color:inherit;font:inherit}._v_wrq_loading{min-height:140px;color:var(--dsw-alias-label-tertiary);text-align:center;margin:0;font-size:13px;line-height:140px}._v_wrq_section{flex-direction:column;gap:4px;min-width:0;display:flex}._v_wrq_sectionHeading{grid-template-columns:minmax(0,1fr) auto;align-items:start;column-gap:12px;min-width:0;display:grid}._v_wrq_sectionHeading h2{grid-column:1;margin:0;font-size:14px;font-weight:500;line-height:20px}._v_wrq_sectionHeading p{max-width:66ch;color:var(--dsw-alias-label-tertiary);grid-column:1;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_sectionHeading ._v_wrq_miniSpinner{grid-area:1/2}._v_wrq_sectionHeading>._v_wrq_boardLinks{grid-column:1;padding-top:6px}._v_wrq_componentListNote{max-width:72ch;color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_appliesNow{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-secondary);white-space:nowrap;grid-area:1/2;align-self:center;padding:1px 6px;font-size:11px;line-height:16px}._v_wrq_rows{flex-direction:column;min-width:0;display:flex}._v_wrq_settingRow,._v_wrq_toggleRow{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;padding:14px 0;display:flex;position:relative}._v_wrq_rows>:last-child,._v_wrq_rows>._v_wrq_packRow:last-child>._v_wrq_settingRow{border-bottom:0}._v_wrq_rows>._v_wrq_packRow:last-child{padding-bottom:0}._v_wrq_settingRow[data-stacked]{flex-direction:column;align-items:stretch}._v_wrq_settingCopy{flex-direction:column;flex:1 1 0;gap:2px;min-width:min(240px,100%);display:flex}._v_wrq_settingCopy strong,._v_wrq_settingCopy label{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:400;line-height:22px}._v_wrq_settingCopy small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_settingCopy code{font-family:var(--ds-font-family-code,ui-monospace, monospace)}._v_wrq_settingControl{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_settingRow[data-stacked] ._v_wrq_settingControl{flex:auto;justify-content:stretch}._v_wrq_switch{flex:none}._v_wrq_rowNote{min-width:0;color:var(--dsw-alias-label-secondary);flex-wrap:wrap;align-items:center;gap:4px 8px;padding-top:4px;font-size:12px;line-height:18px;display:flex}._v_wrq_groupCallout{margin:8px 0 4px}._v_wrq_boardSection{container-type:inline-size}._v_wrq_board{flex-direction:column;min-width:0;margin-top:10px;display:flex}._v_wrq_boardProblem{margin:0 0 4px}._v_wrq_boardLoading{min-height:40px;color:var(--dsw-alias-label-secondary);align-items:center;gap:8px;margin:0;font-size:13px;line-height:20px;display:flex}._v_wrq_boardGroup{flex-direction:column;min-width:0;padding-top:14px;display:flex}._v_wrq_boardGroupHead{justify-content:space-between;align-items:baseline;gap:8px;min-width:0;display:flex}._v_wrq_boardGroupHead h3{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;font-weight:500;line-height:18px}._v_wrq_boardGroupHead span{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:12px;line-height:18px}._v_wrq_pageLink{appearance:none;border-radius:var(--dsw-radius-sm);max-width:100%;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;padding:0;display:inline-flex}._v_wrq_pageLink>span{overflow-wrap:anywhere;min-width:0}._v_wrq_pageLink:hover>span{text-underline-offset:3px;text-decoration:underline}._v_wrq_settingCopy ._v_wrq_pageLink{width:fit-content;color:var(--dsw-alias-label-primary);font-size:14px;line-height:22px}._v_wrq_boardIconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;flex:none;place-items:center;padding:0;display:inline-grid}._v_wrq_boardIconButton:hover{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_boardLinks{flex-wrap:wrap;align-items:center;gap:4px;min-width:0;padding-top:4px;display:flex}._v_wrq_boardLink{appearance:none;border:.5px solid var(--dsw-alias-border-l3);max-width:100%;color:var(--dsw-alias-label-tertiary);font:inherit;white-space:nowrap;cursor:pointer;background:0 0;border-radius:999px;align-items:center;gap:4px;padding:0 8px;font-size:11px;line-height:18px;transition:color .12s,border-color .12s;display:inline-flex}._v_wrq_boardLink[data-on]{color:var(--dsw-alias-label-secondary)}._v_wrq_boardLink:hover{border-color:var(--dsw-alias-border-l4);color:var(--dsw-alias-label-primary)}._v_wrq_boardLink>svg{flex:none}._v_wrq_boardLinksLabel{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_pageLink:focus-visible,._v_wrq_boardIconButton:focus-visible,._v_wrq_boardLink:focus-visible,._v_wrq_detailsBack:focus-visible,._v_wrq_boardSearch:focus-within{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_boardSearch{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-bg-base);align-items:center;gap:8px;margin:12px 0 0;padding:0 10px;display:flex}._v_wrq_boardSearch input{min-width:0;height:32px;color:var(--dsw-alias-label-primary);font:inherit;background:0 0;border:0;outline:none;flex:1;font-size:13px}._v_wrq_detailsDialog{width:min(560px,100%);max-height:100%}._v_wrq_detailsScroll{overscroll-behavior:contain;min-height:0;overflow-y:auto}._v_wrq_detailsBody{flex-direction:column;gap:16px;min-width:0;display:flex}._v_wrq_detailsHead{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_detailsHeadLine{flex-wrap:wrap;align-items:center;gap:8px 10px;min-width:0;display:flex}._v_wrq_detailsPackage{min-width:0;color:var(--dsw-alias-label-tertiary);font-family:var(--ds-font-family-code,ui-monospace, monospace);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}._v_wrq_detailsControl{align-items:center;margin-left:auto;display:flex}._v_wrq_detailsSection{border-top:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:8px;min-width:0;padding-top:14px;display:flex}._v_wrq_detailsSection>h3{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;font-weight:500;line-height:18px}._v_wrq_detailsRelations{grid-template-columns:max-content minmax(0,1fr);gap:6px 16px;min-width:0;margin:0;font-size:13px;line-height:20px;display:grid}._v_wrq_detailsRelations>div{display:contents}._v_wrq_detailsRelations dt{color:var(--dsw-alias-label-secondary)}._v_wrq_detailsRelations dd{min-width:0;color:var(--dsw-alias-label-primary);flex-wrap:wrap;gap:4px 12px;margin:0;display:flex}._v_wrq_detailsName{appearance:none;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:0;display:inline-flex}._v_wrq_detailsName:hover>span{text-underline-offset:3px;text-decoration:underline}._v_wrq_detailsBack{appearance:none;border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:2px;margin:-4px 0 -6px -4px;padding:2px 4px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_detailsBack:hover{color:var(--dsw-alias-label-primary)}._v_wrq_detailsMissing{color:var(--dsw-alias-label-secondary)}._v_wrq_detailsEffect{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}._v_wrq_detailsBody ._v_wrq_optionsPanel{background:0 0;border-radius:0;margin:0;padding:0}._v_wrq_componentRowPage{flex-direction:column;gap:16px;min-width:0;display:flex}._v_wrq_detailsContributed{border-top:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:16px;min-width:0;padding-top:14px;display:flex}._v_wrq_panelSection{flex-direction:column;gap:8px;min-width:0;display:flex}._v_wrq_panelHeading{grid-template-columns:minmax(0,1fr) auto;column-gap:12px;min-width:0;display:grid}._v_wrq_panelHeading h3{color:var(--dsw-alias-label-primary);margin:0;font-size:13px;font-weight:500;line-height:20px}._v_wrq_panelHeading p{color:var(--dsw-alias-label-tertiary);grid-column:1;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_panelHeading ._v_wrq_miniSpinner{grid-area:1/2}._v_wrq_panelNote{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}._v_wrq_panelActions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:8px;min-width:0;padding-top:8px;display:flex}._v_wrq_panelActions>span{min-width:0;color:var(--dsw-alias-label-secondary);flex:1;font-size:12px;line-height:18px}._v_wrq_panelActions>span._v_wrq_panelError,._v_wrq_panelError{color:var(--dsw-alias-state-error-primary)}._v_wrq_rows>._v_wrq_panelActions{border-bottom:.5px solid var(--dsw-alias-border-l2);padding:10px 0}._v_wrq_rows>._v_wrq_panelNote{padding:8px 0}._v_wrq_panelError{margin:0;font-size:12px;line-height:18px}._v_wrq_boardRow{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-direction:column;min-width:0;padding:14px 0;display:flex}._v_wrq_boardRowLine{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;display:flex}._v_wrq_boardGroup>._v_wrq_boardRow:last-child,._v_wrq_boardOthersList>._v_wrq_boardRow:last-child{border-bottom:0;padding-bottom:4px}._v_wrq_boardMain{padding-top:12px}._v_wrq_boardEmpty{color:var(--dsw-alias-label-tertiary);margin:0;padding:12px 0 4px;font-size:12px;line-height:18px}._v_wrq_boardOthers{flex-direction:column;min-width:0;padding-top:10px;display:flex}._v_wrq_boardOthersToggle{border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}._v_wrq_boardOthersToggle:hover{color:var(--dsw-alias-label-primary)}._v_wrq_boardOthersToggle>svg{transition:transform .14s;transform:rotate(-90deg)}._v_wrq_boardOthersToggle[aria-expanded=true]>svg{transform:rotate(0)}._v_wrq_boardOthersList{flex-direction:column;min-width:0;display:flex}._v_wrq_boardFootnote{color:var(--dsw-alias-label-tertiary);margin:12px 0 0;font-size:12px;line-height:18px}._v_wrq_optionsPanel{border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-module-platform);flex-direction:column;gap:14px;min-width:0;margin-top:12px;padding:14px 16px;display:flex}._v_wrq_optionField{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_optionLabel{justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_optionLabel label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}._v_wrq_optionDefault{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-tertiary);padding:0 6px;font-size:11px;line-height:16px}._v_wrq_optionReset{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;border:0;padding:0 4px;font-size:12px;line-height:18px}._v_wrq_optionReset:disabled{cursor:default;opacity:.5}._v_wrq_optionInput{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);width:100%;min-width:0;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-base);font:inherit;resize:vertical;outline:none;padding:7px 10px;font-size:13px;line-height:20px}._v_wrq_optionInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_optionInput[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_optionInput:disabled{opacity:.5}._v_wrq_optionHint{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_optionHint[data-error]{color:var(--dsw-alias-state-error-primary)}._v_wrq_optionChoices{flex-wrap:wrap;gap:6px 16px;min-width:0;display:flex}._v_wrq_optionEmpty{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_boardControl{flex-wrap:wrap;flex:0 auto;justify-content:flex-end;align-items:center;gap:6px 12px;min-width:0;margin-left:auto;display:flex}._v_wrq_boardState{min-width:0;color:var(--dsw-alias-label-tertiary);white-space:nowrap;align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_boardState[data-tone=warning],._v_wrq_boardState[data-tone=error]{color:var(--dsw-alias-label-secondary)}._v_wrq_boardValue{color:var(--dsw-alias-label-secondary);font-size:13px;line-height:20px}@container (width<=420px){._v_wrq_boardMain ._v_wrq_boardControl{justify-content:stretch;width:100%}._v_wrq_boardMain ._v_wrq_boardControl>:last-child{flex:1}}@container (width<=180px){._v_wrq_boardSection ._v_wrq_sectionHeading p,._v_wrq_boardSection ._v_wrq_settingCopy small{display:none}._v_wrq_boardSection ._v_wrq_boardRow{padding:10px 0}._v_wrq_boardSection ._v_wrq_boardRowLine{grid-template-columns:minmax(0,1fr);gap:6px;display:grid}._v_wrq_boardSection ._v_wrq_settingCopy{min-width:0}._v_wrq_boardSection ._v_wrq_settingCopy strong{overflow-wrap:anywhere}._v_wrq_boardSection ._v_wrq_boardControl{justify-self:end}}._v_wrq_placeholderRow{border-bottom:.5px solid var(--dsw-alias-border-l2);justify-content:space-between;align-items:center;gap:16px;min-height:70px;display:flex}._v_wrq_placeholderRow span{background:var(--dsw-alias-bg-module-platform);border-radius:6px;height:12px;animation:1.4s ease-in-out infinite _v_wrq_placeholder-pulse}._v_wrq_placeholderRow span:first-child{width:38%}._v_wrq_placeholderRow span:last-child{border-radius:10px;width:36px;height:20px}@keyframes _v_wrq_placeholder-pulse{50%{opacity:.45}}@media (prefers-reduced-motion:reduce){._v_wrq_boardRowCopy,._v_wrq_boardOthersToggle>svg{transition:none}._v_wrq_placeholderRow span{animation:none}}._v_wrq_selector{appearance:none;border-radius:var(--dsw-radius-md);max-width:280px;height:36px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-module-platform);white-space:nowrap;cursor:pointer;border:0;align-items:center;gap:12px;padding:0 14px;font-size:14px;line-height:22px;display:inline-flex}._v_wrq_selector>span{text-overflow:ellipsis;min-width:0;overflow:hidden}._v_wrq_selector>svg{color:var(--dsw-alias-label-tertiary);flex:none}._v_wrq_selector:hover:not(:disabled),._v_wrq_selector[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_selector:disabled{cursor:default;opacity:.4}._v_wrq_selectMenu{min-width:220px}._v_wrq_selectOption{white-space:normal;gap:1px;min-width:0;display:grid}._v_wrq_selectOption>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_directoryInput{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font-family:var(--ds-font-family-code,ui-monospace, monospace);outline:none;padding:0 12px;font-size:12px;line-height:20px}._v_wrq_directoryInput::placeholder{color:var(--dsw-alias-label-dimmed);font-family:var(--dsw-font-family);font-size:13px}._v_wrq_directoryInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_directoryInput[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_directoryInput:disabled{cursor:default;opacity:.5}._v_wrq_rowDetail{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:10px;min-width:0;padding:0 0 14px;display:flex}._v_wrq_settingRow:has(+._v_wrq_rowDetail){border-bottom:0;padding-bottom:10px}._v_wrq_effectiveRoute{min-width:0;color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:12px;font-size:12px;line-height:18px;display:flex}._v_wrq_effectiveRoute code{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);min-width:0;color:var(--dsw-alias-label-secondary);font-family:var(--ds-font-family-code,ui-monospace, monospace);text-overflow:ellipsis;white-space:nowrap;padding:1px 6px;font-size:11px;line-height:16px;overflow:hidden}._v_wrq_effectiveRoute small{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}._v_wrq_warning{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_advanced{min-width:0;padding:12px 0 2px}._v_wrq_advanced>summary{border-radius:var(--dsw-radius-sm);width:fit-content;color:var(--dsw-alias-label-secondary);cursor:pointer;align-items:center;gap:6px;margin-left:-4px;padding:2px 4px;font-size:12px;font-weight:500;line-height:18px;list-style:none;display:inline-flex}._v_wrq_advanced>summary::-webkit-details-marker{display:none}._v_wrq_advanced>summary>svg{transition:transform .14s}._v_wrq_advanced[open]>summary>svg{transform:rotate(180deg)}._v_wrq_advanced>summary:hover{color:var(--dsw-alias-label-primary)}._v_wrq_advanced>._v_wrq_fieldGrid{padding-top:12px}._v_wrq_miniSpinner{border:2px solid var(--dsw-alias-border-l2);border-top-color:var(--dsw-alias-label-secondary);border-radius:50%;flex:none;width:14px;height:14px;margin-top:4px;animation:.7s linear infinite _v_wrq_settings-spin}@keyframes _v_wrq_settings-spin{to{transform:rotate(360deg)}}._v_wrq_providerList{flex-direction:column;gap:8px;min-width:0;margin-top:10px;display:flex}._v_wrq_providerRow{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-xl);background:var(--dsw-alias-settings-card-fill);overflow:hidden}._v_wrq_providerRowHeader{align-items:center;gap:12px;min-width:0;padding:12px 14px;display:flex}summary._v_wrq_providerRowHeader{cursor:pointer;list-style:none}summary._v_wrq_providerRowHeader::-webkit-details-marker{display:none}._v_wrq_providerDisclosure{appearance:none;min-width:0;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;outline:none;flex:1;align-items:center;gap:8px;padding:0;display:flex}._v_wrq_providerDisclosure:disabled{cursor:default}._v_wrq_providerDisclosure:focus-visible,summary._v_wrq_providerRowHeader:focus-visible{border-radius:var(--dsw-radius-md);box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}._v_wrq_providerIdentity{flex:1;align-items:center;gap:12px;min-width:0;display:flex}._v_wrq_providerIdentity>span{flex-direction:column;min-width:0;display:flex}._v_wrq_providerIdentity strong{font-size:14px;font-weight:500;line-height:22px}._v_wrq_providerIdentity small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}._v_wrq_providerMark{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}._v_wrq_providerMark>img,._v_wrq_providerMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}._v_wrq_providerEnableControl{flex:none;align-items:center;gap:10px;display:flex}._v_wrq_providerScopeTag{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-xs);color:var(--dsw-alias-label-secondary);flex:none;padding:1px 6px;font-size:11px;line-height:16px}._v_wrq_providerScopeTag[data-scope=workspace]{border-color:color-mix(in srgb, var(--dsw-alias-state-business-primary) 30%, transparent);color:var(--dsw-alias-state-business-primary)}._v_wrq_providerState{color:var(--dsw-alias-label-tertiary);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}._v_wrq_providerState:before{content:\"\";background:var(--dsw-alias-state-idle-primary);border-radius:50%;flex:none;width:6px;height:6px}._v_wrq_providerState[data-enabled]:before{background:var(--dsw-alias-state-success-primary)}._v_wrq_providerChevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .14s}._v_wrq_providerDisclosure[aria-expanded=true] ._v_wrq_providerChevron,details[open]>summary ._v_wrq_providerChevron{transform:rotate(180deg)}._v_wrq_providerToggle{cursor:pointer;display:inline-flex;position:relative}._v_wrq_providerInlineBody{padding:0 14px 14px}._v_wrq_providerToggleError{color:var(--dsw-alias-state-error-primary);margin:0;padding:0 14px 12px;font-size:12px;line-height:18px}._v_wrq_providerServiceForm,._v_wrq_editor{border-radius:var(--dsw-radius-lg);background:var(--dsw-alias-bg-module-platform);flex-direction:column;gap:12px;min-width:0;padding:14px 16px;display:flex}._v_wrq_providerServicePrompt,._v_wrq_editorNote{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_editorHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}._v_wrq_editorHeading p{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin:2px 0 0;font-size:12px;line-height:18px}._v_wrq_editor ._v_wrq_toggleRow{border-top:.5px solid var(--dsw-alias-border-l3);border-bottom:.5px solid var(--dsw-alias-border-l3);padding:10px 0}._v_wrq_embeddingTest{justify-content:space-between;align-items:center;gap:12px;min-width:0;display:flex}._v_wrq_embeddingTest>span{min-width:0;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_embeddingTest>span._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_globalLocationSetting{flex-direction:column;min-width:0;display:flex}._v_wrq_providerServiceLocation{border-bottom:.5px solid var(--dsw-alias-border-l3);padding-bottom:12px}._v_wrq_providerServiceLocation>._v_wrq_nativeLocation{padding:0 0 12px}._v_wrq_providerLocationField{padding-top:2px}._v_wrq_nativeLocation{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;min-width:0;display:flex}._v_wrq_inlineChoices{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-interactive-bg-hover);flex:none;align-items:center;gap:2px;padding:3px;display:inline-flex}._v_wrq_inlineChoices label{cursor:pointer;position:relative}._v_wrq_inlineChoices input{z-index:1;opacity:0;width:100%;height:100%;cursor:inherit;margin:0;position:absolute;inset:0}._v_wrq_inlineChoices span{border-radius:var(--dsw-radius-sm);height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;align-items:center;padding:0 12px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}._v_wrq_inlineChoices input:checked+span{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);box-shadow:var(--dsw-elevation-soft)}._v_wrq_inlineChoices input:focus-visible+span{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary))}._v_wrq_inlineChoices input:disabled+span{cursor:default;opacity:.4}._v_wrq_fieldGrid,._v_wrq_providerSettingsGrid{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:12px;min-width:0;display:grid}._v_wrq_providerSettingsGrid{grid-template-columns:minmax(0,1fr)}._v_wrq_fieldGrid>label,._v_wrq_providerFieldControl>label:not(._v_wrq_providerBoolean){min-width:0;color:var(--dsw-alias-label-primary);flex-direction:column;gap:6px;font-size:13px;font-weight:500;line-height:20px;display:flex}._v_wrq_fieldGrid input,._v_wrq_fieldGrid select,._v_wrq_providerFieldControl input:not([type=checkbox]),._v_wrq_providerFieldControl select{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;padding:0 12px;font-size:13px;font-weight:400;line-height:20px}._v_wrq_fieldGrid input::placeholder,._v_wrq_providerFieldControl input::placeholder{color:var(--dsw-alias-label-dimmed)}._v_wrq_fieldGrid select,._v_wrq_providerFieldControl select{appearance:none;cursor:pointer;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");background-position:right 12px center;background-repeat:no-repeat;background-size:12px 12px;padding-right:32px}._v_wrq_fieldGrid select:disabled,._v_wrq_providerFieldControl select:disabled{cursor:default}._v_wrq_fieldGrid input:focus-visible,._v_wrq_fieldGrid select:focus-visible,._v_wrq_providerFieldControl input:focus-visible,._v_wrq_providerFieldControl select:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_fieldGrid input[aria-invalid=true],._v_wrq_providerFieldControl input:invalid{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_fieldGrid input:disabled,._v_wrq_fieldGrid select:disabled,._v_wrq_providerFieldControl input:disabled,._v_wrq_providerFieldControl select:disabled{opacity:.5}._v_wrq_providerFieldControl{flex-direction:column;justify-content:flex-end;gap:4px;min-width:0;display:flex}._v_wrq_providerBoolean{min-height:34px;color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:13px;display:flex}._v_wrq_providerBoolean input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);margin:0}._v_wrq_providerSecretInput{min-width:0;position:relative}._v_wrq_providerSecretInput>input{padding-right:40px}._v_wrq_providerSecretVisibility{appearance:none;border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid;position:absolute;top:3px;right:3px}._v_wrq_providerSecretVisibility:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_providerSecretVisibility:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_providerSecretVisibility:disabled{cursor:default;opacity:.35}._v_wrq_providerSecretVisibility svg{width:16px;height:16px}._v_wrq_memoryConfigFooter{justify-content:space-between;align-items:center;gap:10px;min-height:36px;display:flex}._v_wrq_memoryConfigFooter>div{align-items:center;gap:6px;display:flex}._v_wrq_providerServiceFooter{align-items:flex-end;min-height:0}._v_wrq_configFeedback{flex:1;min-width:0;font-size:12px;line-height:18px}._v_wrq_scopeChanging,._v_wrq_providerTarget{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:18px}._v_wrq_scopeChanging{border-radius:var(--dsw-radius-md);color:var(--dsw-alias-state-warn-label,var(--dsw-alias-label-secondary));background:var(--dsw-alias-state-warn-tertiary,var(--dsw-alias-bg-module-platform));padding:8px 12px}._v_wrq_providerLoadError{justify-content:space-between;align-items:center;gap:10px;font-size:12px;display:flex}._v_wrq_visuallyHidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}._v_wrq_location{align-items:baseline;gap:6px;min-width:0;display:flex}._v_wrq_locationRow{border-bottom:.5px solid var(--dsw-alias-border-l2);gap:10px;padding:14px 0}._v_wrq_rowActions{flex:none;align-items:center;gap:8px;display:flex}._v_wrq_packRow{flex-direction:column;gap:8px;min-width:0;padding-bottom:14px;display:flex}._v_wrq_packRow>._v_wrq_settingRow{border-bottom:0;padding-bottom:6px}._v_wrq_packRow:has(>._v_wrq_packFeedback:empty):not(:has(>._v_wrq_importBar))>._v_wrq_settingRow{padding-bottom:0}._v_wrq_rows>._v_wrq_packRow:not(:last-child){border-bottom:.5px solid var(--dsw-alias-border-l2)}._v_wrq_importBar{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}._v_wrq_importBar>div{min-width:0;display:grid}._v_wrq_importBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}._v_wrq_importBar small{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_packFeedback{gap:4px;display:grid}._v_wrq_packFeedback:empty{display:none}._v_wrq_packFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_readOnlyNotice{color:var(--dsw-alias-label-tertiary);margin:0 0 -20px;font-size:12px;line-height:18px}._v_wrq_packSuccess{color:var(--dsw-alias-state-success-primary)}._v_wrq_syncRow{flex-direction:column;gap:8px;min-width:0;padding-bottom:14px;display:flex}._v_wrq_syncRow>._v_wrq_settingRow,._v_wrq_syncRow>._v_wrq_toggleRow{border-bottom:0;padding-bottom:6px}._v_wrq_syncRow:has(>._v_wrq_syncFeedback:empty):not(:has(>._v_wrq_syncForm)):not(:has(>._v_wrq_syncBar))>._v_wrq_settingRow{padding-bottom:0}._v_wrq_rows>._v_wrq_syncRow:not(:last-child){border-bottom:.5px solid var(--dsw-alias-border-l2)}._v_wrq_syncState{flex-wrap:wrap;align-items:center;gap:4px 10px;min-width:0;display:flex}._v_wrq_syncState>span{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncForm{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:12px;min-width:0;padding:12px;display:grid}._v_wrq_syncField{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_syncField>label{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncField>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncField>input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;padding:0 12px;font-size:13px;line-height:20px}._v_wrq_syncField>input:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_syncField>input[aria-invalid=true]{border-color:var(--dsw-alias-state-error-primary)}._v_wrq_syncField>input:disabled{cursor:default;opacity:.5}._v_wrq_syncBlock{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-3);flex-direction:column;grid-column:1/-1;gap:8px;min-width:0;padding:12px;display:flex}._v_wrq_syncBlock>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncBlock>header strong{font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncBlock>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncBlock p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncBlock ._v_wrq_syncFormActions{grid-column:auto}._v_wrq_syncBlock ._v_wrq_syncField>select{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;padding:0 10px;font-size:13px;line-height:20px}._v_wrq_syncBlock ._v_wrq_syncField>select:disabled{cursor:default;opacity:.5}._v_wrq_syncAccount{align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncAccount>span{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncCode{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncCode>code{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-mono,ui-monospace, monospace);letter-spacing:.08em;padding:6px 10px;font-size:14px;font-weight:500}._v_wrq_syncCode>a{color:var(--dsw-alias-state-business-primary);font-size:12px;line-height:18px}._v_wrq_syncCheck{color:var(--dsw-alias-label-primary);align-items:center;gap:8px;font-size:13px;line-height:20px;display:flex}._v_wrq_syncCheck input{width:16px;height:16px;accent-color:var(--dsw-alias-brand-primary);margin:0}._v_wrq_syncFormActions{grid-column:1/-1;align-items:center;gap:8px;display:flex}._v_wrq_syncBar{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid}._v_wrq_syncBar>div{min-width:0;display:grid}._v_wrq_syncBar strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}._v_wrq_syncBar small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncFeedback{gap:4px;display:grid}._v_wrq_syncFeedback:empty{display:none}._v_wrq_syncFeedback p{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncSuccess{color:var(--dsw-alias-state-success-primary)}._v_wrq_reviewList{gap:8px;display:grid}._v_wrq_reviewEntry{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);flex-direction:column;gap:6px;min-width:0;padding:10px 12px;display:flex}._v_wrq_reviewEntry>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_reviewEntry>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_reviewEntry>p{overflow-wrap:anywhere;margin:0;font-size:13px;line-height:20px}._v_wrq_reviewTitle{align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_reviewTitle strong{overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:20px}._v_wrq_reviewOperations{gap:4px;margin:0;padding-left:18px;display:grid}._v_wrq_reviewOperations li{overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_reviewOperations small{color:var(--dsw-alias-label-tertiary);display:block}._v_wrq_reviewOpinions{gap:4px;display:grid}._v_wrq_reviewOpinions>strong{font-size:12px;font-weight:500;line-height:18px}._v_wrq_reviewOpinions>small{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_reviewOpinions>div{overflow-wrap:anywhere;gap:6px;min-width:0;font-size:12px;line-height:18px;display:flex}._v_wrq_reviewOpinions>div strong{color:var(--dsw-alias-label-secondary);flex:none;font-weight:500}._v_wrq_reviewOpinionForm{align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_reviewOpinionForm>input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);min-width:0;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;flex:auto;padding:0 12px;font-size:13px;line-height:20px}._v_wrq_reviewOpinionForm>input:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_reviewOpinionForm>input:disabled{cursor:default;opacity:.5}._v_wrq_reviewRules{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);gap:4px;padding:10px 12px;display:grid}._v_wrq_reviewRules>strong{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}._v_wrq_reviewRules>ul{gap:2px;margin:0;padding-left:18px;display:grid}._v_wrq_reviewRules li{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_reviewGuidance{gap:4px;display:grid}._v_wrq_reviewGuidance>label{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:500;line-height:18px}._v_wrq_reviewGuidance>input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;height:34px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3);font:inherit;outline:none;padding:0 12px;font-size:13px;line-height:20px}._v_wrq_reviewGuidance>input:focus-visible{border-color:var(--dsw-alias-state-business-primary)}._v_wrq_reviewGuidance>input:disabled{cursor:default;opacity:.5}._v_wrq_reviewGuidance>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_reviewSelection{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px;min-width:0;display:flex}._v_wrq_reviewSelection>small,._v_wrq_reviewSelected{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_reviewOperations>li{gap:2px;display:grid}._v_wrq_reviewOperations>li>label{cursor:pointer;align-items:flex-start;gap:6px;min-width:0;display:flex}._v_wrq_reviewOperations>li>label>input{flex:none;margin:3px 0 0}._v_wrq_reviewOperations>li>label>input:disabled{cursor:default;opacity:.5}._v_wrq_reviewOperations>li[data-applied=true]{opacity:.55}._v_wrq_syncBackups{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);gap:8px;padding:10px 12px;display:grid}._v_wrq_syncBackups>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncBackups>header>strong{overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncBackups>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncBackupList{gap:6px;display:grid}._v_wrq_syncBackupEntry{border-radius:var(--dsw-radius-sm,var(--dsw-radius-md));background:var(--dsw-alias-bg-layer-3);flex-direction:column;gap:4px;min-width:0;padding:8px 10px;display:flex}._v_wrq_syncBackupEntry>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncBackupEntry>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncBackupComponents{gap:2px;display:grid}._v_wrq_syncBackupComponents>small{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncDiff{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);gap:8px;padding:10px 12px;display:grid}._v_wrq_syncDiff>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncDiff>header>strong{overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncDiff>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncDiffColumns{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:10px;min-width:0;display:grid}._v_wrq_syncDiffColumns>div{align-content:start;gap:4px;min-width:0;display:grid}._v_wrq_syncDiffColumns>div>strong{font-size:12px;font-weight:500;line-height:18px}._v_wrq_syncDiffColumns>div>small{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}._v_wrq_syncDiffColumns ul{gap:4px;margin:0;padding:0;list-style:none;display:grid}._v_wrq_syncDiffColumns li{overflow-wrap:anywhere;gap:2px;font-size:12px;line-height:18px;display:grid}._v_wrq_syncDiffMeta{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}._v_wrq_syncDialogBody{gap:16px;display:grid}._v_wrq_syncDialogBody ._v_wrq_syncBackups,._v_wrq_syncDialogBody ._v_wrq_syncDiff{background:0 0;padding:0}._v_wrq_syncDialogBody ._v_wrq_syncBackups>header>strong,._v_wrq_syncDialogBody ._v_wrq_syncDiff>header>strong{font-size:14px;line-height:22px}._v_wrq_syncConflictList{gap:8px;display:grid}._v_wrq_syncConflict{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);gap:6px;min-width:0;padding:10px 12px;display:grid}._v_wrq_syncConflict>header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;min-width:0;display:flex}._v_wrq_syncConflict>header>strong{font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncConflict>header>small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}._v_wrq_syncConflictSides{grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:8px;min-width:0;display:grid}._v_wrq_syncConflictSides>div{align-content:start;gap:2px;min-width:0;display:grid}._v_wrq_syncConflictSides>div>small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}._v_wrq_syncConflictSides>div>span{overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncDialogNote{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncPlan{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);gap:8px;padding:10px 12px;display:grid}._v_wrq_syncPlan>p{overflow-wrap:anywhere;margin:0;font-size:13px;line-height:20px}._v_wrq_syncPlan>._v_wrq_rowActions{justify-content:flex-start}._v_wrq_selector:focus-visible{box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}@media (width<=620px){._v_wrq_page{gap:28px}._v_wrq_rowActions{width:100%}._v_wrq_rowActions button{flex:1}._v_wrq_importBar{grid-template-columns:minmax(0,1fr) auto}._v_wrq_importBar>button:last-child{grid-column:1/-1}._v_wrq_syncBar{grid-template-columns:minmax(0,1fr) auto}._v_wrq_syncBar>button:last-child{grid-column:1/-1}._v_wrq_syncFormActions{flex-wrap:wrap}._v_wrq_syncFormActions button{flex:1}._v_wrq_reviewOpinionForm{flex-wrap:wrap}._v_wrq_reviewOpinionForm>input{flex:100%}._v_wrq_inlineChoices{width:100%}._v_wrq_inlineChoices label{flex:1}._v_wrq_inlineChoices span{justify-content:center;width:100%}._v_wrq_providerRowHeader{align-items:flex-start;gap:8px}._v_wrq_providerEnableControl{flex-wrap:wrap;justify-content:flex-end;gap:6px;max-width:132px}._v_wrq_providerState{text-overflow:ellipsis;max-width:120px;overflow:hidden}._v_wrq_memoryConfigFooter{flex-direction:column;align-items:stretch}._v_wrq_memoryConfigFooter>div:last-child{width:100%}._v_wrq_memoryConfigFooter button{flex:1}}@media (prefers-reduced-motion:reduce){._v_wrq_providerChevron,._v_wrq_advanced>summary>svg{transition:none}._v_wrq_miniSpinner{animation:none}}";
559
666
  const tagId$13 = "dsh-mnemon/src/client/MnemonSettingsCard.module.css";
560
667
  if (typeof document !== "undefined") {
561
668
  let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
@@ -674,6 +781,16 @@ window.__ModuleLoader__.load({
674
781
  "providerToggle": "_v_wrq_providerToggle",
675
782
  "providerToggleError": "_v_wrq_providerToggleError",
676
783
  "readOnlyNotice": "_v_wrq_readOnlyNotice",
784
+ "reviewEntry": "_v_wrq_reviewEntry",
785
+ "reviewGuidance": "_v_wrq_reviewGuidance",
786
+ "reviewList": "_v_wrq_reviewList",
787
+ "reviewOperations": "_v_wrq_reviewOperations",
788
+ "reviewOpinionForm": "_v_wrq_reviewOpinionForm",
789
+ "reviewOpinions": "_v_wrq_reviewOpinions",
790
+ "reviewRules": "_v_wrq_reviewRules",
791
+ "reviewSelected": "_v_wrq_reviewSelected",
792
+ "reviewSelection": "_v_wrq_reviewSelection",
793
+ "reviewTitle": "_v_wrq_reviewTitle",
677
794
  "rowActions": "_v_wrq_rowActions",
678
795
  "rowDetail": "_v_wrq_rowDetail",
679
796
  "rowNote": "_v_wrq_rowNote",
@@ -690,6 +807,31 @@ window.__ModuleLoader__.load({
690
807
  "settings-spin": "_v_wrq_settings-spin",
691
808
  "surface": "_v_wrq_surface",
692
809
  "switch": "_v_wrq_switch",
810
+ "syncAccount": "_v_wrq_syncAccount",
811
+ "syncBackupComponents": "_v_wrq_syncBackupComponents",
812
+ "syncBackupEntry": "_v_wrq_syncBackupEntry",
813
+ "syncBackupList": "_v_wrq_syncBackupList",
814
+ "syncBackups": "_v_wrq_syncBackups",
815
+ "syncBar": "_v_wrq_syncBar",
816
+ "syncBlock": "_v_wrq_syncBlock",
817
+ "syncCheck": "_v_wrq_syncCheck",
818
+ "syncCode": "_v_wrq_syncCode",
819
+ "syncConflict": "_v_wrq_syncConflict",
820
+ "syncConflictList": "_v_wrq_syncConflictList",
821
+ "syncConflictSides": "_v_wrq_syncConflictSides",
822
+ "syncDialogBody": "_v_wrq_syncDialogBody",
823
+ "syncDialogNote": "_v_wrq_syncDialogNote",
824
+ "syncDiff": "_v_wrq_syncDiff",
825
+ "syncDiffColumns": "_v_wrq_syncDiffColumns",
826
+ "syncDiffMeta": "_v_wrq_syncDiffMeta",
827
+ "syncFeedback": "_v_wrq_syncFeedback",
828
+ "syncField": "_v_wrq_syncField",
829
+ "syncForm": "_v_wrq_syncForm",
830
+ "syncFormActions": "_v_wrq_syncFormActions",
831
+ "syncPlan": "_v_wrq_syncPlan",
832
+ "syncRow": "_v_wrq_syncRow",
833
+ "syncState": "_v_wrq_syncState",
834
+ "syncSuccess": "_v_wrq_syncSuccess",
693
835
  "toggleRow": "_v_wrq_toggleRow",
694
836
  "visuallyHidden": "_v_wrq_visuallyHidden",
695
837
  "warning": "_v_wrq_warning"
@@ -2259,7 +2401,187 @@ window.__ModuleLoader__.load({
2259
2401
  "config.packUnnamedZip": "Mnemon 备份.zip",
2260
2402
  "config.packZipReady": "校验通过 · {components} 个组件 · {items} 项 · {size}",
2261
2403
  "config.packImportZipAction": "安全导入",
2262
- "config.packImportedWhole": "已将 ZIP 安全合并到 {root}。"
2404
+ "config.packImportedWhole": "已将 ZIP 安全合并到 {root}。",
2405
+ "config.syncTitle": "Git 同步",
2406
+ "config.syncSimpleDescription": "把上述组件的数据同步到 Git 仓库;不含第三方 Provider 与密钥",
2407
+ "config.syncLoading": "正在读取同步状态…",
2408
+ "config.syncUnavailable": "当前 DSH 主机不支持 Mnemon 仓库同步通道。",
2409
+ "config.syncNotConfigured": "尚未配置仓库",
2410
+ "config.syncGitMissing": "缺少 Git {required} 或更高版本",
2411
+ "config.syncRemoteBranchMissing": "远端还没有 {branch} 分支",
2412
+ "config.syncRemoteUnreachable": "远端不可达",
2413
+ "config.syncRemoteCommit": "远端 {commit}",
2414
+ "config.syncTokenSaved": "已保存凭据",
2415
+ "config.syncTokenNone": "未保存凭据",
2416
+ "config.syncSave": "保存",
2417
+ "config.syncSaved": "已保存仓库同步配置。",
2418
+ "config.syncFailed": "同步操作失败:{error}",
2419
+ "config.syncPush": "推送",
2420
+ "config.syncPushing": "推送中…",
2421
+ "config.syncPushed": "已推送 {commit}({files} 个文件,{size})。",
2422
+ "config.syncPushedLocal": "已提交 {commit},但推送未完成:{reason}",
2423
+ "config.syncPushIdle": "远端已是当前内容,没有新的提交。",
2424
+ "config.syncPreview": "检查远端",
2425
+ "config.syncPreviewing": "检查中…",
2426
+ "config.syncPreviewReady": "远端 {commit} · {components} 个组件 · {size}",
2427
+ "config.syncPreviewComponents": "{changed}/{total} 个组件与本地不同",
2428
+ "config.syncPreviewFiles": "新增 {added} · 缺失 {removed} · 不同 {changed}",
2429
+ "config.syncPull": "拉取并合并",
2430
+ "config.syncPulling": "拉取中…",
2431
+ "config.syncPulled": "已把远端 {commit} 合并到 {root}。",
2432
+ "config.syncBackups": "备份历史",
2433
+ "config.syncBackupsLoading": "读取中…",
2434
+ "config.syncBackupsTitle": "{branch} 上的备份",
2435
+ "config.syncBackupsHint": "每次推送在 {subdir} 留下一个提交;这里显示每次备份来自哪台设备、包含什么,一次读一页",
2436
+ "config.syncBackupsEmpty": "远端分支上还没有备份。",
2437
+ "config.syncBackupsMore": "读取更早的备份",
2438
+ "config.syncBackupMeta": "来自 {machine} · {time}",
2439
+ "config.syncBackupPushedAt": "推送于 {time}",
2440
+ "config.syncBackupComponent": "{component}:{items} 条记忆 · {files} 个文件 · {size}",
2441
+ "config.syncBackupNoComponents": "这次提交没有可读的清单。",
2442
+ "config.syncBackupUnknownMachine": "未标注设备",
2443
+ "config.syncDiffTitle": "与远端 {commit} 的记忆差异(共有 {shared} 条)",
2444
+ "config.syncDiffSides": "本地 {local} 条 · 远端 {remote} 条 · 远端来自 {machine}",
2445
+ "config.syncDiffTruncated": "差异超过上限,只列出了前一部分。",
2446
+ "config.syncDiffTombstones": "远端记录了 {count} 条删除,本机尚未应用。",
2447
+ "config.syncDiffLocalOnly": "只在本机({count})",
2448
+ "config.syncDiffRemoteOnly": "只在远端({count})",
2449
+ "config.syncDiffNone": "没有",
2450
+ "config.syncDiffFrom": "来自 {machine}",
2451
+ "config.syncDiffClear": "没有冲突:两边没有同一主题的两种写法。",
2452
+ "config.syncDiffNothing": "本机与远端没有需要合并的记忆。",
2453
+ "config.syncDiffConflicts": "有 {count} 个主题两边写法不同,需要整理。",
2454
+ "config.syncDiffHere": "本机",
2455
+ "config.syncDiffThere": "远端",
2456
+ "config.syncDiffAdditions": "远端还有 {count} 条本机没有的记忆,可以直接新增。",
2457
+ "config.syncDiffLocalOnlyNote": "本机还有 {count} 条远端没有的记忆,推送后即可共享。",
2458
+ "config.syncDiffHeldBack": "远端还有 {count} 条记忆是本机以前删掉的;直接新增会按删除处理,把它们留在原处。",
2459
+ "config.syncDiffAdd": "直接新增",
2460
+ "config.syncDiffAdding": "新增中…",
2461
+ "config.syncDiffRevive": "恢复这些记忆",
2462
+ "config.syncDiffReviving": "恢复中…",
2463
+ "config.syncDiffAdded": "已新增远端 {commit} 的记忆到 {root}。",
2464
+ "config.syncDiffAddHeld": "其中 {count} 条本机以前删过,仍留在原处;要加回请点“恢复这些记忆”。",
2465
+ "config.syncPlanWhere": "这份方案由下方“记忆整理”统一整理、审查与执行。",
2466
+ "config.syncPlanGo": "到“记忆整理”处理",
2467
+ "config.syncRepoUrl": "仓库地址",
2468
+ "config.syncRepoUrlHint": "HTTPS、SSH 或本机绝对路径;不要把令牌写进地址",
2469
+ "config.syncBranch": "分支",
2470
+ "config.syncBranchHint": "默认 {branch}",
2471
+ "config.syncSubdir": "远端目录",
2472
+ "config.syncSubdirHint": "仓库内存放 payload 的目录,默认 {subdir}",
2473
+ "config.syncToken": "访问令牌",
2474
+ "config.syncTokenHint": "只存在本机 {path}(0600);环境变量 {env} 优先",
2475
+ "config.syncTokenKeep": "留空表示保持已保存的凭据",
2476
+ "config.syncTokenClear": "清除凭据",
2477
+ "config.syncTokenClearHint": "保存时删除本机保存的凭据",
2478
+ "config.syncAuthorName": "提交者姓名",
2479
+ "config.syncAuthorEmail": "提交者邮箱",
2480
+ "config.syncAuthorOptional": "可选",
2481
+ "config.syncAuthorHint": "留空则使用本机 Git 身份",
2482
+ "config.syncAutoBackup": "自动备份",
2483
+ "config.syncAutoBackupHint": "按下面的间隔自动推送一次;关闭后只在你点「推送」时推送",
2484
+ "config.syncAutoBackupOff": "关闭(只手动)",
2485
+ "config.syncAutoBackupHours": "{hours} 小时",
2486
+ "config.syncAutoBackupDays": "{days} 天",
2487
+ "config.syncAutoBackupSaved": "自动备份已设为 {interval}",
2488
+ "config.syncAutoBackupNext": "下次自动备份:{at}",
2489
+ "config.syncAutoBackupNever": "自动备份已关闭,只有你点「推送」时才会推送",
2490
+ "config.syncAutoBackupLast": "最近一次自动备份:{at}",
2491
+ "config.syncAutoBackupFailed": "最近一次自动备份失败:{error}",
2492
+ "config.syncCompacted": "已把 {count} 个零散对象收进包,{before} → {after},之后克隆只需下载 {after}",
2493
+ "config.syncGitHub": "GitHub 账号",
2494
+ "config.syncGitHubHint": "登录后可直接选择或新建仓库,凭据只留在本机",
2495
+ "config.syncGitHubUnavailable": "当前 DSH 主机没有可用的凭据存储,请改用访问令牌",
2496
+ "config.syncGitHubReadOnly": "当前凭据存储只读,登录无法保存",
2497
+ "config.syncGitHubSignIn": "使用 GitHub 登录",
2498
+ "config.syncGitHubStarting": "获取设备码…",
2499
+ "config.syncGitHubCode": "在 GitHub 输入此设备码:",
2500
+ "config.syncGitHubCopy": "复制",
2501
+ "config.syncGitHubCopied": "已复制",
2502
+ "config.syncGitHubOpen": "打开 GitHub 授权页",
2503
+ "config.syncGitHubWaiting": "等待授权…完成后会自动继续",
2504
+ "config.syncGitHubSignedIn": "已登录 @{login}",
2505
+ "config.syncGitHubSignOut": "退出登录",
2506
+ "config.syncGitHubFailed": "GitHub 登录失败:{error}",
2507
+ "config.syncGitHubExpired": "设备码已过期,请重新登录",
2508
+ "config.syncGitHubDenied": "授权已被拒绝",
2509
+ "config.syncTokenGitHub": "GitHub 登录",
2510
+ "config.syncTokenEnvironment": "使用环境变量凭据",
2511
+ "config.syncTokenOptional": "可选:也可以直接填访问令牌",
2512
+ "config.syncRepositories": "选择仓库",
2513
+ "config.syncRepositoriesHint": "从账号下的仓库中选择",
2514
+ "config.syncRepositoriesSignIn": "登录后这里会列出你的仓库,可直接选用或新建;不登录也可以在手填表单里填写地址",
2515
+ "config.syncRepositoriesLoading": "读取仓库…",
2516
+ "config.syncRepositoriesLoad": "刷新列表",
2517
+ "config.syncRepositoriesEmpty": "账号下还没有仓库,可以在下面新建",
2518
+ "config.syncRepositoriesChoose": "选择已有仓库…",
2519
+ "config.syncRepositoriesPrivate": "私有",
2520
+ "config.syncRepositoriesNoPush": "无推送权限",
2521
+ "config.syncRepositoryName": "新建仓库",
2522
+ "config.syncRepositoryPrivate": "创建为私有仓库",
2523
+ "config.syncRepositoryCreate": "新建并选用",
2524
+ "config.syncRepositoryCreating": "创建中…",
2525
+ "config.syncRepositoryCreated": "已新建 {name}。",
2526
+ "config.reconcileTitle": "记忆整理",
2527
+ "config.reconcileDescription": "模型读合并后的记忆,只提出建议,等你审查后才写入",
2528
+ "review.rulesTitle": "运行规则",
2529
+ "review.rulesPull": "后台拉取:后台只按「Git 同步」里「自动备份」的间隔推送一次,推送前先读取远端分支并与本机合并;这一步不产生任何建议。自动备份关闭时,只有你点「推送」才会读取远端。",
2530
+ "review.rulesDiff": "差异:只有点「检查远端」或推送前的合并才会读出远端与本机的差别;差别只显示出来,不会自动写入。",
2531
+ "review.rulesPlan": "方案:只有点「整理记忆」才会生成待办方案,每条方案都要你接受并应用之后才会真正写入记忆。",
2532
+ "review.reconcile": "整理记忆",
2533
+ "review.reconciling": "整理中…",
2534
+ "review.refresh": "刷新",
2535
+ "review.empty": "没有待审查的建议",
2536
+ "review.pending": "{count} 条待审查",
2537
+ "review.failed": "读取审查记录失败:{error}",
2538
+ "review.planned": "已生成 {operations} 条建议,接受后才会写入。",
2539
+ "review.none": "模型认为当前记忆无需改动。",
2540
+ "review.statusPending": "待审查",
2541
+ "review.statusAccepted": "已接受",
2542
+ "review.statusRejected": "已拒绝",
2543
+ "review.expand": "查看",
2544
+ "review.collapse": "收起",
2545
+ "review.accept": "接受",
2546
+ "review.reject": "拒绝",
2547
+ "review.apply": "执行",
2548
+ "review.applying": "执行中…",
2549
+ "review.reopen": "重新打开",
2550
+ "review.applied": "已执行 {count} 条改动。",
2551
+ "review.appliedAt": "执行于 {time}",
2552
+ "review.appliedCount": "已执行 {count}/{total} 条",
2553
+ "review.applyFailed": "执行失败:{error}",
2554
+ "review.meta": "{count} 条改动 · 来自 {machine} · {time}",
2555
+ "review.foreign": "涉及其他机器的记忆:{machines}",
2556
+ "review.opinions": "意见",
2557
+ "review.noOpinions": "还没有意见",
2558
+ "review.authorUser": "你",
2559
+ "review.authorAgent": "模型",
2560
+ "review.opinionPlaceholder": "写下你的意见,下次整理会读到",
2561
+ "review.opinionSend": "提交意见",
2562
+ "review.opinionAdded": "已记录你的意见。",
2563
+ "review.opAdd": "新增{target}记忆:{content}",
2564
+ "review.opReplace": "改写{target}记忆:由“{from}”改为“{to}”",
2565
+ "review.opRemove": "删除{target}记忆:{text}",
2566
+ "review.opArchive": "归档文档 {id}",
2567
+ "review.targetMemory": "项目",
2568
+ "review.targetUser": "用户",
2569
+ "review.guidanceLabel": "整理要求",
2570
+ "review.guidanceHint": "可选:写下你希望这次整理达成的目标,模型会读到,但不会因此获得额外权限",
2571
+ "review.guidancePlaceholder": "例如:两条偏好其实是一回事,合并成一条",
2572
+ "review.guided": "已按你的要求整理",
2573
+ "review.remoteEntries": "参考了远端 {count} 条本机没有的记忆",
2574
+ "review.selectAll": "全选",
2575
+ "review.selectNone": "全不选",
2576
+ "review.selectHint": "勾选要执行的改动,未勾选的保留到下次",
2577
+ "review.selected": "已选 {count}/{total} 条",
2578
+ "review.applyCount": "执行选中 {count} 条",
2579
+ "review.noSelection": "请至少选择一条改动。",
2580
+ "review.history": "已执行的历史方案({count})",
2581
+ "review.historyTitle": "已执行的历史方案",
2582
+ "review.historyHint": "这些方案已经执行过,只供回看;重新打开不会撤销已经写入的改动。",
2583
+ "review.historyEmpty": "还没有执行过的方案。",
2584
+ "review.rejectedHint": "这份方案已被拒绝;写下意见后重新打开,或直接让 AI 重新整理。"
2263
2585
  };
2264
2586
  const en = {
2265
2587
  ...en$3,
@@ -2881,7 +3203,187 @@ window.__ModuleLoader__.load({
2881
3203
  "config.packUnnamedZip": "Mnemon backup.zip",
2882
3204
  "config.packZipReady": "Verified · {components} components · {items} items · {size}",
2883
3205
  "config.packImportZipAction": "Safe import",
2884
- "config.packImportedWhole": "Safely merged the ZIP into {root}."
3206
+ "config.packImportedWhole": "Safely merged the ZIP into {root}.",
3207
+ "config.syncTitle": "Git sync",
3208
+ "config.syncSimpleDescription": "Syncs the components above to a Git repository, without third-party providers or credentials",
3209
+ "config.syncLoading": "Reading the sync status…",
3210
+ "config.syncUnavailable": "This DSH host does not provide the Mnemon repository sync channel.",
3211
+ "config.syncNotConfigured": "No repository yet",
3212
+ "config.syncGitMissing": "Git {required} or newer is unavailable",
3213
+ "config.syncRemoteBranchMissing": "The remote has no {branch} branch yet",
3214
+ "config.syncRemoteUnreachable": "The remote is unreachable",
3215
+ "config.syncRemoteCommit": "Remote {commit}",
3216
+ "config.syncTokenSaved": "Token saved",
3217
+ "config.syncTokenNone": "No token saved",
3218
+ "config.syncSave": "Save",
3219
+ "config.syncSaved": "Saved the repository sync configuration.",
3220
+ "config.syncFailed": "Sync operation failed: {error}",
3221
+ "config.syncPush": "Push",
3222
+ "config.syncPushing": "Pushing…",
3223
+ "config.syncPushed": "Pushed {commit} ({files} files, {size}).",
3224
+ "config.syncPushedLocal": "Committed {commit}, but the push did not finish: {reason}",
3225
+ "config.syncPushIdle": "The remote already holds this payload; nothing to commit.",
3226
+ "config.syncPreview": "Check remote",
3227
+ "config.syncPreviewing": "Checking…",
3228
+ "config.syncPreviewReady": "Remote {commit} · {components} components · {size}",
3229
+ "config.syncPreviewComponents": "{changed} of {total} components differ from local",
3230
+ "config.syncPreviewFiles": "{added} added · {removed} missing · {changed} changed",
3231
+ "config.syncPull": "Pull and merge",
3232
+ "config.syncPulling": "Pulling…",
3233
+ "config.syncPulled": "Merged remote {commit} into {root}.",
3234
+ "config.syncBackups": "Backups",
3235
+ "config.syncBackupsLoading": "Reading…",
3236
+ "config.syncBackupsTitle": "Backups on {branch}",
3237
+ "config.syncBackupsHint": "Each push leaves one commit in {subdir}; this lists which installation published what, one page at a time",
3238
+ "config.syncBackupsEmpty": "The branch holds no backup yet.",
3239
+ "config.syncBackupsMore": "Load older backups",
3240
+ "config.syncBackupMeta": "From {machine} · {time}",
3241
+ "config.syncBackupPushedAt": "Pushed at {time}",
3242
+ "config.syncBackupComponent": "{component}: {items} memories · {files} files · {size}",
3243
+ "config.syncBackupNoComponents": "This commit holds no readable manifest.",
3244
+ "config.syncBackupUnknownMachine": "Unattributed installation",
3245
+ "config.syncDiffTitle": "Memory differences against remote {commit} ({shared} shared)",
3246
+ "config.syncDiffSides": "{local} locally · {remote} remotely · remote from {machine}",
3247
+ "config.syncDiffTruncated": "More differences exist than this list states.",
3248
+ "config.syncDiffTombstones": "The branch recorded {count} removals this installation has not applied.",
3249
+ "config.syncDiffLocalOnly": "Only here ({count})",
3250
+ "config.syncDiffRemoteOnly": "Only remotely ({count})",
3251
+ "config.syncDiffNone": "None",
3252
+ "config.syncDiffFrom": "from {machine}",
3253
+ "config.syncDiffClear": "No conflict: the two sides state no subject twice.",
3254
+ "config.syncDiffNothing": "Nothing here and on the branch needs merging.",
3255
+ "config.syncDiffConflicts": "{count} subjects are written differently on the two sides and need reconciling.",
3256
+ "config.syncDiffHere": "Here",
3257
+ "config.syncDiffThere": "Branch",
3258
+ "config.syncDiffAdditions": "The branch also holds {count} memories this installation does not have; they can simply be added.",
3259
+ "config.syncDiffLocalOnlyNote": "This installation also holds {count} memories the branch does not have; a push shares them.",
3260
+ "config.syncDiffHeldBack": "The branch also holds {count} memories this installation deleted earlier; adding them honors that deletion and leaves them where they are.",
3261
+ "config.syncDiffAdd": "Add them",
3262
+ "config.syncDiffAdding": "Adding…",
3263
+ "config.syncDiffRevive": "Bring them back",
3264
+ "config.syncDiffReviving": "Bringing back…",
3265
+ "config.syncDiffAdded": "Added the memories from remote {commit} into {root}.",
3266
+ "config.syncDiffAddHeld": "{count} of them were deleted here earlier and stayed out; bring them back with “Bring them back”.",
3267
+ "config.syncPlanWhere": "Memory reconciliation below is where this plan is made, reviewed and applied.",
3268
+ "config.syncPlanGo": "Go to Memory reconciliation",
3269
+ "config.syncRepoUrl": "Repository URL",
3270
+ "config.syncRepoUrlHint": "HTTPS, SSH, or an absolute local path; never put the token in the URL",
3271
+ "config.syncBranch": "Branch",
3272
+ "config.syncBranchHint": "Defaults to {branch}",
3273
+ "config.syncSubdir": "Remote directory",
3274
+ "config.syncSubdirHint": "Where the payload lives inside the repository; defaults to {subdir}",
3275
+ "config.syncToken": "Access token",
3276
+ "config.syncTokenHint": "Stored only on this machine at {path} (0600); the {env} environment variable wins",
3277
+ "config.syncTokenKeep": "Leave empty to keep the saved token",
3278
+ "config.syncTokenClear": "Clear token",
3279
+ "config.syncTokenClearHint": "Deletes the token stored on this machine when you save",
3280
+ "config.syncAuthorName": "Commit author name",
3281
+ "config.syncAuthorEmail": "Commit author email",
3282
+ "config.syncAuthorOptional": "Optional",
3283
+ "config.syncAuthorHint": "Leave empty to use the Git identity of this machine",
3284
+ "config.syncAutoBackup": "Automatic backup",
3285
+ "config.syncAutoBackupHint": "Pushes once per interval below; switched off, the branch only moves when you press Push",
3286
+ "config.syncAutoBackupOff": "Off (manual only)",
3287
+ "config.syncAutoBackupHours": "{hours} hours",
3288
+ "config.syncAutoBackupDays": "{days} days",
3289
+ "config.syncAutoBackupSaved": "Automatic backup set to {interval}",
3290
+ "config.syncAutoBackupNext": "Next automatic backup: {at}",
3291
+ "config.syncAutoBackupNever": "Automatic backup is off; the branch moves only when you press Push",
3292
+ "config.syncAutoBackupLast": "Last automatic backup: {at}",
3293
+ "config.syncAutoBackupFailed": "The last automatic backup failed: {error}",
3294
+ "config.syncCompacted": "Folded {count} loose objects into a pack, {before} → {after}; a clone now downloads {after}",
3295
+ "config.syncGitHub": "GitHub account",
3296
+ "config.syncGitHubHint": "Sign in to pick or create a repository; the grant stays on this machine",
3297
+ "config.syncGitHubUnavailable": "This DSH host has no credentials store; use an access token instead",
3298
+ "config.syncGitHubReadOnly": "The credentials store is read-only, so a sign-in cannot be saved",
3299
+ "config.syncGitHubSignIn": "Sign in with GitHub",
3300
+ "config.syncGitHubStarting": "Requesting a device code…",
3301
+ "config.syncGitHubCode": "Enter this device code on GitHub:",
3302
+ "config.syncGitHubCopy": "Copy",
3303
+ "config.syncGitHubCopied": "Copied",
3304
+ "config.syncGitHubOpen": "Open the GitHub authorization page",
3305
+ "config.syncGitHubWaiting": "Waiting for authorization… this continues on its own",
3306
+ "config.syncGitHubSignedIn": "Signed in as @{login}",
3307
+ "config.syncGitHubSignOut": "Sign out",
3308
+ "config.syncGitHubFailed": "GitHub sign-in failed: {error}",
3309
+ "config.syncGitHubExpired": "The device code expired; start the sign-in again",
3310
+ "config.syncGitHubDenied": "The authorization was denied",
3311
+ "config.syncTokenGitHub": "GitHub sign-in",
3312
+ "config.syncTokenEnvironment": "Credential from the environment",
3313
+ "config.syncTokenOptional": "Optional: an access token also works",
3314
+ "config.syncRepositories": "Choose a repository",
3315
+ "config.syncRepositoriesHint": "Pick one of the repositories this account can reach",
3316
+ "config.syncRepositoriesSignIn": "Sign in and this lists the repositories you can use, or create one; an address typed below works without a sign-in",
3317
+ "config.syncRepositoriesLoading": "Reading repositories…",
3318
+ "config.syncRepositoriesLoad": "Refresh list",
3319
+ "config.syncRepositoriesEmpty": "This account has no repository yet; create one below",
3320
+ "config.syncRepositoriesChoose": "Choose a repository…",
3321
+ "config.syncRepositoriesPrivate": "private",
3322
+ "config.syncRepositoriesNoPush": "no push access",
3323
+ "config.syncRepositoryName": "New repository",
3324
+ "config.syncRepositoryPrivate": "Create it private",
3325
+ "config.syncRepositoryCreate": "Create and use it",
3326
+ "config.syncRepositoryCreating": "Creating…",
3327
+ "config.syncRepositoryCreated": "Created {name}.",
3328
+ "config.reconcileTitle": "Memory reconciliation",
3329
+ "config.reconcileDescription": "A model reads the merged memory and proposes changes; nothing is written until you review it",
3330
+ "review.rulesTitle": "How this runs",
3331
+ "review.rulesPull": "Background pull: the background only repeats the push at the interval set under Automatic backup in Git sync, and before pushing it reads the remote branch and merges it here; this step produces no proposal. With the automatic backup off, the remote branch is read only when you press Push.",
3332
+ "review.rulesDiff": "Differences: only Check remote, or the merge before a push, reads what differs between the branch and this machine; a difference is shown, never written.",
3333
+ "review.rulesPlan": "Proposals: only Reconcile writes a plan to answer, and every entry in it is applied one operation at a time, after you accept it.",
3334
+ "review.reconcile": "Reconcile",
3335
+ "review.reconciling": "Reconciling…",
3336
+ "review.refresh": "Refresh",
3337
+ "review.empty": "Nothing to review",
3338
+ "review.pending": "{count} awaiting review",
3339
+ "review.failed": "Reading the review ledger failed: {error}",
3340
+ "review.planned": "Prepared {operations} proposals; nothing is written until you accept them.",
3341
+ "review.none": "The model found nothing to change in the merged memory.",
3342
+ "review.statusPending": "Pending",
3343
+ "review.statusAccepted": "Accepted",
3344
+ "review.statusRejected": "Rejected",
3345
+ "review.expand": "Open",
3346
+ "review.collapse": "Close",
3347
+ "review.accept": "Accept",
3348
+ "review.reject": "Reject",
3349
+ "review.apply": "Apply",
3350
+ "review.applying": "Applying…",
3351
+ "review.reopen": "Reopen",
3352
+ "review.applied": "Applied {count} changes.",
3353
+ "review.appliedAt": "Applied at {time}",
3354
+ "review.appliedCount": "{count} of {total} operations have run",
3355
+ "review.applyFailed": "Applying failed: {error}",
3356
+ "review.meta": "{count} changes · from {machine} · {time}",
3357
+ "review.foreign": "Touches memory from: {machines}",
3358
+ "review.opinions": "Opinions",
3359
+ "review.noOpinions": "No opinion yet",
3360
+ "review.authorUser": "You",
3361
+ "review.authorAgent": "Model",
3362
+ "review.opinionPlaceholder": "Leave an opinion for the next reconciliation",
3363
+ "review.opinionSend": "Add opinion",
3364
+ "review.opinionAdded": "Your opinion was recorded.",
3365
+ "review.opAdd": "Add {target} memory: {content}",
3366
+ "review.opReplace": "Rewrite {target} memory: “{from}” becomes “{to}”",
3367
+ "review.opRemove": "Remove {target} memory: {text}",
3368
+ "review.opArchive": "Archive document {id}",
3369
+ "review.targetMemory": "project",
3370
+ "review.targetUser": "user",
3371
+ "review.guidanceLabel": "What to accomplish",
3372
+ "review.guidanceHint": "Optional: state what you want this reconciliation to do; the model reads it without gaining any authority from it",
3373
+ "review.guidancePlaceholder": "For example: two preferences say the same thing, merge them into one",
3374
+ "review.guided": "Planned with your guidance",
3375
+ "review.remoteEntries": "Read {count} entries from the branch this installation lacks",
3376
+ "review.selectAll": "All",
3377
+ "review.selectNone": "None",
3378
+ "review.selectHint": "Check the changes to apply; unchecked ones stay for the next round",
3379
+ "review.selected": "{count} of {total} selected",
3380
+ "review.applyCount": "Apply {count}",
3381
+ "review.noSelection": "Select at least one change.",
3382
+ "review.history": "Applied plans ({count})",
3383
+ "review.historyTitle": "Applied plans",
3384
+ "review.historyHint": "These plans already ran; they are kept for reading. Reopening one does not undo what it wrote.",
3385
+ "review.historyEmpty": "No plan has run yet.",
3386
+ "review.rejectedHint": "This plan was rejected; leave an opinion and reopen it, or ask the AI to plan again."
2885
3387
  };
2886
3388
  function interpolate(dictionary, key, params) {
2887
3389
  const template = dictionary[key];
@@ -2905,7 +3407,7 @@ window.__ModuleLoader__.load({
2905
3407
  const IconChevronLeftOutline14 = _deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutlineRegular;
2906
3408
  //#endregion
2907
3409
  //#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonView.module.css.mjs
2908
- const css$12 = ".IIa07q_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-backdrop:var(--dsw-alias-bg-overlay,var(--mn-bg));--mn-surface:linear-gradient(var(--mn-bg), var(--mn-bg)), linear-gradient(var(--mn-backdrop), var(--mn-backdrop)) var(--mn-bg);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-fill:var(--dsw-alias-bg-module-platform);--mn-input:var(--dsw-alias-bg-layer-1);--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-caption:var(--dsw-alias-label-caption);--mn-line:var(--dsw-alias-border-l2);--mn-line-strong:var(--dsw-alias-border-l3);--mn-field-line:var(--dsw-alias-border-l4);--mn-card-line:var(--dsw-alias-settings-card-stroke);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-pressed:var(--dsw-alias-interactive-bg-active);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-primary);--mn-warn:var(--dsw-alias-state-warn-primary);--mn-idle:var(--dsw-alias-state-idle-primary);--mn-priority:var(--dsw-alias-state-warn-primary);--mn-focus:var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));--mn-code:var(--ds-font-family-code,\"SFMono-Regular\", Consolas, monospace);--mn-sans:var(--dsw-font-family,-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);box-sizing:border-box;min-width:0;height:100%;min-height:0;color:var(--mn-text);background:var(--mn-surface);font:13px/20px var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden}:has(>[data-conversation-scroll]>[data-slot=conversation\\.session]>*>[data-slot=conversation\\.view]>.IIa07q_shell[data-mnemon-surface=builtin])>[data-width-handle]{visibility:hidden;pointer-events:none}.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{box-sizing:border-box}.IIa07q_shell :where(button,input,select,textarea){color:inherit;font:inherit}.IIa07q_shell :where(button,select){touch-action:manipulation}.IIa07q_shell button:focus-visible,.IIa07q_shell input:focus-visible,.IIa07q_shell select:focus-visible,.IIa07q_shell textarea:focus-visible,.IIa07q_shell summary:focus-visible,.IIa07q_shell [role=button]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_shell :is(textarea,input:not([type=checkbox],[type=radio],[type=file])):focus-visible{outline:none}.IIa07q_shell code{font-family:var(--mn-code);font-size:.92em}.IIa07q_masthead{background:var(--mn-surface);flex:none;align-items:center;gap:12px;min-height:48px;padding:10px 24px 4px;display:flex}.IIa07q_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.IIa07q_backButton>svg{flex:none}.IIa07q_brand{flex-wrap:wrap;flex:auto;align-items:center;gap:4px 10px;min-width:0;display:flex}.IIa07q_brand h1{flex:none;margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_storageMode{color:var(--mn-faint);background:var(--mn-fill);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 8px;font-size:11px;line-height:17px;display:inline-flex}.IIa07q_storageMode>strong{color:var(--mn-muted);font-weight:500}.IIa07q_statusCluster{color:var(--mn-faint);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:13px;line-height:20px;display:inline-flex}.IIa07q_statusDot{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_online{background:var(--mn-success)}.IIa07q_offline{background:var(--mn-danger)}.IIa07q_checking{background:var(--mn-idle)}.IIa07q_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_iconButton:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_iconButton>svg{flex:none}.IIa07q_headerActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_workspacePicker>[data-part=label]{white-space:nowrap}.IIa07q_workspacePicker button{width:min(200px,22vw);min-width:112px}.IIa07q_alert,.IIa07q_inlineError{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_alert{flex-direction:column;flex:none;gap:2px;margin:8px 24px 0;display:flex}.IIa07q_alert ul{margin:4px 0 0;padding-left:18px}.IIa07q_alert[role=status]{color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent))}.IIa07q_notice{flex:none;margin:8px 24px 0}.IIa07q_compositionStatus{border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;display:inline-flex}.IIa07q_compositionStatus:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_compositionStatus:disabled{cursor:default}.IIa07q_compositionStrategy{color:var(--mn-muted)}.IIa07q_compositionStrategy:before{content:\"·\";color:var(--mn-faint);margin-right:6px}.IIa07q_compositionStatusWrap{min-width:0;display:inline-flex;position:relative}.IIa07q_compositionSummary{z-index:20;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);width:max-content;max-width:min(320px,100vw - 32px);box-shadow:var(--dsw-elevation-prominent);color:var(--mn-muted);white-space:normal;opacity:0;pointer-events:none;flex-direction:column;align-items:flex-start;gap:8px;padding:12px;font-size:12px;line-height:18px;transition:opacity .14s ease-out,transform .14s ease-out;display:flex;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}.IIa07q_compositionStatusWrap:hover .IIa07q_compositionSummary,.IIa07q_compositionStatusWrap:focus-within .IIa07q_compositionSummary{opacity:1;transition-delay:.2s;transform:none}.IIa07q_compositionSummary>strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_compositionLayers{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_compositionHint{color:var(--mn-faint)}@media (prefers-reduced-motion:reduce){.IIa07q_compositionSummary{transition:none}}.IIa07q_workspaceMismatch{border:.5px solid color-mix(in srgb, var(--dsw-alias-state-warn-label,var(--mn-warn)) 20%, transparent);border-radius:var(--dsw-radius-sm);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));white-space:nowrap;flex:none;align-items:center;gap:6px;padding:0 3px 0 10px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}.IIa07q_workspaceMismatch>button{border-radius:var(--dsw-radius-xs);min-height:22px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);cursor:pointer;border:0;padding:0 8px;font-size:12px}.IIa07q_workspaceMismatch>button:hover{background:color-mix(in srgb, currentColor 16%, transparent)}.IIa07q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.IIa07q_topNavigation{border-bottom:.5px solid var(--mn-line-strong);background:var(--mn-surface);flex:none;align-items:flex-end;min-width:0;padding:0 24px;display:flex}.IIa07q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;flex:1;align-items:flex-end;gap:28px;min-width:0;display:flex;overflow-x:auto}.IIa07q_nav::-webkit-scrollbar{display:none}.IIa07q_nav button{min-width:max-content;color:var(--mn-faint);text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-.5px;padding:10px 0 9px;font-size:13px;font-weight:500;line-height:16px;display:flex;position:relative}.IIa07q_nav button:hover{color:var(--mn-muted)}.IIa07q_nav button[data-active]{color:var(--mn-accent)}.IIa07q_nav button[data-layer-disabled]:not([data-active]){color:var(--mn-caption)}.IIa07q_nav .IIa07q_layerDisabledBadge{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;align-items:center;padding:0 6px;font-size:11px;font-style:normal;font-weight:500;line-height:15px;display:inline-flex}.IIa07q_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-surface);flex:1;min-width:0;overflow:auto}.IIa07q_page{width:100%;min-height:100%;margin:0 auto;padding:20px 24px clamp(96px,14vh,150px)}.IIa07q_pageHeader{justify-content:space-between;align-items:flex-start;gap:16px 24px;margin-bottom:16px;display:flex}.IIa07q_pageHeader>div:first-child{min-width:0}.IIa07q_pageHeader h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:2px 0 0;font-size:13px;line-height:20px}.IIa07q_pageHeaderMeta{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_pageHeaderMeta>code{border:.5px solid var(--mn-field-line);color:var(--mn-faint);font:500 11px/17px var(--mn-sans);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;padding:1px 8px}.IIa07q_pageSpinner{width:20px;height:20px;color:var(--mn-faint);flex:none;place-items:center;display:inline-grid}.IIa07q_pageSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton{border-radius:var(--dsw-radius-md);min-height:32px;color:var(--mn-text);white-space:nowrap;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:4px;padding:0 12px;font-size:13px;font-weight:400;line-height:20px;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.IIa07q_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-primary-fill)}.IIa07q_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.IIa07q_secondaryButton{border:.5px solid var(--mn-line-strong)}.IIa07q_secondaryButton:hover:not(:disabled),.IIa07q_ghostButton:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_secondaryButton:active:not(:disabled),.IIa07q_ghostButton:active:not(:disabled){background:var(--mn-pressed)}.IIa07q_dangerButton{color:var(--mn-danger)}.IIa07q_dangerButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger,color-mix(in srgb, var(--mn-danger) 8%, transparent))}.IIa07q_dangerSolidButton{color:var(--dsw-static-neutral-00,#fff);background:var(--mn-danger)}.IIa07q_dangerSolidButton:hover:not(:disabled){background:color-mix(in srgb, var(--mn-danger), black 8%)}.IIa07q_shell :where(button:disabled){cursor:not-allowed;opacity:.4}.IIa07q_emptyState{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:200px;padding:32px 24px;display:flex}.IIa07q_emptyGlyph{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-lg);width:48px;height:48px;color:var(--mn-faint);flex:none;place-items:center;font-size:20px;line-height:1;display:grid}.IIa07q_emptyState h3{margin:0 0 4px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_emptyState p{max-width:480px;color:var(--mn-faint);margin:0;font-size:13px;line-height:20px}.IIa07q_sourceManagementSummary{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(220px,1.2fr) minmax(260px,1fr) minmax(220px,1fr);gap:16px;margin-top:12px;padding:16px;display:grid}.IIa07q_sourceManagementIdentity{grid-template-columns:6px minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity>span{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_sourceManagementSummary[data-availability=degraded] .IIa07q_sourceManagementIdentity>span{background:var(--mn-warn)}.IIa07q_sourceManagementSummary[data-availability=unavailable] .IIa07q_sourceManagementIdentity>span{background:var(--mn-danger)}.IIa07q_sourceManagementIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity small,.IIa07q_sourceManagementCapabilities>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_sourceManagementIdentity code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_sourceManagementSummary dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.IIa07q_sourceManagementSummary dl>div{border-radius:var(--dsw-radius-sm);background:var(--mn-fill);align-content:center;gap:2px;min-width:0;padding:8px 10px;display:grid}.IIa07q_sourceManagementSummary dt{color:var(--mn-faint);font-size:11px;line-height:14px}.IIa07q_sourceManagementSummary dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;line-height:20px;overflow:hidden}.IIa07q_sourceManagementSummary dd code{font-size:12px}.IIa07q_sourceManagementCapabilities{align-content:center;gap:6px;min-width:0;display:grid}.IIa07q_sourceManagementCapabilities>div{flex-wrap:wrap;gap:4px;display:flex}.IIa07q_sourceManagementCapabilities span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sourceManagementDiagnostics,.IIa07q_sourceManagementForm{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-top:12px;padding:16px}.IIa07q_sourceManagementDiagnostics h3,.IIa07q_sourceManagementForm h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sourceManagementDiagnostics ul{color:var(--mn-muted);gap:4px;margin:8px 0 0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_sourceManagementForm>div:first-child p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid label>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid input[type=checkbox]{width:16px;min-width:0;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary)}.IIa07q_sectionSpinner{z-index:6;width:20px;height:20px;color:var(--mn-faint);place-items:center;display:grid;position:absolute;top:10px;right:10px}.IIa07q_sectionSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}@keyframes IIa07q_mnemon-spin{to{transform:rotate(360deg)}}.IIa07q_inlineError{margin:0 0 12px}.IIa07q_loading{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_bodyEdit{gap:12px;padding-top:2px;display:grid}.IIa07q_bodyEdit label,.IIa07q_formGrid label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_bodyEdit input,.IIa07q_bodyEdit select,.IIa07q_bodyEdit textarea,.IIa07q_formGrid select,.IIa07q_formGrid input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-width:0;min-height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:5px 10px;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyEdit textarea{resize:vertical}.IIa07q_bodyEdit input::placeholder,.IIa07q_bodyEdit textarea::placeholder,.IIa07q_formGrid input::placeholder{color:var(--dsw-alias-label-dimmed)}.IIa07q_bodyEdit input:focus,.IIa07q_bodyEdit select:focus,.IIa07q_bodyEdit textarea:focus,.IIa07q_formGrid select:focus,.IIa07q_formGrid input:focus{border-color:var(--mn-accent)}.IIa07q_providerFieldControl{gap:4px;min-width:0;display:grid}.IIa07q_providerFieldControl input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary);margin:2px 0;padding:0}.IIa07q_bodyDeleteConfirm{gap:16px;display:grid}.IIa07q_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_bodyDeleteSummary{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);gap:4px;padding:12px;display:grid}.IIa07q_bodyDeleteSummary strong{font-size:13px;font-weight:500}.IIa07q_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyDeleteSummary span{color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:36px;margin-bottom:8px;display:flex}.IIa07q_sectionHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sectionHeading>div>span{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sectionHeading>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sectionHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_sectionHeading button:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_runtimeNotice{border-radius:var(--dsw-radius-md);color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent);margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_runtimeFootnote{color:var(--mn-faint);margin:12px 2px 0;font-size:12px;line-height:18px}.IIa07q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px;display:grid}.IIa07q_listProgress{border-top:.5px solid var(--mn-line);min-height:56px;color:var(--mn-faint);justify-content:center;align-items:center;gap:12px;margin-top:12px;padding:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_compactListProgress{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:8px;margin-top:8px;padding:10px 2px 2px;font-size:12px;line-height:18px;display:grid}.IIa07q_compactListProgress button{width:100%}.IIa07q_modalPortal{z-index:1000;isolation:isolate;pointer-events:none;position:fixed;inset:0}.IIa07q_modalTheme.IIa07q_modalTheme.IIa07q_modalTheme{width:auto;min-width:0;height:auto;min-height:0;color:var(--mn-text);pointer-events:none;background:0 0;display:block;position:absolute;inset:0;overflow:visible}.IIa07q_modalBackdrop{z-index:0;overscroll-behavior:contain;padding:max(24px, var(--dsh-frame-top-clearance,24px)) 24px;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);touch-action:none;pointer-events:auto;justify-content:center;align-items:center;animation:.18s ease-out both IIa07q_mnemon-dialog-backdrop-enter;display:flex;position:fixed;inset:0;overflow:hidden}.IIa07q_modal{box-sizing:border-box;border-radius:var(--dsw-radius-panel);background:linear-gradient(var(--mn-layer-2), var(--mn-layer-2)), var(--mn-surface);width:min(640px,100%);min-height:0;max-height:100%;box-shadow:var(--dsw-elevation-prominent);touch-action:auto;transform-origin:50% 100%;backface-visibility:hidden;will-change:transform, opacity;border:0;flex-direction:column;animation:.2s cubic-bezier(.2,.75,.2,1) both IIa07q_mnemon-dialog-enter;display:flex;overflow:hidden}.IIa07q_modalBackdrop[data-closing],.IIa07q_modal[data-closing]{pointer-events:none}.IIa07q_modalDragHandle{display:none}.IIa07q_modalWide{width:min(760px,100%)}.IIa07q_modal>header{flex:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:22px 14px 12px 24px;display:flex}.IIa07q_modal>header>div{min-width:0;padding-top:2px}.IIa07q_modal>header h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_modal>header p{overflow-wrap:anywhere;max-width:64ch;color:var(--mn-muted);margin:4px 0 0;font-size:13px;line-height:20px}.IIa07q_modal>header .IIa07q_iconButton{color:var(--mn-muted);flex:none}.IIa07q_modalBody{overscroll-behavior:contain;scrollbar-gutter:stable;touch-action:pan-y;-webkit-overflow-scrolling:touch;min-height:0;padding:8px 24px 20px;overflow:hidden auto}.IIa07q_modalFooter{background:0 0;flex:none;justify-content:flex-end;align-items:center;gap:12px;padding:4px 24px 24px;display:flex}.IIa07q_modalFooter button{min-height:36px;padding-inline:14px}.IIa07q_modalFooterMeta{color:var(--mn-faint);margin-right:auto;font-size:12px;line-height:18px}.IIa07q_modalFooterActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;margin-left:auto;display:flex}@keyframes IIa07q_mnemon-dialog-backdrop-enter{0%{opacity:0}}@keyframes IIa07q_mnemon-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.985)}}@keyframes IIa07q_mnemon-sheet-enter{0%{transform:translateY(calc(100% + 32px))}to{transform:translate3d(0, var(--mn-modal-drag-y,0px), 0)}}@keyframes IIa07q_mnemon-metadata-sweep{to{transform:translate(120%)}}@keyframes IIa07q_mnemon-metadata-refreshed{0%{border-color:color-mix(in srgb, var(--mn-accent) 60%, var(--mn-card-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 14%, transparent)}to{border-color:var(--mn-card-line);box-shadow:0 0 #0000}}.IIa07q_healthStrip{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);flex-wrap:wrap;margin-bottom:16px;display:flex;position:relative;overflow:hidden}.IIa07q_asyncStatusBlock{min-width:0;min-height:36px;position:relative}.IIa07q_healthStrip article{box-sizing:border-box;border-top:.5px solid var(--mn-line);border-left:.5px solid var(--mn-line);flex:150px;align-items:flex-start;gap:10px;min-width:0;min-height:76px;margin:-.5px 0 0 -.5px;padding:14px 16px;display:flex}.IIa07q_healthStrip article>div{min-width:0}.IIa07q_healthStrip small{color:var(--mn-faint);margin-bottom:2px;font-size:12px;line-height:18px;display:block}.IIa07q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;display:block;overflow:hidden}.IIa07q_healthStrip p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_healthIndicator{border-radius:50%;flex:none;width:6px;height:6px;margin-top:6px}.IIa07q_healthGood{background:var(--mn-success)}.IIa07q_healthBad{background:var(--mn-danger)}.IIa07q_healthMuted{background:var(--mn-idle)}.IIa07q_providerHealth{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_providerHealthList{margin-top:8px}.IIa07q_providerHealthList article{align-items:center;gap:12px;min-width:0;min-height:56px;padding:8px 0;display:flex}.IIa07q_providerHealthList article+article{border-top:.5px solid var(--mn-line)}.IIa07q_providerHealthOff{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;margin-top:4px;padding-top:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_providerHealthMark{box-sizing:border-box;border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}.IIa07q_providerHealthMark>img,.IIa07q_providerHealthMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_providerHealthCopy{flex:1;gap:0;min-width:0;display:grid}.IIa07q_providerHealthCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_providerHealthCopy small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerHealthCopy p{color:var(--mn-danger);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_providerHealthMeta{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_providerHealthMeta small{color:var(--mn-faint);font-variant-numeric:tabular-nums;font-size:12px;line-height:18px}.IIa07q_providerHealthSignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_providerHealthList article[data-status=healthy] .IIa07q_providerHealthSignal{background:var(--mn-success)}.IIa07q_providerHealthList article[data-status=unhealthy] .IIa07q_providerHealthSignal{background:var(--mn-danger)}.IIa07q_providerHealthList article[data-status=idle] .IIa07q_providerHealthSignal{background:var(--mn-idle)}.IIa07q_storageDomains{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_storageRoot{border-radius:var(--dsw-radius-md);background:var(--mn-fill);justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.IIa07q_storageRoot>div:first-child{gap:2px;min-width:0;display:grid}.IIa07q_storageRoot span,.IIa07q_storageRoot small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_storageRoot>div:last-child{flex:none;justify-items:end;gap:2px;display:grid}.IIa07q_storageRoot strong{font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.IIa07q_storageAreaGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.IIa07q_storageAreaGrid article{box-sizing:border-box;border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);flex-direction:column;min-width:0;min-height:148px;padding:12px 14px;display:flex}.IIa07q_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.IIa07q_storageAreaGrid article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_storageAreaGrid article>header span{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success)}.IIa07q_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger)}.IIa07q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.IIa07q_storageAreaGrid article>header em{color:var(--mn-faint);white-space:nowrap;font-size:11px;font-style:normal;line-height:14px}.IIa07q_storageAreaMetric{align-items:baseline;gap:6px;margin-top:12px;display:flex}.IIa07q_storageAreaMetric strong{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;line-height:28px}.IIa07q_storageAreaMetric span{color:var(--mn-faint);font-size:12px}.IIa07q_storageAreaMetric code{color:var(--mn-faint);margin-left:auto;font-size:11px}.IIa07q_storageAreaGrid article>p{min-height:36px;color:var(--mn-faint);margin:6px 0 8px;font-size:12px;line-height:18px}.IIa07q_storagePath{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:12px;line-height:18px;display:block}.IIa07q_storageUnavailable{border-radius:var(--dsw-radius-md);min-height:120px;color:var(--mn-muted);background:var(--mn-fill);text-align:center;place-content:center;gap:4px;margin-top:12px;display:grid}.IIa07q_storageUnavailable strong{font-size:13px;font-weight:500}.IIa07q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_storageFootnote{color:var(--mn-faint);margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_statusSectionHeader h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_statusSectionHeader p{max-width:640px;color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_phaseBadge{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_statusHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_versionDialogBody{grid-template-columns:minmax(0,1fr);gap:12px;display:grid}.IIa07q_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.IIa07q_versionChecking span{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_versionError,.IIa07q_versionResult{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:10px 12px}.IIa07q_versionResult{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent)}.IIa07q_versionError strong,.IIa07q_versionResult strong{font-size:13px;font-weight:500}.IIa07q_versionError p,.IIa07q_versionResult p{color:var(--mn-muted);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_versionList{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.IIa07q_versionList article{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px 14px}.IIa07q_versionList article>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_versionList article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_versionList article>header strong{font-size:14px;font-weight:500;line-height:22px}.IIa07q_versionList article>header span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_versionList article>header em{color:var(--mn-success);white-space:nowrap;font-size:12px;font-style:normal;line-height:18px}.IIa07q_versionList article[data-outdated]>header em{color:var(--mn-accent)}.IIa07q_versionNumbers{grid-template-columns:1fr auto 1fr;align-items:end;gap:10px;margin-top:10px;display:grid}.IIa07q_versionNumbers>div{gap:2px;display:grid}.IIa07q_versionNumbers small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_versionNumbers code{font-size:13px}.IIa07q_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.IIa07q_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:8px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionLocation>span{flex:none}.IIa07q_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_versionList article>footer{border-top:.5px solid var(--mn-line);justify-content:space-between;align-items:flex-end;gap:16px;margin-top:10px;padding-top:10px;display:flex}.IIa07q_versionList article>footer p{max-width:470px;color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionList article>footer button{flex:none}.IIa07q_versionList article>header em[data-state=unknown],.IIa07q_versionList article>header em[data-state=local],.IIa07q_versionList article>header em[data-state=missing]{color:var(--mn-faint)}.IIa07q_versionList article>header em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionNotice{color:var(--mn-muted);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_versionGuidance{border-radius:var(--dsw-radius-md);background:var(--mn-fill);gap:6px;min-width:0;margin-top:10px;padding:10px 12px;display:grid}.IIa07q_versionGuidance>strong{font-size:13px;font-weight:500}.IIa07q_versionGuidance>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionGuidance>a{color:var(--dsw-alias-link,var(--mn-accent));justify-self:start;font-size:12px}.IIa07q_versionGuidanceDetails{min-width:0;color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_versionGuidanceDetails>summary{cursor:pointer}.IIa07q_versionGuidanceDetails>p{margin:8px 0}.IIa07q_versionGuidanceDetails>a{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_versionCommand{border-radius:var(--dsw-radius-sm);background:var(--mn-layer-1);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:8px 10px;display:flex}.IIa07q_versionCommand>code{overflow-wrap:anywhere;white-space:pre-wrap;user-select:text;flex:1;min-width:0;font-size:12px}.IIa07q_versionCommand>button{flex:none}.IIa07q_versionCommand>small{color:var(--mn-faint);flex-basis:100%;font-size:12px}.IIa07q_versionPackages{border-top:.5px solid var(--mn-line);min-width:0;margin-top:12px}.IIa07q_versionPackagesToggle{width:100%;min-height:44px;color:var(--mn-text);text-align:start;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 0 0;display:flex}.IIa07q_versionPackagesToggle>strong{font-size:13px;font-weight:500}.IIa07q_versionPackagesToggle>small{color:var(--mn-faint);margin-left:auto;font-size:12px}.IIa07q_versionPackages h4{color:var(--mn-faint);margin:16px 0 8px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_versionPackages ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_versionPackage{border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);min-width:0;padding:10px 12px}.IIa07q_versionPackageHeader{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 12px;display:flex}.IIa07q_versionPackageHeader strong{overflow-wrap:anywhere;min-width:0;font-size:13px;font-weight:500}.IIa07q_versionPackageHeader em{color:var(--mn-faint);font-size:12px;font-style:normal}.IIa07q_versionPackageHeader em[data-state=available],.IIa07q_versionPackageHeader em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionPackageHeader em[data-state=current]{color:var(--mn-success)}.IIa07q_versionPackageMeta,.IIa07q_versionPackageNumbers{color:var(--mn-faint);flex-wrap:wrap;gap:6px 14px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionPackageNumbers code{color:var(--mn-text)}.IIa07q_versionPackageAction{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;display:flex}.IIa07q_versionPackageAction p{min-width:150px;color:var(--mn-muted);flex:1;margin:0;font-size:12px;line-height:18px}.IIa07q_versionPackageAction button{flex:none}@media (width<=1000px){.IIa07q_sourceManagementSummary{grid-template-columns:1fr 1fr}.IIa07q_sourceManagementCapabilities{grid-column:1/-1}.IIa07q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.IIa07q_shell{min-height:0;overflow:hidden}.IIa07q_sourceManagementSummary{grid-template-columns:1fr}.IIa07q_sourceManagementSummary dl,.IIa07q_sourceManagementCapabilities{grid-column:auto}.IIa07q_masthead{padding:8px 16px 2px}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding:0 16px}.IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_workspacePicker button{width:min(170px,32vw)}.IIa07q_modalBackdrop{padding:max(10px, env(safe-area-inset-top,0px)) 0 0;align-items:flex-end}.IIa07q_modal,.IIa07q_modalWide{width:100vw;max-height:calc(100vh - max(10px, env(safe-area-inset-top,0px)));border-radius:var(--dsw-radius-xl) var(--dsw-radius-xl) 0 0;transform:translate3d(0, var(--mn-modal-drag-y,0px), 0);animation-name:IIa07q_mnemon-sheet-enter;animation-duration:.34s;animation-timing-function:cubic-bezier(.2,.82,.2,1)}.IIa07q_modalDragHandle{cursor:grab;touch-action:none;user-select:none;flex:none;place-items:center;width:100%;height:28px;display:grid}.IIa07q_modalDragHandle span{background:var(--mn-line-strong);border-radius:999px;width:36px;height:4px;transition:width .14s,background-color .14s}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle{cursor:grabbing}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle span{background:var(--dsw-alias-border-l4);width:44px}.IIa07q_modal>header{padding:10px max(14px, env(safe-area-inset-right,0px)) 12px max(14px, env(safe-area-inset-left,0px));gap:12px}.IIa07q_modal>header p{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_modal>header .IIa07q_iconButton{width:44px;height:44px;margin:-4px -5px -4px 0}.IIa07q_modalBody{padding:14px max(14px, env(safe-area-inset-right,0px)) 18px max(14px, env(safe-area-inset-left,0px));scrollbar-gutter:auto;scroll-padding-bottom:12px}.IIa07q_modalBody button{min-height:44px}.IIa07q_modalFooter{padding:10px max(14px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(14px, env(safe-area-inset-left,0px));flex-direction:column;align-items:stretch;gap:8px}.IIa07q_modalFooterMeta{max-width:none;margin:0}.IIa07q_modalFooterActions{grid-template-columns:minmax(82px,.55fr) minmax(0,1.45fr);gap:8px;width:100%;margin:0;display:grid}.IIa07q_modalFooterActions button{white-space:normal;min-width:0;min-height:44px;padding-block:8px}.IIa07q_versionList article>footer{flex-direction:column;align-items:stretch}.IIa07q_nav{gap:22px}.IIa07q_page{padding:16px 16px calc(170px + env(safe-area-inset-bottom,0px))}.IIa07q_pageHeader{gap:10px;display:grid}.IIa07q_pageHeaderMeta{justify-content:flex-start}.IIa07q_healthStrip article{flex-basis:100%}.IIa07q_providerHealthMeta{flex-direction:column;align-items:flex-end;gap:4px}.IIa07q_storageRoot{flex-direction:column;align-items:flex-start}.IIa07q_storageRoot>div:last-child{justify-items:start}.IIa07q_storageAreaGrid{grid-template-columns:1fr}}@media (width<=520px){.IIa07q_workspacePicker select{width:min(150px,39vw)}.IIa07q_nav{scroll-snap-type:x proximity;gap:18px}.IIa07q_nav button{scroll-snap-align:start}.IIa07q_pageHeaderMeta{align-items:stretch}.IIa07q_pageHeaderMeta>code{align-items:center;display:inline-flex}.IIa07q_pageHeaderMeta>button{flex:1}.IIa07q_emptyState{min-height:180px;padding:24px 16px}.IIa07q_formGrid{grid-template-columns:1fr}}@media (width<=360px){.IIa07q_modalFooterActions{grid-template-columns:1fr}}@media (height<=420px){.IIa07q_modal>header p{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}}@media (width>=761px) and (height<=560px){.IIa07q_modalBackdrop{padding:8px}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal,.IIa07q_modalWide{max-height:calc(100dvh - max(10px, env(safe-area-inset-top,0px)))}}}@media (width<=1000px) and (height<=760px){.IIa07q_shell{min-height:0}.IIa07q_masthead{min-height:44px}}@media (width<=760px) and (pointer:coarse){.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{font-size:16px!important}}@media (pointer:coarse){.IIa07q_modal>header .IIa07q_iconButton{width:44px;min-width:44px;height:44px;min-height:44px}.IIa07q_modalBody button,.IIa07q_modalFooter button{min-height:44px}}@media (prefers-reduced-motion:reduce){.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.IIa07q_modalBackdrop,.IIa07q_modal{animation:none!important}}.IIa07q_page[data-source-page]>.IIa07q_workspacePicker{margin-bottom:16px}.IIa07q_page[data-source-page] .IIa07q_page{width:100%;min-height:0;margin:0;padding:0}";
3410
+ const css$12 = ".IIa07q_shell{--mn-bg:var(--dsw-alias-bg-base);--mn-backdrop:var(--dsw-alias-bg-overlay,var(--mn-bg));--mn-surface:linear-gradient(var(--mn-bg), var(--mn-bg)), linear-gradient(var(--mn-backdrop), var(--mn-backdrop)) var(--mn-bg);--mn-layer-1:var(--dsw-alias-bg-layer-1);--mn-layer-2:var(--dsw-alias-bg-layer-2);--mn-fill:var(--dsw-alias-bg-module-platform);--mn-input:var(--dsw-alias-bg-layer-1);--mn-text:var(--dsw-alias-label-primary);--mn-muted:var(--dsw-alias-label-secondary);--mn-faint:var(--dsw-alias-label-tertiary);--mn-caption:var(--dsw-alias-label-caption);--mn-line:var(--dsw-alias-border-l2);--mn-line-strong:var(--dsw-alias-border-l3);--mn-field-line:var(--dsw-alias-border-l4);--mn-card-line:var(--dsw-alias-settings-card-stroke);--mn-accent:var(--dsw-alias-state-business-primary);--mn-hover:var(--dsw-alias-interactive-bg-hover);--mn-pressed:var(--dsw-alias-interactive-bg-active);--mn-danger:var(--dsw-alias-state-error-primary);--mn-success:var(--dsw-alias-state-success-primary);--mn-warn:var(--dsw-alias-state-warn-primary);--mn-idle:var(--dsw-alias-state-idle-primary);--mn-priority:var(--dsw-alias-state-warn-primary);--mn-focus:var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));--mn-code:var(--ds-font-family-code,\"SFMono-Regular\", Consolas, monospace);--mn-sans:var(--dsw-font-family,-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif);box-sizing:border-box;min-width:0;height:100%;min-height:0;color:var(--mn-text);background:var(--mn-surface);font:13px/20px var(--mn-sans);-webkit-tap-highlight-color:transparent;flex-direction:column;display:flex;overflow:hidden}:has(>[data-conversation-scroll]>[data-slot=conversation\\.session]>*>[data-slot=conversation\\.view]>.IIa07q_shell[data-mnemon-surface=builtin])>[data-width-handle]{visibility:hidden;pointer-events:none}.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{box-sizing:border-box}:where(.IIa07q_shell) :where(button,input,select,textarea){color:inherit;font:inherit}:where(.IIa07q_shell) :where(button,select){touch-action:manipulation}.IIa07q_shell button:focus-visible,.IIa07q_shell input:focus-visible,.IIa07q_shell select:focus-visible,.IIa07q_shell textarea:focus-visible,.IIa07q_shell summary:focus-visible,.IIa07q_shell [role=button]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_shell :is(textarea,input:not([type=checkbox],[type=radio],[type=file])):focus-visible{outline:none}.IIa07q_shell code{font-family:var(--mn-code);font-size:.92em}.IIa07q_masthead{background:var(--mn-surface);flex:none;align-items:center;gap:12px;min-height:48px;padding:10px 24px 4px;display:flex}.IIa07q_backButton{flex:none;align-items:center;gap:4px;min-width:max-content;display:inline-flex}.IIa07q_backButton>svg{flex:none}.IIa07q_brand{flex-wrap:wrap;flex:auto;align-items:center;gap:4px 10px;min-width:0;display:flex}.IIa07q_brand h1{flex:none;margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_storageMode{color:var(--mn-faint);background:var(--mn-fill);white-space:nowrap;border-radius:999px;flex:none;align-items:center;gap:4px;padding:1px 8px;font-size:11px;line-height:17px;display:inline-flex}.IIa07q_storageMode>strong{color:var(--mn-muted);font-weight:500}.IIa07q_statusCluster{color:var(--mn-faint);white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:13px;line-height:20px;display:inline-flex}.IIa07q_statusDot{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_online{background:var(--mn-success)}.IIa07q_offline{background:var(--mn-danger)}.IIa07q_checking{background:var(--mn-idle)}.IIa07q_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_iconButton:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_iconButton>svg{flex:none}.IIa07q_headerActions{flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_workspacePicker{min-width:0;color:var(--mn-faint);align-items:center;gap:6px;font-size:12px;line-height:18px;display:inline-flex}.IIa07q_workspacePicker>[data-part=label]{white-space:nowrap}.IIa07q_workspacePicker button{width:min(200px,22vw);min-width:112px}.IIa07q_alert,.IIa07q_inlineError{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_alert{flex-direction:column;flex:none;gap:2px;margin:8px 24px 0;display:flex}.IIa07q_alert ul{margin:4px 0 0;padding-left:18px}.IIa07q_alert[role=status]{color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent))}.IIa07q_notice{flex:none;margin:8px 24px 0}.IIa07q_compositionStatus{border-radius:var(--dsw-radius-sm);min-width:0;color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:2px 6px;display:inline-flex}.IIa07q_compositionStatus:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_compositionStatus:disabled{cursor:default}.IIa07q_compositionStrategy{color:var(--mn-muted)}.IIa07q_compositionStrategy:before{content:\"·\";color:var(--mn-faint);margin-right:6px}.IIa07q_compositionStatusWrap{min-width:0;display:inline-flex;position:relative}.IIa07q_compositionSummary{z-index:20;border:.5px solid var(--dsw-alias-border-l2);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-2);width:max-content;max-width:min(320px,100vw - 32px);box-shadow:var(--dsw-elevation-prominent);color:var(--mn-muted);white-space:normal;opacity:0;pointer-events:none;flex-direction:column;align-items:flex-start;gap:8px;padding:12px;font-size:12px;line-height:18px;transition:opacity .14s ease-out,transform .14s ease-out;display:flex;position:absolute;top:calc(100% + 6px);right:0;transform:translateY(-4px)}.IIa07q_compositionStatusWrap:hover .IIa07q_compositionSummary,.IIa07q_compositionStatusWrap:focus-within .IIa07q_compositionSummary{opacity:1;transition-delay:.2s;transform:none}.IIa07q_compositionSummary>strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_compositionLayers{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_compositionHint{color:var(--mn-faint)}@media (prefers-reduced-motion:reduce){.IIa07q_compositionSummary{transition:none}}.IIa07q_workspaceMismatch{border:.5px solid color-mix(in srgb, var(--dsw-alias-state-warn-label,var(--mn-warn)) 20%, transparent);border-radius:var(--dsw-radius-sm);min-width:0;min-height:28px;color:var(--dsw-alias-state-warn-label,var(--mn-text));background:var(--dsw-alias-state-warn-tertiary,color-mix(in srgb, var(--mn-warn) 12%, transparent));white-space:nowrap;flex:none;align-items:center;gap:6px;padding:0 3px 0 10px;font-size:12px;font-weight:500;line-height:18px;display:inline-flex}.IIa07q_workspaceMismatch>button{border-radius:var(--dsw-radius-xs);min-height:22px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);cursor:pointer;border:0;padding:0 8px;font-size:12px}.IIa07q_workspaceMismatch>button:hover{background:color-mix(in srgb, currentColor 16%, transparent)}.IIa07q_workspace{flex-direction:column;flex:1;min-height:0;display:flex}.IIa07q_topNavigation{border-bottom:.5px solid var(--mn-line-strong);background:var(--mn-surface);flex:none;align-items:flex-end;min-width:0;padding:0 24px;display:flex}.IIa07q_nav{overscroll-behavior-inline:contain;scrollbar-width:none;flex:1;align-items:flex-end;gap:28px;min-width:0;display:flex;overflow-x:auto}.IIa07q_nav::-webkit-scrollbar{display:none}.IIa07q_nav button{min-width:max-content;color:var(--mn-faint);text-align:left;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-.5px;padding:10px 0 9px;font-size:13px;font-weight:500;line-height:16px;display:flex;position:relative}.IIa07q_nav button:hover{color:var(--mn-muted)}.IIa07q_nav button[data-active]{color:var(--mn-accent)}.IIa07q_nav button[data-layer-disabled]:not([data-active]){color:var(--mn-caption)}.IIa07q_nav .IIa07q_layerDisabledBadge{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;align-items:center;padding:0 6px;font-size:11px;font-style:normal;font-weight:500;line-height:15px;display:inline-flex}.IIa07q_canvas{overscroll-behavior-x:contain;overscroll-behavior-y:auto;scroll-behavior:auto;-webkit-overflow-scrolling:touch;background:var(--mn-surface);flex:1;min-width:0;overflow:auto}.IIa07q_page{width:100%;min-height:100%;margin:0 auto;padding:20px 24px clamp(96px,14vh,150px)}.IIa07q_pageHeader{justify-content:space-between;align-items:flex-start;gap:16px 24px;margin-bottom:16px;display:flex}.IIa07q_pageHeader>div:first-child{min-width:0}.IIa07q_pageHeader h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_pageHeader p{max-width:72ch;color:var(--mn-muted);margin:2px 0 0;font-size:13px;line-height:20px}.IIa07q_pageHeaderMeta{flex-wrap:wrap;flex:none;justify-content:flex-end;align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_pageHeaderMeta>code{border:.5px solid var(--mn-field-line);color:var(--mn-faint);font:500 11px/17px var(--mn-sans);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;padding:1px 8px}.IIa07q_pageSpinner{width:20px;height:20px;color:var(--mn-faint);flex:none;place-items:center;display:inline-grid}.IIa07q_pageSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_primaryButton,.IIa07q_secondaryButton,.IIa07q_ghostButton,.IIa07q_dangerButton,.IIa07q_dangerSolidButton{border-radius:var(--dsw-radius-md);min-height:32px;color:var(--mn-text);white-space:nowrap;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:4px;padding:0 12px;font-size:13px;font-weight:400;line-height:20px;transition:background-color .12s,color .12s,border-color .12s;display:inline-flex}.IIa07q_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-primary-fill)}.IIa07q_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.IIa07q_secondaryButton{border:.5px solid var(--mn-line-strong)}.IIa07q_secondaryButton:hover:not(:disabled),.IIa07q_ghostButton:hover:not(:disabled){background:var(--mn-hover)}.IIa07q_secondaryButton:active:not(:disabled),.IIa07q_ghostButton:active:not(:disabled){background:var(--mn-pressed)}.IIa07q_dangerButton{color:var(--mn-danger)}.IIa07q_dangerButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger,color-mix(in srgb, var(--mn-danger) 8%, transparent))}.IIa07q_dangerSolidButton{color:var(--dsw-static-neutral-00,#fff);background:var(--mn-danger)}.IIa07q_dangerSolidButton:hover:not(:disabled){background:color-mix(in srgb, var(--mn-danger), black 8%)}.IIa07q_shell :where(button:disabled){cursor:not-allowed;opacity:.4}.IIa07q_emptyState{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:200px;padding:32px 24px;display:flex}.IIa07q_emptyGlyph{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-lg);width:48px;height:48px;color:var(--mn-faint);flex:none;place-items:center;font-size:20px;line-height:1;display:grid}.IIa07q_emptyState h3{margin:0 0 4px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_emptyState p{max-width:480px;color:var(--mn-faint);margin:0;font-size:13px;line-height:20px}.IIa07q_sourceManagementSummary{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(220px,1.2fr) minmax(260px,1fr) minmax(220px,1fr);gap:16px;margin-top:12px;padding:16px;display:grid}.IIa07q_sourceManagementIdentity{grid-template-columns:6px minmax(0,1fr);align-items:center;gap:10px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity>span{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_sourceManagementSummary[data-availability=degraded] .IIa07q_sourceManagementIdentity>span{background:var(--mn-warn)}.IIa07q_sourceManagementSummary[data-availability=unavailable] .IIa07q_sourceManagementIdentity>span{background:var(--mn-danger)}.IIa07q_sourceManagementIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_sourceManagementIdentity small,.IIa07q_sourceManagementCapabilities>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_sourceManagementIdentity code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_sourceManagementSummary dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.IIa07q_sourceManagementSummary dl>div{border-radius:var(--dsw-radius-sm);background:var(--mn-fill);align-content:center;gap:2px;min-width:0;padding:8px 10px;display:grid}.IIa07q_sourceManagementSummary dt{color:var(--mn-faint);font-size:11px;line-height:14px}.IIa07q_sourceManagementSummary dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:13px;line-height:20px;overflow:hidden}.IIa07q_sourceManagementSummary dd code{font-size:12px}.IIa07q_sourceManagementCapabilities{align-content:center;gap:6px;min-width:0;display:grid}.IIa07q_sourceManagementCapabilities>div{flex-wrap:wrap;gap:4px;display:flex}.IIa07q_sourceManagementCapabilities span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sourceManagementDiagnostics,.IIa07q_sourceManagementForm{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-top:12px;padding:16px}.IIa07q_sourceManagementDiagnostics h3,.IIa07q_sourceManagementForm h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sourceManagementDiagnostics ul{color:var(--mn-muted);gap:4px;margin:8px 0 0;padding-left:18px;font-size:12px;line-height:18px;display:grid}.IIa07q_sourceManagementForm>div:first-child p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid label>small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sourceManagementForm .IIa07q_formGrid input[type=checkbox]{width:16px;min-width:0;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary)}.IIa07q_sectionSpinner{z-index:6;width:20px;height:20px;color:var(--mn-faint);place-items:center;display:grid;position:absolute;top:10px;right:10px}.IIa07q_sectionSpinner>i{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}@keyframes IIa07q_mnemon-spin{to{transform:rotate(360deg)}}.IIa07q_inlineError{margin:0 0 12px}.IIa07q_loading{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_bodyEdit{gap:12px;padding-top:2px;display:grid}.IIa07q_bodyEdit label,.IIa07q_formGrid label{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_bodyEdit input,.IIa07q_bodyEdit select,.IIa07q_bodyEdit textarea,.IIa07q_formGrid select,.IIa07q_formGrid input{border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;min-width:0;min-height:32px;color:var(--mn-text);background:var(--mn-input);outline:0;padding:5px 10px;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyEdit textarea{resize:vertical}.IIa07q_bodyEdit input::placeholder,.IIa07q_bodyEdit textarea::placeholder,.IIa07q_formGrid input::placeholder{color:var(--dsw-alias-label-dimmed)}.IIa07q_bodyEdit input:focus,.IIa07q_bodyEdit select:focus,.IIa07q_bodyEdit textarea:focus,.IIa07q_formGrid select:focus,.IIa07q_formGrid input:focus{border-color:var(--mn-accent)}.IIa07q_providerFieldControl{gap:4px;min-width:0;display:grid}.IIa07q_providerFieldControl input[type=checkbox]{width:16px;height:16px;min-height:0;accent-color:var(--dsw-alias-brand-primary);margin:2px 0;padding:0}.IIa07q_bodyDeleteConfirm{gap:16px;display:grid}.IIa07q_bodyDeleteConfirm>p{color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_bodyDeleteSummary{border-radius:var(--dsw-radius-md);background:color-mix(in srgb, var(--mn-danger) 6%, transparent);gap:4px;padding:12px;display:grid}.IIa07q_bodyDeleteSummary strong{font-size:13px;font-weight:500}.IIa07q_bodyDeleteContent{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;font-weight:400;line-height:20px}.IIa07q_bodyDeleteSummary span{color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_sectionHeading{justify-content:space-between;align-items:center;gap:16px;min-height:36px;margin-bottom:8px;display:flex}.IIa07q_sectionHeading h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_sectionHeading>div>span{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_sectionHeading>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_sectionHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-caption);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.IIa07q_sectionHeading button:hover:not(:disabled){color:var(--mn-muted);background:var(--mn-hover)}.IIa07q_runtimeNotice{border-radius:var(--dsw-radius-md);color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent);margin-bottom:12px;padding:8px 12px;font-size:12px;line-height:18px}.IIa07q_runtimeFootnote{color:var(--mn-faint);margin:12px 2px 0;font-size:12px;line-height:18px}.IIa07q_formGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px;display:grid}.IIa07q_listProgress{border-top:.5px solid var(--mn-line);min-height:56px;color:var(--mn-faint);justify-content:center;align-items:center;gap:12px;margin-top:12px;padding:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_compactListProgress{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-align:center;justify-items:stretch;gap:8px;margin-top:8px;padding:10px 2px 2px;font-size:12px;line-height:18px;display:grid}.IIa07q_compactListProgress button{width:100%}.IIa07q_modalPortal{z-index:1000;isolation:isolate;pointer-events:none;position:fixed;inset:0}.IIa07q_modalTheme.IIa07q_modalTheme.IIa07q_modalTheme{width:auto;min-width:0;height:auto;min-height:0;color:var(--mn-text);pointer-events:none;background:0 0;display:block;position:absolute;inset:0;overflow:visible}.IIa07q_modalBackdrop{z-index:0;overscroll-behavior:contain;padding:max(24px, var(--dsh-frame-top-clearance,24px)) 24px;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);touch-action:none;pointer-events:auto;justify-content:center;align-items:center;animation:.18s ease-out both IIa07q_mnemon-dialog-backdrop-enter;display:flex;position:fixed;inset:0;overflow:hidden}.IIa07q_modal{box-sizing:border-box;border-radius:var(--dsw-radius-panel);background:linear-gradient(var(--mn-layer-2), var(--mn-layer-2)), var(--mn-surface);width:min(640px,100%);min-height:0;max-height:100%;box-shadow:var(--dsw-elevation-prominent);touch-action:auto;transform-origin:50% 100%;backface-visibility:hidden;will-change:transform, opacity;border:0;flex-direction:column;animation:.2s cubic-bezier(.2,.75,.2,1) both IIa07q_mnemon-dialog-enter;display:flex;overflow:hidden}.IIa07q_modalBackdrop[data-closing],.IIa07q_modal[data-closing]{pointer-events:none}.IIa07q_modalDragHandle{display:none}.IIa07q_modalWide{width:min(760px,100%)}.IIa07q_modal>header{flex:none;justify-content:space-between;align-items:flex-start;gap:8px;padding:22px 14px 12px 24px;display:flex}.IIa07q_modal>header>div{min-width:0;padding-top:2px}.IIa07q_modal>header h2{margin:0;font-size:16px;font-weight:500;line-height:24px}.IIa07q_modal>header p{overflow-wrap:anywhere;max-width:64ch;color:var(--mn-muted);margin:4px 0 0;font-size:13px;line-height:20px}.IIa07q_modal>header .IIa07q_iconButton{color:var(--mn-muted);flex:none}.IIa07q_modalBody{overscroll-behavior:contain;scrollbar-gutter:stable;touch-action:pan-y;-webkit-overflow-scrolling:touch;min-height:0;padding:8px 24px 20px;overflow:hidden auto}.IIa07q_modalFooter{background:0 0;flex:none;justify-content:flex-end;align-items:center;gap:12px;padding:4px 24px 24px;display:flex}.IIa07q_modalFooter button{min-height:36px;padding-inline:14px}.IIa07q_modalFooterMeta{color:var(--mn-faint);margin-right:auto;font-size:12px;line-height:18px}.IIa07q_modalFooterActions{justify-content:flex-end;align-items:center;gap:8px;min-width:0;margin-left:auto;display:flex}@keyframes IIa07q_mnemon-dialog-backdrop-enter{0%{opacity:0}}@keyframes IIa07q_mnemon-dialog-enter{0%{opacity:0;transform:translateY(8px)scale(.985)}}@keyframes IIa07q_mnemon-sheet-enter{0%{transform:translateY(calc(100% + 32px))}to{transform:translate3d(0, var(--mn-modal-drag-y,0px), 0)}}@keyframes IIa07q_mnemon-metadata-sweep{to{transform:translate(120%)}}@keyframes IIa07q_mnemon-metadata-refreshed{0%{border-color:color-mix(in srgb, var(--mn-accent) 60%, var(--mn-card-line));box-shadow:0 0 0 2px color-mix(in srgb, var(--mn-accent) 14%, transparent)}to{border-color:var(--mn-card-line);box-shadow:0 0 #0000}}.IIa07q_healthStrip{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);flex-wrap:wrap;margin-bottom:16px;display:flex;position:relative;overflow:hidden}.IIa07q_asyncStatusBlock{min-width:0;min-height:36px;position:relative}.IIa07q_healthStrip article{box-sizing:border-box;border-top:.5px solid var(--mn-line);border-left:.5px solid var(--mn-line);flex:150px;align-items:flex-start;gap:10px;min-width:0;min-height:76px;margin:-.5px 0 0 -.5px;padding:14px 16px;display:flex}.IIa07q_healthStrip article>div{min-width:0}.IIa07q_healthStrip small{color:var(--mn-faint);margin-bottom:2px;font-size:12px;line-height:18px;display:block}.IIa07q_healthStrip strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:22px;display:block;overflow:hidden}.IIa07q_healthStrip p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_healthIndicator{border-radius:50%;flex:none;width:6px;height:6px;margin-top:6px}.IIa07q_healthGood{background:var(--mn-success)}.IIa07q_healthBad{background:var(--mn-danger)}.IIa07q_healthMuted{background:var(--mn-idle)}.IIa07q_providerHealth{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_providerHealthList{margin-top:8px}.IIa07q_providerHealthList article{align-items:center;gap:12px;min-width:0;min-height:56px;padding:8px 0;display:flex}.IIa07q_providerHealthList article+article{border-top:.5px solid var(--mn-line)}.IIa07q_providerHealthOff{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;margin-top:4px;padding-top:10px;font-size:12px;line-height:18px;display:flex}.IIa07q_providerHealthMark{box-sizing:border-box;border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);flex:none;place-items:center;width:36px;height:36px;padding:6px;display:grid;overflow:hidden}.IIa07q_providerHealthMark>img,.IIa07q_providerHealthMark>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_providerHealthCopy{flex:1;gap:0;min-width:0;display:grid}.IIa07q_providerHealthCopy strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_providerHealthCopy small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerHealthCopy p{color:var(--mn-danger);text-overflow:ellipsis;white-space:nowrap;margin:2px 0 0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_providerHealthMeta{flex:none;align-items:center;gap:6px;display:flex}.IIa07q_providerHealthMeta small{color:var(--mn-faint);font-variant-numeric:tabular-nums;font-size:12px;line-height:18px}.IIa07q_providerHealthSignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_providerHealthList article[data-status=healthy] .IIa07q_providerHealthSignal{background:var(--mn-success)}.IIa07q_providerHealthList article[data-status=unhealthy] .IIa07q_providerHealthSignal{background:var(--mn-danger)}.IIa07q_providerHealthList article[data-status=idle] .IIa07q_providerHealthSignal{background:var(--mn-idle)}.IIa07q_storageDomains{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_storageRoot{border-radius:var(--dsw-radius-md);background:var(--mn-fill);justify-content:space-between;align-items:center;gap:16px;min-width:0;margin-top:12px;padding:10px 12px;display:flex}.IIa07q_storageRoot>div:first-child{gap:2px;min-width:0;display:grid}.IIa07q_storageRoot span,.IIa07q_storageRoot small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_storageRoot code{color:var(--mn-muted);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.IIa07q_storageRoot>div:last-child{flex:none;justify-items:end;gap:2px;display:grid}.IIa07q_storageRoot strong{font-variant-numeric:tabular-nums;font-size:13px;font-weight:500}.IIa07q_storageAreaGrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px;display:grid}.IIa07q_storageAreaGrid article{box-sizing:border-box;border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);flex-direction:column;min-width:0;min-height:148px;padding:12px 14px;display:flex}.IIa07q_storageAreaGrid article>header{justify-content:space-between;align-items:center;gap:8px;display:flex}.IIa07q_storageAreaGrid article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_storageAreaGrid article>header span{background:var(--mn-idle);border-radius:50%;flex:none;width:6px;height:6px}.IIa07q_storageAreaGrid article[data-status=ready]>header span{background:var(--mn-success)}.IIa07q_storageAreaGrid article[data-status=invalid]>header span{background:var(--mn-danger)}.IIa07q_storageAreaGrid article>header strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;overflow:hidden}.IIa07q_storageAreaGrid article>header em{color:var(--mn-faint);white-space:nowrap;font-size:11px;font-style:normal;line-height:14px}.IIa07q_storageAreaMetric{align-items:baseline;gap:6px;margin-top:12px;display:flex}.IIa07q_storageAreaMetric strong{font-variant-numeric:tabular-nums;font-size:20px;font-weight:500;line-height:28px}.IIa07q_storageAreaMetric span{color:var(--mn-faint);font-size:12px}.IIa07q_storageAreaMetric code{color:var(--mn-faint);margin-left:auto;font-size:11px}.IIa07q_storageAreaGrid article>p{min-height:36px;color:var(--mn-faint);margin:6px 0 8px;font-size:12px;line-height:18px}.IIa07q_storagePath{border-top:.5px solid var(--mn-line);color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:8px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_storageAreaGrid article>small{color:var(--mn-danger);margin-top:6px;font-size:12px;line-height:18px;display:block}.IIa07q_storageUnavailable{border-radius:var(--dsw-radius-md);min-height:120px;color:var(--mn-muted);background:var(--mn-fill);text-align:center;place-content:center;gap:4px;margin-top:12px;display:grid}.IIa07q_storageUnavailable strong{font-size:13px;font-weight:500}.IIa07q_storageUnavailable p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_storageFootnote{color:var(--mn-faint);margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_statusSectionHeader{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_statusSectionHeader h3{margin:0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_statusSectionHeader p{max-width:640px;color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_phaseBadge{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;white-space:nowrap;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_statusHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_versionDialogBody{grid-template-columns:minmax(0,1fr);gap:12px;display:grid}.IIa07q_versionChecking{min-height:112px;color:var(--mn-muted);justify-content:center;align-items:center;gap:10px;font-size:13px;display:flex}.IIa07q_versionChecking span{border:2px solid color-mix(in srgb, currentColor 25%, transparent);border-top-color:currentColor;border-radius:50%;width:14px;height:14px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_versionError,.IIa07q_versionResult{border-radius:var(--dsw-radius-md);color:var(--mn-danger);background:color-mix(in srgb, var(--mn-danger) 8%, transparent);padding:10px 12px}.IIa07q_versionResult{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 8%, transparent)}.IIa07q_versionError strong,.IIa07q_versionResult strong{font-size:13px;font-weight:500}.IIa07q_versionError p,.IIa07q_versionResult p{color:var(--mn-muted);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_versionList{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.IIa07q_versionList article{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px 14px}.IIa07q_versionList article>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_versionList article>header>div{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_versionList article>header strong{font-size:14px;font-weight:500;line-height:22px}.IIa07q_versionList article>header span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_versionList article>header em{color:var(--mn-success);white-space:nowrap;font-size:12px;font-style:normal;line-height:18px}.IIa07q_versionList article[data-outdated]>header em{color:var(--mn-accent)}.IIa07q_versionNumbers{grid-template-columns:1fr auto 1fr;align-items:end;gap:10px;margin-top:10px;display:grid}.IIa07q_versionNumbers>div{gap:2px;display:grid}.IIa07q_versionNumbers small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_versionNumbers code{font-size:13px}.IIa07q_versionNumbers>span{color:var(--mn-faint);padding-bottom:1px}.IIa07q_versionLocation{min-width:0;color:var(--mn-faint);gap:6px;margin-top:8px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionLocation>span{flex:none}.IIa07q_versionLocation>code{min-width:0;color:inherit;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_versionList article>footer{border-top:.5px solid var(--mn-line);justify-content:space-between;align-items:flex-end;gap:16px;margin-top:10px;padding-top:10px;display:flex}.IIa07q_versionList article>footer p{max-width:470px;color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionList article>footer button{flex:none}.IIa07q_versionList article>header em[data-state=unknown],.IIa07q_versionList article>header em[data-state=local],.IIa07q_versionList article>header em[data-state=missing]{color:var(--mn-faint)}.IIa07q_versionList article>header em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionNotice{color:var(--mn-muted);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_versionGuidance{border-radius:var(--dsw-radius-md);background:var(--mn-fill);gap:6px;min-width:0;margin-top:10px;padding:10px 12px;display:grid}.IIa07q_versionGuidance>strong{font-size:13px;font-weight:500}.IIa07q_versionGuidance>p{color:var(--mn-muted);margin:0;font-size:12px;line-height:18px}.IIa07q_versionGuidance>a{color:var(--dsw-alias-link,var(--mn-accent));justify-self:start;font-size:12px}.IIa07q_versionGuidanceDetails{min-width:0;color:var(--mn-muted);font-size:12px;line-height:18px}.IIa07q_versionGuidanceDetails>summary{cursor:pointer}.IIa07q_versionGuidanceDetails>p{margin:8px 0}.IIa07q_versionGuidanceDetails>a{color:var(--dsw-alias-link,var(--mn-accent))}.IIa07q_versionCommand{border-radius:var(--dsw-radius-sm);background:var(--mn-layer-1);flex-wrap:wrap;align-items:center;gap:8px;min-width:0;padding:8px 10px;display:flex}.IIa07q_versionCommand>code{overflow-wrap:anywhere;white-space:pre-wrap;user-select:text;flex:1;min-width:0;font-size:12px}.IIa07q_versionCommand>button{flex:none}.IIa07q_versionCommand>small{color:var(--mn-faint);flex-basis:100%;font-size:12px}.IIa07q_versionPackages{border-top:.5px solid var(--mn-line);min-width:0;margin-top:12px}.IIa07q_versionPackagesToggle{width:100%;min-height:44px;color:var(--mn-text);text-align:start;cursor:pointer;background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 0 0;display:flex}.IIa07q_versionPackagesToggle>strong{font-size:13px;font-weight:500}.IIa07q_versionPackagesToggle>small{color:var(--mn-faint);margin-left:auto;font-size:12px}.IIa07q_versionPackages h4{color:var(--mn-faint);margin:16px 0 8px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_versionPackages ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.IIa07q_versionPackage{border:.5px solid var(--mn-line);border-radius:var(--dsw-radius-md);min-width:0;padding:10px 12px}.IIa07q_versionPackageHeader{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:6px 12px;display:flex}.IIa07q_versionPackageHeader strong{overflow-wrap:anywhere;min-width:0;font-size:13px;font-weight:500}.IIa07q_versionPackageHeader em{color:var(--mn-faint);font-size:12px;font-style:normal}.IIa07q_versionPackageHeader em[data-state=available],.IIa07q_versionPackageHeader em[data-state=restart]{color:var(--mn-accent)}.IIa07q_versionPackageHeader em[data-state=current]{color:var(--mn-success)}.IIa07q_versionPackageMeta,.IIa07q_versionPackageNumbers{color:var(--mn-faint);flex-wrap:wrap;gap:6px 14px;margin-top:6px;font-size:12px;line-height:18px;display:flex}.IIa07q_versionPackageNumbers code{color:var(--mn-text)}.IIa07q_versionPackageAction{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;display:flex}.IIa07q_versionPackageAction p{min-width:150px;color:var(--mn-muted);flex:1;margin:0;font-size:12px;line-height:18px}.IIa07q_versionPackageAction button{flex:none}@media (width<=1000px){.IIa07q_sourceManagementSummary{grid-template-columns:1fr 1fr}.IIa07q_sourceManagementCapabilities{grid-column:1/-1}.IIa07q_storageAreaGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.IIa07q_shell{min-height:0;overflow:hidden}.IIa07q_sourceManagementSummary{grid-template-columns:1fr}.IIa07q_sourceManagementSummary dl,.IIa07q_sourceManagementCapabilities{grid-column:auto}.IIa07q_masthead{padding:8px 16px 2px}.IIa07q_alert,.IIa07q_notice{margin-inline:16px}.IIa07q_topNavigation{padding:0 16px}.IIa07q_workspacePicker>[data-part=label]{display:none}.IIa07q_workspacePicker button{width:min(170px,32vw)}.IIa07q_modalBackdrop{padding:max(10px, env(safe-area-inset-top,0px)) 0 0;align-items:flex-end}.IIa07q_modal,.IIa07q_modalWide{width:100vw;max-height:calc(100vh - max(10px, env(safe-area-inset-top,0px)));border-radius:var(--dsw-radius-xl) var(--dsw-radius-xl) 0 0;transform:translate3d(0, var(--mn-modal-drag-y,0px), 0);animation-name:IIa07q_mnemon-sheet-enter;animation-duration:.34s;animation-timing-function:cubic-bezier(.2,.82,.2,1)}.IIa07q_modalDragHandle{cursor:grab;touch-action:none;user-select:none;flex:none;place-items:center;width:100%;height:28px;display:grid}.IIa07q_modalDragHandle span{background:var(--mn-line-strong);border-radius:999px;width:36px;height:4px;transition:width .14s,background-color .14s}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle{cursor:grabbing}.IIa07q_modal[data-dragging] .IIa07q_modalDragHandle span{background:var(--dsw-alias-border-l4);width:44px}.IIa07q_modal>header{padding:10px max(14px, env(safe-area-inset-right,0px)) 12px max(14px, env(safe-area-inset-left,0px));gap:12px}.IIa07q_modal>header p{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.IIa07q_modal>header .IIa07q_iconButton{width:44px;height:44px;margin:-4px -5px -4px 0}.IIa07q_modalBody{padding:14px max(14px, env(safe-area-inset-right,0px)) 18px max(14px, env(safe-area-inset-left,0px));scrollbar-gutter:auto;scroll-padding-bottom:12px}.IIa07q_modalBody button{min-height:44px}.IIa07q_modalFooter{padding:10px max(14px, env(safe-area-inset-right,0px)) calc(10px + env(safe-area-inset-bottom,0px)) max(14px, env(safe-area-inset-left,0px));flex-direction:column;align-items:stretch;gap:8px}.IIa07q_modalFooterMeta{max-width:none;margin:0}.IIa07q_modalFooterActions{grid-template-columns:minmax(82px,.55fr) minmax(0,1.45fr);gap:8px;width:100%;margin:0;display:grid}.IIa07q_modalFooterActions button{white-space:normal;min-width:0;min-height:44px;padding-block:8px}.IIa07q_versionList article>footer{flex-direction:column;align-items:stretch}.IIa07q_nav{gap:22px}.IIa07q_page{padding:16px 16px calc(170px + env(safe-area-inset-bottom,0px))}.IIa07q_pageHeader{gap:10px;display:grid}.IIa07q_pageHeaderMeta{justify-content:flex-start}.IIa07q_healthStrip article{flex-basis:100%}.IIa07q_providerHealthMeta{flex-direction:column;align-items:flex-end;gap:4px}.IIa07q_storageRoot{flex-direction:column;align-items:flex-start}.IIa07q_storageRoot>div:last-child{justify-items:start}.IIa07q_storageAreaGrid{grid-template-columns:1fr}}@media (width<=520px){.IIa07q_workspacePicker select{width:min(150px,39vw)}.IIa07q_nav{scroll-snap-type:x proximity;gap:18px}.IIa07q_nav button{scroll-snap-align:start}.IIa07q_pageHeaderMeta{align-items:stretch}.IIa07q_pageHeaderMeta>code{align-items:center;display:inline-flex}.IIa07q_pageHeaderMeta>button{flex:1}.IIa07q_emptyState{min-height:180px;padding:24px 16px}.IIa07q_formGrid{grid-template-columns:1fr}}@media (width<=360px){.IIa07q_modalFooterActions{grid-template-columns:1fr}}@media (height<=420px){.IIa07q_modal>header p{white-space:nowrap;text-overflow:ellipsis;display:block;overflow:hidden}}@media (width>=761px) and (height<=560px){.IIa07q_modalBackdrop{padding:8px}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal,.IIa07q_modalWide{max-height:calc(100dvh - max(10px, env(safe-area-inset-top,0px)))}}}@media (width<=1000px) and (height<=760px){.IIa07q_shell{min-height:0}.IIa07q_masthead{min-height:44px}}@media (width<=760px) and (pointer:coarse){.IIa07q_shell input,.IIa07q_shell select,.IIa07q_shell textarea{font-size:16px!important}}@media (pointer:coarse){.IIa07q_modal>header .IIa07q_iconButton{width:44px;min-width:44px;height:44px;min-height:44px}.IIa07q_modalBody button,.IIa07q_modalFooter button{min-height:44px}}@media (prefers-reduced-motion:reduce){.IIa07q_shell *,.IIa07q_shell :before,.IIa07q_shell :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.IIa07q_modalBackdrop,.IIa07q_modal{animation:none!important}}.IIa07q_page[data-source-page]>.IIa07q_workspacePicker{margin-bottom:16px}.IIa07q_page[data-source-page] .IIa07q_page{width:100%;min-height:0;margin:0;padding:0}";
2909
3411
  const tagId$12 = "dsh-mnemon/src/client/MnemonView.module.css";
2910
3412
  if (typeof document !== "undefined") {
2911
3413
  let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$12) + "]");
@@ -4555,7 +5057,10 @@ window.__ModuleLoader__.load({
4555
5057
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
4556
5058
  className: MnemonSettingsCard_module_css_default.settingCopy,
4557
5059
  children: [
4558
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.label }),
5060
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
5061
+ id: props.titleId,
5062
+ children: props.label
5063
+ }),
4559
5064
  props.hint !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: props.hint }),
4560
5065
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Reveal, { children: props.note === void 0 ? null : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
4561
5066
  className: MnemonSettingsCard_module_css_default.rowNote,
@@ -5898,58 +6403,1554 @@ window.__ModuleLoader__.load({
5898
6403
  setFailed(null);
5899
6404
  setNotice(null);
5900
6405
  try {
5901
- const result = await client.importPack(pending.base64);
5902
- setNotice(t("config.packImportedWhole", { root: result.targetRoot }));
5903
- setPending(null);
6406
+ const result = await client.importPack(pending.base64);
6407
+ setNotice(t("config.packImportedWhole", { root: result.targetRoot }));
6408
+ setPending(null);
6409
+ } catch (reason) {
6410
+ setFailed(message(reason));
6411
+ } finally {
6412
+ setBusy(null);
6413
+ }
6414
+ };
6415
+ const items = pending?.preview.manifest.summary.reduce((sum, component) => sum + component.items, 0) ?? 0;
6416
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6417
+ className: MnemonSettingsCard_module_css_default.packRow,
6418
+ role: "group",
6419
+ "aria-labelledby": "mnemon-pack-heading",
6420
+ children: [
6421
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SettingRow, {
6422
+ title: t("config.packTitle"),
6423
+ titleId: "mnemon-pack-heading",
6424
+ hint: t("config.packSimpleDescription"),
6425
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6426
+ className: MnemonSettingsCard_module_css_default.rowActions,
6427
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6428
+ variant: "outline",
6429
+ size: "sm",
6430
+ disabled: client === null || busy !== null,
6431
+ onClick: () => input.current?.click(),
6432
+ children: busy === "inspect" ? t("config.packInspecting") : t("config.packImportZip")
6433
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6434
+ variant: "outline",
6435
+ size: "sm",
6436
+ disabled: client === null || busy !== null || target === null,
6437
+ onClick: () => void exportZip(),
6438
+ children: busy === "export" ? t("config.packExporting") : t("config.packExportZip")
6439
+ })]
6440
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6441
+ ref: input,
6442
+ className: MnemonSettingsCard_module_css_default.visuallyHidden,
6443
+ type: "file",
6444
+ accept: ZIP_ACCEPT,
6445
+ "aria-label": t("config.packChooseZip"),
6446
+ onChange: chooseFile
6447
+ })]
6448
+ }),
6449
+ pending !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6450
+ className: MnemonSettingsCard_module_css_default.importBar,
6451
+ role: "status",
6452
+ children: [
6453
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: pending.preview.fileName ?? t("config.packUnnamedZip") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.packZipReady", {
6454
+ components: pending.preview.manifest.components.length,
6455
+ items,
6456
+ size: humanBytes(pending.preview.archiveBytes)
6457
+ }) })] }),
6458
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6459
+ variant: "ghost",
6460
+ size: "sm",
6461
+ disabled: busy !== null,
6462
+ onClick: () => setPending(null),
6463
+ children: t("common.cancel")
6464
+ }),
6465
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6466
+ variant: "primary",
6467
+ size: "sm",
6468
+ disabled: busy !== null,
6469
+ onClick: () => void importZip(),
6470
+ children: busy === "import" ? t("config.packImporting") : t("config.packImportZipAction")
6471
+ })
6472
+ ]
6473
+ }),
6474
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6475
+ className: MnemonSettingsCard_module_css_default.packFeedback,
6476
+ "aria-live": "polite",
6477
+ children: [
6478
+ failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6479
+ className: MnemonSettingsCard_module_css_default.error,
6480
+ role: "alert",
6481
+ children: t("config.packFailed", { error: failed })
6482
+ }),
6483
+ notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6484
+ className: MnemonSettingsCard_module_css_default.packSuccess,
6485
+ children: notice
6486
+ }),
6487
+ client === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6488
+ className: MnemonSettingsCard_module_css_default.readOnly,
6489
+ children: t("config.packUnavailable")
6490
+ })
6491
+ ]
6492
+ })
6493
+ ]
6494
+ });
6495
+ }
6496
+ //#endregion
6497
+ //#region src/client/GlobalLocationSetting.tsx
6498
+ /** The default or custom location control: the storage directory, Native and workspace-aware providers. */
6499
+ function GlobalLocationSetting(props) {
6500
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6501
+ className: `${MnemonSettingsCard_module_css_default.globalLocationSetting}${props.className === void 0 ? "" : ` ${props.className}`}`,
6502
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6503
+ className: MnemonSettingsCard_module_css_default.nativeLocation,
6504
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6505
+ className: MnemonSettingsCard_module_css_default.settingCopy,
6506
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.label }), props.hint !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: props.hint })]
6507
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6508
+ className: MnemonSettingsCard_module_css_default.inlineChoices,
6509
+ role: "radiogroup",
6510
+ "aria-label": props.ariaLabel,
6511
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6512
+ type: "radio",
6513
+ name: props.name,
6514
+ checked: props.workspace || !props.custom,
6515
+ disabled: props.disabled || props.workspace,
6516
+ onClick: props.onInteract,
6517
+ onChange: () => props.onChange(false)
6518
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: props.defaultLabel })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6519
+ type: "radio",
6520
+ name: props.name,
6521
+ checked: !props.workspace && props.custom,
6522
+ disabled: props.disabled || props.workspace,
6523
+ onClick: props.onInteract,
6524
+ onChange: () => props.onChange(true)
6525
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: props.customLabel })] })]
6526
+ })]
6527
+ }), !props.workspace && props.custom ? props.children : null]
6528
+ });
6529
+ }
6530
+ //#endregion
6531
+ //#region src/client/MnemonReviewSection.tsx
6532
+ const STATUS_KEY = {
6533
+ pending: "review.statusPending",
6534
+ accepted: "review.statusAccepted",
6535
+ rejected: "review.statusRejected"
6536
+ };
6537
+ const STATUS_TONE = {
6538
+ pending: "warning",
6539
+ accepted: "success",
6540
+ rejected: "quiet"
6541
+ };
6542
+ function brief(value, max) {
6543
+ const text = value.replace(/\s+/gu, " ").trim();
6544
+ return text.length <= max ? text : text.slice(0, max - 1) + "…";
6545
+ }
6546
+ function targetName(t, target) {
6547
+ return target === "user" ? t("review.targetUser") : t("review.targetMemory");
6548
+ }
6549
+ /** One operation as a reviewer reads it: what changes, and to which entry. */
6550
+ function operationText(t, operation) {
6551
+ switch (operation.kind) {
6552
+ case "runtime-add": return t("review.opAdd", {
6553
+ target: targetName(t, operation.target),
6554
+ content: brief(operation.content, 160)
6555
+ });
6556
+ case "runtime-replace": return t("review.opReplace", {
6557
+ target: targetName(t, operation.target),
6558
+ from: brief(operation.oldText, 80),
6559
+ to: brief(operation.content, 160)
6560
+ });
6561
+ case "runtime-remove": return t("review.opRemove", {
6562
+ target: targetName(t, operation.target),
6563
+ text: brief(operation.oldText, 160)
6564
+ });
6565
+ case "document-archive": return t("review.opArchive", { id: operation.documentId });
6566
+ }
6567
+ }
6568
+ function stamp$1(value) {
6569
+ const parsed = new Date(value);
6570
+ return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleString();
6571
+ }
6572
+ /**
6573
+ * What an agent proposes to do with memory that arrived from another machine.
6574
+ * The proposal is evidence, not an instruction: it changes nothing until the
6575
+ * user accepts it, and the user can leave an opinion on it either way, which
6576
+ * the next reconciliation run reads back as part of its own evidence.
6577
+ *
6578
+ * The reviewer also states what the run should accomplish, and picks which of
6579
+ * the proposed changes are actually applied; the rest stay in the ledger.
6580
+ */
6581
+ function MnemonReviewSection(props) {
6582
+ const { t } = props;
6583
+ const client = (0, react.useMemo)(() => props.connection === void 0 ? null : new MnemonClient(props.connection, props.sessionId, props.workspaceId), [
6584
+ props.connection,
6585
+ props.sessionId,
6586
+ props.workspaceId
6587
+ ]);
6588
+ const [ledger, setLedger] = (0, react.useState)(null);
6589
+ const [openId, setOpenId] = (0, react.useState)(null);
6590
+ const [busy, setBusy] = (0, react.useState)(null);
6591
+ const [failed, setFailed] = (0, react.useState)(null);
6592
+ const [complaint, setComplaint] = (0, react.useState)(null);
6593
+ const [notice, setNotice] = (0, react.useState)(null);
6594
+ const [opinion, setOpinion] = (0, react.useState)("");
6595
+ const [guidance, setGuidance] = (0, react.useState)("");
6596
+ const [chosen, setChosen] = (0, react.useState)({});
6597
+ const [historyOpen, setHistoryOpen] = (0, react.useState)(false);
6598
+ const refresh = (0, react.useCallback)(async () => {
6599
+ if (client === null) return;
6600
+ setLedger(await client.reviewLedger());
6601
+ }, [client]);
6602
+ (0, react.useEffect)(() => {
6603
+ if (client === null) return;
6604
+ let active = true;
6605
+ client.reviewLedger().then((value) => {
6606
+ if (active) setLedger(value);
6607
+ }).catch((reason) => {
6608
+ if (active) setFailed(message(reason));
6609
+ });
6610
+ return () => {
6611
+ active = false;
6612
+ };
6613
+ }, [client]);
6614
+ const submit = (id, work) => {
6615
+ if (client === null) return;
6616
+ setBusy(id);
6617
+ setFailed(null);
6618
+ setComplaint(null);
6619
+ setNotice(null);
6620
+ work(client).then(refresh).catch((reason) => setFailed(message(reason))).finally(() => setBusy(null));
6621
+ };
6622
+ /**
6623
+ * Every position the plan holds that has not run yet. An untouched review applies all of
6624
+ * them, and the ones already written are never offered again: running them a second time
6625
+ * would address text the first run replaced.
6626
+ */
6627
+ const restOf = (entry) => {
6628
+ const done = entry.appliedOperations ?? [];
6629
+ return entry.operations.map((_operation, index) => index).filter((index) => !done.includes(index));
6630
+ };
6631
+ const selectionOf = (entry) => chosen[entry.id] ?? restOf(entry);
6632
+ const keep = (entry, next) => {
6633
+ setChosen((previous) => ({
6634
+ ...previous,
6635
+ [entry.id]: next.sort((left, right) => left - right)
6636
+ }));
6637
+ };
6638
+ const toggle = (entry, index) => {
6639
+ const current = selectionOf(entry);
6640
+ keep(entry, current.includes(index) ? current.filter((item) => item !== index) : [...current, index]);
6641
+ };
6642
+ const runReconcile = () => {
6643
+ if (client === null) return;
6644
+ setBusy("reconcile");
6645
+ setFailed(null);
6646
+ setComplaint(null);
6647
+ setNotice(null);
6648
+ client.reconcile(guidance).then(async (result) => {
6649
+ const parts = [result.action === "planned" ? t("review.planned", { operations: result.operations }) : t("review.none")];
6650
+ if (result.guided === true) parts.push(t("review.guided"));
6651
+ if (result.remoteEntries !== void 0 && result.remoteEntries > 0) parts.push(t("review.remoteEntries", { count: result.remoteEntries }));
6652
+ setNotice(parts.join(" "));
6653
+ setLedger(await client.reviewLedger());
6654
+ }).catch((reason) => setFailed(message(reason))).finally(() => setBusy(null));
6655
+ };
6656
+ const leaveOpinion = (id) => {
6657
+ const text = opinion.trim();
6658
+ if (text === "") return;
6659
+ submit(id, (api) => api.reviewOpinion(id, text).then(() => {
6660
+ setOpinion("");
6661
+ setNotice(t("review.opinionAdded"));
6662
+ }));
6663
+ };
6664
+ const apply = (entry) => {
6665
+ const selection = selectionOf(entry);
6666
+ if (selection.length === 0) {
6667
+ setComplaint(t("review.noSelection"));
6668
+ return;
6669
+ }
6670
+ submit(entry.id, (api) => api.applyReview(entry.id, selection).then((result) => {
6671
+ setNotice(t("review.applied", { count: result.applied }));
6672
+ setChosen((previous) => {
6673
+ const next = { ...previous };
6674
+ delete next[entry.id];
6675
+ return next;
6676
+ });
6677
+ }));
6678
+ };
6679
+ const entries = ledger?.entries ?? [];
6680
+ const pending = ledger?.pending ?? 0;
6681
+ const finished = (entry) => (entry.appliedOperations ?? []).length >= entry.operations.length;
6682
+ const history = entries.filter((entry) => entry.status === "accepted" && (finished(entry) || entry.appliedAt !== void 0 && entry.appliedOperations === void 0));
6683
+ const current = entries.filter((entry) => !history.includes(entry));
6684
+ /** One plan, as it reads in the open list and in the history popup alike. */
6685
+ const renderEntry = (entry) => {
6686
+ const open = openId === entry.id;
6687
+ const selection = selectionOf(entry);
6688
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6689
+ className: MnemonSettingsCard_module_css_default.reviewEntry,
6690
+ "data-status": entry.status,
6691
+ children: [
6692
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6693
+ className: MnemonSettingsCard_module_css_default.reviewTitle,
6694
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: entry.title }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
6695
+ tone: STATUS_TONE[entry.status],
6696
+ children: t(STATUS_KEY[entry.status])
6697
+ })]
6698
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6699
+ className: MnemonSettingsCard_module_css_default.rowActions,
6700
+ children: [
6701
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6702
+ variant: "ghost",
6703
+ size: "sm",
6704
+ onClick: () => {
6705
+ setOpenId(open ? null : entry.id);
6706
+ },
6707
+ children: open ? t("review.collapse") : t("review.expand")
6708
+ }),
6709
+ entry.status === "pending" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6710
+ variant: "outline",
6711
+ size: "sm",
6712
+ disabled: busy !== null,
6713
+ onClick: () => {
6714
+ submit(entry.id, (api) => api.decideReview(entry.id, "accepted"));
6715
+ },
6716
+ children: t("review.accept")
6717
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6718
+ variant: "ghost",
6719
+ size: "sm",
6720
+ disabled: busy !== null,
6721
+ onClick: () => {
6722
+ submit(entry.id, (api) => api.decideReview(entry.id, "rejected"));
6723
+ },
6724
+ children: t("review.reject")
6725
+ })] }),
6726
+ entry.status === "accepted" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6727
+ variant: "primary",
6728
+ size: "sm",
6729
+ disabled: busy !== null || props.disabled,
6730
+ onClick: () => {
6731
+ apply(entry);
6732
+ },
6733
+ children: busy === entry.id ? t("review.applying") : selection.length > 0 && selection.length < restOf(entry).length ? t("review.applyCount", { count: selection.length }) : t("review.apply")
6734
+ }),
6735
+ entry.status !== "pending" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6736
+ variant: "ghost",
6737
+ size: "sm",
6738
+ disabled: busy !== null,
6739
+ onClick: () => {
6740
+ submit(entry.id, (api) => api.reopenReview(entry.id));
6741
+ },
6742
+ children: t("review.reopen")
6743
+ })
6744
+ ]
6745
+ })] }),
6746
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.meta", {
6747
+ count: entry.operations.length,
6748
+ machine: entry.machine.label,
6749
+ time: stamp$1(entry.createdAt)
6750
+ }) }),
6751
+ entry.foreignMachines.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.foreign", { machines: entry.foreignMachines.join(", ") }) }),
6752
+ entry.appliedAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
6753
+ className: MnemonSettingsCard_module_css_default.syncSuccess,
6754
+ children: t("review.appliedAt", { time: stamp$1(entry.appliedAt) })
6755
+ }),
6756
+ (entry.appliedOperations ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.appliedCount", {
6757
+ count: (entry.appliedOperations ?? []).length,
6758
+ total: entry.operations.length
6759
+ }) }),
6760
+ entry.failure !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6761
+ className: MnemonSettingsCard_module_css_default.error,
6762
+ role: "alert",
6763
+ children: t("review.applyFailed", { error: entry.failure })
6764
+ }),
6765
+ entry.status === "rejected" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.rejectedHint") }),
6766
+ open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
6767
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", { children: entry.summary }),
6768
+ entry.status === "accepted" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6769
+ className: MnemonSettingsCard_module_css_default.reviewSelection,
6770
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.selectHint") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6771
+ className: MnemonSettingsCard_module_css_default.rowActions,
6772
+ children: [
6773
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
6774
+ className: MnemonSettingsCard_module_css_default.reviewSelected,
6775
+ children: t("review.selected", {
6776
+ count: selection.length,
6777
+ total: restOf(entry).length
6778
+ })
6779
+ }),
6780
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6781
+ variant: "ghost",
6782
+ size: "sm",
6783
+ disabled: busy !== null,
6784
+ onClick: () => {
6785
+ keep(entry, restOf(entry));
6786
+ },
6787
+ children: t("review.selectAll")
6788
+ }),
6789
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6790
+ variant: "ghost",
6791
+ size: "sm",
6792
+ disabled: busy !== null,
6793
+ onClick: () => {
6794
+ keep(entry, []);
6795
+ },
6796
+ children: t("review.selectNone")
6797
+ })
6798
+ ]
6799
+ })]
6800
+ }),
6801
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
6802
+ className: MnemonSettingsCard_module_css_default.reviewOperations,
6803
+ children: entry.operations.map((operation, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
6804
+ "data-applied": (entry.appliedOperations ?? []).includes(index),
6805
+ children: [(entry.appliedOperations ?? []).includes(index) ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: operationText(t, operation) }) : entry.status === "accepted" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6806
+ type: "checkbox",
6807
+ checked: selection.includes(index),
6808
+ disabled: busy !== null,
6809
+ onChange: () => {
6810
+ toggle(entry, index);
6811
+ }
6812
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: operationText(t, operation) })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: operationText(t, operation) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: operation.reason })]
6813
+ }, index))
6814
+ }),
6815
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6816
+ className: MnemonSettingsCard_module_css_default.reviewOpinions,
6817
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("review.opinions") }), entry.opinions.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.noOpinions") }) : entry.opinions.map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: item.author === "agent" ? t("review.authorAgent") : t("review.authorUser") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: item.text })] }, item.id))]
6818
+ }),
6819
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6820
+ className: MnemonSettingsCard_module_css_default.reviewOpinionForm,
6821
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6822
+ type: "text",
6823
+ value: opinion,
6824
+ placeholder: t("review.opinionPlaceholder"),
6825
+ "aria-label": t("review.opinions"),
6826
+ disabled: busy !== null,
6827
+ onChange: (event) => setOpinion(event.target.value)
6828
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6829
+ variant: "outline",
6830
+ size: "sm",
6831
+ disabled: busy !== null || opinion.trim() === "",
6832
+ onClick: () => {
6833
+ leaveOpinion(entry.id);
6834
+ },
6835
+ children: t("review.opinionSend")
6836
+ })]
6837
+ })
6838
+ ] })
6839
+ ]
6840
+ }, entry.id);
6841
+ };
6842
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6843
+ className: MnemonSettingsCard_module_css_default.syncRow,
6844
+ role: "group",
6845
+ "aria-labelledby": "mnemon-review-heading",
6846
+ children: [
6847
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
6848
+ title: t("config.reconcileTitle"),
6849
+ titleId: "mnemon-review-heading",
6850
+ hint: t("config.reconcileDescription"),
6851
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6852
+ className: MnemonSettingsCard_module_css_default.rowActions,
6853
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6854
+ variant: "outline",
6855
+ size: "sm",
6856
+ disabled: props.disabled || client === null || busy !== null,
6857
+ onClick: runReconcile,
6858
+ children: busy === "reconcile" ? t("review.reconciling") : t("review.reconcile")
6859
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6860
+ variant: "ghost",
6861
+ size: "sm",
6862
+ disabled: client === null || busy !== null,
6863
+ onClick: () => {
6864
+ submit("load", refresh);
6865
+ },
6866
+ children: t("review.refresh")
6867
+ })]
6868
+ })
6869
+ }),
6870
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6871
+ className: MnemonSettingsCard_module_css_default.reviewRules,
6872
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("review.rulesTitle") }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", { children: [
6873
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: t("review.rulesPull") }),
6874
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: t("review.rulesDiff") }),
6875
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: t("review.rulesPlan") })
6876
+ ] })]
6877
+ }),
6878
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6879
+ className: MnemonSettingsCard_module_css_default.reviewGuidance,
6880
+ children: [
6881
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
6882
+ htmlFor: "mnemon-review-guidance",
6883
+ children: t("review.guidanceLabel")
6884
+ }),
6885
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6886
+ id: "mnemon-review-guidance",
6887
+ type: "text",
6888
+ value: guidance,
6889
+ placeholder: t("review.guidancePlaceholder"),
6890
+ disabled: busy !== null,
6891
+ onChange: (event) => setGuidance(event.target.value)
6892
+ }),
6893
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.guidanceHint") })
6894
+ ]
6895
+ }),
6896
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6897
+ className: MnemonSettingsCard_module_css_default.syncState,
6898
+ "aria-live": "polite",
6899
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: pending === 0 ? t("review.empty") : t("review.pending", { count: pending }) })
6900
+ }),
6901
+ complaint !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6902
+ className: MnemonSettingsCard_module_css_default.error,
6903
+ role: "alert",
6904
+ children: complaint
6905
+ }),
6906
+ failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6907
+ className: MnemonSettingsCard_module_css_default.error,
6908
+ role: "alert",
6909
+ children: t("review.failed", { error: failed })
6910
+ }),
6911
+ notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6912
+ className: MnemonSettingsCard_module_css_default.syncSuccess,
6913
+ role: "status",
6914
+ children: notice
6915
+ }),
6916
+ history.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6917
+ className: MnemonSettingsCard_module_css_default.rowActions,
6918
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
6919
+ variant: "ghost",
6920
+ size: "sm",
6921
+ onClick: () => {
6922
+ setHistoryOpen(true);
6923
+ },
6924
+ children: t("review.history", { count: history.length })
6925
+ })
6926
+ }),
6927
+ current.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6928
+ className: MnemonSettingsCard_module_css_default.reviewList,
6929
+ children: current.map(renderEntry)
6930
+ }),
6931
+ historyOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonDialog, {
6932
+ title: t("review.historyTitle"),
6933
+ closeLabel: t("common.close"),
6934
+ busy: busy !== null,
6935
+ onClose: () => {
6936
+ setHistoryOpen(false);
6937
+ },
6938
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6939
+ className: MnemonSettingsCard_module_css_default.syncDialogBody,
6940
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.historyHint") }), history.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.historyEmpty") }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6941
+ className: MnemonSettingsCard_module_css_default.reviewList,
6942
+ children: history.map(renderEntry)
6943
+ })]
6944
+ })
6945
+ })
6946
+ ]
6947
+ });
6948
+ }
6949
+ //#endregion
6950
+ //#region src/client/MnemonSyncSection.tsx
6951
+ /** How many backups one page of the branch history holds. */
6952
+ const BACKUP_PAGE = 20;
6953
+ /**
6954
+ * The intervals the form offers. The floor is an hour: a backup more often than
6955
+ * that is a repository being rewritten, not a memory being kept. The ceiling is
6956
+ * a week, and off is the first choice because it is what a channel that has
6957
+ * never been configured does.
6958
+ */
6959
+ const AUTO_BACKUP_CHOICES = [
6960
+ 0,
6961
+ 60,
6962
+ 180,
6963
+ 360,
6964
+ 720,
6965
+ 1440,
6966
+ 4320,
6967
+ 10080
6968
+ ];
6969
+ /** One interval as the reader reads it: off, whole days, or whole hours. */
6970
+ function intervalLabel(t, minutes) {
6971
+ if (minutes <= 0) return t("config.syncAutoBackupOff");
6972
+ if (minutes % 1440 === 0) return t("config.syncAutoBackupDays", { days: minutes / 1440 });
6973
+ return t("config.syncAutoBackupHours", { hours: minutes / 60 });
6974
+ }
6975
+ function draftOf(config) {
6976
+ return {
6977
+ repoUrl: config?.repoUrl ?? "",
6978
+ branch: config?.branch ?? "mnemon-sync",
6979
+ subdir: config?.subdir ?? "mnemon/",
6980
+ token: "",
6981
+ clearToken: false,
6982
+ authorName: config?.authorName ?? "",
6983
+ authorEmail: config?.authorEmail ?? "",
6984
+ autoBackupMinutes: config?.autoBackupMinutes ?? 0
6985
+ };
6986
+ }
6987
+ /** A repository is the one thing a save cannot invent, so it gates the save button. */
6988
+ function configured(draft) {
6989
+ return draft.repoUrl.trim() !== "";
6990
+ }
6991
+ /**
6992
+ * What a merge actually did. The Host states it as counts, because "added the branch's
6993
+ * memories" is false when this machine's own deletions kept every one of them out, and a
6994
+ * reader who is told the wrong thing will not look for the button that overrules them.
6995
+ */
6996
+ function addedNotice(t, result) {
6997
+ const report = result.runtime;
6998
+ const commit = result.commit.slice(0, 8);
6999
+ const root = result.targetRoot;
7000
+ if (report !== void 0 && report.added === 0 && report.held > 0) return t("config.syncDiffAddHeld", { count: report.held });
7001
+ const parts = [t("config.syncDiffAdded", {
7002
+ commit,
7003
+ root
7004
+ })];
7005
+ if (report !== void 0 && report.held > 0) parts.push(t("config.syncDiffAddHeld", { count: report.held }));
7006
+ return parts.join(" ");
7007
+ }
7008
+ function stamp(value) {
7009
+ if (value === void 0) return "";
7010
+ const parsed = new Date(value);
7011
+ return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleString();
7012
+ }
7013
+ /** The name a backup or a difference is attributed to, as a reader can act on it. */
7014
+ function ownerName(t, machine) {
7015
+ if (machine === void 0) return t("config.syncBackupUnknownMachine");
7016
+ return machine.label.trim() === "" ? machine.id : machine.label;
7017
+ }
7018
+ /** One line of text as a reader scans it: whitespace collapsed, then cut to a readable length. */
7019
+ function clip(value, max) {
7020
+ const text = value.replace(/\s+/gu, " ").trim();
7021
+ return text.length <= max ? text : text.slice(0, max - 1) + "…";
7022
+ }
7023
+ /**
7024
+ * Git repository sync: the repository this root publishes its Mnemon Pack to,
7025
+ * the credential that authenticates the push, and the two operations that move
7026
+ * the payload. The form reads the Host's status first, so a repository the Host
7027
+ * cannot reach, a missing Git, or a read-only Host is visible before anything
7028
+ * runs.
7029
+ *
7030
+ * The credential is optional: signing in to GitHub stores a grant the Host reads
7031
+ * per operation, and the repository then comes from the account instead of being
7032
+ * typed. The access token field stays as the fallback for every other host.
7033
+ *
7034
+ * The switch is the whole gate: switched off, this section is one row that asks
7035
+ * the Host nothing — no status, no repository, no Git — and switching it on is
7036
+ * what unfolds the form, the operations and the branch history.
7037
+ */
7038
+ /** How long the row waits for the Host to report the switch it just saved. */
7039
+ const STATUS_SETTLE_MS = 250;
7040
+ const STATUS_SETTLE_ATTEMPTS = 20;
7041
+ function MnemonSyncSection({ connection, sessionId, workspaceId, disabled, enabled, onEnabled, t }) {
7042
+ const client = (0, react.useMemo)(() => connection === void 0 ? null : new MnemonClient(connection, sessionId, workspaceId), [
7043
+ connection,
7044
+ sessionId,
7045
+ workspaceId
7046
+ ]);
7047
+ const [status, setStatus] = (0, react.useState)(null);
7048
+ const [loaded, setLoaded] = (0, react.useState)(false);
7049
+ const [draft, setDraft] = (0, react.useState)(() => draftOf(void 0));
7050
+ const [pending, setPending] = (0, react.useState)(null);
7051
+ const [busy, setBusy] = (0, react.useState)(null);
7052
+ const [failed, setFailed] = (0, react.useState)(null);
7053
+ const [notice, setNotice] = (0, react.useState)(null);
7054
+ const [github, setGithub] = (0, react.useState)(null);
7055
+ const [githubFailed, setGithubFailed] = (0, react.useState)(null);
7056
+ const [repositories, setRepositories] = (0, react.useState)(null);
7057
+ const [repositoryName, setRepositoryName] = (0, react.useState)("");
7058
+ const [repositoryPrivate, setRepositoryPrivate] = (0, react.useState)(true);
7059
+ const [backups, setBackups] = (0, react.useState)(null);
7060
+ const [openCommit, setOpenCommit] = (0, react.useState)(null);
7061
+ const [difference, setDifference] = (0, react.useState)(null);
7062
+ const [dialog, setDialog] = (0, react.useState)(false);
7063
+ const [copied, setCopied] = (0, react.useState)(false);
7064
+ const [autoBackupSaving, setAutoBackupSaving] = (0, react.useState)(false);
7065
+ const [pollTick, setPollTick] = (0, react.useState)(0);
7066
+ const [pollMs, setPollMs] = (0, react.useState)(5e3);
7067
+ const askedRepositories = (0, react.useRef)(false);
7068
+ const refresh = (0, react.useCallback)(async () => {
7069
+ if (client === null || !enabled) return;
7070
+ try {
7071
+ setStatus(await client.syncStatus());
7072
+ } catch (reason) {
7073
+ setFailed(message(reason));
7074
+ } finally {
7075
+ setLoaded(true);
7076
+ }
7077
+ try {
7078
+ setGithub(await client.githubStatus());
7079
+ } catch {}
7080
+ }, [client, enabled]);
7081
+ (0, react.useEffect)(() => {
7082
+ if (client === null) {
7083
+ setLoaded(true);
7084
+ return;
7085
+ }
7086
+ if (!enabled) return;
7087
+ let active = true;
7088
+ setLoaded(false);
7089
+ (async () => {
7090
+ let next = await client.syncStatus();
7091
+ for (let attempt = 0; active && next.enabled === false && attempt < STATUS_SETTLE_ATTEMPTS; attempt += 1) {
7092
+ await new Promise((settle) => setTimeout(settle, STATUS_SETTLE_MS));
7093
+ next = await client.syncStatus();
7094
+ }
7095
+ return next;
7096
+ })().then((next) => {
7097
+ if (active) {
7098
+ setStatus(next);
7099
+ setLoaded(true);
7100
+ }
7101
+ }, (reason) => {
7102
+ if (active) {
7103
+ setFailed(message(reason));
7104
+ setLoaded(true);
7105
+ }
7106
+ });
7107
+ client.githubStatus().then((next) => {
7108
+ if (active) setGithub(next);
7109
+ }, () => {
7110
+ if (active) setGithub(null);
7111
+ });
7112
+ return () => {
7113
+ active = false;
7114
+ };
7115
+ }, [client, enabled]);
7116
+ const saved = status?.config;
7117
+ (0, react.useEffect)(() => {
7118
+ setDraft(draftOf(saved));
7119
+ }, [
7120
+ saved?.repoUrl,
7121
+ saved?.branch,
7122
+ saved?.subdir,
7123
+ saved?.authorName,
7124
+ saved?.authorEmail,
7125
+ saved?.hasToken,
7126
+ saved?.autoBackupMinutes
7127
+ ]);
7128
+ const save = async () => {
7129
+ if (client === null || busy !== null) return;
7130
+ setBusy("save");
7131
+ setFailed(null);
7132
+ setNotice(null);
7133
+ try {
7134
+ const patch = {
7135
+ branch: draft.branch,
7136
+ subdir: draft.subdir,
7137
+ authorName: draft.authorName,
7138
+ authorEmail: draft.authorEmail,
7139
+ autoBackupMinutes: draft.autoBackupMinutes,
7140
+ repoUrl: draft.repoUrl.trim() === "" ? null : draft.repoUrl.trim()
7141
+ };
7142
+ if (draft.clearToken) patch.token = null;
7143
+ else if (draft.token.trim() !== "") patch.token = draft.token.trim();
7144
+ await client.configureSync(patch);
7145
+ setNotice(t("config.syncSaved"));
7146
+ setDraft((current) => ({
7147
+ ...current,
7148
+ token: "",
7149
+ clearToken: false
7150
+ }));
7151
+ await refresh();
7152
+ } catch (reason) {
7153
+ setFailed(message(reason));
7154
+ } finally {
7155
+ setBusy(null);
7156
+ }
7157
+ };
7158
+ const push = async () => {
7159
+ if (client === null || busy !== null) return;
7160
+ setBusy("push");
7161
+ setFailed(null);
7162
+ setNotice(null);
7163
+ setPending(null);
7164
+ setBackups(null);
7165
+ setDifference(null);
7166
+ try {
7167
+ const result = await client.pushSync();
7168
+ const parts = [result.pushed ? t("config.syncPushed", {
7169
+ commit: result.commit.slice(0, 8),
7170
+ files: result.files,
7171
+ size: humanBytes(result.bytes)
7172
+ }) : result.committed ? t("config.syncPushedLocal", {
7173
+ commit: result.commit.slice(0, 8),
7174
+ reason: result.reason ?? ""
7175
+ }) : t("config.syncPushIdle")];
7176
+ const compaction = result.compaction;
7177
+ if (compaction !== void 0 && compaction.warning === void 0 && compaction.loose > 0) parts.push(t("config.syncCompacted", {
7178
+ count: compaction.loose,
7179
+ before: humanBytes(compaction.bytes),
7180
+ after: humanBytes(compaction.packedBytes)
7181
+ }));
7182
+ setNotice(parts.join(" "));
7183
+ await refresh();
7184
+ } catch (reason) {
7185
+ setFailed(message(reason));
7186
+ } finally {
7187
+ setBusy(null);
7188
+ }
7189
+ };
7190
+ /** Turning the automatic backup on, off or to another interval is one saved value. */
7191
+ const setAutoBackup = async (minutes) => {
7192
+ if (client === null || busy !== null || autoBackupSaving) return;
7193
+ setAutoBackupSaving(true);
7194
+ setFailed(null);
7195
+ setNotice(null);
7196
+ try {
7197
+ const next = await client.configureSync({ autoBackupMinutes: minutes });
7198
+ setStatus((current) => current === null ? current : {
7199
+ ...current,
7200
+ config: next
7201
+ });
7202
+ setNotice(t("config.syncAutoBackupSaved", { interval: intervalLabel(t, minutes) }));
7203
+ } catch (reason) {
7204
+ setFailed(message(reason));
7205
+ } finally {
7206
+ setAutoBackupSaving(false);
7207
+ }
7208
+ };
7209
+ const preview = async () => {
7210
+ if (client === null || busy !== null) return;
7211
+ setBusy("preview");
7212
+ setFailed(null);
7213
+ setNotice(null);
7214
+ setPending(null);
7215
+ setDifference(null);
7216
+ try {
7217
+ setPending(await client.previewSync());
7218
+ try {
7219
+ setDifference(await client.syncDiff());
7220
+ setDialog(true);
7221
+ } catch {
7222
+ setDifference(null);
7223
+ }
7224
+ } catch (reason) {
7225
+ setFailed(message(reason));
7226
+ } finally {
7227
+ setBusy(null);
7228
+ }
7229
+ };
7230
+ const pull = async () => {
7231
+ if (client === null || pending === null || busy !== null) return;
7232
+ setBusy("pull");
7233
+ setFailed(null);
7234
+ setNotice(null);
7235
+ try {
7236
+ const result = await client.pullSync();
7237
+ setNotice(t("config.syncPulled", {
7238
+ commit: result.commit.slice(0, 8),
7239
+ root: result.targetRoot
7240
+ }));
7241
+ setPending(null);
7242
+ setBackups(null);
7243
+ setDifference(null);
7244
+ await refresh();
7245
+ } catch (reason) {
7246
+ setFailed(message(reason));
7247
+ } finally {
7248
+ setBusy(null);
7249
+ }
7250
+ };
7251
+ /**
7252
+ * The branch as one reading: the history of what was published, when, and by which
7253
+ * installation, and - below it - which memories differ. The commit message is whatever
7254
+ * its author typed, so the manifest inside the commit is what names the machine and
7255
+ * says what the backup held.
7256
+ *
7257
+ * A difference that cannot be read still leaves the history standing: the two answers
7258
+ * are separate requests and either one alone is worth showing.
7259
+ */
7260
+ const loadHistory = async () => {
7261
+ if (client === null || busy !== null) return;
7262
+ setBusy("backups");
7263
+ setFailed(null);
7264
+ setNotice(null);
7265
+ setDialog(true);
7266
+ try {
7267
+ setBackups(await client.syncBackups());
7268
+ } catch (reason) {
7269
+ setFailed(message(reason));
7270
+ } finally {
7271
+ setBusy(null);
7272
+ }
7273
+ try {
7274
+ setDifference(await client.syncDiff());
7275
+ } catch {
7276
+ setDifference(null);
7277
+ }
7278
+ };
7279
+ /**
7280
+ * Older backups, appended to the page already read. The branch's history is a window
7281
+ * that grows one page at a time; a page the branch no longer holds is not read twice,
7282
+ * so the list keeps what it already had.
7283
+ */
7284
+ const loadMore = async () => {
7285
+ if (client === null || busy !== null || backups === null) return;
7286
+ setBusy("more");
7287
+ setFailed(null);
7288
+ setNotice(null);
7289
+ try {
7290
+ const page = await client.syncBackups(backups.commits.length + BACKUP_PAGE);
7291
+ setBackups({
7292
+ ...page,
7293
+ commits: [...backups.commits, ...page.commits.filter((commit) => !backups.commits.some((held) => held.commit === commit.commit))]
7294
+ });
7295
+ } catch (reason) {
7296
+ setFailed(message(reason));
7297
+ } finally {
7298
+ setBusy(null);
7299
+ }
7300
+ };
7301
+ /** Which memories are only here and which are only on the branch, before merging anything. */
7302
+ const loadDifference = async () => {
7303
+ if (client === null || busy !== null) return;
7304
+ setBusy("diff");
7305
+ setFailed(null);
7306
+ setNotice(null);
7307
+ setDialog(true);
7308
+ try {
7309
+ setDifference(await client.syncDiff());
7310
+ } catch (reason) {
7311
+ setFailed(message(reason));
7312
+ } finally {
7313
+ setBusy(null);
7314
+ }
7315
+ };
7316
+ /**
7317
+ * The plain case: the branch holds memories this installation does not, and no subject
7318
+ * is stated twice. Merging is additive and honors the branch's removals, so there is
7319
+ * nothing to decide - the entries are simply added.
7320
+ */
7321
+ const addRemote = async (revive = false) => {
7322
+ if (client === null || busy !== null || difference === null) return;
7323
+ setBusy(revive ? "revive" : "add");
7324
+ setFailed(null);
7325
+ setNotice(null);
7326
+ try {
7327
+ const result = await client.pullSync(void 0, revive);
7328
+ setNotice(addedNotice(t, result));
7329
+ setPending(null);
7330
+ await refresh();
7331
+ try {
7332
+ setDifference(await client.syncDiff());
7333
+ } catch {
7334
+ setDifference(null);
7335
+ }
7336
+ } catch (reason) {
7337
+ setFailed(message(reason));
7338
+ } finally {
7339
+ setBusy(null);
7340
+ }
7341
+ };
7342
+ /**
7343
+ * A conflict needs a plan, and the plan is the review ledger's: **整理记忆** below runs
7344
+ * the reconciliation, reads the proposal and applies it, so this page never keeps a
7345
+ * second copy of it. What this page does is read the branch and say what differs.
7346
+ */
7347
+ /**
7348
+ * The plan is the review ledger's, and the review list below this row is the one place it
7349
+ * is read, decided and applied. This closes the dialog and puts the reader on that row,
7350
+ * so a conflict found here has one obvious way to be answered.
7351
+ */
7352
+ const goToReview = () => {
7353
+ setDialog(false);
7354
+ const heading = document.getElementById("mnemon-review-heading");
7355
+ if (heading === null) return;
7356
+ if (typeof heading.scrollIntoView === "function") heading.scrollIntoView({
7357
+ block: "start",
7358
+ behavior: "smooth"
7359
+ });
7360
+ };
7361
+ /** Choosing a repository is the whole configuration step, so it is saved at once. */
7362
+ const choose = async (repository) => {
7363
+ if (client === null || busy !== null || !editable) return;
7364
+ setBusy("save");
7365
+ setFailed(null);
7366
+ setNotice(null);
7367
+ try {
7368
+ await client.configureSync({ repoUrl: repository.url });
7369
+ setNotice(t("config.syncSaved"));
7370
+ await refresh();
7371
+ } catch (reason) {
7372
+ setFailed(message(reason));
7373
+ } finally {
7374
+ setBusy(null);
7375
+ }
7376
+ };
7377
+ const loadRepositories = (0, react.useCallback)(async () => {
7378
+ if (client === null || busy !== null) return;
7379
+ setBusy("repos");
7380
+ setGithubFailed(null);
7381
+ try {
7382
+ const answer = await client.githubRepositories();
7383
+ setRepositories(answer.repositories);
7384
+ } catch (reason) {
7385
+ setGithubFailed(message(reason));
7386
+ } finally {
7387
+ setBusy(null);
7388
+ }
7389
+ }, [client, busy]);
7390
+ const signIn = async () => {
7391
+ if (client === null || busy !== null) return;
7392
+ setBusy("github");
7393
+ setGithubFailed(null);
7394
+ setNotice(null);
7395
+ try {
7396
+ const next = await client.githubStart();
7397
+ setGithub(next);
7398
+ setPollMs(next.flow?.intervalMs ?? 5e3);
7399
+ setPollTick(0);
7400
+ } catch (reason) {
7401
+ setGithubFailed(message(reason));
7402
+ } finally {
7403
+ setBusy(null);
7404
+ }
7405
+ };
7406
+ const cancelSignIn = async () => {
7407
+ if (client === null || busy !== null) return;
7408
+ setBusy("github");
7409
+ setGithubFailed(null);
7410
+ try {
7411
+ setGithub(await client.githubCancel());
7412
+ } catch (reason) {
7413
+ setGithubFailed(message(reason));
7414
+ } finally {
7415
+ setBusy(null);
7416
+ }
7417
+ };
7418
+ const signOut = async () => {
7419
+ if (client === null || busy !== null) return;
7420
+ setBusy("github");
7421
+ setGithubFailed(null);
7422
+ setNotice(null);
7423
+ try {
7424
+ setGithub(await client.githubSignOut());
7425
+ askedRepositories.current = false;
7426
+ setRepositories(null);
7427
+ await refresh();
7428
+ } catch (reason) {
7429
+ setGithubFailed(message(reason));
7430
+ } finally {
7431
+ setBusy(null);
7432
+ }
7433
+ };
7434
+ const createRepository = async () => {
7435
+ if (client === null || busy !== null || repositoryName.trim() === "") return;
7436
+ setBusy("create");
7437
+ setFailed(null);
7438
+ setGithubFailed(null);
7439
+ setNotice(null);
7440
+ try {
7441
+ const created = await client.githubCreateRepository(repositoryName.trim(), repositoryPrivate);
7442
+ setNotice(t("config.syncRepositoryCreated", { name: created.fullName }));
7443
+ setRepositoryName("");
7444
+ askedRepositories.current = false;
7445
+ await loadRepositories();
7446
+ await choose(created);
5904
7447
  } catch (reason) {
5905
- setFailed(message(reason));
7448
+ setGithubFailed(message(reason));
5906
7449
  } finally {
5907
7450
  setBusy(null);
5908
7451
  }
5909
7452
  };
5910
- const items = pending?.preview.manifest.summary.reduce((sum, component) => sum + component.items, 0) ?? 0;
7453
+ const copyCode = async (code) => {
7454
+ try {
7455
+ setCopied(await (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(code));
7456
+ } catch {
7457
+ setCopied(false);
7458
+ }
7459
+ };
7460
+ const flow = github?.flow;
7461
+ const signedIn = github?.signedIn === true;
7462
+ (0, react.useEffect)(() => {
7463
+ if (client === null || !enabled || flow === void 0) return;
7464
+ let active = true;
7465
+ const timer = setTimeout(() => {
7466
+ (async () => {
7467
+ try {
7468
+ const answer = await client.githubPoll();
7469
+ if (!active) return;
7470
+ if (answer.status === "pending") {
7471
+ if (answer.intervalMs !== void 0) setPollMs(answer.intervalMs);
7472
+ setPollTick((current) => current + 1);
7473
+ return;
7474
+ }
7475
+ const next = await client.githubStatus();
7476
+ if (!active) return;
7477
+ setGithub(next);
7478
+ if (answer.status === "success") {
7479
+ askedRepositories.current = false;
7480
+ setRepositories(null);
7481
+ setNotice(next.login === void 0 ? t("config.syncTokenGitHub") : t("config.syncGitHubSignedIn", { login: next.login }));
7482
+ } else if (answer.status === "expired") setGithubFailed(t("config.syncGitHubExpired"));
7483
+ else if (answer.status === "denied") setGithubFailed(t("config.syncGitHubDenied"));
7484
+ else if (answer.message !== void 0) setGithubFailed(answer.message);
7485
+ } catch (reason) {
7486
+ if (active) setGithubFailed(message(reason));
7487
+ }
7488
+ })();
7489
+ }, Math.max(pollMs, 1e3));
7490
+ return () => {
7491
+ active = false;
7492
+ clearTimeout(timer);
7493
+ };
7494
+ }, [
7495
+ client,
7496
+ enabled,
7497
+ flow?.userCode,
7498
+ pollMs,
7499
+ pollTick,
7500
+ t
7501
+ ]);
7502
+ (0, react.useEffect)(() => {
7503
+ if (!enabled || !signedIn || repositories !== null || askedRepositories.current) return;
7504
+ askedRepositories.current = true;
7505
+ loadRepositories();
7506
+ }, [
7507
+ enabled,
7508
+ signedIn,
7509
+ repositories,
7510
+ loadRepositories
7511
+ ]);
7512
+ const states = [];
7513
+ if (!loaded) states.push(t("config.syncLoading"));
7514
+ else if (status === null) states.push(t("config.syncUnavailable"));
7515
+ else if (status.enabled === false) states.push(t("config.syncLoading"));
7516
+ else {
7517
+ if (!status.configured) states.push(t("config.syncNotConfigured"));
7518
+ if (!status.git.available) states.push(t("config.syncGitMissing", { required: status.git.required }));
7519
+ if (status.configured && status.git.available) {
7520
+ if (!status.remote.reachable) states.push(t("config.syncRemoteUnreachable"));
7521
+ else if (!status.remote.branchExists) states.push(t("config.syncRemoteBranchMissing", { branch: status.config.branch }));
7522
+ else if (status.remote.commit !== void 0) states.push(t("config.syncRemoteCommit", { commit: status.remote.commit.slice(0, 8) }));
7523
+ }
7524
+ const credential = status.config.credentialSource;
7525
+ if (credential === "github") states.push(status.config.credentialLogin === void 0 ? t("config.syncTokenGitHub") : t("config.syncGitHubSignedIn", { login: status.config.credentialLogin }));
7526
+ else if (credential === "environment") states.push(t("config.syncTokenEnvironment"));
7527
+ else if (credential === "token") states.push(t("config.syncTokenSaved"));
7528
+ else states.push(t("config.syncTokenNone"));
7529
+ }
7530
+ const autoBackup = status?.autoBackup;
7531
+ const ready = client !== null && status !== null && status.configured && status.git.available;
7532
+ const editable = !disabled && client !== null;
7533
+ const changed = pending?.components.filter((component) => component.changed).length ?? 0;
7534
+ const selected = repositories?.some((repository) => repository.url === draft.repoUrl) === true ? draft.repoUrl : "";
7535
+ const conflicts = difference?.conflicts ?? [];
7536
+ const conflicted = new Set(conflicts.flatMap((conflict) => [conflict.target + "\0" + conflict.local.content, conflict.target + "\0" + conflict.remote.content]));
7537
+ const additions = difference === null ? 0 : difference.remoteOnly.filter((entry) => !conflicted.has(entry.target + "\0" + entry.content)).length;
7538
+ const heldBack = difference?.heldBack ?? 0;
7539
+ const addable = Math.max(additions - heldBack, 0);
7540
+ const onlyHere = difference === null ? 0 : difference.localOnly.filter((entry) => !conflicted.has(entry.target + "\0" + entry.content)).length;
5911
7541
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5912
- className: MnemonSettingsCard_module_css_default.packRow,
7542
+ className: MnemonSettingsCard_module_css_default.syncRow,
5913
7543
  role: "group",
5914
- "aria-labelledby": "mnemon-pack-heading",
5915
- children: [
5916
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SettingRow, {
5917
- title: t("config.packTitle"),
5918
- titleId: "mnemon-pack-heading",
5919
- hint: t("config.packSimpleDescription"),
5920
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5921
- className: MnemonSettingsCard_module_css_default.rowActions,
5922
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7544
+ "aria-labelledby": "mnemon-sync-heading",
7545
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
7546
+ id: "mnemon-sync-enabled",
7547
+ titleId: "mnemon-sync-heading",
7548
+ label: t("config.syncTitle"),
7549
+ hint: t("config.syncSimpleDescription"),
7550
+ checked: enabled,
7551
+ disabled,
7552
+ onChange: onEnabled
7553
+ }), enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7554
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7555
+ className: MnemonSettingsCard_module_css_default.rowActions,
7556
+ children: [
7557
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5923
7558
  variant: "outline",
5924
7559
  size: "sm",
5925
- disabled: client === null || busy !== null,
5926
- onClick: () => input.current?.click(),
5927
- children: busy === "inspect" ? t("config.packInspecting") : t("config.packImportZip")
5928
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7560
+ disabled: !ready || busy !== null,
7561
+ onClick: () => void preview(),
7562
+ children: busy === "preview" ? t("config.syncPreviewing") : t("config.syncPreview")
7563
+ }),
7564
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5929
7565
  variant: "outline",
5930
7566
  size: "sm",
5931
- disabled: client === null || busy !== null || target === null,
5932
- onClick: () => void exportZip(),
5933
- children: busy === "export" ? t("config.packExporting") : t("config.packExportZip")
5934
- })]
5935
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
5936
- ref: input,
5937
- className: MnemonSettingsCard_module_css_default.visuallyHidden,
5938
- type: "file",
5939
- accept: ZIP_ACCEPT,
5940
- "aria-label": t("config.packChooseZip"),
5941
- onChange: chooseFile
5942
- })]
7567
+ disabled: !ready || busy !== null,
7568
+ onClick: () => void loadHistory(),
7569
+ children: busy === "backups" ? t("config.syncBackupsLoading") : t("config.syncBackups")
7570
+ }),
7571
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7572
+ variant: "primary",
7573
+ size: "sm",
7574
+ disabled: !ready || disabled || busy !== null,
7575
+ onClick: () => void push(),
7576
+ children: busy === "push" ? t("config.syncPushing") : t("config.syncPush")
7577
+ })
7578
+ ]
7579
+ }),
7580
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7581
+ className: MnemonSettingsCard_module_css_default.syncState,
7582
+ "aria-live": "polite",
7583
+ children: states.map((state) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: state }, state))
7584
+ }),
7585
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7586
+ className: MnemonSettingsCard_module_css_default.syncForm,
7587
+ children: [
7588
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7589
+ className: MnemonSettingsCard_module_css_default.syncBlock,
7590
+ children: [
7591
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncGitHub") }), signedIn && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7592
+ className: MnemonSettingsCard_module_css_default.syncAccount,
7593
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: github?.login === void 0 ? t("config.syncTokenGitHub") : t("config.syncGitHubSignedIn", { login: github.login }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7594
+ variant: "ghost",
7595
+ size: "sm",
7596
+ disabled: !editable || busy !== null,
7597
+ onClick: () => void signOut(),
7598
+ children: t("config.syncGitHubSignOut")
7599
+ })]
7600
+ })] }),
7601
+ github === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncLoading") }),
7602
+ github !== null && !github.available && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncGitHubUnavailable") }),
7603
+ github !== null && github.available && !signedIn && flow === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncGitHubHint") }), github.writable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7604
+ className: MnemonSettingsCard_module_css_default.syncFormActions,
7605
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7606
+ variant: "outline",
7607
+ size: "sm",
7608
+ disabled: !editable || busy !== null,
7609
+ onClick: () => void signIn(),
7610
+ children: busy === "github" ? t("config.syncGitHubStarting") : t("config.syncGitHubSignIn")
7611
+ })
7612
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncGitHubReadOnly") })] }),
7613
+ flow !== void 0 && !signedIn && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7614
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncGitHubCode") }),
7615
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7616
+ className: MnemonSettingsCard_module_css_default.syncCode,
7617
+ children: [
7618
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: flow.userCode }),
7619
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7620
+ variant: "outline",
7621
+ size: "sm",
7622
+ onClick: () => void copyCode(flow.userCode),
7623
+ children: copied ? t("config.syncGitHubCopied") : t("config.syncGitHubCopy")
7624
+ }),
7625
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
7626
+ href: flow.verificationUri,
7627
+ target: "_blank",
7628
+ rel: "noreferrer noopener",
7629
+ children: t("config.syncGitHubOpen")
7630
+ })
7631
+ ]
7632
+ }),
7633
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncGitHubWaiting") }),
7634
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7635
+ className: MnemonSettingsCard_module_css_default.syncFormActions,
7636
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7637
+ variant: "ghost",
7638
+ size: "sm",
7639
+ disabled: busy !== null,
7640
+ onClick: () => void cancelSignIn(),
7641
+ children: t("common.cancel")
7642
+ })
7643
+ })
7644
+ ] }),
7645
+ githubFailed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
7646
+ className: MnemonSettingsCard_module_css_default.error,
7647
+ children: t("config.syncGitHubFailed", { error: githubFailed })
7648
+ })
7649
+ ]
7650
+ }),
7651
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7652
+ className: MnemonSettingsCard_module_css_default.syncBlock,
7653
+ children: [
7654
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("header", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncAutoBackup") }) }),
7655
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncAutoBackupHint") }),
7656
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7657
+ className: MnemonSettingsCard_module_css_default.syncField,
7658
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7659
+ htmlFor: "mnemon-sync-auto-backup",
7660
+ children: t("config.syncAutoBackup")
7661
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
7662
+ id: "mnemon-sync-auto-backup",
7663
+ value: String(draft.autoBackupMinutes),
7664
+ disabled: !editable || autoBackupSaving,
7665
+ onChange: (event) => void setAutoBackup(Number(event.target.value)),
7666
+ children: AUTO_BACKUP_CHOICES.map((minutes) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
7667
+ value: String(minutes),
7668
+ children: intervalLabel(t, minutes)
7669
+ }, minutes))
7670
+ })]
7671
+ }),
7672
+ autoBackup !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: autoBackup.available ? autoBackup.nextAt === void 0 ? "" : t("config.syncAutoBackupNext", { at: stamp(autoBackup.nextAt) }) : t("config.syncAutoBackupNever") }),
7673
+ autoBackup?.lastAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncAutoBackupLast", { at: stamp(autoBackup.lastAt) }) }),
7674
+ autoBackup?.lastError !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
7675
+ className: MnemonSettingsCard_module_css_default.error,
7676
+ children: t("config.syncAutoBackupFailed", { error: autoBackup.lastError })
7677
+ })
7678
+ ]
7679
+ }),
7680
+ github !== null && github.available && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7681
+ className: MnemonSettingsCard_module_css_default.syncBlock,
7682
+ children: [
7683
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncRepositories") }), repositories !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7684
+ variant: "ghost",
7685
+ size: "sm",
7686
+ disabled: !editable || busy !== null,
7687
+ onClick: () => void loadRepositories(),
7688
+ children: busy === "repos" ? t("config.syncRepositoriesLoading") : t("config.syncRepositoriesLoad")
7689
+ })] }),
7690
+ !signedIn && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncRepositoriesSignIn") }),
7691
+ signedIn && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
7692
+ repositories === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: busy === "repos" ? t("config.syncRepositoriesLoading") : t("config.syncRepositoriesHint") }),
7693
+ repositories !== null && repositories.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncRepositoriesEmpty") }),
7694
+ repositories !== null && repositories.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7695
+ className: MnemonSettingsCard_module_css_default.syncField,
7696
+ children: [
7697
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7698
+ htmlFor: "mnemon-sync-repository",
7699
+ children: t("config.syncRepositories")
7700
+ }),
7701
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
7702
+ id: "mnemon-sync-repository",
7703
+ value: selected,
7704
+ disabled: !editable || busy !== null,
7705
+ onChange: (event) => {
7706
+ const repository = repositories.find((candidate) => candidate.url === event.target.value);
7707
+ if (repository !== void 0) choose(repository);
7708
+ },
7709
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
7710
+ value: "",
7711
+ children: t("config.syncRepositoriesChoose")
7712
+ }), repositories.map((repository) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
7713
+ value: repository.url,
7714
+ disabled: !repository.push,
7715
+ children: repository.fullName + (repository.private ? " · " + t("config.syncRepositoriesPrivate") : "") + (repository.push ? "" : " · " + t("config.syncRepositoriesNoPush"))
7716
+ }, repository.fullName))]
7717
+ }),
7718
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncRepoUrlHint") })
7719
+ ]
7720
+ }),
7721
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7722
+ className: MnemonSettingsCard_module_css_default.syncField,
7723
+ children: [
7724
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7725
+ htmlFor: "mnemon-sync-repository-name",
7726
+ children: t("config.syncRepositoryName")
7727
+ }),
7728
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7729
+ id: "mnemon-sync-repository-name",
7730
+ type: "text",
7731
+ value: repositoryName,
7732
+ placeholder: "mnemon-memory",
7733
+ disabled: !editable || busy !== null,
7734
+ autoComplete: "off",
7735
+ spellCheck: false,
7736
+ autoCapitalize: "none",
7737
+ autoCorrect: "off",
7738
+ onChange: (event) => setRepositoryName(event.target.value)
7739
+ }),
7740
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
7741
+ className: MnemonSettingsCard_module_css_default.syncCheck,
7742
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7743
+ type: "checkbox",
7744
+ checked: repositoryPrivate,
7745
+ disabled: !editable || busy !== null,
7746
+ onChange: (event) => setRepositoryPrivate(event.target.checked)
7747
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.syncRepositoryPrivate") })]
7748
+ })
7749
+ ]
7750
+ }),
7751
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7752
+ className: MnemonSettingsCard_module_css_default.syncFormActions,
7753
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7754
+ variant: "outline",
7755
+ size: "sm",
7756
+ disabled: !editable || busy !== null || repositoryName.trim() === "",
7757
+ onClick: () => void createRepository(),
7758
+ children: busy === "create" ? t("config.syncRepositoryCreating") : t("config.syncRepositoryCreate")
7759
+ })
7760
+ })
7761
+ ] })
7762
+ ]
7763
+ }),
7764
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7765
+ className: MnemonSettingsCard_module_css_default.syncField,
7766
+ children: [
7767
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7768
+ htmlFor: "mnemon-sync-repo",
7769
+ children: t("config.syncRepoUrl")
7770
+ }),
7771
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7772
+ id: "mnemon-sync-repo",
7773
+ type: "text",
7774
+ value: draft.repoUrl,
7775
+ placeholder: "https://github.com/owner/repository.git",
7776
+ disabled: !editable,
7777
+ autoComplete: "off",
7778
+ spellCheck: false,
7779
+ autoCapitalize: "none",
7780
+ autoCorrect: "off",
7781
+ onChange: (event) => setDraft((current) => ({
7782
+ ...current,
7783
+ repoUrl: event.target.value
7784
+ }))
7785
+ }),
7786
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncRepoUrlHint") })
7787
+ ]
7788
+ }),
7789
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7790
+ className: MnemonSettingsCard_module_css_default.syncField,
7791
+ children: [
7792
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7793
+ htmlFor: "mnemon-sync-branch",
7794
+ children: t("config.syncBranch")
7795
+ }),
7796
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7797
+ id: "mnemon-sync-branch",
7798
+ type: "text",
7799
+ value: draft.branch,
7800
+ placeholder: saved?.branch ?? "mnemon-sync",
7801
+ disabled: !editable,
7802
+ autoComplete: "off",
7803
+ spellCheck: false,
7804
+ autoCapitalize: "none",
7805
+ autoCorrect: "off",
7806
+ onChange: (event) => setDraft((current) => ({
7807
+ ...current,
7808
+ branch: event.target.value
7809
+ }))
7810
+ }),
7811
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBranchHint", { branch: saved?.branch ?? "mnemon-sync" }) })
7812
+ ]
7813
+ }),
7814
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7815
+ className: MnemonSettingsCard_module_css_default.syncField,
7816
+ children: [
7817
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7818
+ htmlFor: "mnemon-sync-subdir",
7819
+ children: t("config.syncSubdir")
7820
+ }),
7821
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7822
+ id: "mnemon-sync-subdir",
7823
+ type: "text",
7824
+ value: draft.subdir,
7825
+ placeholder: saved?.subdir ?? "mnemon/",
7826
+ disabled: !editable,
7827
+ autoComplete: "off",
7828
+ spellCheck: false,
7829
+ autoCapitalize: "none",
7830
+ autoCorrect: "off",
7831
+ onChange: (event) => setDraft((current) => ({
7832
+ ...current,
7833
+ subdir: event.target.value
7834
+ }))
7835
+ }),
7836
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncSubdirHint", { subdir: saved?.subdir ?? "mnemon/" }) })
7837
+ ]
7838
+ }),
7839
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7840
+ className: MnemonSettingsCard_module_css_default.syncField,
7841
+ children: [
7842
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7843
+ htmlFor: "mnemon-sync-token",
7844
+ children: t("config.syncToken")
7845
+ }),
7846
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7847
+ id: "mnemon-sync-token",
7848
+ type: "password",
7849
+ value: draft.token,
7850
+ disabled: !editable || draft.clearToken,
7851
+ placeholder: saved?.hasToken ? t("config.syncTokenSaved") : t("config.syncTokenNone"),
7852
+ autoComplete: "new-password",
7853
+ spellCheck: false,
7854
+ onChange: (event) => setDraft((current) => ({
7855
+ ...current,
7856
+ token: event.target.value
7857
+ }))
7858
+ }),
7859
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncTokenOptional") }),
7860
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncTokenHint", {
7861
+ path: status?.configPath ?? "",
7862
+ env: "MNEMON_SYNC_GIT_TOKEN"
7863
+ }) }),
7864
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncTokenKeep") }),
7865
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
7866
+ className: MnemonSettingsCard_module_css_default.syncCheck,
7867
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7868
+ type: "checkbox",
7869
+ checked: draft.clearToken,
7870
+ disabled: !editable,
7871
+ onChange: (event) => setDraft((current) => ({
7872
+ ...current,
7873
+ clearToken: event.target.checked,
7874
+ token: ""
7875
+ }))
7876
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.syncTokenClear") })]
7877
+ })
7878
+ ]
7879
+ }),
7880
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7881
+ className: MnemonSettingsCard_module_css_default.syncField,
7882
+ children: [
7883
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7884
+ htmlFor: "mnemon-sync-author-name",
7885
+ children: t("config.syncAuthorName")
7886
+ }),
7887
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7888
+ id: "mnemon-sync-author-name",
7889
+ type: "text",
7890
+ value: draft.authorName,
7891
+ placeholder: t("config.syncAuthorOptional"),
7892
+ disabled: !editable,
7893
+ autoComplete: "off",
7894
+ spellCheck: false,
7895
+ onChange: (event) => setDraft((current) => ({
7896
+ ...current,
7897
+ authorName: event.target.value
7898
+ }))
7899
+ }),
7900
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncAuthorHint") })
7901
+ ]
7902
+ }),
7903
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7904
+ className: MnemonSettingsCard_module_css_default.syncField,
7905
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
7906
+ htmlFor: "mnemon-sync-author-email",
7907
+ children: t("config.syncAuthorEmail")
7908
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
7909
+ id: "mnemon-sync-author-email",
7910
+ type: "text",
7911
+ value: draft.authorEmail,
7912
+ placeholder: t("config.syncAuthorOptional"),
7913
+ disabled: !editable,
7914
+ autoComplete: "off",
7915
+ spellCheck: false,
7916
+ onChange: (event) => setDraft((d) => ({
7917
+ ...d,
7918
+ authorEmail: event.target.value
7919
+ }))
7920
+ })]
7921
+ }),
7922
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7923
+ className: MnemonSettingsCard_module_css_default.syncFormActions,
7924
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7925
+ variant: "primary",
7926
+ size: "sm",
7927
+ disabled: !editable || busy !== null || !configured(draft),
7928
+ onClick: () => void save(),
7929
+ children: busy === "save" ? t("config.syncSave") + "…" : t("config.syncSave")
7930
+ })
7931
+ })
7932
+ ]
5943
7933
  }),
5944
7934
  pending !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5945
- className: MnemonSettingsCard_module_css_default.importBar,
7935
+ className: MnemonSettingsCard_module_css_default.syncBar,
5946
7936
  role: "status",
5947
7937
  children: [
5948
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: pending.preview.fileName ?? t("config.packUnnamedZip") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.packZipReady", {
5949
- components: pending.preview.manifest.components.length,
5950
- items,
5951
- size: humanBytes(pending.preview.archiveBytes)
5952
- }) })] }),
7938
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [
7939
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncPreviewReady", {
7940
+ commit: pending.commit.slice(0, 8),
7941
+ components: pending.manifest.components.length,
7942
+ size: humanBytes(pending.archiveBytes)
7943
+ }) }),
7944
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncPreviewComponents", {
7945
+ changed,
7946
+ total: pending.components.length
7947
+ }) }),
7948
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncPreviewFiles", {
7949
+ added: pending.files.added,
7950
+ removed: pending.files.removed,
7951
+ changed: pending.files.changed
7952
+ }) })
7953
+ ] }),
5953
7954
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5954
7955
  variant: "ghost",
5955
7956
  size: "sm",
@@ -5960,66 +7961,185 @@ window.__ModuleLoader__.load({
5960
7961
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
5961
7962
  variant: "primary",
5962
7963
  size: "sm",
5963
- disabled: busy !== null,
5964
- onClick: () => void importZip(),
5965
- children: busy === "import" ? t("config.packImporting") : t("config.packImportZipAction")
7964
+ disabled: busy !== null || disabled,
7965
+ onClick: () => void pull(),
7966
+ children: busy === "pull" ? t("config.syncPulling") : t("config.syncPull")
5966
7967
  })
5967
7968
  ]
5968
7969
  }),
7970
+ dialog && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonDialog, {
7971
+ title: t("config.syncBackups"),
7972
+ closeLabel: t("common.close"),
7973
+ wide: true,
7974
+ busy: busy !== null,
7975
+ onClose: () => setDialog(false),
7976
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7977
+ className: MnemonSettingsCard_module_css_default.syncDialogBody,
7978
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7979
+ className: MnemonSettingsCard_module_css_default.syncBackups,
7980
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncBackupsTitle", { branch: backups?.branch ?? status?.config.branch ?? "" }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
7981
+ className: MnemonSettingsCard_module_css_default.rowActions,
7982
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
7983
+ variant: "ghost",
7984
+ size: "sm",
7985
+ disabled: busy !== null,
7986
+ onClick: () => void loadHistory(),
7987
+ children: busy === "backups" ? t("config.syncBackupsLoading") : t("review.refresh")
7988
+ })
7989
+ })] }), backups === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupsLoading") }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupsHint", { subdir: backups.subdir }) }), backups.commits.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupsEmpty") }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7990
+ className: MnemonSettingsCard_module_css_default.syncBackupList,
7991
+ children: [backups.commits.map((commit) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7992
+ className: MnemonSettingsCard_module_css_default.syncBackupEntry,
7993
+ children: [
7994
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
7995
+ className: MnemonSettingsCard_module_css_default.reviewTitle,
7996
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: commit.message }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
7997
+ tone: "quiet",
7998
+ children: commit.commit.slice(0, 8)
7999
+ })]
8000
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8001
+ className: MnemonSettingsCard_module_css_default.rowActions,
8002
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8003
+ variant: "ghost",
8004
+ size: "sm",
8005
+ disabled: busy !== null,
8006
+ onClick: () => setOpenCommit(openCommit === commit.commit ? null : commit.commit),
8007
+ children: openCommit === commit.commit ? t("review.collapse") : t("review.expand")
8008
+ })
8009
+ })] }),
8010
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupMeta", {
8011
+ machine: ownerName(t, commit.machine),
8012
+ time: stamp(commit.committedAt)
8013
+ }) }),
8014
+ commit.pushedAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupPushedAt", { time: stamp(commit.pushedAt) }) }),
8015
+ openCommit === commit.commit && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8016
+ className: MnemonSettingsCard_module_css_default.syncBackupComponents,
8017
+ children: commit.components.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupNoComponents") }) : commit.components.map((component) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupComponent", {
8018
+ component: component.component,
8019
+ items: component.items,
8020
+ files: component.files,
8021
+ size: humanBytes(component.bytes)
8022
+ }) }, component.component))
8023
+ })
8024
+ ]
8025
+ }, commit.commit)), backups.truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8026
+ className: MnemonSettingsCard_module_css_default.rowActions,
8027
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8028
+ variant: "outline",
8029
+ size: "sm",
8030
+ disabled: busy !== null,
8031
+ onClick: () => void loadMore(),
8032
+ children: busy === "more" ? t("config.syncBackupsLoading") : t("config.syncBackupsMore")
8033
+ })
8034
+ })]
8035
+ })] })]
8036
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8037
+ className: MnemonSettingsCard_module_css_default.syncDiff,
8038
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t("config.syncDiffTitle", {
8039
+ commit: difference?.commit.slice(0, 8) ?? "",
8040
+ shared: difference?.shared ?? 0
8041
+ }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8042
+ className: MnemonSettingsCard_module_css_default.rowActions,
8043
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8044
+ variant: "ghost",
8045
+ size: "sm",
8046
+ disabled: busy !== null,
8047
+ onClick: () => void loadDifference(),
8048
+ children: busy === "diff" ? t("config.syncPreviewing") : t("review.refresh")
8049
+ })
8050
+ })] }), difference === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncBackupsLoading") }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
8051
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffSides", {
8052
+ local: difference.local.entries,
8053
+ remote: difference.remote.entries,
8054
+ machine: ownerName(t, difference.remote.machine)
8055
+ }) }),
8056
+ difference.truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffTruncated") }),
8057
+ difference.remoteTombstones.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffTombstones", { count: difference.remoteTombstones.length }) }),
8058
+ conflicts.length === 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8059
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8060
+ children: additions === 0 ? t("config.syncDiffNothing") : t("config.syncDiffClear")
8061
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8062
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8063
+ children: t("config.syncDiffConflicts", { count: conflicts.length })
8064
+ }),
8065
+ conflicts.length === 0 && addable > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8066
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8067
+ children: t("config.syncDiffAdditions", { count: addable })
8068
+ }),
8069
+ conflicts.length === 0 && heldBack > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8070
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8071
+ children: t("config.syncDiffHeldBack", { count: heldBack })
8072
+ }),
8073
+ conflicts.length === 0 && onlyHere > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8074
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8075
+ children: t("config.syncDiffLocalOnlyNote", { count: onlyHere })
8076
+ }),
8077
+ conflicts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8078
+ className: MnemonSettingsCard_module_css_default.syncConflictList,
8079
+ children: conflicts.map((conflict) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8080
+ className: MnemonSettingsCard_module_css_default.syncConflict,
8081
+ "data-target": conflict.target,
8082
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: t(conflict.target === "user" ? "review.targetUser" : "review.targetMemory") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: conflict.local.importance + " · " + Math.round(conflict.similarity * 100) + "%" })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8083
+ className: MnemonSettingsCard_module_css_default.syncConflictSides,
8084
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffHere") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: clip(conflict.local.content, 400) })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffThere") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: clip(conflict.remote.content, 400) })] })]
8085
+ })]
8086
+ }, conflict.target + "\0" + conflict.local.content))
8087
+ }),
8088
+ conflicts.length === 0 && (addable > 0 || heldBack > 0) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8089
+ className: MnemonSettingsCard_module_css_default.rowActions,
8090
+ children: [addable > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8091
+ variant: "primary",
8092
+ size: "sm",
8093
+ disabled: busy !== null || disabled,
8094
+ onClick: () => void addRemote(),
8095
+ children: busy === "add" ? t("config.syncDiffAdding") : t("config.syncDiffAdd")
8096
+ }), heldBack > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8097
+ variant: "outline",
8098
+ size: "sm",
8099
+ disabled: busy !== null || disabled,
8100
+ onClick: () => void addRemote(true),
8101
+ children: busy === "revive" ? t("config.syncDiffReviving") : t("config.syncDiffRevive")
8102
+ })]
8103
+ }),
8104
+ conflicts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
8105
+ className: MnemonSettingsCard_module_css_default.syncPlan,
8106
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8107
+ className: MnemonSettingsCard_module_css_default.syncDialogNote,
8108
+ children: t("config.syncPlanWhere")
8109
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
8110
+ className: MnemonSettingsCard_module_css_default.rowActions,
8111
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8112
+ variant: "outline",
8113
+ size: "sm",
8114
+ onClick: goToReview,
8115
+ children: t("config.syncPlanGo")
8116
+ })
8117
+ })]
8118
+ })
8119
+ ] })]
8120
+ })]
8121
+ })
8122
+ }),
5969
8123
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5970
- className: MnemonSettingsCard_module_css_default.packFeedback,
8124
+ className: MnemonSettingsCard_module_css_default.syncFeedback,
5971
8125
  "aria-live": "polite",
5972
8126
  children: [
5973
8127
  failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5974
8128
  className: MnemonSettingsCard_module_css_default.error,
5975
8129
  role: "alert",
5976
- children: t("config.packFailed", { error: failed })
8130
+ children: t("config.syncFailed", { error: failed })
5977
8131
  }),
5978
8132
  notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5979
- className: MnemonSettingsCard_module_css_default.packSuccess,
8133
+ className: MnemonSettingsCard_module_css_default.syncSuccess,
5980
8134
  children: notice
5981
8135
  }),
5982
8136
  client === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
5983
8137
  className: MnemonSettingsCard_module_css_default.readOnly,
5984
- children: t("config.packUnavailable")
8138
+ children: t("config.syncUnavailable")
5985
8139
  })
5986
8140
  ]
5987
8141
  })
5988
- ]
5989
- });
5990
- }
5991
- //#endregion
5992
- //#region src/client/GlobalLocationSetting.tsx
5993
- /** The default or custom location control: the storage directory, Native and workspace-aware providers. */
5994
- function GlobalLocationSetting(props) {
5995
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5996
- className: `${MnemonSettingsCard_module_css_default.globalLocationSetting}${props.className === void 0 ? "" : ` ${props.className}`}`,
5997
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
5998
- className: MnemonSettingsCard_module_css_default.nativeLocation,
5999
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6000
- className: MnemonSettingsCard_module_css_default.settingCopy,
6001
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: props.label }), props.hint !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: props.hint })]
6002
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
6003
- className: MnemonSettingsCard_module_css_default.inlineChoices,
6004
- role: "radiogroup",
6005
- "aria-label": props.ariaLabel,
6006
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6007
- type: "radio",
6008
- name: props.name,
6009
- checked: props.workspace || !props.custom,
6010
- disabled: props.disabled || props.workspace,
6011
- onClick: props.onInteract,
6012
- onChange: () => props.onChange(false)
6013
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: props.defaultLabel })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
6014
- type: "radio",
6015
- name: props.name,
6016
- checked: !props.workspace && props.custom,
6017
- disabled: props.disabled || props.workspace,
6018
- onClick: props.onInteract,
6019
- onChange: () => props.onChange(true)
6020
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: props.customLabel })] })]
6021
- })]
6022
- }), !props.workspace && props.custom ? props.children : null]
8142
+ ] })]
6023
8143
  });
6024
8144
  }
6025
8145
  //#endregion
@@ -6072,9 +8192,9 @@ window.__ModuleLoader__.load({
6072
8192
  }
6073
8193
  /**
6074
8194
  * Where memory lives: the scope and directory, applied together because a
6075
- * change moves where every component below reads and writes, and the ZIP
6076
- * backup that carries the data from one place to another. The components
6077
- * that keep their data here are named at the top, each opening its page.
8195
+ * change moves where every component below reads and writes, the ZIP backup
8196
+ * that carries the data from one place to another, and the git sync that
8197
+ * carries it between machines.
6078
8198
  *
6079
8199
  * The directory is Mnemon's default one or one the user types, chosen
6080
8200
  * outright rather than implied by an empty field, and the row shows the one
@@ -6115,6 +8235,13 @@ window.__ModuleLoader__.load({
6115
8235
  await props.scope.mutate(operations);
6116
8236
  props.onSaved();
6117
8237
  });
8238
+ const sync = useLive(props.value?.syncEnabled === true, async (value) => {
8239
+ await props.scope.mutate([{
8240
+ op: "set",
8241
+ path: ["syncEnabled"],
8242
+ value
8243
+ }]);
8244
+ });
6118
8245
  const { draft } = storage;
6119
8246
  const problem = storageProblem(t, draft);
6120
8247
  const focusDirectory = (0, react.useRef)(false);
@@ -6238,6 +8365,26 @@ window.__ModuleLoader__.load({
6238
8365
  ...props.workspaceId === void 0 ? {} : { workspaceId: props.workspaceId },
6239
8366
  target: props.target,
6240
8367
  t
8368
+ }),
8369
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonSyncSection, {
8370
+ ...props.connection === void 0 ? {} : { connection: props.connection },
8371
+ ...props.sessionId === void 0 ? {} : { sessionId: props.sessionId },
8372
+ ...props.workspaceId === void 0 ? {} : { workspaceId: props.workspaceId },
8373
+ disabled: props.disabled,
8374
+ enabled: sync.value,
8375
+ onEnabled: sync.set,
8376
+ t
8377
+ }),
8378
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
8379
+ error: sync.failed,
8380
+ t
8381
+ }),
8382
+ sync.value && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonReviewSection, {
8383
+ ...props.connection === void 0 ? {} : { connection: props.connection },
8384
+ ...props.sessionId === void 0 ? {} : { sessionId: props.sessionId },
8385
+ ...props.workspaceId === void 0 ? {} : { workspaceId: props.workspaceId },
8386
+ disabled: props.disabled,
8387
+ t
6241
8388
  })
6242
8389
  ]
6243
8390
  })]
@@ -6249,6 +8396,10 @@ window.__ModuleLoader__.load({
6249
8396
  subscribe: () => () => {},
6250
8397
  getSnapshot: () => 0
6251
8398
  };
8399
+ const NO_COMPONENT_LIST = {
8400
+ subscribe: () => () => {},
8401
+ getSnapshot: () => void 0
8402
+ };
6252
8403
  /**
6253
8404
  * The dsh-mnemon configuration, shown on its bundle page under DSH Plugins:
6254
8405
  * the memory composition, then only what belongs to no component — where
@@ -6259,12 +8410,14 @@ window.__ModuleLoader__.load({
6259
8410
  * Typed values wait for their group's Apply; the storage location waits too,
6260
8411
  * because it moves where every component reads and writes.
6261
8412
  */
6262
- function MnemonSettingsCard({ scope, interactionScope: suppliedInteractionScope, connection, sessionId, workspaceId, workspaceLabel, t = translateZh, language = "zh", componentChanges = NO_CHANGE_SIGNAL$1, componentSettings, component }) {
8413
+ function MnemonSettingsCard({ scope, interactionScope: suppliedInteractionScope, connection, sessionId, workspaceId, workspaceLabel, t = translateZh, language = "zh", componentChanges = NO_CHANGE_SIGNAL$1, componentSettings, component, componentList = NO_COMPONENT_LIST }) {
6263
8414
  const interactionScope = suppliedInteractionScope ?? scope;
6264
8415
  const coreSnapshot = useScope(scope);
6265
8416
  const interactionSnapshot = useScope(interactionScope);
6266
8417
  const [targetRevision, setTargetRevision] = (0, react.useState)(0);
6267
- const dataRevision = targetRevision + (0, react.useSyncExternalStore)(componentChanges.subscribe, componentChanges.getSnapshot, componentChanges.getSnapshot) + (coreSnapshot.revision ?? 0);
8418
+ const componentRevision = (0, react.useSyncExternalStore)(componentChanges.subscribe, componentChanges.getSnapshot, componentChanges.getSnapshot);
8419
+ const groupRowListed = (0, react.useSyncExternalStore)(componentList.subscribe, componentList.getSnapshot, componentList.getSnapshot) === true;
8420
+ const dataRevision = targetRevision + componentRevision + (coreSnapshot.revision ?? 0);
6268
8421
  const view = useViewStore((0, react.useMemo)(() => connection === void 0 ? void 0 : new MnemonClient(connection, sessionId, workspaceId), [
6269
8422
  connection,
6270
8423
  sessionId,
@@ -6493,7 +8646,7 @@ window.__ModuleLoader__.load({
6493
8646
  })
6494
8647
  ]
6495
8648
  }),
6496
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
8649
+ groupRowListed && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
6497
8650
  className: MnemonSettingsCard_module_css_default.componentListNote,
6498
8651
  children: t("config.componentListNote")
6499
8652
  }),
@@ -7389,6 +9542,7 @@ window.__ModuleLoader__.load({
7389
9542
  settings,
7390
9543
  enabled: true
7391
9544
  }));
9545
+ props.onChanged?.();
7392
9546
  };
7393
9547
  const toggle = async (provider, enabled) => {
7394
9548
  if (client === null) throw new Error(props.t("config.providerUnavailable"));
@@ -7398,6 +9552,7 @@ window.__ModuleLoader__.load({
7398
9552
  enabled
7399
9553
  });
7400
9554
  acceptService(updated);
9555
+ props.onChanged?.();
7401
9556
  return updated;
7402
9557
  };
7403
9558
  const disabled = props.disabled || props.scopeChanging || client === null || loading || catalog.generatedAt === "";
@@ -7689,6 +9844,7 @@ window.__ModuleLoader__.load({
7689
9844
  refreshKey: snapshot.revision ?? 0,
7690
9845
  disabled: disabled || readOnly,
7691
9846
  scopeChanging: false,
9847
+ ...props.componentChanges === void 0 ? {} : { onChanged: props.componentChanges.bump },
7692
9848
  ...readOnly ? { notice: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Callout, {
7693
9849
  tone: "warning",
7694
9850
  className: MnemonSettingsCard_module_css_default.groupCallout,
@@ -8767,12 +10923,53 @@ window.__ModuleLoader__.load({
8767
10923
  });
8768
10924
  });
8769
10925
  //#endregion
10926
+ //#region src/client/component-list-seat.ts
10927
+ /** The id of the Starter's grouping row in its `cordis.patch.yml`. */
10928
+ const STARTER_GROUP_ROW_ID = "mnemon-bundle";
10929
+ /**
10930
+ * Whether DSH's component list on the dsh-mnemon page shows the Starter's
10931
+ * grouping row, which it shows as off. DSH 0.2.0 and earlier list it; DSH
10932
+ * 0.2.1 lists only the components. The page's head controls see the rows DSH
10933
+ * draws and report them here for the configuration above the list.
10934
+ */
10935
+ var MnemonComponentListSeat = class {
10936
+ latest;
10937
+ listeners = /* @__PURE__ */ new Set();
10938
+ /** Undefined until a page reports, so nothing is said about a list not yet seen. */
10939
+ getSnapshot = () => this.latest?.groupRow;
10940
+ subscribe = (listener) => {
10941
+ this.listeners.add(listener);
10942
+ return () => {
10943
+ this.listeners.delete(listener);
10944
+ };
10945
+ };
10946
+ /** Report whether the open page lists the row until the returned disposer runs; a newer report replaces it. */
10947
+ report(groupRow) {
10948
+ const report = { groupRow };
10949
+ this.latest = report;
10950
+ this.emit();
10951
+ return () => {
10952
+ if (this.latest !== report) return;
10953
+ this.latest = void 0;
10954
+ this.emit();
10955
+ };
10956
+ }
10957
+ emit() {
10958
+ for (const listener of [...this.listeners]) listener();
10959
+ }
10960
+ };
10961
+ //#endregion
8770
10962
  //#region src/client/MnemonPluginActions.tsx
8771
10963
  /** The npm package whose page under DSH Plugins carries the Mnemon configuration. */
8772
10964
  const MNEMON_PACKAGE_NAME = "dsh-mnemon";
8773
- /** Head controls on the dsh-mnemon page under Plugins: a way back to the memory workspace. */
8774
- function MnemonPluginActions({ subject, workspace, t }) {
10965
+ /**
10966
+ * Head controls on the dsh-mnemon page under Plugins: a way back to the memory
10967
+ * workspace. They also report the rows DSH lists below the configuration.
10968
+ */
10969
+ function MnemonPluginActions({ subject, workspace, componentList, t }) {
8775
10970
  const open = (0, react.useSyncExternalStore)(workspace.subscribe, workspace.getSnapshot, workspace.getSnapshot);
10971
+ const groupRow = subject.kind === "bundle" && subject.pkg.name === "dsh-mnemon" ? subject.pkg.rows.some((row) => row.rowId === STARTER_GROUP_ROW_ID) : void 0;
10972
+ (0, react.useEffect)(() => groupRow === void 0 ? void 0 : componentList?.report(groupRow), [groupRow, componentList]);
8776
10973
  if (subject.kind !== "bundle" || subject.pkg.name !== "dsh-mnemon" || !subject.pkg.enabled || open === void 0) return null;
8777
10974
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
8778
10975
  variant: "outline",
@@ -11078,8 +13275,8 @@ window.__ModuleLoader__.load({
11078
13275
  (0, react.useEffect)(() => {
11079
13276
  if (componentRevision === seenComponents.current) return;
11080
13277
  seenComponents.current = componentRevision;
11081
- refreshAll();
11082
- }, [componentRevision, refreshAll]);
13278
+ refreshPage();
13279
+ }, [componentRevision, refreshPage]);
11083
13280
  const seenSettings = (0, react.useRef)({
11084
13281
  revision: settingsSnapshot.revision,
11085
13282
  context: viewContextKey
@@ -12475,7 +14672,8 @@ window.__ModuleLoader__.load({
12475
14672
  const seats = {
12476
14673
  configuration: new MnemonActionSeat(),
12477
14674
  workspace: new MnemonActionSeat(),
12478
- components: new MnemonChangeSignal()
14675
+ components: new MnemonChangeSignal(),
14676
+ componentList: new MnemonComponentListSeat()
12479
14677
  };
12480
14678
  const namespace = "mnemon";
12481
14679
  ctx.effect(() => ctx.locale.register(namespace, {
@@ -12532,6 +14730,7 @@ window.__ModuleLoader__.load({
12532
14730
  currentSession: ctx.uiSession.adapter.current,
12533
14731
  localeRuntime: ctx.locale,
12534
14732
  componentChanges: seats.components,
14733
+ componentList: seats.componentList,
12535
14734
  t: translate
12536
14735
  });
12537
14736
  const renderContributed = (packageName, owner) => renderComponentRegion(ctx, MNEMON_COMPONENT_SETTINGS_SLOT, packageName, owner);
@@ -12561,7 +14760,8 @@ window.__ModuleLoader__.load({
12561
14760
  ctx.effect(() => installShippedComponentSettings(ctx, {
12562
14761
  scope: settings,
12563
14762
  connection: ctx.connection,
12564
- t: translate
14763
+ t: translate,
14764
+ componentChanges: seats.components
12565
14765
  }), "dsh-mnemon: shipped component settings");
12566
14766
  ctx.effect(() => installShippedComponentStatus(ctx), "dsh-mnemon: shipped component status");
12567
14767
  ctx.slots.inject("plugins.detail.actions", () => ctx.slots.register({
@@ -12570,6 +14770,7 @@ window.__ModuleLoader__.load({
12570
14770
  locale: namespace,
12571
14771
  inject: () => ({
12572
14772
  workspace: seats.workspace,
14773
+ componentList: seats.componentList,
12573
14774
  t: translate
12574
14775
  })
12575
14776
  }, MnemonPluginActions));