dsh-mnemon 0.5.27 → 0.5.29
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/README.md +1 -1
- package/README.zh-CN.md +1 -1
- package/lib/bundle.js +1 -1
- package/lib/client.js +2041 -1264
- package/lib/index.js +1229 -223
- package/lib/{starter-resolution-C2z8b9AZ.js → starter-resolution-CiUfOO4b.js} +4 -4
- package/lib/starter.js +1 -1
- package/lib/types/src/client/locales.d.ts +163 -100
- package/lib/types/src/host/protocol.d.ts +57 -2
- package/package.json +5 -5
package/lib/client.js
CHANGED
|
@@ -30,6 +30,14 @@ window.__ModuleLoader__.load({
|
|
|
30
30
|
const MNEMON_WRITE_CHANNEL = "/dsh-mnemon-write";
|
|
31
31
|
const MNEMON_PACK_CHANNEL = "/dsh-mnemon-pack";
|
|
32
32
|
const MNEMON_SYNC_CHANNEL = "/dsh-mnemon-sync";
|
|
33
|
+
/**
|
|
34
|
+
* The credential environment variable the sync channel reads before its stored
|
|
35
|
+
* token. The name travels to the browser so the settings form can tell the user
|
|
36
|
+
* which variable wins; the value never does.
|
|
37
|
+
*/
|
|
38
|
+
const MNEMON_SYNC_TOKEN_ENV = "MNEMON_SYNC_GIT_TOKEN";
|
|
39
|
+
const MNEMON_SYNC_DEFAULT_AUTHOR_NAME = "dsh-mnemon sync";
|
|
40
|
+
const MNEMON_SYNC_DEFAULT_AUTHOR_EMAIL = "mnemon@localhost";
|
|
33
41
|
const MNEMON_SETTINGS_CHANNEL = "/dsh-mnemon-settings";
|
|
34
42
|
/**
|
|
35
43
|
* Reconciliation is the only channel that changes memory after a human read it:
|
|
@@ -269,7 +277,10 @@ window.__ModuleLoader__.load({
|
|
|
269
277
|
}
|
|
270
278
|
async call(channel, endpoint, payload) {
|
|
271
279
|
const response = await callMnemonRpc(this.connection, channel, endpoint, payload);
|
|
272
|
-
if (!response.ok)
|
|
280
|
+
if (!response.ok) {
|
|
281
|
+
const reason = response.error.details?.reason;
|
|
282
|
+
throw Object.assign(new Error(response.error.message), typeof reason === "string" ? { reason } : {});
|
|
283
|
+
}
|
|
273
284
|
return response.value;
|
|
274
285
|
}
|
|
275
286
|
scoped(payload = {}) {
|
|
@@ -662,7 +673,7 @@ window.__ModuleLoader__.load({
|
|
|
662
673
|
}
|
|
663
674
|
//#endregion
|
|
664
675
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonSettingsCard.module.css.mjs
|
|
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}}";
|
|
676
|
+
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_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_syncSuccess{color:var(--dsw-alias-state-success-primary)}._v_wrq_syncPanel{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-xl);flex-direction:column;min-width:0;padding:2px 16px;display:flex}._v_wrq_syncPanel>._v_wrq_settingRow{padding:12px 0}._v_wrq_syncPanel>p{overflow-wrap:anywhere;margin:12px 0;font-size:12px;line-height:18px}._v_wrq_syncPanel>:last-child,._v_wrq_syncPanel>:last-child>._v_wrq_settingRow:last-child{border-bottom:0}._v_wrq_syncFeedbackLine{padding-top:2px;display:block}._v_wrq_syncWarning{border-radius:var(--dsw-radius-md);min-width:0;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));flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;margin:10px 0 2px;padding:6px 6px 6px 12px;font-size:12px;line-height:18px;display:flex}._v_wrq_syncWarning>span{overflow-wrap:anywhere;min-width:0}._v_wrq_syncConnect{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-direction:column;gap:4px;min-width:0;padding-bottom:14px;display:flex}._v_wrq_syncConnect>._v_wrq_settingRow{border-bottom:0;padding-bottom:4px}._v_wrq_syncRepositoryState{flex-direction:column;gap:2px;min-width:0;display:flex}._v_wrq_syncRepositoryName{min-width:0;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}._v_wrq_syncStateLine{flex-wrap:wrap;align-items:center;gap:4px 6px;min-width:0;display:inline-flex}._v_wrq_syncStateLine[data-tone=error]>span{color:var(--dsw-alias-state-error-primary)}._v_wrq_syncInlineAction{appearance:none;color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;text-decoration:underline;text-decoration-color:var(--dsw-alias-border-l4);text-underline-offset:2px;background:0 0;border:0;padding:0;font-size:12px;line-height:18px}._v_wrq_syncInlineAction:hover:not(:disabled){color:var(--dsw-alias-label-primary);text-decoration-color:currentColor}._v_wrq_syncInlineAction:disabled{cursor:default;opacity:.5}._v_wrq_syncInlineAction:focus-visible{border-radius:var(--dsw-radius-xs);box-shadow:0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_syncFieldLabel{min-width:0;color:var(--dsw-alias-label-primary);justify-content:space-between;align-items:center;gap:8px;font-size:13px;font-weight:500;line-height:20px;display:flex}._v_wrq_syncFieldLabel>label{font:inherit}._v_wrq_fieldGrid>._v_wrq_syncFieldBox{flex-direction:column;gap:6px;min-width:0;display:flex}._v_wrq_fieldGrid label small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;font-weight:400;line-height:18px}._v_wrq_fieldGrid label small._v_wrq_error{color:var(--dsw-alias-state-error-primary)}._v_wrq_editor ._v_wrq_error,._v_wrq_editor ._v_wrq_syncSuccess{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncAccount{flex-wrap:wrap;justify-content:space-between;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:13px;line-height:20px}._v_wrq_syncDevice{gap:8px;min-width:0;display:grid}._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-1);font-family:var(--ds-font-family-code,ui-monospace, monospace);letter-spacing:.08em;user-select:all;padding:4px 12px;font-size:16px;font-weight:500;line-height:24px}._v_wrq_syncPicker{gap:8px;min-width:0;display:grid}._v_wrq_syncRepositoryList{border:.5px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1);flex-direction:column;min-width:0;max-height:264px;margin:0;padding:0;list-style:none;display:flex;overflow:auto}._v_wrq_syncRepositoryList>li{border-bottom:.5px solid var(--dsw-alias-border-l2);min-width:0}._v_wrq_syncRepositoryList>li:last-child{border-bottom:0}._v_wrq_syncRepositoryList>li._v_wrq_editorNote{padding:10px 12px}._v_wrq_syncRepositoryOption{appearance:none;width:100%;min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:8px 12px;font-size:13px;line-height:20px;display:flex}._v_wrq_syncRepositoryOption>span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}._v_wrq_syncRepositoryOption:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._v_wrq_syncRepositoryOption:disabled{cursor:default;opacity:.5}._v_wrq_syncRepositoryOption[aria-current=true]>span{font-weight:500}._v_wrq_syncRepositoryOption:focus-visible{box-shadow:inset 0 0 0 2px var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline:none}._v_wrq_syncAdvanced{flex-direction:column;gap:4px;min-width:0;padding-bottom:12px;display:flex}._v_wrq_syncDisclosure{appearance:none;width:100%;min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:12px 0 8px;display:flex}._v_wrq_syncDisclosure>span{color:var(--dsw-alias-label-primary);flex:none;font-size:14px;line-height:22px}._v_wrq_syncDisclosure>small{min-width:0;color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12px;line-height:18px;overflow:hidden}._v_wrq_syncDisclosure[aria-expanded=true] ._v_wrq_providerChevron{transform:rotate(180deg)}._v_wrq_syncDisclosure: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));outline:none}._v_wrq_editor>._v_wrq_inlineChoices{align-self:flex-start}._v_wrq_syncChoice{justify-items:start;gap:8px;min-width:0;display:grid}._v_wrq_syncChoice>._v_wrq_fieldGrid{width:100%}._v_wrq_syncDialogBody{gap:12px;min-width:0;display:grid}._v_wrq_syncDialogNote{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncDialogBody>._v_wrq_error,._v_wrq_syncDialogBody>._v_wrq_syncSuccess{overflow-wrap:anywhere;margin:0;font-size:12px;line-height:18px}._v_wrq_syncHistoryList{margin:0;padding:0;list-style:none;display:grid}._v_wrq_syncHistoryEntry{border-bottom:.5px solid var(--dsw-alias-border-l2);gap:2px;min-width:0;padding:10px 0;display:grid}._v_wrq_syncHistoryEntry:first-child{padding-top:0}._v_wrq_syncHistoryEntry:last-child{border-bottom:0}._v_wrq_syncHistoryHead{flex-wrap:wrap;align-items:center;gap:4px 8px;min-width:0;display:flex}._v_wrq_syncHistoryHead>strong{font-size:13px;font-weight:500;line-height:20px}._v_wrq_syncHistoryHead>span{min-width:0;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;flex:1;font-size:12px;line-height:18px}._v_wrq_syncHistoryEntry>small{color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncHistoryEntry>._v_wrq_syncHistoryMessage{color:var(--dsw-alias-label-secondary)}._v_wrq_syncCompareList{border:.5px solid var(--dsw-alias-settings-card-stroke);border-radius:var(--dsw-radius-md);margin:0;padding:0;list-style:none;display:grid}._v_wrq_syncCompareList>li{border-bottom:.5px solid var(--dsw-alias-border-l2);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 12px;min-width:0;padding:10px 12px;display:flex}._v_wrq_syncCompareList>li:last-child{border-bottom:0}._v_wrq_syncCompareList>li>span{font-size:13px;line-height:20px}._v_wrq_syncCompareList>li>small{color:var(--dsw-alias-label-tertiary);text-align:right;overflow-wrap:anywhere;font-size:12px;line-height:18px}._v_wrq_syncCompareList>li>small[data-differs]{color:var(--dsw-alias-label-primary)}._v_wrq_syncCompareNote{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_syncCompareNote>._v_wrq_rowActions{justify-content:flex-start;gap:4px}._v_wrq_syncConflictList{gap:6px;margin:0;padding:0;list-style:none;display:grid}._v_wrq_syncConflict{border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-bg-layer-1);grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:8px;min-width:0;padding:8px 10px;display:grid}._v_wrq_syncConflict>span{overflow-wrap:anywhere;gap:2px;min-width:0;font-size:12px;line-height:18px;display:grid}._v_wrq_syncConflict>span>small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}._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_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_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_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}}";
|
|
666
677
|
const tagId$13 = "dsh-mnemon/src/client/MnemonSettingsCard.module.css";
|
|
667
678
|
if (typeof document !== "undefined") {
|
|
668
679
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$13) + "]");
|
|
@@ -787,7 +798,6 @@ window.__ModuleLoader__.load({
|
|
|
787
798
|
"reviewOperations": "_v_wrq_reviewOperations",
|
|
788
799
|
"reviewOpinionForm": "_v_wrq_reviewOpinionForm",
|
|
789
800
|
"reviewOpinions": "_v_wrq_reviewOpinions",
|
|
790
|
-
"reviewRules": "_v_wrq_reviewRules",
|
|
791
801
|
"reviewSelected": "_v_wrq_reviewSelected",
|
|
792
802
|
"reviewSelection": "_v_wrq_reviewSelection",
|
|
793
803
|
"reviewTitle": "_v_wrq_reviewTitle",
|
|
@@ -808,30 +818,37 @@ window.__ModuleLoader__.load({
|
|
|
808
818
|
"surface": "_v_wrq_surface",
|
|
809
819
|
"switch": "_v_wrq_switch",
|
|
810
820
|
"syncAccount": "_v_wrq_syncAccount",
|
|
811
|
-
"
|
|
812
|
-
"
|
|
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",
|
|
821
|
+
"syncAdvanced": "_v_wrq_syncAdvanced",
|
|
822
|
+
"syncChoice": "_v_wrq_syncChoice",
|
|
818
823
|
"syncCode": "_v_wrq_syncCode",
|
|
824
|
+
"syncCompareList": "_v_wrq_syncCompareList",
|
|
825
|
+
"syncCompareNote": "_v_wrq_syncCompareNote",
|
|
819
826
|
"syncConflict": "_v_wrq_syncConflict",
|
|
820
827
|
"syncConflictList": "_v_wrq_syncConflictList",
|
|
821
|
-
"
|
|
828
|
+
"syncConnect": "_v_wrq_syncConnect",
|
|
829
|
+
"syncDevice": "_v_wrq_syncDevice",
|
|
822
830
|
"syncDialogBody": "_v_wrq_syncDialogBody",
|
|
823
831
|
"syncDialogNote": "_v_wrq_syncDialogNote",
|
|
824
|
-
"
|
|
825
|
-
"
|
|
826
|
-
"
|
|
827
|
-
"
|
|
828
|
-
"
|
|
829
|
-
"
|
|
830
|
-
"
|
|
831
|
-
"
|
|
832
|
+
"syncDisclosure": "_v_wrq_syncDisclosure",
|
|
833
|
+
"syncFeedbackLine": "_v_wrq_syncFeedbackLine",
|
|
834
|
+
"syncFieldBox": "_v_wrq_syncFieldBox",
|
|
835
|
+
"syncFieldLabel": "_v_wrq_syncFieldLabel",
|
|
836
|
+
"syncHistoryEntry": "_v_wrq_syncHistoryEntry",
|
|
837
|
+
"syncHistoryHead": "_v_wrq_syncHistoryHead",
|
|
838
|
+
"syncHistoryList": "_v_wrq_syncHistoryList",
|
|
839
|
+
"syncHistoryMessage": "_v_wrq_syncHistoryMessage",
|
|
840
|
+
"syncInlineAction": "_v_wrq_syncInlineAction",
|
|
841
|
+
"syncPanel": "_v_wrq_syncPanel",
|
|
842
|
+
"syncPicker": "_v_wrq_syncPicker",
|
|
843
|
+
"syncRepositoryList": "_v_wrq_syncRepositoryList",
|
|
844
|
+
"syncRepositoryName": "_v_wrq_syncRepositoryName",
|
|
845
|
+
"syncRepositoryOption": "_v_wrq_syncRepositoryOption",
|
|
846
|
+
"syncRepositoryState": "_v_wrq_syncRepositoryState",
|
|
832
847
|
"syncRow": "_v_wrq_syncRow",
|
|
833
848
|
"syncState": "_v_wrq_syncState",
|
|
849
|
+
"syncStateLine": "_v_wrq_syncStateLine",
|
|
834
850
|
"syncSuccess": "_v_wrq_syncSuccess",
|
|
851
|
+
"syncWarning": "_v_wrq_syncWarning",
|
|
835
852
|
"toggleRow": "_v_wrq_toggleRow",
|
|
836
853
|
"visuallyHidden": "_v_wrq_visuallyHidden",
|
|
837
854
|
"warning": "_v_wrq_warning"
|
|
@@ -1418,7 +1435,17 @@ window.__ModuleLoader__.load({
|
|
|
1418
1435
|
"overview.deletingSpace": "删除中…",
|
|
1419
1436
|
"common.score": "相关度 {value}",
|
|
1420
1437
|
"overview.providerEnableHint": "未启用的 Provider 可在“插件 → 可组合记忆”的“记忆空间”页面中启用。",
|
|
1421
|
-
"search.citations": "引用"
|
|
1438
|
+
"search.citations": "引用",
|
|
1439
|
+
"overview.rediscoverAction": "重新发现",
|
|
1440
|
+
"overview.rediscovering": "正在发现…",
|
|
1441
|
+
"overview.rediscoverHint": "再次询问已启用的 Provider;新出现的空间会挂载,但不加入召回",
|
|
1442
|
+
"overview.rediscoveryAdded": "发现 {count} 个新空间,尚未加入召回,打开开关即可启用。",
|
|
1443
|
+
"overview.rediscoveryNone": "没有新的空间。",
|
|
1444
|
+
"overview.rediscoveryDisconnected": "{count} 个断开过的空间保持断开;重新保存对应 Provider 的设置可以恢复。",
|
|
1445
|
+
"overview.rediscoveryFailed": "{provider} 无法完成发现:{error}",
|
|
1446
|
+
"overview.rediscoveryTimedOut": "{provider} 没有按时响应,稍后可以再次发现。",
|
|
1447
|
+
"overview.rediscoveryDismiss": "知道了",
|
|
1448
|
+
"overview.newSpace": "新发现"
|
|
1422
1449
|
};
|
|
1423
1450
|
var en$1 = {
|
|
1424
1451
|
"term.space": "Memory Space",
|
|
@@ -1776,7 +1803,17 @@ window.__ModuleLoader__.load({
|
|
|
1776
1803
|
"overview.deletingSpace": "Deleting…",
|
|
1777
1804
|
"common.score": "Score {value}",
|
|
1778
1805
|
"overview.providerEnableHint": "Turn on more Providers on Memory Spaces’ page under Plugins → dsh-mnemon.",
|
|
1779
|
-
"search.citations": "Cites"
|
|
1806
|
+
"search.citations": "Cites",
|
|
1807
|
+
"overview.rediscoverAction": "Rediscover",
|
|
1808
|
+
"overview.rediscovering": "Rediscovering…",
|
|
1809
|
+
"overview.rediscoverHint": "Ask the enabled Providers again; new spaces are added without joining recall",
|
|
1810
|
+
"overview.rediscoveryAdded": "New spaces found: {count}. They join recall once you switch them on.",
|
|
1811
|
+
"overview.rediscoveryNone": "No new spaces.",
|
|
1812
|
+
"overview.rediscoveryDisconnected": "Spaces you disconnected stay disconnected: {count}. Save the Provider’s settings again to bring them back.",
|
|
1813
|
+
"overview.rediscoveryFailed": "{provider} could not finish discovery: {error}",
|
|
1814
|
+
"overview.rediscoveryTimedOut": "{provider} did not answer in time; try Rediscover later.",
|
|
1815
|
+
"overview.rediscoveryDismiss": "Dismiss",
|
|
1816
|
+
"overview.newSpace": "New"
|
|
1780
1817
|
};
|
|
1781
1818
|
//#endregion
|
|
1782
1819
|
//#region src/client/locales.ts
|
|
@@ -2406,129 +2443,182 @@ window.__ModuleLoader__.load({
|
|
|
2406
2443
|
"config.syncSimpleDescription": "把上述组件的数据同步到 Git 仓库;不含第三方 Provider 与密钥",
|
|
2407
2444
|
"config.syncLoading": "正在读取同步状态…",
|
|
2408
2445
|
"config.syncUnavailable": "当前 DSH 主机不支持 Mnemon 仓库同步通道。",
|
|
2409
|
-
"config.
|
|
2410
|
-
"config.syncGitMissing": "
|
|
2411
|
-
"config.
|
|
2412
|
-
"config.
|
|
2413
|
-
"config.
|
|
2414
|
-
"config.
|
|
2415
|
-
"config.
|
|
2416
|
-
"config.
|
|
2417
|
-
"config.
|
|
2418
|
-
"config.
|
|
2419
|
-
"config.
|
|
2420
|
-
"config.
|
|
2421
|
-
"config.
|
|
2422
|
-
"config.
|
|
2423
|
-
"config.
|
|
2424
|
-
"config.
|
|
2425
|
-
"config.
|
|
2426
|
-
"config.
|
|
2427
|
-
"config.
|
|
2428
|
-
"config.
|
|
2429
|
-
"config.
|
|
2430
|
-
"config.
|
|
2431
|
-
"config.
|
|
2432
|
-
"config.
|
|
2433
|
-
"config.
|
|
2434
|
-
"config.
|
|
2435
|
-
"config.
|
|
2436
|
-
"config.
|
|
2437
|
-
"config.
|
|
2438
|
-
"config.
|
|
2439
|
-
"config.
|
|
2440
|
-
"config.
|
|
2441
|
-
"config.
|
|
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": "到“记忆整理”处理",
|
|
2446
|
+
"config.syncUnavailableReason": "无法读取同步状态:{error}",
|
|
2447
|
+
"config.syncGitMissing": "同步需要 Git {required} 或更高版本",
|
|
2448
|
+
"config.syncRecheck": "重新检查",
|
|
2449
|
+
"config.syncFixCredentials": "设置凭据",
|
|
2450
|
+
"config.syncRepository": "仓库",
|
|
2451
|
+
"config.syncRepositoryHint": "选择保存记忆的 Git 仓库",
|
|
2452
|
+
"config.syncChange": "更改",
|
|
2453
|
+
"config.syncDisconnect": "断开",
|
|
2454
|
+
"config.syncDisconnectTitle": "断开这个仓库?",
|
|
2455
|
+
"config.syncDisconnectBody": "之后不再同步到 {repository},自动同步也会关闭。本机记忆和仓库里的内容都不会删除;保存的访问令牌会一并移除。",
|
|
2456
|
+
"config.syncDisconnected": "已断开仓库。",
|
|
2457
|
+
"config.syncStateChecking": "正在检查仓库…",
|
|
2458
|
+
"config.syncStateConnected": "已连接",
|
|
2459
|
+
"config.syncStateNewBranch": "已连接 · 首次同步会创建 {branch} 分支",
|
|
2460
|
+
"config.syncNoCredential": "推送需要 GitHub 登录或访问令牌",
|
|
2461
|
+
"config.syncNoCredentialToken": "推送需要访问令牌",
|
|
2462
|
+
"config.syncIssueAuthHttps": "需要凭据,请用 GitHub 登录或填写访问令牌",
|
|
2463
|
+
"config.syncIssueAuthToken": "需要凭据,请填写访问令牌",
|
|
2464
|
+
"config.syncIssueAuthSsh": "SSH 认证失败,请检查这台电脑的 SSH 密钥",
|
|
2465
|
+
"config.syncIssueAuth": "没有访问这个仓库的权限",
|
|
2466
|
+
"config.syncIssueNotFound": "找不到这个仓库,请检查地址和访问权限",
|
|
2467
|
+
"config.syncIssueNotFoundGitHub": "找不到这个仓库,请检查地址;私有仓库需要先登录或填写令牌",
|
|
2468
|
+
"config.syncIssueNetwork": "无法连接到仓库,请检查网络或代理",
|
|
2469
|
+
"config.syncIssueTimeout": "仓库没有及时响应",
|
|
2470
|
+
"config.syncIssueUnknown": "无法读取仓库:{error}",
|
|
2471
|
+
"config.syncViaGitHub": "通过 GitHub @{login}",
|
|
2472
|
+
"config.syncViaGitHubAnonymous": "通过 GitHub 登录",
|
|
2473
|
+
"config.syncViaToken": "使用访问令牌",
|
|
2474
|
+
"config.syncViaEnvironment": "使用环境变量 {env}",
|
|
2475
|
+
"config.syncViaSsh": "使用 SSH 密钥",
|
|
2476
|
+
"config.syncConnectWith": "连接方式",
|
|
2477
|
+
"config.syncModeGitHub": "GitHub 账号",
|
|
2478
|
+
"config.syncModeAddress": "仓库地址",
|
|
2467
2479
|
"config.syncRepoUrl": "仓库地址",
|
|
2468
|
-
"config.
|
|
2469
|
-
"config.
|
|
2470
|
-
"config.
|
|
2471
|
-
"config.syncSubdir": "远端目录",
|
|
2472
|
-
"config.syncSubdirHint": "仓库内存放 payload 的目录,默认 {subdir}",
|
|
2480
|
+
"config.syncRepoUrlPlaceholder": "https://…、git@主机:路径 或本机绝对路径",
|
|
2481
|
+
"config.syncRepoUrlInvalid": "地址需要是 https://、ssh://、git@主机:路径 或本机绝对路径",
|
|
2482
|
+
"config.syncRepoUrlCredentials": "不要把令牌写进地址,请填在“访问令牌”里",
|
|
2473
2483
|
"config.syncToken": "访问令牌",
|
|
2474
|
-
"config.
|
|
2475
|
-
"config.
|
|
2476
|
-
"config.
|
|
2477
|
-
"config.
|
|
2478
|
-
"config.
|
|
2479
|
-
"config.
|
|
2480
|
-
"config.
|
|
2481
|
-
"config.
|
|
2482
|
-
"config.
|
|
2483
|
-
"config.
|
|
2484
|
-
"config.
|
|
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 主机没有可用的凭据存储,请改用访问令牌",
|
|
2484
|
+
"config.syncTokenOptional": "可选",
|
|
2485
|
+
"config.syncTokenSaved": "已保存;输入新令牌可替换",
|
|
2486
|
+
"config.syncTokenEnvironment": "正在使用环境变量 {env}",
|
|
2487
|
+
"config.syncTokenHint": "只有 HTTPS 地址需要令牌,令牌只保存在这台电脑",
|
|
2488
|
+
"config.syncTokenRemove": "移除",
|
|
2489
|
+
"config.syncTokenRemoved": "已移除访问令牌。",
|
|
2490
|
+
"config.syncConnect": "连接",
|
|
2491
|
+
"config.syncConnecting": "连接中…",
|
|
2492
|
+
"config.syncSave": "保存",
|
|
2493
|
+
"config.syncSaving": "保存中…",
|
|
2494
|
+
"config.syncGitHubHint": "登录后可直接选择或新建仓库;授权只保存在这台电脑",
|
|
2496
2495
|
"config.syncGitHubReadOnly": "当前凭据存储只读,登录无法保存",
|
|
2497
2496
|
"config.syncGitHubSignIn": "使用 GitHub 登录",
|
|
2498
2497
|
"config.syncGitHubStarting": "获取设备码…",
|
|
2499
|
-
"config.syncGitHubCode": "在 GitHub
|
|
2500
|
-
"config.
|
|
2501
|
-
"config.syncGitHubCopied": "
|
|
2502
|
-
"config.
|
|
2498
|
+
"config.syncGitHubCode": "在 GitHub 页面输入这个设备码:",
|
|
2499
|
+
"config.syncGitHubCopyOpen": "复制并打开 GitHub",
|
|
2500
|
+
"config.syncGitHubCopied": "已复制,在打开的页面中粘贴即可;完成后会自动继续",
|
|
2501
|
+
"config.syncGitHubOpenBlocked": "浏览器没有打开新页面,请手动访问 {url}",
|
|
2503
2502
|
"config.syncGitHubWaiting": "等待授权…完成后会自动继续",
|
|
2504
2503
|
"config.syncGitHubSignedIn": "已登录 @{login}",
|
|
2505
2504
|
"config.syncGitHubSignOut": "退出登录",
|
|
2506
2505
|
"config.syncGitHubFailed": "GitHub 登录失败:{error}",
|
|
2507
2506
|
"config.syncGitHubExpired": "设备码已过期,请重新登录",
|
|
2508
2507
|
"config.syncGitHubDenied": "授权已被拒绝",
|
|
2509
|
-
"config.
|
|
2510
|
-
"config.
|
|
2511
|
-
"config.
|
|
2512
|
-
"config.
|
|
2513
|
-
"config.
|
|
2514
|
-
"config.
|
|
2515
|
-
"config.
|
|
2516
|
-
"config.
|
|
2517
|
-
"config.syncRepositoriesEmpty": "
|
|
2518
|
-
"config.
|
|
2519
|
-
"config.
|
|
2520
|
-
"config.
|
|
2521
|
-
"config.
|
|
2522
|
-
"config.
|
|
2523
|
-
"config.syncRepositoryCreate": "
|
|
2508
|
+
"config.syncGitHubExpiredGrant": "GitHub 授权已失效,请重新登录",
|
|
2509
|
+
"config.syncGitHubSignInAgain": "重新登录",
|
|
2510
|
+
"config.syncRepositoryLabel": "仓库",
|
|
2511
|
+
"config.syncRepositorySearch": "搜索仓库,或输入新仓库名",
|
|
2512
|
+
"config.syncRepositoriesLoading": "正在读取仓库…",
|
|
2513
|
+
"config.syncRepositoriesFailed": "读取仓库失败:{error}",
|
|
2514
|
+
"config.syncRepositoriesRetry": "重试",
|
|
2515
|
+
"config.syncRepositoriesNone": "账号下还没有仓库,输入名称即可新建",
|
|
2516
|
+
"config.syncRepositoriesEmpty": "没有匹配的仓库",
|
|
2517
|
+
"config.syncRepositoriesMore": "还有 {count} 个仓库,输入名称缩小范围",
|
|
2518
|
+
"config.syncRepositoryPrivate": "私有",
|
|
2519
|
+
"config.syncRepositoryPublic": "公开",
|
|
2520
|
+
"config.syncRepositoryNoPush": "无推送权限",
|
|
2521
|
+
"config.syncRepositoryCurrent": "当前",
|
|
2522
|
+
"config.syncRepositoryCreate": "新建私有仓库 {name}",
|
|
2524
2523
|
"config.syncRepositoryCreating": "创建中…",
|
|
2525
|
-
"config.
|
|
2524
|
+
"config.syncRepositoryNameInvalid": "仓库名只能包含字母、数字、点、短横线和下划线",
|
|
2525
|
+
"config.syncPublicTitle": "使用公开仓库?",
|
|
2526
|
+
"config.syncPublicBody": "{name} 是公开仓库:同步后任何人都能看到这些记忆。",
|
|
2527
|
+
"config.syncPublicConfirm": "仍然使用",
|
|
2528
|
+
"config.syncRowTitle": "同步",
|
|
2529
|
+
"config.syncNever": "同步时先合并仓库里的记忆,再推送本机的",
|
|
2530
|
+
"config.syncLast": "上次同步:{time}",
|
|
2531
|
+
"config.syncLastMerge": "上次合并:{time}",
|
|
2532
|
+
"config.syncCheck": "检查远端",
|
|
2533
|
+
"config.syncNow": "立即同步",
|
|
2534
|
+
"config.syncNowRunning": "同步中…",
|
|
2535
|
+
"config.syncDone": "已同步,推送了 {commit}。",
|
|
2536
|
+
"config.syncDoneMerged": "已同步:合并了 {count} 条远端记忆,推送了 {commit}。",
|
|
2537
|
+
"config.syncUpToDate": "已是最新,仓库与本机一致。",
|
|
2538
|
+
"config.syncUpToDateMerged": "合并了 {count} 条远端记忆,仓库已是最新。",
|
|
2539
|
+
"config.syncPushFailed": "已在本机提交,但推送没有完成:{reason}",
|
|
2540
|
+
"config.syncFailed": "同步失败:{error}",
|
|
2541
|
+
"config.syncReasonBusy": "另一个同步操作还在进行,请稍后再试",
|
|
2542
|
+
"config.syncReasonNoRepository": "还没有连接仓库",
|
|
2543
|
+
"config.syncReasonGitMissing": "这台电脑的 Git 不可用",
|
|
2544
|
+
"config.syncReasonRemoteEmpty": "仓库里还没有备份,先同步一次",
|
|
2545
|
+
"config.syncReasonRejected": "同步时仓库又被其他设备更新了,请再同步一次",
|
|
2546
|
+
"config.syncAuto": "自动同步",
|
|
2547
|
+
"config.syncAutoOff": "关闭",
|
|
2548
|
+
"config.syncAutoHour": "每小时",
|
|
2549
|
+
"config.syncAutoHours": "每 {hours} 小时",
|
|
2550
|
+
"config.syncAutoDay": "每天",
|
|
2551
|
+
"config.syncAutoDays": "每 {days} 天",
|
|
2552
|
+
"config.syncAutoHintOff": "只在你点“立即同步”时同步",
|
|
2553
|
+
"config.syncAutoHintOn": "按间隔在后台同步,和“立即同步”做的事一样",
|
|
2554
|
+
"config.syncAutoNext": "下次 {time}",
|
|
2555
|
+
"config.syncAutoLast": "上次 {time}",
|
|
2556
|
+
"config.syncAutoFailed": "上次自动同步失败:{error}",
|
|
2557
|
+
"config.syncHistory": "备份历史",
|
|
2558
|
+
"config.syncHistoryHint": "每次同步都在仓库里留下一个版本",
|
|
2559
|
+
"config.syncHistoryView": "查看",
|
|
2560
|
+
"config.syncHistoryLoading": "正在读取…",
|
|
2561
|
+
"config.syncHistoryEmpty": "仓库里还没有备份。",
|
|
2562
|
+
"config.syncHistoryMore": "读取更早的版本",
|
|
2563
|
+
"config.syncHistoryCapped": "这里只列出最近的 {count} 个版本",
|
|
2564
|
+
"config.syncHistoryFrom": "来自 {machine}",
|
|
2565
|
+
"config.syncHistoryUnknownMachine": "未标注设备",
|
|
2566
|
+
"config.syncComponentRuntime": "运行时记忆",
|
|
2567
|
+
"config.syncComponentDocuments": "项目档案",
|
|
2568
|
+
"config.syncComponentSpaces": "记忆空间",
|
|
2569
|
+
"config.syncCountRuntime": "运行时记忆 {count} 条",
|
|
2570
|
+
"config.syncCountDocuments": "项目档案 {count} 份",
|
|
2571
|
+
"config.syncCountSpaces": "记忆空间 {count} 个",
|
|
2572
|
+
"config.syncCompareTitle": "与远端比较",
|
|
2573
|
+
"config.syncCompareLoading": "正在读取远端…",
|
|
2574
|
+
"config.syncCompareRemote": "远端版本来自 {machine} · {time}",
|
|
2575
|
+
"config.syncCompareSame": "一致",
|
|
2576
|
+
"config.syncCompareDiffers": "有差异",
|
|
2577
|
+
"config.syncCompareRuntime": "远端独有 {remote} 条 · 本机独有 {local} 条",
|
|
2578
|
+
"config.syncCompareConflicts": "{count} 处写法不同",
|
|
2579
|
+
"config.syncCompareAllSame": "本机与远端一致,不需要同步。",
|
|
2580
|
+
"config.syncCompareTruncated": "差异较多,只统计了一部分。",
|
|
2581
|
+
"config.syncCompareRemovals": "远端记录了 {count} 条删除,同步时会在本机应用。",
|
|
2582
|
+
"config.syncCompareConflictNote": "{count} 个主题两边写法不同:同步会保留两种写法,之后可以用“记忆整理”合并。",
|
|
2583
|
+
"config.syncCompareShowConflicts": "查看",
|
|
2584
|
+
"config.syncCompareGoReview": "去记忆整理",
|
|
2585
|
+
"config.syncCompareHeldBack": "远端有 {count} 条记忆是本机以前删掉的,同步不会把它们加回。",
|
|
2586
|
+
"config.syncCompareRevive": "恢复这些记忆",
|
|
2587
|
+
"config.syncCompareReviving": "恢复中…",
|
|
2588
|
+
"config.syncCompareRevived": "已恢复 {count} 条记忆。",
|
|
2589
|
+
"config.syncDiffHere": "本机",
|
|
2590
|
+
"config.syncDiffThere": "远端",
|
|
2591
|
+
"config.syncMergeOnly": "只合并到本机",
|
|
2592
|
+
"config.syncMerging": "合并中…",
|
|
2593
|
+
"config.syncMerged": "已合并远端 {commit}。",
|
|
2594
|
+
"config.syncMergedCount": "已合并 {count} 条远端记忆。",
|
|
2595
|
+
"config.syncAdvanced": "高级设置",
|
|
2596
|
+
"config.syncBranch": "分支",
|
|
2597
|
+
"config.syncSubdir": "仓库内目录",
|
|
2598
|
+
"config.syncDefaultValue": "默认 {value}",
|
|
2599
|
+
"config.syncBranchInvalid": "分支名无效",
|
|
2600
|
+
"config.syncSubdirInvalid": "需要是仓库内的相对目录",
|
|
2601
|
+
"config.syncAuthor": "提交者",
|
|
2602
|
+
"config.syncAuthorDefault": "默认",
|
|
2603
|
+
"config.syncAuthorMachine": "本机 Git",
|
|
2604
|
+
"config.syncAuthorCustom": "自定义",
|
|
2605
|
+
"config.syncAuthorDefaultNote": "以 {identity} 提交",
|
|
2606
|
+
"config.syncAuthorMachineNote": "使用这台电脑的 Git 身份;没有配置时用默认身份",
|
|
2607
|
+
"config.syncAuthorName": "姓名",
|
|
2608
|
+
"config.syncAuthorEmail": "邮箱",
|
|
2609
|
+
"config.syncAuthorEmailInvalid": "邮箱格式不正确",
|
|
2610
|
+
"config.syncAdvancedNote": "保存后,下次同步写到新的分支或目录",
|
|
2611
|
+
"config.syncMachineName": "这台电脑的名称",
|
|
2612
|
+
"config.syncMachineHostname": "主机名",
|
|
2613
|
+
"config.syncMachineCustom": "自定义",
|
|
2614
|
+
"config.syncMachineNameLabel": "名称",
|
|
2615
|
+
"config.syncMachineHostnameNote": "使用主机名,备份历史里显示为“来自 {name}”",
|
|
2616
|
+
"config.syncMachineCustomNote": "备份历史里显示为“来自 {name}”",
|
|
2617
|
+
"config.syncMachineNameInvalid": "名称最多 120 个字符,且只能占一行",
|
|
2618
|
+
"config.syncMachineRenameNote": "保存后,之后的同步使用新名称;已有的版本保留原来的名称",
|
|
2619
|
+
"config.syncAdvancedSaved": "已保存高级设置。",
|
|
2526
2620
|
"config.reconcileTitle": "记忆整理",
|
|
2527
2621
|
"config.reconcileDescription": "模型读合并后的记忆,只提出建议,等你审查后才写入",
|
|
2528
|
-
"review.rulesTitle": "运行规则",
|
|
2529
|
-
"review.rulesPull": "后台拉取:后台只按「Git 同步」里「自动备份」的间隔推送一次,推送前先读取远端分支并与本机合并;这一步不产生任何建议。自动备份关闭时,只有你点「推送」才会读取远端。",
|
|
2530
|
-
"review.rulesDiff": "差异:只有点「检查远端」或推送前的合并才会读出远端与本机的差别;差别只显示出来,不会自动写入。",
|
|
2531
|
-
"review.rulesPlan": "方案:只有点「整理记忆」才会生成待办方案,每条方案都要你接受并应用之后才会真正写入记忆。",
|
|
2532
2622
|
"review.reconcile": "整理记忆",
|
|
2533
2623
|
"review.reconciling": "整理中…",
|
|
2534
2624
|
"review.refresh": "刷新",
|
|
@@ -3208,129 +3298,182 @@ window.__ModuleLoader__.load({
|
|
|
3208
3298
|
"config.syncSimpleDescription": "Syncs the components above to a Git repository, without third-party providers or credentials",
|
|
3209
3299
|
"config.syncLoading": "Reading the sync status…",
|
|
3210
3300
|
"config.syncUnavailable": "This DSH host does not provide the Mnemon repository sync channel.",
|
|
3211
|
-
"config.
|
|
3212
|
-
"config.syncGitMissing": "Git {required} or newer
|
|
3213
|
-
"config.
|
|
3214
|
-
"config.
|
|
3215
|
-
"config.
|
|
3216
|
-
"config.
|
|
3217
|
-
"config.
|
|
3218
|
-
"config.
|
|
3219
|
-
"config.
|
|
3220
|
-
"config.
|
|
3221
|
-
"config.
|
|
3222
|
-
"config.
|
|
3223
|
-
"config.
|
|
3224
|
-
"config.
|
|
3225
|
-
"config.
|
|
3226
|
-
"config.
|
|
3227
|
-
"config.
|
|
3228
|
-
"config.
|
|
3229
|
-
"config.
|
|
3230
|
-
"config.
|
|
3231
|
-
"config.
|
|
3232
|
-
"config.
|
|
3233
|
-
"config.
|
|
3234
|
-
"config.
|
|
3235
|
-
"config.
|
|
3236
|
-
"config.
|
|
3237
|
-
"config.
|
|
3238
|
-
"config.
|
|
3239
|
-
"config.
|
|
3240
|
-
"config.
|
|
3241
|
-
"config.
|
|
3242
|
-
"config.
|
|
3243
|
-
"config.
|
|
3244
|
-
"config.
|
|
3245
|
-
"config.
|
|
3246
|
-
"config.
|
|
3247
|
-
"config.
|
|
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}",
|
|
3301
|
+
"config.syncUnavailableReason": "Could not read the sync status: {error}",
|
|
3302
|
+
"config.syncGitMissing": "Syncing needs Git {required} or newer",
|
|
3303
|
+
"config.syncRecheck": "Check again",
|
|
3304
|
+
"config.syncFixCredentials": "Set credentials",
|
|
3305
|
+
"config.syncRepository": "Repository",
|
|
3306
|
+
"config.syncRepositoryHint": "Choose the Git repository that keeps your memory",
|
|
3307
|
+
"config.syncChange": "Change",
|
|
3308
|
+
"config.syncDisconnect": "Disconnect",
|
|
3309
|
+
"config.syncDisconnectTitle": "Disconnect this repository?",
|
|
3310
|
+
"config.syncDisconnectBody": "Memory stops syncing to {repository}, and automatic sync turns off. Nothing is deleted here or in the repository; a saved access token is removed.",
|
|
3311
|
+
"config.syncDisconnected": "Disconnected the repository.",
|
|
3312
|
+
"config.syncStateChecking": "Checking the repository…",
|
|
3313
|
+
"config.syncStateConnected": "Connected",
|
|
3314
|
+
"config.syncStateNewBranch": "Connected · the first sync creates the {branch} branch",
|
|
3315
|
+
"config.syncNoCredential": "pushing needs a GitHub sign-in or an access token",
|
|
3316
|
+
"config.syncNoCredentialToken": "pushing needs an access token",
|
|
3317
|
+
"config.syncIssueAuthHttps": "Needs credentials; sign in with GitHub or add an access token",
|
|
3318
|
+
"config.syncIssueAuthToken": "Needs credentials; add an access token",
|
|
3319
|
+
"config.syncIssueAuthSsh": "SSH authentication failed; check this computer's SSH key",
|
|
3320
|
+
"config.syncIssueAuth": "Access to this repository was refused",
|
|
3321
|
+
"config.syncIssueNotFound": "Repository not found; check the address and your access",
|
|
3322
|
+
"config.syncIssueNotFoundGitHub": "Repository not found; check the address, as a private repository needs a sign-in or a token",
|
|
3323
|
+
"config.syncIssueNetwork": "Cannot reach the repository; check the network or proxy",
|
|
3324
|
+
"config.syncIssueTimeout": "The repository did not answer in time",
|
|
3325
|
+
"config.syncIssueUnknown": "Cannot read the repository: {error}",
|
|
3326
|
+
"config.syncViaGitHub": "via GitHub @{login}",
|
|
3327
|
+
"config.syncViaGitHubAnonymous": "via a GitHub sign-in",
|
|
3328
|
+
"config.syncViaToken": "with an access token",
|
|
3329
|
+
"config.syncViaEnvironment": "with the {env} environment variable",
|
|
3330
|
+
"config.syncViaSsh": "with an SSH key",
|
|
3331
|
+
"config.syncConnectWith": "Connect with",
|
|
3332
|
+
"config.syncModeGitHub": "GitHub account",
|
|
3333
|
+
"config.syncModeAddress": "Repository address",
|
|
3334
|
+
"config.syncRepoUrl": "Repository address",
|
|
3335
|
+
"config.syncRepoUrlPlaceholder": "https://…, git@host:path, or an absolute local path",
|
|
3336
|
+
"config.syncRepoUrlInvalid": "Use an https:// or ssh:// URL, git@host:path, or an absolute local path",
|
|
3337
|
+
"config.syncRepoUrlCredentials": "Keep the token out of the address; enter it under Access token",
|
|
3275
3338
|
"config.syncToken": "Access token",
|
|
3276
|
-
"config.
|
|
3277
|
-
"config.
|
|
3278
|
-
"config.
|
|
3279
|
-
"config.
|
|
3280
|
-
"config.
|
|
3281
|
-
"config.
|
|
3282
|
-
"config.
|
|
3283
|
-
"config.
|
|
3284
|
-
"config.
|
|
3285
|
-
"config.
|
|
3286
|
-
"config.
|
|
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",
|
|
3339
|
+
"config.syncTokenOptional": "Optional",
|
|
3340
|
+
"config.syncTokenSaved": "Saved; type a new one to replace it",
|
|
3341
|
+
"config.syncTokenEnvironment": "Using the {env} environment variable",
|
|
3342
|
+
"config.syncTokenHint": "Only an HTTPS address needs a token; it stays on this computer",
|
|
3343
|
+
"config.syncTokenRemove": "Remove",
|
|
3344
|
+
"config.syncTokenRemoved": "Removed the access token.",
|
|
3345
|
+
"config.syncConnect": "Connect",
|
|
3346
|
+
"config.syncConnecting": "Connecting…",
|
|
3347
|
+
"config.syncSave": "Save",
|
|
3348
|
+
"config.syncSaving": "Saving…",
|
|
3349
|
+
"config.syncGitHubHint": "Sign in to pick or create a repository; the grant stays on this computer",
|
|
3298
3350
|
"config.syncGitHubReadOnly": "The credentials store is read-only, so a sign-in cannot be saved",
|
|
3299
3351
|
"config.syncGitHubSignIn": "Sign in with GitHub",
|
|
3300
3352
|
"config.syncGitHubStarting": "Requesting a device code…",
|
|
3301
3353
|
"config.syncGitHubCode": "Enter this device code on GitHub:",
|
|
3302
|
-
"config.
|
|
3303
|
-
"config.syncGitHubCopied": "Copied",
|
|
3304
|
-
"config.
|
|
3354
|
+
"config.syncGitHubCopyOpen": "Copy and open GitHub",
|
|
3355
|
+
"config.syncGitHubCopied": "Copied; paste it on the page that opened, and this continues on its own",
|
|
3356
|
+
"config.syncGitHubOpenBlocked": "The browser did not open a new page; visit {url} yourself",
|
|
3305
3357
|
"config.syncGitHubWaiting": "Waiting for authorization… this continues on its own",
|
|
3306
3358
|
"config.syncGitHubSignedIn": "Signed in as @{login}",
|
|
3307
3359
|
"config.syncGitHubSignOut": "Sign out",
|
|
3308
3360
|
"config.syncGitHubFailed": "GitHub sign-in failed: {error}",
|
|
3309
3361
|
"config.syncGitHubExpired": "The device code expired; start the sign-in again",
|
|
3310
3362
|
"config.syncGitHubDenied": "The authorization was denied",
|
|
3311
|
-
"config.
|
|
3312
|
-
"config.
|
|
3313
|
-
"config.
|
|
3314
|
-
"config.
|
|
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",
|
|
3363
|
+
"config.syncGitHubExpiredGrant": "The GitHub grant is no longer valid; sign in again",
|
|
3364
|
+
"config.syncGitHubSignInAgain": "Sign in again",
|
|
3365
|
+
"config.syncRepositoryLabel": "Repository",
|
|
3366
|
+
"config.syncRepositorySearch": "Search repositories, or type a new name",
|
|
3317
3367
|
"config.syncRepositoriesLoading": "Reading repositories…",
|
|
3318
|
-
"config.
|
|
3319
|
-
"config.
|
|
3320
|
-
"config.
|
|
3321
|
-
"config.
|
|
3322
|
-
"config.
|
|
3323
|
-
"config.
|
|
3324
|
-
"config.
|
|
3325
|
-
"config.
|
|
3368
|
+
"config.syncRepositoriesFailed": "Could not read repositories: {error}",
|
|
3369
|
+
"config.syncRepositoriesRetry": "Retry",
|
|
3370
|
+
"config.syncRepositoriesNone": "This account has no repository yet; type a name to create one",
|
|
3371
|
+
"config.syncRepositoriesEmpty": "No matching repository",
|
|
3372
|
+
"config.syncRepositoriesMore": "{count} more repositories; type to narrow the list",
|
|
3373
|
+
"config.syncRepositoryPrivate": "Private",
|
|
3374
|
+
"config.syncRepositoryPublic": "Public",
|
|
3375
|
+
"config.syncRepositoryNoPush": "No push access",
|
|
3376
|
+
"config.syncRepositoryCurrent": "Current",
|
|
3377
|
+
"config.syncRepositoryCreate": "Create the private repository {name}",
|
|
3326
3378
|
"config.syncRepositoryCreating": "Creating…",
|
|
3327
|
-
"config.
|
|
3379
|
+
"config.syncRepositoryNameInvalid": "A repository name holds letters, digits, dots, dashes and underscores",
|
|
3380
|
+
"config.syncPublicTitle": "Use a public repository?",
|
|
3381
|
+
"config.syncPublicBody": "{name} is public: anyone can read the memory synced to it.",
|
|
3382
|
+
"config.syncPublicConfirm": "Use it anyway",
|
|
3383
|
+
"config.syncRowTitle": "Sync",
|
|
3384
|
+
"config.syncNever": "A sync merges the repository's memory here, then pushes this computer's",
|
|
3385
|
+
"config.syncLast": "Last synced {time}",
|
|
3386
|
+
"config.syncLastMerge": "Last merged {time}",
|
|
3387
|
+
"config.syncCheck": "Check remote",
|
|
3388
|
+
"config.syncNow": "Sync now",
|
|
3389
|
+
"config.syncNowRunning": "Syncing…",
|
|
3390
|
+
"config.syncDone": "Synced; pushed {commit}.",
|
|
3391
|
+
"config.syncDoneMerged": "Synced: merged {count} remote memories and pushed {commit}.",
|
|
3392
|
+
"config.syncUpToDate": "Up to date; the repository matches this computer.",
|
|
3393
|
+
"config.syncUpToDateMerged": "Merged {count} remote memories; the repository is up to date.",
|
|
3394
|
+
"config.syncPushFailed": "Committed here, but the push did not finish: {reason}",
|
|
3395
|
+
"config.syncFailed": "Sync failed: {error}",
|
|
3396
|
+
"config.syncReasonBusy": "Another sync is still running; try again shortly",
|
|
3397
|
+
"config.syncReasonNoRepository": "No repository is connected",
|
|
3398
|
+
"config.syncReasonGitMissing": "This computer's Git is unavailable",
|
|
3399
|
+
"config.syncReasonRemoteEmpty": "The repository holds no backup yet; sync once first",
|
|
3400
|
+
"config.syncReasonRejected": "Another device updated the repository during the sync; sync again",
|
|
3401
|
+
"config.syncAuto": "Automatic sync",
|
|
3402
|
+
"config.syncAutoOff": "Off",
|
|
3403
|
+
"config.syncAutoHour": "Every hour",
|
|
3404
|
+
"config.syncAutoHours": "Every {hours} hours",
|
|
3405
|
+
"config.syncAutoDay": "Every day",
|
|
3406
|
+
"config.syncAutoDays": "Every {days} days",
|
|
3407
|
+
"config.syncAutoHintOff": "Syncs only when you press Sync now",
|
|
3408
|
+
"config.syncAutoHintOn": "Syncs in the background at this interval, exactly as Sync now does",
|
|
3409
|
+
"config.syncAutoNext": "Next at {time}",
|
|
3410
|
+
"config.syncAutoLast": "Last at {time}",
|
|
3411
|
+
"config.syncAutoFailed": "The last automatic sync failed: {error}",
|
|
3412
|
+
"config.syncHistory": "Backup history",
|
|
3413
|
+
"config.syncHistoryHint": "Every sync leaves a version in the repository",
|
|
3414
|
+
"config.syncHistoryView": "View",
|
|
3415
|
+
"config.syncHistoryLoading": "Reading…",
|
|
3416
|
+
"config.syncHistoryEmpty": "The repository holds no backup yet.",
|
|
3417
|
+
"config.syncHistoryMore": "Load earlier versions",
|
|
3418
|
+
"config.syncHistoryCapped": "Only the latest {count} versions are listed here",
|
|
3419
|
+
"config.syncHistoryFrom": "from {machine}",
|
|
3420
|
+
"config.syncHistoryUnknownMachine": "an unnamed computer",
|
|
3421
|
+
"config.syncComponentRuntime": "Runtime Memory",
|
|
3422
|
+
"config.syncComponentDocuments": "Project Documents",
|
|
3423
|
+
"config.syncComponentSpaces": "Memory Spaces",
|
|
3424
|
+
"config.syncCountRuntime": "{count} runtime memories",
|
|
3425
|
+
"config.syncCountDocuments": "{count} documents",
|
|
3426
|
+
"config.syncCountSpaces": "{count} memory spaces",
|
|
3427
|
+
"config.syncCompareTitle": "Compare with the remote",
|
|
3428
|
+
"config.syncCompareLoading": "Reading the remote…",
|
|
3429
|
+
"config.syncCompareRemote": "The remote version is from {machine} · {time}",
|
|
3430
|
+
"config.syncCompareSame": "Same",
|
|
3431
|
+
"config.syncCompareDiffers": "Differs",
|
|
3432
|
+
"config.syncCompareRuntime": "{remote} only on the remote · {local} only here",
|
|
3433
|
+
"config.syncCompareConflicts": "{count} written differently",
|
|
3434
|
+
"config.syncCompareAllSame": "This computer and the remote match; there is nothing to sync.",
|
|
3435
|
+
"config.syncCompareTruncated": "More differences exist than these counts show.",
|
|
3436
|
+
"config.syncCompareRemovals": "The remote recorded {count} deletions; a sync applies them here.",
|
|
3437
|
+
"config.syncCompareConflictNote": "{count} subjects are written differently: a sync keeps both, and Memory reconciliation can merge them later.",
|
|
3438
|
+
"config.syncCompareShowConflicts": "Show",
|
|
3439
|
+
"config.syncCompareGoReview": "Go to Memory reconciliation",
|
|
3440
|
+
"config.syncCompareHeldBack": "{count} remote memories were deleted here earlier; a sync keeps them out.",
|
|
3441
|
+
"config.syncCompareRevive": "Bring them back",
|
|
3442
|
+
"config.syncCompareReviving": "Bringing back…",
|
|
3443
|
+
"config.syncCompareRevived": "Brought back {count} memories.",
|
|
3444
|
+
"config.syncDiffHere": "Here",
|
|
3445
|
+
"config.syncDiffThere": "Remote",
|
|
3446
|
+
"config.syncMergeOnly": "Merge here only",
|
|
3447
|
+
"config.syncMerging": "Merging…",
|
|
3448
|
+
"config.syncMerged": "Merged remote {commit}.",
|
|
3449
|
+
"config.syncMergedCount": "Merged {count} remote memories.",
|
|
3450
|
+
"config.syncAdvanced": "Advanced",
|
|
3451
|
+
"config.syncBranch": "Branch",
|
|
3452
|
+
"config.syncSubdir": "Directory in the repository",
|
|
3453
|
+
"config.syncDefaultValue": "Default {value}",
|
|
3454
|
+
"config.syncBranchInvalid": "Not a valid branch name",
|
|
3455
|
+
"config.syncSubdirInvalid": "Use a relative directory inside the repository",
|
|
3456
|
+
"config.syncAuthor": "Commit author",
|
|
3457
|
+
"config.syncAuthorDefault": "Default",
|
|
3458
|
+
"config.syncAuthorMachine": "This computer's Git",
|
|
3459
|
+
"config.syncAuthorCustom": "Custom",
|
|
3460
|
+
"config.syncAuthorDefaultNote": "Commits as {identity}",
|
|
3461
|
+
"config.syncAuthorMachineNote": "Uses this computer's Git identity, else the default one",
|
|
3462
|
+
"config.syncAuthorName": "Name",
|
|
3463
|
+
"config.syncAuthorEmail": "Email",
|
|
3464
|
+
"config.syncAuthorEmailInvalid": "Not an email address",
|
|
3465
|
+
"config.syncAdvancedNote": "After saving, the next sync writes to the new branch or directory",
|
|
3466
|
+
"config.syncMachineName": "This computer's name",
|
|
3467
|
+
"config.syncMachineHostname": "Host name",
|
|
3468
|
+
"config.syncMachineCustom": "Custom",
|
|
3469
|
+
"config.syncMachineNameLabel": "Name",
|
|
3470
|
+
"config.syncMachineHostnameNote": "Uses the host name; backup history shows “from {name}”",
|
|
3471
|
+
"config.syncMachineCustomNote": "Backup history shows “from {name}”",
|
|
3472
|
+
"config.syncMachineNameInvalid": "Up to 120 characters on one line",
|
|
3473
|
+
"config.syncMachineRenameNote": "After saving, later syncs use the new name; earlier versions keep theirs",
|
|
3474
|
+
"config.syncAdvancedSaved": "Saved the advanced settings.",
|
|
3328
3475
|
"config.reconcileTitle": "Memory reconciliation",
|
|
3329
3476
|
"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
3477
|
"review.reconcile": "Reconcile",
|
|
3335
3478
|
"review.reconciling": "Reconciling…",
|
|
3336
3479
|
"review.refresh": "Refresh",
|
|
@@ -4017,7 +4160,7 @@ window.__ModuleLoader__.load({
|
|
|
4017
4160
|
};
|
|
4018
4161
|
//#endregion
|
|
4019
4162
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/plugins/dsh-mnemon-source-memory-spaces/presentation/page.module.css.mjs
|
|
4020
|
-
const css$6 = ".IIa07q_entityHeading>span,.IIa07q_inspectorHeading>span{color:var(--mn-faint);font-size:12px;font-weight:500;line-height:18px}.IIa07q_memoryHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_memoryHeaderActions>button{white-space:nowrap}.IIa07q_asyncRegion{min-width:0;position:relative}.IIa07q_asyncResults{min-width:0;min-height:120px;position:relative}.IIa07q_asyncPlaceholder{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-height:220px;color:var(--mn-faint);place-items:center;display:grid;position:relative}.IIa07q_muted{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_readSources{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);gap:8px;margin:0 0 16px;padding:12px 14px;display:grid}.IIa07q_readSources>header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_readSources>header>div{gap:2px;display:grid}.IIa07q_readSources>header strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_readSources>header p{max-width:92ch;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_readSources>header>button{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--mn-text);cursor:pointer;background:0 0;flex:none;padding:0 10px;font-size:12px;line-height:18px}.IIa07q_readSources>header>button:hover{background:var(--mn-hover)}.IIa07q_readSources>header>button[data-selected]{background:var(--mn-fill);border-color:#0000}.IIa07q_readSources>div{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:8px;display:grid}.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);color:var(--mn-text);background:0 0}.IIa07q_readSourceCard{text-align:left;grid-template-columns:6px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;min-height:56px;padding:8px 10px 8px 12px;display:grid}button.IIa07q_readSourceCard{cursor:pointer}button.IIa07q_readSourceCard:hover{background:var(--mn-hover)}.IIa07q_readSourceCard[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_readSourceSignal{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_readSourceCard[data-mode=projection] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-mode=enumerable] .IIa07q_readSourceSignal{background:var(--mn-success)}.IIa07q_readSourceCard[data-mode=query-only] .IIa07q_readSourceSignal{background:var(--mn-warn)}.IIa07q_readSourceCard[data-status=unavailable] .IIa07q_readSourceSignal{background:var(--mn-danger)}.IIa07q_readSourceCard[data-status=unsupported] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-status=empty] .IIa07q_readSourceSignal{background:var(--mn-idle)}.IIa07q_readSourceCard[data-status=unsupported]{color:var(--mn-faint)}.IIa07q_readSourceIdentity,.IIa07q_readSourceState{gap:2px;min-width:0;display:grid}.IIa07q_readSourceIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_readSourceMeta{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_readSourceMeta>small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_readSourceState{text-align:right;justify-items:end}.IIa07q_readSourceState em{width:fit-content;color:var(--mn-muted);background:var(--mn-fill);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_readSourceCard[data-status=unsupported] .IIa07q_readSourceState em{border:.5px solid var(--mn-field-line);color:var(--mn-faint);background:0 0}.IIa07q_readSourceState small{color:var(--mn-faint);white-space:nowrap;font-size:11px;line-height:14px}.IIa07q_bodyDirectory{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:12px;padding:16px;position:relative}.IIa07q_bodyDirectoryHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.IIa07q_bodyDirectoryHeader>div:first-child{flex:260px;min-width:0}.IIa07q_bodyDirectoryHeader h3{margin:0;font-size:13px;font-weight:500;line-height:20px}.IIa07q_bodyDirectoryHeader p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_bodyDirectoryPath{max-width:100%;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_bodyDirectoryControls{flex:none;justify-content:flex-end;align-items:center;gap:8px;padding-right:28px;display:flex}.IIa07q_bodyDirectoryControls>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:8px;display:grid}.IIa07q_bodyDirectoryEmpty{border-radius:var(--dsw-radius-md);min-height:96px;color:var(--mn-muted);background:var(--mn-fill);grid-column:1/-1;justify-content:center;align-items:center;gap:12px;display:flex}.IIa07q_bodyDirectoryEmpty>span{color:var(--mn-faint);font-size:24px}.IIa07q_bodyDirectoryEmpty strong{color:var(--mn-text);font-weight:500;display:block}.IIa07q_bodyDirectoryEmpty p{color:var(--mn-faint);margin:2px 0 0;font-size:12px}.IIa07q_bodyCard{--mn-body-accent:var(--mn-success);min-width:0;padding:12px 14px;transition:border-color .16s,background-color .16s}.IIa07q_bodyCard:not([data-active]){background:var(--mn-fill);border-color:#0000}.IIa07q_bodyCard[data-reconnectable]{cursor:pointer}.IIa07q_bodyCard[data-reconnectable]:hover{border-color:var(--mn-field-line)}.IIa07q_bodyCard[data-reconnectable]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_bodySignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_bodyCard[data-active] .IIa07q_bodySignal{background:var(--mn-body-accent)}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodySignal{background:var(--mn-danger)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodySignal{background:var(--mn-idle)}.IIa07q_bodyCard[data-reconnecting] .IIa07q_bodySignal{box-sizing:border-box;border:1.5px solid color-mix(in srgb, var(--mn-faint) 25%, transparent);border-top-color:var(--mn-faint);background:0 0;width:8px;height:8px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_bodyHealth{color:var(--mn-success);font-size:12px;line-height:18px}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodyHealth{color:var(--mn-danger)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodyHealth{color:var(--mn-faint)}.IIa07q_mnemonDefaultBadge{width:fit-content;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_providerBadge{width:fit-content;max-width:100%;color:var(--mn-muted);background:var(--mn-fill);text-align:center;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;border-radius:999px;flex:none;justify-content:center;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex;overflow:hidden}.IIa07q_providerBadge,.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label,.IIa07q_graphNode,.IIa07q_providerBadge[data-provider=mnemon-native],.IIa07q_readSourceCard[data-provider=mnemon-native],.IIa07q_bodyCard[data-provider=mnemon-native],.IIa07q_metadataList>label[data-provider=mnemon-native],.IIa07q_graphNode[data-provider=mnemon-native]{--mn-provider-color:#64748b}.IIa07q_providerBadge[data-provider=openviking],.IIa07q_readSourceCard[data-provider=openviking],.IIa07q_bodyCard[data-provider=openviking],.IIa07q_metadataList>label[data-provider=openviking],.IIa07q_graphNode[data-provider=openviking]{--mn-provider-color:#3b82d0}.IIa07q_providerBadge[data-provider=honcho],.IIa07q_readSourceCard[data-provider=honcho],.IIa07q_bodyCard[data-provider=honcho],.IIa07q_metadataList>label[data-provider=honcho],.IIa07q_graphNode[data-provider=honcho]{--mn-provider-color:#c44fcf}.IIa07q_providerBadge[data-provider=mem0],.IIa07q_readSourceCard[data-provider=mem0],.IIa07q_bodyCard[data-provider=mem0],.IIa07q_metadataList>label[data-provider=mem0],.IIa07q_graphNode[data-provider=mem0]{--mn-provider-color:#8b5cf6}.IIa07q_providerBadge[data-provider=hindsight],.IIa07q_readSourceCard[data-provider=hindsight],.IIa07q_bodyCard[data-provider=hindsight],.IIa07q_metadataList>label[data-provider=hindsight],.IIa07q_graphNode[data-provider=hindsight]{--mn-provider-color:#0891b2}.IIa07q_providerBadge[data-provider=holographic],.IIa07q_readSourceCard[data-provider=holographic],.IIa07q_bodyCard[data-provider=holographic],.IIa07q_metadataList>label[data-provider=holographic],.IIa07q_graphNode[data-provider=holographic]{--mn-provider-color:#6366d9}.IIa07q_providerBadge[data-provider=retaindb],.IIa07q_readSourceCard[data-provider=retaindb],.IIa07q_bodyCard[data-provider=retaindb],.IIa07q_metadataList>label[data-provider=retaindb],.IIa07q_graphNode[data-provider=retaindb]{--mn-provider-color:#d08a28}.IIa07q_providerBadge[data-provider=byterover],.IIa07q_readSourceCard[data-provider=byterover],.IIa07q_bodyCard[data-provider=byterover],.IIa07q_metadataList>label[data-provider=byterover],.IIa07q_graphNode[data-provider=byterover]{--mn-provider-color:#0f9a83}.IIa07q_providerBadge[data-provider=supermemory],.IIa07q_readSourceCard[data-provider=supermemory],.IIa07q_bodyCard[data-provider=supermemory],.IIa07q_metadataList>label[data-provider=supermemory],.IIa07q_graphNode[data-provider=supermemory]{--mn-provider-color:#df4d72}.IIa07q_bodySwitch{min-height:28px;color:var(--mn-faint);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:0;font-size:12px;line-height:18px;display:flex}.IIa07q_bodySwitchTrack{box-sizing:border-box;background:var(--mn-line-strong);border-radius:999px;flex:none;width:36px;height:20px;padding:2px;transition:background-color .12s;position:relative}.IIa07q_bodySwitchTrack i{background:var(--dsw-alias-label-primary-foreground);border-radius:50%;width:16px;height:16px;transition:transform .12s;display:block}.IIa07q_bodySwitch:hover,.IIa07q_bodySwitch[aria-checked=true]{color:var(--mn-muted)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack{background:var(--dsw-alias-brand-primary)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack i{transform:translate(16px)}.IIa07q_bodyCardActions{align-items:center;gap:8px;display:flex}.IIa07q_bodyCreateForm{gap:16px;padding-top:0}.IIa07q_createSection{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);gap:12px;padding:14px 16px;display:grid}.IIa07q_createSectionHeading{align-items:flex-start;gap:10px;display:flex}.IIa07q_createSectionHeading>span{min-width:22px;height:22px;color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;place-items:center;padding:0 6px;font-size:11px;font-weight:500;line-height:1;display:grid}.IIa07q_createSectionHeading>div{gap:2px;min-width:0;display:grid}.IIa07q_createSectionHeading strong{color:var(--mn-text);font-size:14px;font-weight:500;line-height:22px}.IIa07q_createSectionHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_createIdentityGrid{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:12px;display:grid}.IIa07q_createIdentityGrid>label{align-content:start}.IIa07q_createIdentityGrid textarea{min-height:72px}.IIa07q_strategyForm{gap:16px;padding-top:0}.IIa07q_strategyLoading{border-radius:var(--dsw-radius-md);min-height:88px;color:var(--mn-faint);background:var(--mn-fill);justify-content:center;align-items:center;font-size:12px;display:flex;position:relative}.IIa07q_strategyLoading .IIa07q_sectionSpinner{top:10px;right:10px}.IIa07q_placementMode{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.IIa07q_placementMode legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_placementMode label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);cursor:pointer;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:10px;min-width:0;padding:12px;display:grid;position:relative}.IIa07q_placementMode label:hover{background:var(--mn-hover)}.IIa07q_placementMode label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_placementMode label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_placementMode input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementMode span{gap:2px;display:grid}.IIa07q_placementMode strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementMode strong em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;margin-left:6px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_placementMode small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_placementPolicy{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);gap:10px;margin:0;padding:12px 14px;display:grid}.IIa07q_placementPolicyHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_placementPolicyHeading>div{gap:2px;display:grid}.IIa07q_placementPolicyHeading strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementPolicyHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_placementPolicyHeading>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_placementRuleGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_capabilityRules{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.IIa07q_capabilityRules legend{width:100%;color:var(--mn-faint);margin-bottom:4px;font-size:12px;line-height:18px}.IIa07q_capabilityRules label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);width:fit-content;min-height:28px;color:var(--mn-muted);cursor:pointer;align-items:center;gap:6px;padding:0 10px;font-size:12px;display:flex;position:relative}.IIa07q_capabilityRules label:hover{background:var(--mn-hover)}.IIa07q_capabilityRules label[data-selected]{border-color:var(--mn-field-line);color:var(--mn-text);background:var(--mn-fill)}.IIa07q_capabilityRules input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_placementCandidates>span,.IIa07q_placementCandidates>label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);grid-template-columns:28px minmax(0,1fr) 16px;align-items:center;gap:10px;min-width:0;padding:8px 10px;display:grid;position:relative}.IIa07q_placementCandidates>label{cursor:pointer}.IIa07q_placementCandidates>label:hover{background:var(--mn-hover)}.IIa07q_placementCandidates>[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_placementCandidates>label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_placementCandidates input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates>span>span:not(.IIa07q_candidateIcon),.IIa07q_placementCandidates>label>span:not(.IIa07q_candidateIcon){gap:2px;min-width:0;display:grid}.IIa07q_placementCandidates strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementCandidates small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerChoice{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.IIa07q_providerChoice legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_providerChoice label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);cursor:pointer;grid-template-columns:32px minmax(0,1fr) 16px;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid;position:relative}.IIa07q_providerChoice label:hover{background:var(--mn-hover)}.IIa07q_providerChoice label[data-native]{grid-column:1/-1}.IIa07q_providerChoice label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_providerChoice label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_providerChoice input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_providerChoice span{gap:2px;display:grid}.IIa07q_providerChoice strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_providerChoice strong em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;margin-left:6px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_providerChoice label[data-selected] strong em{background:var(--mn-layer-1)}.IIa07q_providerChoice small{color:var(--mn-faint);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_providerChoiceIcon,.IIa07q_candidateIcon,.IIa07q_providerFieldIcon{box-sizing:border-box;border:.5px solid var(--mn-line-strong);background:var(--mn-layer-1);place-items:center;display:grid;overflow:hidden}.IIa07q_providerChoiceIcon{border-radius:var(--dsw-radius-sm);width:32px;height:32px;padding:4px}.IIa07q_candidateIcon{border-radius:var(--dsw-radius-sm);width:28px;height:28px;padding:4px}.IIa07q_providerFieldIcon{border-radius:var(--dsw-radius-sm);flex:none;width:32px;height:32px;padding:4px}.IIa07q_providerChoiceIcon>img,.IIa07q_providerChoiceIcon>svg,.IIa07q_candidateIcon>img,.IIa07q_candidateIcon>svg,.IIa07q_providerFieldIcon>img,.IIa07q_providerFieldIcon>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_choiceControl{box-sizing:border-box;border:1px solid var(--mn-field-line);background:var(--mn-layer-1);border-radius:4px;flex:none;place-items:center;width:16px;height:16px;display:grid;position:relative}.IIa07q_choiceControl[data-kind=radio]{border-radius:50%}[data-selected]>.IIa07q_choiceControl{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-brand-primary)}[data-selected]>.IIa07q_choiceControl[data-kind=check]:after{border-bottom:1.5px solid var(--dsw-alias-label-primary-foreground);border-left:1.5px solid var(--dsw-alias-label-primary-foreground);content:\"\";width:7px;height:4px;transform:translateY(-1px)rotate(-45deg)}[data-selected]>.IIa07q_choiceControl[data-kind=radio]:after{content:\"\";background:var(--dsw-alias-label-primary-foreground);border-radius:50%;width:6px;height:6px}.IIa07q_placementMode label:has(input:focus-visible),.IIa07q_providerChoice label:has(input:focus-visible),.IIa07q_capabilityRules label:has(input:focus-visible),.IIa07q_placementCandidates label:has(input:focus-visible){outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:1px}.IIa07q_providerFields{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);gap:10px;padding:12px 14px;display:grid}.IIa07q_providerFieldHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_providerFieldIdentity{align-items:center;gap:10px;min-width:0;display:flex}.IIa07q_providerFieldIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_providerFieldHeading strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_providerFieldHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerFieldHeading>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_providerFields details{min-width:0}.IIa07q_providerFields summary{width:fit-content;color:var(--mn-muted);cursor:pointer;font-size:12px;line-height:18px}.IIa07q_providerFields summary:hover{color:var(--mn-text)}.IIa07q_providerEnableHint{color:var(--mn-faint);margin-top:8px;font-size:12px;line-height:18px;display:block}.IIa07q_providerAdvancedGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:8px;display:grid}.IIa07q_providerFieldControl .IIa07q_providerSecretClear{color:var(--mn-muted);cursor:pointer;align-items:center;gap:6px;font-size:12px;font-weight:400;display:flex}.IIa07q_providerWriteHint{color:var(--mn-faint);margin-top:4px;font-size:12px;line-height:18px;display:block}.IIa07q_placementReceipt{border-radius:var(--dsw-radius-sm);min-width:0;color:var(--mn-muted);background:var(--mn-fill);align-items:flex-start;gap:8px;margin:8px 0;padding:8px 10px;display:flex}.IIa07q_placementReceipt>span{flex:none;font-size:12px}.IIa07q_placementReceipt>div{grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;min-width:0;display:grid}.IIa07q_placementReceipt strong,.IIa07q_placementReceipt small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_placementReceipt strong{color:var(--mn-text);font-size:12px;font-weight:500;line-height:18px}.IIa07q_placementReceipt small{color:var(--mn-faint);font-size:11px;line-height:18px}.IIa07q_placementReceipt p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;margin:0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_bodyCard>p{min-height:18px;color:var(--mn-muted);margin:8px 0;font-size:13px;line-height:20px}.IIa07q_bodyCard footer{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);flex-wrap:nowrap;gap:4px 12px;padding-top:8px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.IIa07q_bodyFooterBlock{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}.IIa07q_bodyFooterGrow{flex:auto}.IIa07q_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,280px);gap:12px;display:grid}.IIa07q_graphPanel,.IIa07q_graphInspector{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg)}.IIa07q_graphPanel{min-width:0;position:relative;overflow:hidden}.IIa07q_graphToolbar,.IIa07q_graphFooter{min-height:44px;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:16px;padding:0 14px;font-size:12px;line-height:18px;display:flex}.IIa07q_graphToolbar{border-bottom:.5px solid var(--mn-line)}.IIa07q_graphToolbar>div:first-child{align-items:center;gap:8px;display:flex}.IIa07q_graphToolbar small{color:var(--mn-faint)}.IIa07q_liveDot{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:4px 12px;display:flex}.IIa07q_graphLegend span{align-items:center;gap:6px;display:flex}.IIa07q_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:14px;height:2px}.IIa07q_graphLegend [data-edge=temporal]{--edge-color:#87909f}.IIa07q_graphLegend [data-edge=scope]{--edge-color:#708199}.IIa07q_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.IIa07q_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.IIa07q_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.IIa07q_graphLegend [data-edge=entity]{--edge-color:#22a879}.IIa07q_graphViewport{min-height:clamp(390px,42vw,560px);position:relative;overflow:hidden}.IIa07q_graphCanvasControls{z-index:2;border-radius:var(--dsw-radius-md);background:var(--dsw-specific-menu,var(--mn-layer-2));box-shadow:var(--dsw-elevation-soft);backdrop-filter:var(--dsw-menu-backdrop-filter);align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:10px;right:10px}.IIa07q_graphCanvasControls span{color:var(--mn-faint);align-items:center;gap:6px;padding:0 6px;font-size:12px;display:flex}.IIa07q_graphCanvasControls span i{background:var(--mn-accent);border-radius:50%;width:6px;height:6px}.IIa07q_graphCanvasControls button{border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;padding:0 10px;font-size:12px}.IIa07q_graphCanvasControls button:hover{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_graphCanvasControls button[data-active]{color:var(--mn-text);background:var(--mn-fill)}.IIa07q_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.IIa07q_graphBackdrop{fill:var(--mn-layer-1)}.IIa07q_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.IIa07q_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.IIa07q_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.IIa07q_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.IIa07q_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.IIa07q_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.IIa07q_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.IIa07q_graphNode[data-dragging]{cursor:grabbing}.IIa07q_graphNode[data-category=decision]{--node:#ef8354}.IIa07q_graphNode[data-category=preference]{--node:#a879e1}.IIa07q_graphNode[data-category=fact]{--node:#4d7cfe}.IIa07q_graphNode[data-category=insight]{--node:#19a77d}.IIa07q_graphNode[data-category=context]{--node:#d8a624}.IIa07q_graphNode[data-kind=space]{--node:var(--mn-provider-color)}.IIa07q_graphNode[data-kind=entity]{--node:#2b9db9}.IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 18%, var(--mn-layer-1));stroke:color-mix(in srgb, var(--node) 60%, var(--mn-layer-1));stroke-width:1.5px;transition:r .16s}.IIa07q_nodeCore{fill:var(--node)}.IIa07q_nodeLabel{fill:var(--mn-muted);font:11px var(--mn-sans);pointer-events:auto}.IIa07q_nodeBodyLabel{fill:var(--mn-faint);font:500 11px var(--mn-sans);pointer-events:auto}.IIa07q_graphSvg[data-density=sparse] .IIa07q_nodeLabel{font-size:12px}.IIa07q_graphNode:hover .IIa07q_nodeHalo,.IIa07q_graphNode:focus .IIa07q_nodeHalo,.IIa07q_graphNode[data-selected] .IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.IIa07q_graphNode[data-selected] .IIa07q_nodeLabel{fill:var(--mn-text);font-weight:500}.IIa07q_graphFooter{border-top:.5px solid var(--mn-line);min-height:40px;color:var(--mn-faint)}.IIa07q_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 84px);padding:16px;overflow:hidden}.IIa07q_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.IIa07q_inspectorLogo{border-radius:var(--dsw-radius-lg);opacity:.72;width:48px;height:48px;margin-bottom:12px}.IIa07q_inspectorEmpty h3{margin:6px 0 2px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.IIa07q_inspectorHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.IIa07q_inspectorHeading button:hover{background:var(--mn-hover)}.IIa07q_inspectorChips{flex-wrap:wrap;align-items:center;gap:6px;margin-top:20px;display:flex}.IIa07q_categoryChip{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.IIa07q_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.IIa07q_inspectorTitle{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-line-clamp:6;-webkit-box-orient:vertical;flex:1;min-width:0;margin:0;font-size:14px;font-weight:400;line-height:22px;display:-webkit-box;overflow:hidden}.IIa07q_inspectorEye{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;flex:none;place-items:center;transition:color .15s,background-color .15s;display:grid}.IIa07q_inspectorEye:hover{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_inspectorMeta{margin:0}.IIa07q_inspectorMeta>div{border-top:.5px solid var(--mn-line);gap:2px;padding:10px 0;display:grid}.IIa07q_inspectorMeta dt{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_inspectorActions{gap:8px;margin-top:20px;display:grid}.IIa07q_previewContent{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:14px;line-height:22px}.IIa07q_searchBar{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:14px}.IIa07q_queryField{width:100%;height:40px}.IIa07q_searchChoice{min-width:160px}.IIa07q_searchControls{justify-content:flex-end;align-items:flex-end;gap:12px;padding-top:12px;display:flex}.IIa07q_searchActions{align-items:center;gap:8px;display:flex}.IIa07q_agentAnswer{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_agentAnswerHeading span{color:var(--mn-faint);font-size:12px;font-weight:500;line-height:18px}.IIa07q_agentAnswerHeading h3{margin:2px 0 0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_agentAnswerHeading>code{color:var(--mn-faint);font-size:11px}.IIa07q_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:14px;line-height:22px}.IIa07q_agentCitations{border-top:.5px solid var(--mn-line);flex-wrap:wrap;align-items:center;gap:6px;padding-top:10px;display:flex}.IIa07q_agentCitations small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_agentCitations span{max-width:100%;color:var(--mn-muted);background:var(--mn-fill);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_fieldWide{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_supervisedForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_singleColumn{max-width:830px}.IIa07q_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:16px;display:grid}.IIa07q_results,.IIa07q_relatedPane,.IIa07q_entityResults{min-width:0}.IIa07q_relatedPane{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 230px);padding:14px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.IIa07q_relatedSource{border-radius:var(--dsw-radius-sm);color:var(--mn-muted);background:var(--mn-fill);margin:0 0 12px;padding:10px 12px;font-size:13px;line-height:20px}.IIa07q_insightCard{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-width:0;margin-bottom:8px;padding:14px 16px;transition:background-color .15s}.IIa07q_insightCard:hover{background:color-mix(in srgb, var(--mn-hover) 50%, transparent)}.IIa07q_cardTop{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_badges,.IIa07q_tags,.IIa07q_entities{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_badge{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_id{color:var(--mn-faint);font-size:11px}.IIa07q_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;font-size:14px;line-height:22px}.IIa07q_tags{color:var(--mn-accent);font-size:12px;line-height:18px}.IIa07q_entities{margin-top:8px}.IIa07q_entities span{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_cardActions{border-top:.5px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:4px;min-height:32px;margin-top:10px;padding-top:8px;display:flex}.IIa07q_entityLayout{grid-template-columns:264px minmax(0,1fr);align-items:start;gap:16px;display:grid}.IIa07q_entityRail{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px;position:sticky;top:0}.IIa07q_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:8px;display:grid}.IIa07q_entitySearch input{min-width:0}.IIa07q_entityHeading{justify-content:space-between;align-items:center;margin:16px 4px 6px;display:flex}.IIa07q_entityHeading small{color:var(--mn-faint);font-size:12px}.IIa07q_entityList{gap:2px;display:grid}.IIa07q_entityList button{border-radius:var(--dsw-radius-sm);min-height:32px;color:var(--mn-muted);cursor:pointer;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:10px;padding:0 10px;display:flex}.IIa07q_entityList button:hover,.IIa07q_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_entityList button[aria-pressed=true]{background:var(--mn-fill)}.IIa07q_entityList button>span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.IIa07q_entityList strong{color:var(--mn-faint);font-variant-numeric:tabular-nums;flex:none;font-size:12px;font-weight:400}.IIa07q_entityResults>.IIa07q_emptyState{min-height:360px}.IIa07q_entitySection{min-width:0}.IIa07q_entitySection+.IIa07q_entitySection{margin-top:24px}.IIa07q_entitySectionBody{min-height:116px}.IIa07q_entityQuiet{color:var(--mn-faint);margin:0 0 8px;padding:12px 2px;font-size:13px;line-height:20px}.IIa07q_entityRetry{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;display:flex}.IIa07q_entityRelatedHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_entityRelatedHead>div:first-child{flex:1;min-width:0}.IIa07q_entityRelatedHead>button{flex:none;margin-top:2px}.IIa07q_insightSkeleton{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);align-content:start;gap:12px;min-height:108px;margin-bottom:8px;padding:16px;display:grid;position:relative;overflow:hidden}.IIa07q_insightSkeleton>span{background:var(--mn-fill);border-radius:999px;height:10px;display:block}.IIa07q_insightSkeleton>span:first-child{width:36%}.IIa07q_insightSkeleton>span:nth-child(2){width:94%}.IIa07q_insightSkeleton>span:nth-child(3){width:68%}.IIa07q_entityRailSkeleton{border-radius:var(--dsw-radius-sm);background:color-mix(in srgb, var(--mn-fill) 55%, transparent);height:32px;display:block;position:relative;overflow:hidden}.IIa07q_insightSkeleton:after,.IIa07q_entityRailSkeleton:after{content:\"\";background:linear-gradient(105deg, transparent 20%, color-mix(in srgb, var(--mn-text) 5%, transparent) 45%, transparent 70%);pointer-events:none;animation:1.2s ease-in-out infinite IIa07q_entity-skeleton-sweep;position:absolute;inset:0;transform:translate(-120%)}@keyframes IIa07q_entity-skeleton-sweep{to{transform:translate(120%)}}@media (prefers-reduced-motion:reduce){.IIa07q_insightSkeleton:after,.IIa07q_entityRailSkeleton:after{animation:none}}.IIa07q_readSourceCard[data-status=loading] .IIa07q_readSourceSignal{background:var(--mn-idle)}.IIa07q_supervisedComposer{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);overflow:hidden}.IIa07q_supervisedForm{padding:16px}.IIa07q_candidateHeading{justify-content:space-between;align-items:center;gap:8px;min-width:0;margin-bottom:8px;display:flex}.IIa07q_candidateHeading>label{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_supervisedForm textarea{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);outline:0;padding:10px 12px;font-size:14px;line-height:22px}.IIa07q_sessionHint{color:var(--mn-danger);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_fieldWide{grid-column:1/-1}.IIa07q_advancedWrite{border-top:.5px solid var(--mn-line)}.IIa07q_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:56px;padding:10px 16px;list-style:none;display:flex}.IIa07q_advancedWrite summary:hover{background:var(--mn-hover)}.IIa07q_advancedWrite summary::-webkit-details-marker{display:none}.IIa07q_advancedWrite summary>span:first-child{gap:2px;display:grid}.IIa07q_advancedWrite summary strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_advancedWrite summary small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_advancedWrite summary>span:last-child{color:var(--mn-faint);font-size:16px;line-height:1}.IIa07q_advancedWrite[open] summary{border-bottom:.5px solid var(--mn-line)}.IIa07q_advancedWrite[open] summary>span:last-child{font-size:0}.IIa07q_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:16px}.IIa07q_manualForm{padding:4px 16px 16px}.IIa07q_manualActions{justify-content:space-between;align-items:center;gap:16px;margin-top:16px;display:flex}.IIa07q_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_listToolbar{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(0,1fr) 180px auto;gap:8px;padding:12px;display:grid}.IIa07q_listToolbar>*{min-width:0}.IIa07q_listNotice{color:var(--mn-faint);margin:10px 2px 16px;font-size:12px;line-height:18px}.IIa07q_listNotice span{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent);border-radius:999px;margin-right:8px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:8px;display:grid}.IIa07q_memoryList .IIa07q_insightCard{height:100%;margin:0}.IIa07q_modalFooterNote{max-width:54ch;color:var(--mn-faint);margin:0 auto 0 0;font-size:12px;line-height:18px}.IIa07q_modalInlineStatus{color:var(--mn-muted);overflow-wrap:anywhere;margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_metadataDialog{gap:12px;display:grid}.IIa07q_metadataToolbar{color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;font-size:12px;line-height:18px;display:flex}.IIa07q_metadataToolbar>span{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_metadataToolbar em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_metadataList{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_metadataEmpty{border-radius:var(--dsw-radius-md);color:var(--mn-faint);background:var(--mn-fill);text-align:center;grid-column:1/-1;padding:20px;font-size:12px}.IIa07q_metadataList>label{cursor:pointer;grid-template-columns:16px minmax(0,1fr);align-items:start;gap:10px;min-width:0;min-height:76px;padding:12px;display:grid;position:relative}.IIa07q_metadataList>label:hover{background:var(--mn-hover)}.IIa07q_metadataList>label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_metadataList>label[data-refreshing]{overflow:hidden}.IIa07q_metadataList>label[data-refreshing]:after{content:\"\";background:linear-gradient(105deg, transparent 20%, color-mix(in srgb, var(--mn-accent) 10%, transparent) 45%, transparent 70%);pointer-events:none;animation:.9s ease-in-out infinite IIa07q_mnemon-metadata-sweep;position:absolute;inset:0;transform:translate(-120%)}.IIa07q_metadataList>label[data-refreshed]{animation:.9s ease-out IIa07q_mnemon-metadata-refreshed}.IIa07q_metadataList>label[data-failed]{border-color:color-mix(in srgb, var(--mn-danger) 40%, transparent)}.IIa07q_metadataList>label>input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_metadataList>label>span{gap:4px;min-width:0;display:grid}.IIa07q_metadataList strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_metadataList small{color:var(--mn-faint);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_metadataList>label>span>span{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_metadataList code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_metadataTaskStatus{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_metadataTaskStatus[data-status=running]{color:var(--mn-faint)}.IIa07q_metadataTaskStatus[data-status=success]{color:var(--mn-success)}.IIa07q_metadataTaskStatus[data-status=error]{color:var(--mn-danger)}@media (prefers-reduced-motion:reduce){.IIa07q_metadataList>label[data-refreshing]:after,.IIa07q_metadataList>label[data-refreshed]{animation:none}}@media (width<=1000px){.IIa07q_graphLayout{display:block;position:relative}.IIa07q_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:12px;position:static;overflow:visible}.IIa07q_graphInspector[data-empty]{display:none}.IIa07q_resultLayout{grid-template-columns:1fr}.IIa07q_relatedPane{grid-row:1;max-height:none;position:static}.IIa07q_memoryList{grid-template-columns:1fr}}@media (width<=760px){.IIa07q_metadataList{grid-template-columns:1fr}.IIa07q_modalFooterNote{max-width:none;margin:0}.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30vh,210px)}.IIa07q_entityLayout{grid-template-columns:1fr}.IIa07q_manualActions{flex-direction:column;align-items:stretch}.IIa07q_entityRail{position:static}.IIa07q_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.IIa07q_searchActions{grid-column:1/-1}.IIa07q_searchActions>button{flex:1}.IIa07q_listToolbar{grid-template-columns:1fr}.IIa07q_bodyDirectoryHeader{grid-template-columns:minmax(0,1fr);display:grid}.IIa07q_bodyDirectoryHeader>div{min-width:0}.IIa07q_bodyDirectoryPath{max-width:100%}.IIa07q_bodyDirectoryControls{flex-wrap:wrap;justify-content:flex-start;padding-right:0}.IIa07q_createIdentityGrid,.IIa07q_placementMode,.IIa07q_placementRuleGrid,.IIa07q_placementCandidates,.IIa07q_providerChoice,.IIa07q_providerAdvancedGrid{grid-template-columns:1fr}.IIa07q_graphViewport{min-height:360px}.IIa07q_graphSvg{height:390px}.IIa07q_graphCanvasControls{top:8px;right:8px}.IIa07q_graphCanvasControls span{display:none}}@media (width<=520px){.IIa07q_memoryHeaderActions{width:100%}.IIa07q_memoryHeaderActions>button{flex:1}.IIa07q_cardTop{flex-direction:column;align-items:flex-start}.IIa07q_cardActions{flex-wrap:wrap;align-items:stretch}.IIa07q_cardActions button{flex:1}.IIa07q_searchControls{grid-template-columns:1fr}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30dvh,210px)}}}@media (width<=1000px) and (height<=760px){.IIa07q_graphViewport{min-height:300px}.IIa07q_graphSvg{height:300px}}";
|
|
4163
|
+
const css$6 = ".IIa07q_entityHeading>span,.IIa07q_inspectorHeading>span{color:var(--mn-faint);font-size:12px;font-weight:500;line-height:18px}.IIa07q_memoryHeaderActions{align-items:center;gap:8px;display:flex}.IIa07q_memoryHeaderActions>button{white-space:nowrap}.IIa07q_asyncRegion{min-width:0;position:relative}.IIa07q_asyncResults{min-width:0;min-height:120px;position:relative}.IIa07q_asyncPlaceholder{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-height:220px;color:var(--mn-faint);place-items:center;display:grid;position:relative}.IIa07q_muted{color:var(--mn-faint);padding:16px 0;font-size:13px}.IIa07q_readSources{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);gap:8px;margin:0 0 16px;padding:12px 14px;display:grid}.IIa07q_readSources>header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_readSources>header>div{gap:2px;display:grid}.IIa07q_readSources>header strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_readSources>header p{max-width:92ch;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_readSources>header>button{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--mn-text);cursor:pointer;background:0 0;flex:none;padding:0 10px;font-size:12px;line-height:18px}.IIa07q_readSources>header>button:hover{background:var(--mn-hover)}.IIa07q_readSources>header>button[data-selected]{background:var(--mn-fill);border-color:#0000}.IIa07q_readSources>div{grid-template-columns:repeat(auto-fit,minmax(min(260px,100%),1fr));gap:8px;display:grid}.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);color:var(--mn-text);background:0 0}.IIa07q_readSourceCard{text-align:left;grid-template-columns:6px minmax(0,1fr) auto;align-items:center;gap:10px;min-width:0;min-height:56px;padding:8px 10px 8px 12px;display:grid}button.IIa07q_readSourceCard{cursor:pointer}button.IIa07q_readSourceCard:hover{background:var(--mn-hover)}.IIa07q_readSourceCard[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_readSourceSignal{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_readSourceCard[data-mode=projection] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-mode=enumerable] .IIa07q_readSourceSignal{background:var(--mn-success)}.IIa07q_readSourceCard[data-mode=query-only] .IIa07q_readSourceSignal{background:var(--mn-warn)}.IIa07q_readSourceCard[data-status=unavailable] .IIa07q_readSourceSignal{background:var(--mn-danger)}.IIa07q_readSourceCard[data-status=unsupported] .IIa07q_readSourceSignal,.IIa07q_readSourceCard[data-status=empty] .IIa07q_readSourceSignal{background:var(--mn-idle)}.IIa07q_readSourceCard[data-status=unsupported]{color:var(--mn-faint)}.IIa07q_readSourceIdentity,.IIa07q_readSourceState{gap:2px;min-width:0;display:grid}.IIa07q_readSourceIdentity strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_readSourceMeta{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_readSourceMeta>small{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_readSourceState{text-align:right;justify-items:end}.IIa07q_readSourceState em{width:fit-content;color:var(--mn-muted);background:var(--mn-fill);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_readSourceCard[data-status=unsupported] .IIa07q_readSourceState em{border:.5px solid var(--mn-field-line);color:var(--mn-faint);background:0 0}.IIa07q_readSourceState small{color:var(--mn-faint);white-space:nowrap;font-size:11px;line-height:14px}.IIa07q_bodyDirectory{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:12px;padding:16px;position:relative}.IIa07q_bodyDirectoryHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:12px;display:flex}.IIa07q_bodyDirectoryHeader>div:first-child{flex:260px;min-width:0}.IIa07q_bodyDirectoryHeader h3{margin:0;font-size:13px;font-weight:500;line-height:20px}.IIa07q_bodyDirectoryHeader p{color:var(--mn-faint);margin:2px 0 0;font-size:12px;line-height:18px}.IIa07q_bodyDirectoryPath{max-width:100%;color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;line-height:16px;display:block;overflow:hidden}.IIa07q_bodyDirectoryControls{flex:none;justify-content:flex-end;align-items:center;gap:8px;padding-right:28px;display:flex}.IIa07q_bodyDirectoryControls>strong{color:var(--mn-muted);background:var(--mn-fill);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_bodyGrid{grid-template-columns:repeat(auto-fit,minmax(245px,1fr));gap:8px;display:grid}.IIa07q_bodyDirectoryEmpty{border-radius:var(--dsw-radius-md);min-height:96px;color:var(--mn-muted);background:var(--mn-fill);grid-column:1/-1;justify-content:center;align-items:center;gap:12px;display:flex}.IIa07q_bodyDirectoryEmpty>span{color:var(--mn-faint);font-size:24px}.IIa07q_bodyDirectoryEmpty strong{color:var(--mn-text);font-weight:500;display:block}.IIa07q_bodyDirectoryEmpty p{color:var(--mn-faint);margin:2px 0 0;font-size:12px}.IIa07q_bodyCard{--mn-body-accent:var(--mn-success);min-width:0;padding:12px 14px;transition:border-color .16s,background-color .16s}.IIa07q_bodyCard:not([data-active]){background:var(--mn-fill);border-color:#0000}.IIa07q_bodyCard[data-reconnectable]{cursor:pointer}.IIa07q_bodyCard[data-reconnectable]:hover{border-color:var(--mn-field-line)}.IIa07q_bodyCard[data-reconnectable]:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:2px}.IIa07q_bodySignal{background:var(--mn-idle);border-radius:50%;width:6px;height:6px}.IIa07q_bodyCard[data-active] .IIa07q_bodySignal{background:var(--mn-body-accent)}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodySignal{background:var(--mn-danger)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodySignal{background:var(--mn-idle)}.IIa07q_bodyCard[data-reconnecting] .IIa07q_bodySignal{box-sizing:border-box;border:1.5px solid color-mix(in srgb, var(--mn-faint) 25%, transparent);border-top-color:var(--mn-faint);background:0 0;width:8px;height:8px;animation:.9s linear infinite IIa07q_mnemon-spin}.IIa07q_bodyHealth{color:var(--mn-success);font-size:12px;line-height:18px}.IIa07q_bodyCard:not([data-healthy]) .IIa07q_bodyHealth{color:var(--mn-danger)}.IIa07q_bodyCard[data-status-loading] .IIa07q_bodyHealth{color:var(--mn-faint)}.IIa07q_mnemonDefaultBadge,.IIa07q_newSpaceBadge{width:fit-content;color:var(--mn-accent);background:color-mix(in srgb, var(--mn-accent) 10%, transparent);white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_rediscoveryNotice{border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-module-platform);align-items:flex-start;gap:8px 12px;min-width:0;margin:0 0 12px;padding:10px 12px;display:flex}.IIa07q_rediscoveryNotice>div{flex:auto;gap:2px;min-width:0;display:grid}.IIa07q_rediscoveryNotice p{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:13px;line-height:20px}.IIa07q_rediscoveryNotice p[data-failed]{color:var(--mn-danger)}.IIa07q_rediscoveryNotice>button{flex:none}.IIa07q_providerBadge{width:fit-content;max-width:100%;color:var(--mn-muted);background:var(--mn-fill);text-align:center;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap;border-radius:999px;flex:none;justify-content:center;align-items:center;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex;overflow:hidden}.IIa07q_providerBadge,.IIa07q_readSourceCard,.IIa07q_bodyCard,.IIa07q_metadataList>label,.IIa07q_graphNode,.IIa07q_providerBadge[data-provider=mnemon-native],.IIa07q_readSourceCard[data-provider=mnemon-native],.IIa07q_bodyCard[data-provider=mnemon-native],.IIa07q_metadataList>label[data-provider=mnemon-native],.IIa07q_graphNode[data-provider=mnemon-native]{--mn-provider-color:#64748b}.IIa07q_providerBadge[data-provider=openviking],.IIa07q_readSourceCard[data-provider=openviking],.IIa07q_bodyCard[data-provider=openviking],.IIa07q_metadataList>label[data-provider=openviking],.IIa07q_graphNode[data-provider=openviking]{--mn-provider-color:#3b82d0}.IIa07q_providerBadge[data-provider=honcho],.IIa07q_readSourceCard[data-provider=honcho],.IIa07q_bodyCard[data-provider=honcho],.IIa07q_metadataList>label[data-provider=honcho],.IIa07q_graphNode[data-provider=honcho]{--mn-provider-color:#c44fcf}.IIa07q_providerBadge[data-provider=mem0],.IIa07q_readSourceCard[data-provider=mem0],.IIa07q_bodyCard[data-provider=mem0],.IIa07q_metadataList>label[data-provider=mem0],.IIa07q_graphNode[data-provider=mem0]{--mn-provider-color:#8b5cf6}.IIa07q_providerBadge[data-provider=hindsight],.IIa07q_readSourceCard[data-provider=hindsight],.IIa07q_bodyCard[data-provider=hindsight],.IIa07q_metadataList>label[data-provider=hindsight],.IIa07q_graphNode[data-provider=hindsight]{--mn-provider-color:#0891b2}.IIa07q_providerBadge[data-provider=holographic],.IIa07q_readSourceCard[data-provider=holographic],.IIa07q_bodyCard[data-provider=holographic],.IIa07q_metadataList>label[data-provider=holographic],.IIa07q_graphNode[data-provider=holographic]{--mn-provider-color:#6366d9}.IIa07q_providerBadge[data-provider=retaindb],.IIa07q_readSourceCard[data-provider=retaindb],.IIa07q_bodyCard[data-provider=retaindb],.IIa07q_metadataList>label[data-provider=retaindb],.IIa07q_graphNode[data-provider=retaindb]{--mn-provider-color:#d08a28}.IIa07q_providerBadge[data-provider=byterover],.IIa07q_readSourceCard[data-provider=byterover],.IIa07q_bodyCard[data-provider=byterover],.IIa07q_metadataList>label[data-provider=byterover],.IIa07q_graphNode[data-provider=byterover]{--mn-provider-color:#0f9a83}.IIa07q_providerBadge[data-provider=supermemory],.IIa07q_readSourceCard[data-provider=supermemory],.IIa07q_bodyCard[data-provider=supermemory],.IIa07q_metadataList>label[data-provider=supermemory],.IIa07q_graphNode[data-provider=supermemory]{--mn-provider-color:#df4d72}.IIa07q_bodySwitch{min-height:28px;color:var(--mn-faint);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:0;font-size:12px;line-height:18px;display:flex}.IIa07q_bodySwitchTrack{box-sizing:border-box;background:var(--mn-line-strong);border-radius:999px;flex:none;width:36px;height:20px;padding:2px;transition:background-color .12s;position:relative}.IIa07q_bodySwitchTrack i{background:var(--dsw-alias-label-primary-foreground);border-radius:50%;width:16px;height:16px;transition:transform .12s;display:block}.IIa07q_bodySwitch:hover,.IIa07q_bodySwitch[aria-checked=true]{color:var(--mn-muted)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack{background:var(--dsw-alias-brand-primary)}.IIa07q_bodySwitch[aria-checked=true] .IIa07q_bodySwitchTrack i{transform:translate(16px)}.IIa07q_bodyCardActions{align-items:center;gap:8px;display:flex}.IIa07q_bodyCreateForm{gap:16px;padding-top:0}.IIa07q_createSection{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);gap:12px;padding:14px 16px;display:grid}.IIa07q_createSectionHeading{align-items:flex-start;gap:10px;display:flex}.IIa07q_createSectionHeading>span{min-width:22px;height:22px;color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;place-items:center;padding:0 6px;font-size:11px;font-weight:500;line-height:1;display:grid}.IIa07q_createSectionHeading>div{gap:2px;min-width:0;display:grid}.IIa07q_createSectionHeading strong{color:var(--mn-text);font-size:14px;font-weight:500;line-height:22px}.IIa07q_createSectionHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_createIdentityGrid{grid-template-columns:minmax(0,1fr);align-items:stretch;gap:12px;display:grid}.IIa07q_createIdentityGrid>label{align-content:start}.IIa07q_createIdentityGrid textarea{min-height:72px}.IIa07q_strategyForm{gap:16px;padding-top:0}.IIa07q_strategyLoading{border-radius:var(--dsw-radius-md);min-height:88px;color:var(--mn-faint);background:var(--mn-fill);justify-content:center;align-items:center;font-size:12px;display:flex;position:relative}.IIa07q_strategyLoading .IIa07q_sectionSpinner{top:10px;right:10px}.IIa07q_placementMode{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.IIa07q_placementMode legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_placementMode label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);cursor:pointer;grid-template-columns:16px minmax(0,1fr);align-items:center;gap:10px;min-width:0;padding:12px;display:grid;position:relative}.IIa07q_placementMode label:hover{background:var(--mn-hover)}.IIa07q_placementMode label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_placementMode label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_placementMode input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementMode span{gap:2px;display:grid}.IIa07q_placementMode strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementMode strong em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;margin-left:6px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_placementMode small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_placementPolicy{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);gap:10px;margin:0;padding:12px 14px;display:grid}.IIa07q_placementPolicyHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_placementPolicyHeading>div{gap:2px;display:grid}.IIa07q_placementPolicyHeading strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementPolicyHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_placementPolicyHeading>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_placementRuleGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_capabilityRules{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.IIa07q_capabilityRules legend{width:100%;color:var(--mn-faint);margin-bottom:4px;font-size:12px;line-height:18px}.IIa07q_capabilityRules label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);width:fit-content;min-height:28px;color:var(--mn-muted);cursor:pointer;align-items:center;gap:6px;padding:0 10px;font-size:12px;display:flex;position:relative}.IIa07q_capabilityRules label:hover{background:var(--mn-hover)}.IIa07q_capabilityRules label[data-selected]{border-color:var(--mn-field-line);color:var(--mn-text);background:var(--mn-fill)}.IIa07q_capabilityRules input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_placementCandidates>span,.IIa07q_placementCandidates>label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);grid-template-columns:28px minmax(0,1fr) 16px;align-items:center;gap:10px;min-width:0;padding:8px 10px;display:grid;position:relative}.IIa07q_placementCandidates>label{cursor:pointer}.IIa07q_placementCandidates>label:hover{background:var(--mn-hover)}.IIa07q_placementCandidates>[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_placementCandidates>label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_placementCandidates input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_placementCandidates>span>span:not(.IIa07q_candidateIcon),.IIa07q_placementCandidates>label>span:not(.IIa07q_candidateIcon){gap:2px;min-width:0;display:grid}.IIa07q_placementCandidates strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_placementCandidates small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerChoice{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0;padding:0;display:grid}.IIa07q_providerChoice legend{color:var(--mn-muted);margin-bottom:6px;font-size:12px;font-weight:500;line-height:18px}.IIa07q_providerChoice label{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-md);cursor:pointer;grid-template-columns:32px minmax(0,1fr) 16px;align-items:center;gap:10px;min-width:0;padding:10px 12px;display:grid;position:relative}.IIa07q_providerChoice label:hover{background:var(--mn-hover)}.IIa07q_providerChoice label[data-native]{grid-column:1/-1}.IIa07q_providerChoice label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_providerChoice label[data-disabled]{cursor:not-allowed;opacity:.5}.IIa07q_providerChoice input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_providerChoice span{gap:2px;display:grid}.IIa07q_providerChoice strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_providerChoice strong em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;margin-left:6px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_providerChoice label[data-selected] strong em{background:var(--mn-layer-1)}.IIa07q_providerChoice small{color:var(--mn-faint);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_providerChoiceIcon,.IIa07q_candidateIcon,.IIa07q_providerFieldIcon{box-sizing:border-box;border:.5px solid var(--mn-line-strong);background:var(--mn-layer-1);place-items:center;display:grid;overflow:hidden}.IIa07q_providerChoiceIcon{border-radius:var(--dsw-radius-sm);width:32px;height:32px;padding:4px}.IIa07q_candidateIcon{border-radius:var(--dsw-radius-sm);width:28px;height:28px;padding:4px}.IIa07q_providerFieldIcon{border-radius:var(--dsw-radius-sm);flex:none;width:32px;height:32px;padding:4px}.IIa07q_providerChoiceIcon>img,.IIa07q_providerChoiceIcon>svg,.IIa07q_candidateIcon>img,.IIa07q_candidateIcon>svg,.IIa07q_providerFieldIcon>img,.IIa07q_providerFieldIcon>svg{object-fit:contain;border-radius:4px;width:100%;height:100%;display:block}.IIa07q_choiceControl{box-sizing:border-box;border:1px solid var(--mn-field-line);background:var(--mn-layer-1);border-radius:4px;flex:none;place-items:center;width:16px;height:16px;display:grid;position:relative}.IIa07q_choiceControl[data-kind=radio]{border-radius:50%}[data-selected]>.IIa07q_choiceControl{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-brand-primary)}[data-selected]>.IIa07q_choiceControl[data-kind=check]:after{border-bottom:1.5px solid var(--dsw-alias-label-primary-foreground);border-left:1.5px solid var(--dsw-alias-label-primary-foreground);content:\"\";width:7px;height:4px;transform:translateY(-1px)rotate(-45deg)}[data-selected]>.IIa07q_choiceControl[data-kind=radio]:after{content:\"\";background:var(--dsw-alias-label-primary-foreground);border-radius:50%;width:6px;height:6px}.IIa07q_placementMode label:has(input:focus-visible),.IIa07q_providerChoice label:has(input:focus-visible),.IIa07q_capabilityRules label:has(input:focus-visible),.IIa07q_placementCandidates label:has(input:focus-visible){outline:var(--dsw-focus-ring-width,2px) solid var(--mn-focus);outline-offset:1px}.IIa07q_providerFields{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-md);gap:10px;padding:12px 14px;display:grid}.IIa07q_providerFieldHeading{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_providerFieldIdentity{align-items:center;gap:10px;min-width:0;display:flex}.IIa07q_providerFieldIdentity>div{gap:2px;min-width:0;display:grid}.IIa07q_providerFieldHeading strong{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_providerFieldHeading small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_providerFieldHeading>span{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_providerFields details{min-width:0}.IIa07q_providerFields summary{width:fit-content;color:var(--mn-muted);cursor:pointer;font-size:12px;line-height:18px}.IIa07q_providerFields summary:hover{color:var(--mn-text)}.IIa07q_providerEnableHint{color:var(--mn-faint);margin-top:8px;font-size:12px;line-height:18px;display:block}.IIa07q_providerAdvancedGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:8px;display:grid}.IIa07q_providerFieldControl .IIa07q_providerSecretClear{color:var(--mn-muted);cursor:pointer;align-items:center;gap:6px;font-size:12px;font-weight:400;display:flex}.IIa07q_providerWriteHint{color:var(--mn-faint);margin-top:4px;font-size:12px;line-height:18px;display:block}.IIa07q_placementReceipt{border-radius:var(--dsw-radius-sm);min-width:0;color:var(--mn-muted);background:var(--mn-fill);align-items:flex-start;gap:8px;margin:8px 0;padding:8px 10px;display:flex}.IIa07q_placementReceipt>span{flex:none;font-size:12px}.IIa07q_placementReceipt>div{grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;min-width:0;display:grid}.IIa07q_placementReceipt strong,.IIa07q_placementReceipt small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.IIa07q_placementReceipt strong{color:var(--mn-text);font-size:12px;font-weight:500;line-height:18px}.IIa07q_placementReceipt small{color:var(--mn-faint);font-size:11px;line-height:18px}.IIa07q_placementReceipt p{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;grid-column:1/-1;margin:0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_bodyCard>p{min-height:18px;color:var(--mn-muted);margin:8px 0;font-size:13px;line-height:20px}.IIa07q_bodyCard footer{border-top:.5px solid var(--mn-line);min-width:0;color:var(--mn-faint);flex-wrap:nowrap;gap:4px 12px;padding-top:8px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.IIa07q_bodyFooterBlock{text-overflow:ellipsis;white-space:nowrap;flex:0 auto;min-width:0;display:block;overflow:hidden}.IIa07q_bodyFooterGrow{flex:auto}.IIa07q_graphLayout{grid-template-columns:minmax(0,1fr) minmax(240px,280px);gap:12px;display:grid}.IIa07q_graphPanel,.IIa07q_graphInspector{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg)}.IIa07q_graphPanel{min-width:0;position:relative;overflow:hidden}.IIa07q_graphToolbar,.IIa07q_graphFooter{min-height:44px;color:var(--mn-faint);justify-content:space-between;align-items:center;gap:16px;padding:0 14px;font-size:12px;line-height:18px;display:flex}.IIa07q_graphToolbar{border-bottom:.5px solid var(--mn-line)}.IIa07q_graphToolbar>div:first-child{align-items:center;gap:8px;display:flex}.IIa07q_graphToolbar small{color:var(--mn-faint)}.IIa07q_liveDot{background:var(--mn-success);border-radius:50%;width:6px;height:6px}.IIa07q_graphLegend{flex-wrap:wrap;justify-content:flex-end;gap:4px 12px;display:flex}.IIa07q_graphLegend span{align-items:center;gap:6px;display:flex}.IIa07q_graphLegend span:before{content:\"\";background:var(--edge-color);border-radius:2px;width:14px;height:2px}.IIa07q_graphLegend [data-edge=temporal]{--edge-color:#87909f}.IIa07q_graphLegend [data-edge=scope]{--edge-color:#708199}.IIa07q_graphLegend [data-edge=scope]:before{background:repeating-linear-gradient(90deg, var(--edge-color) 0 4px, transparent 4px 7px)}.IIa07q_graphLegend [data-edge=semantic]{--edge-color:#4d7cfe}.IIa07q_graphLegend [data-edge=causal]{--edge-color:#ef6b5b}.IIa07q_graphLegend [data-edge=entity]{--edge-color:#22a879}.IIa07q_graphViewport{min-height:clamp(390px,42vw,560px);position:relative;overflow:hidden}.IIa07q_graphCanvasControls{z-index:2;border-radius:var(--dsw-radius-md);background:var(--dsw-specific-menu,var(--mn-layer-2));box-shadow:var(--dsw-elevation-soft);backdrop-filter:var(--dsw-menu-backdrop-filter);align-items:center;gap:4px;padding:4px;display:flex;position:absolute;top:10px;right:10px}.IIa07q_graphCanvasControls span{color:var(--mn-faint);align-items:center;gap:6px;padding:0 6px;font-size:12px;display:flex}.IIa07q_graphCanvasControls span i{background:var(--mn-accent);border-radius:50%;width:6px;height:6px}.IIa07q_graphCanvasControls button{border-radius:var(--dsw-radius-sm);min-height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;padding:0 10px;font-size:12px}.IIa07q_graphCanvasControls button:hover{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_graphCanvasControls button[data-active]{color:var(--mn-text);background:var(--mn-fill)}.IIa07q_graphSvg{touch-action:pan-y pinch-zoom;user-select:none;width:100%;height:clamp(390px,42vw,560px);display:block}.IIa07q_graphBackdrop{fill:var(--mn-layer-1)}.IIa07q_graphGridLine{stroke:var(--mn-line);stroke-width:.6px;opacity:.5}.IIa07q_graphEdge{fill:none;stroke:#87909f;stroke-width:1px;opacity:.32;vector-effect:non-scaling-stroke}.IIa07q_graphEdge[data-edge=scope]{stroke:#708199;stroke-dasharray:4 5;opacity:.28}.IIa07q_graphEdge[data-edge=semantic]{stroke:#4d7cfe;opacity:.48}.IIa07q_graphEdge[data-edge=causal]{stroke:#ef6b5b;opacity:.52}.IIa07q_graphEdge[data-edge=entity]{stroke:#22a879;stroke-width:1.45px;opacity:.78}.IIa07q_graphNode{--node:#8290a8;cursor:grab;touch-action:none;outline:none}.IIa07q_graphNode[data-dragging]{cursor:grabbing}.IIa07q_graphNode[data-category=decision]{--node:#ef8354}.IIa07q_graphNode[data-category=preference]{--node:#a879e1}.IIa07q_graphNode[data-category=fact]{--node:#4d7cfe}.IIa07q_graphNode[data-category=insight]{--node:#19a77d}.IIa07q_graphNode[data-category=context]{--node:#d8a624}.IIa07q_graphNode[data-kind=space]{--node:var(--mn-provider-color)}.IIa07q_graphNode[data-kind=entity]{--node:#2b9db9}.IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 18%, var(--mn-layer-1));stroke:color-mix(in srgb, var(--node) 60%, var(--mn-layer-1));stroke-width:1.5px;transition:r .16s}.IIa07q_nodeCore{fill:var(--node)}.IIa07q_nodeLabel{fill:var(--mn-muted);font:11px var(--mn-sans);pointer-events:auto}.IIa07q_nodeBodyLabel{fill:var(--mn-faint);font:500 11px var(--mn-sans);pointer-events:auto}.IIa07q_graphSvg[data-density=sparse] .IIa07q_nodeLabel{font-size:12px}.IIa07q_graphNode:hover .IIa07q_nodeHalo,.IIa07q_graphNode:focus .IIa07q_nodeHalo,.IIa07q_graphNode[data-selected] .IIa07q_nodeHalo{fill:color-mix(in srgb, var(--node) 28%, var(--mn-layer-1));stroke:var(--node)}.IIa07q_graphNode[data-selected] .IIa07q_nodeLabel{fill:var(--mn-text);font-weight:500}.IIa07q_graphFooter{border-top:.5px solid var(--mn-line);min-height:40px;color:var(--mn-faint)}.IIa07q_graphInspector{min-width:0;min-height:calc(clamp(390px,42vw,560px) + 84px);padding:16px;overflow:hidden}.IIa07q_inspectorEmpty{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;display:flex}.IIa07q_inspectorLogo{border-radius:var(--dsw-radius-lg);opacity:.72;width:48px;height:48px;margin-bottom:12px}.IIa07q_inspectorEmpty h3{margin:6px 0 2px;font-size:14px;font-weight:500;line-height:22px}.IIa07q_inspectorEmpty p{color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_inspectorHeading{justify-content:space-between;align-items:center;display:flex}.IIa07q_inspectorHeading button{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.IIa07q_inspectorHeading button:hover{background:var(--mn-hover)}.IIa07q_inspectorChips{flex-wrap:wrap;align-items:center;gap:6px;margin-top:20px;display:flex}.IIa07q_categoryChip{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px;display:inline-flex}.IIa07q_inspectorTitleRow{align-items:flex-start;gap:8px;min-width:0;margin:12px 0 20px;display:flex}.IIa07q_inspectorTitle{overflow-wrap:anywhere;white-space:pre-wrap;-webkit-line-clamp:6;-webkit-box-orient:vertical;flex:1;min-width:0;margin:0;font-size:14px;font-weight:400;line-height:22px;display:-webkit-box;overflow:hidden}.IIa07q_inspectorEye{border:.5px solid var(--mn-line-strong);border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--mn-muted);cursor:pointer;background:0 0;flex:none;place-items:center;transition:color .15s,background-color .15s;display:grid}.IIa07q_inspectorEye:hover{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_inspectorMeta{margin:0}.IIa07q_inspectorMeta>div{border-top:.5px solid var(--mn-line);gap:2px;padding:10px 0;display:grid}.IIa07q_inspectorMeta dt{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_inspectorMeta dd{overflow-wrap:anywhere;color:var(--mn-muted);margin:0;font-size:13px;line-height:20px}.IIa07q_inspectorActions{gap:8px;margin-top:20px;display:grid}.IIa07q_previewContent{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--mn-text);margin:0;font-size:14px;line-height:22px}.IIa07q_searchBar{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:14px}.IIa07q_queryField{width:100%;height:40px}.IIa07q_searchChoice{min-width:160px}.IIa07q_searchControls{justify-content:flex-end;align-items:flex-end;gap:12px;padding-top:12px;display:flex}.IIa07q_searchActions{align-items:center;gap:8px;display:flex}.IIa07q_agentAnswer{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);margin-bottom:16px;padding:16px}.IIa07q_agentAnswerHeading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.IIa07q_agentAnswerHeading span{color:var(--mn-faint);font-size:12px;font-weight:500;line-height:18px}.IIa07q_agentAnswerHeading h3{margin:2px 0 0;font-size:14px;font-weight:500;line-height:22px}.IIa07q_agentAnswerHeading>code{color:var(--mn-faint);font-size:11px}.IIa07q_agentAnswer>p{white-space:pre-wrap;color:var(--mn-text);margin:12px 0;font-size:14px;line-height:22px}.IIa07q_agentCitations{border-top:.5px solid var(--mn-line);flex-wrap:wrap;align-items:center;gap:6px;padding-top:10px;display:flex}.IIa07q_agentCitations small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_agentCitations span{max-width:100%;color:var(--mn-muted);background:var(--mn-fill);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;padding:1px 8px;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_fieldWide{color:var(--mn-muted);gap:6px;font-size:12px;font-weight:500;line-height:18px;display:grid}.IIa07q_supervisedForm textarea:focus{border-color:var(--mn-accent)}.IIa07q_singleColumn{max-width:830px}.IIa07q_resultLayout{grid-template-columns:minmax(0,1.15fr) minmax(300px,.85fr);align-items:start;gap:16px;display:grid}.IIa07q_results,.IIa07q_relatedPane,.IIa07q_entityResults{min-width:0}.IIa07q_relatedPane{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);-webkit-overflow-scrolling:touch;max-height:calc(100dvh - 230px);padding:14px;scroll-margin-top:14px;position:sticky;top:12px;overflow:auto}.IIa07q_relatedSource{border-radius:var(--dsw-radius-sm);color:var(--mn-muted);background:var(--mn-fill);margin:0 0 12px;padding:10px 12px;font-size:13px;line-height:20px}.IIa07q_insightCard{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);min-width:0;margin-bottom:8px;padding:14px 16px;transition:background-color .15s}.IIa07q_insightCard:hover{background:color-mix(in srgb, var(--mn-hover) 50%, transparent)}.IIa07q_cardTop{justify-content:space-between;align-items:center;gap:12px;display:flex}.IIa07q_badges,.IIa07q_tags,.IIa07q_entities{flex-wrap:wrap;gap:6px;display:flex}.IIa07q_badge{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_id{color:var(--mn-faint);font-size:11px}.IIa07q_content{white-space:pre-wrap;overflow-wrap:anywhere;margin:10px 0;font-size:14px;line-height:22px}.IIa07q_tags{color:var(--mn-accent);font-size:12px;line-height:18px}.IIa07q_entities{margin-top:8px}.IIa07q_entities span{border:.5px solid var(--mn-field-line);color:var(--mn-faint);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_cardActions{border-top:.5px solid var(--mn-line);justify-content:flex-end;align-items:center;gap:4px;min-height:32px;margin-top:10px;padding-top:8px;display:flex}.IIa07q_entityLayout{grid-template-columns:264px minmax(0,1fr);align-items:start;gap:16px;display:grid}.IIa07q_entityRail{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);padding:12px;position:sticky;top:0}.IIa07q_entitySearch{grid-template-columns:minmax(0,1fr) auto;gap:8px;display:grid}.IIa07q_entitySearch input{min-width:0}.IIa07q_entityHeading{justify-content:space-between;align-items:center;margin:16px 4px 6px;display:flex}.IIa07q_entityHeading small{color:var(--mn-faint);font-size:12px}.IIa07q_entityList{gap:2px;display:grid}.IIa07q_entityList button{border-radius:var(--dsw-radius-sm);min-height:32px;color:var(--mn-muted);cursor:pointer;text-align:left;background:0 0;border:0;justify-content:space-between;align-items:center;gap:10px;padding:0 10px;display:flex}.IIa07q_entityList button:hover,.IIa07q_entityList button[aria-pressed=true]{color:var(--mn-text);background:var(--mn-hover)}.IIa07q_entityList button[aria-pressed=true]{background:var(--mn-fill)}.IIa07q_entityList button>span{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.IIa07q_entityList strong{color:var(--mn-faint);font-variant-numeric:tabular-nums;flex:none;font-size:12px;font-weight:400}.IIa07q_entityResults>.IIa07q_emptyState{min-height:360px}.IIa07q_entitySection{min-width:0}.IIa07q_entitySection+.IIa07q_entitySection{margin-top:24px}.IIa07q_entitySectionBody{min-height:116px}.IIa07q_entityQuiet{color:var(--mn-faint);margin:0 0 8px;padding:12px 2px;font-size:13px;line-height:20px}.IIa07q_entityRetry{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;display:flex}.IIa07q_entityRelatedHead{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.IIa07q_entityRelatedHead>div:first-child{flex:1;min-width:0}.IIa07q_entityRelatedHead>button{flex:none;margin-top:2px}.IIa07q_insightSkeleton{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);align-content:start;gap:12px;min-height:108px;margin-bottom:8px;padding:16px;display:grid;position:relative;overflow:hidden}.IIa07q_insightSkeleton>span{background:var(--mn-fill);border-radius:999px;height:10px;display:block}.IIa07q_insightSkeleton>span:first-child{width:36%}.IIa07q_insightSkeleton>span:nth-child(2){width:94%}.IIa07q_insightSkeleton>span:nth-child(3){width:68%}.IIa07q_entityRailSkeleton{border-radius:var(--dsw-radius-sm);background:color-mix(in srgb, var(--mn-fill) 55%, transparent);height:32px;display:block;position:relative;overflow:hidden}.IIa07q_insightSkeleton:after,.IIa07q_entityRailSkeleton:after{content:\"\";background:linear-gradient(105deg, transparent 20%, color-mix(in srgb, var(--mn-text) 5%, transparent) 45%, transparent 70%);pointer-events:none;animation:1.2s ease-in-out infinite IIa07q_entity-skeleton-sweep;position:absolute;inset:0;transform:translate(-120%)}@keyframes IIa07q_entity-skeleton-sweep{to{transform:translate(120%)}}@media (prefers-reduced-motion:reduce){.IIa07q_insightSkeleton:after,.IIa07q_entityRailSkeleton:after{animation:none}}.IIa07q_readSourceCard[data-status=loading] .IIa07q_readSourceSignal{background:var(--mn-idle)}.IIa07q_supervisedComposer{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);overflow:hidden}.IIa07q_supervisedForm{padding:16px}.IIa07q_candidateHeading{justify-content:space-between;align-items:center;gap:8px;min-width:0;margin-bottom:8px;display:flex}.IIa07q_candidateHeading>label{color:var(--mn-text);font-size:13px;font-weight:500;line-height:20px}.IIa07q_supervisedForm textarea{resize:vertical;border:.5px solid var(--mn-field-line);border-radius:var(--dsw-radius-md);width:100%;color:var(--mn-text);background:var(--mn-input);outline:0;padding:10px 12px;font-size:14px;line-height:22px}.IIa07q_sessionHint{color:var(--mn-danger);margin:8px 0 0;font-size:12px;line-height:18px}.IIa07q_fieldWide{grid-column:1/-1}.IIa07q_advancedWrite{border-top:.5px solid var(--mn-line)}.IIa07q_advancedWrite summary{cursor:pointer;justify-content:space-between;align-items:center;gap:16px;min-height:56px;padding:10px 16px;list-style:none;display:flex}.IIa07q_advancedWrite summary:hover{background:var(--mn-hover)}.IIa07q_advancedWrite summary::-webkit-details-marker{display:none}.IIa07q_advancedWrite summary>span:first-child{gap:2px;display:grid}.IIa07q_advancedWrite summary strong{font-size:13px;font-weight:500;line-height:20px}.IIa07q_advancedWrite summary small{color:var(--mn-faint);font-size:12px;line-height:18px}.IIa07q_advancedWrite summary>span:last-child{color:var(--mn-faint);font-size:16px;line-height:1}.IIa07q_advancedWrite[open] summary{border-bottom:.5px solid var(--mn-line)}.IIa07q_advancedWrite[open] summary>span:last-child{font-size:0}.IIa07q_advancedWrite[open] summary>span:last-child:after{content:\"−\";font-size:16px}.IIa07q_manualForm{padding:4px 16px 16px}.IIa07q_manualActions{justify-content:space-between;align-items:center;gap:16px;margin-top:16px;display:flex}.IIa07q_manualActions p{max-width:520px;color:var(--mn-faint);margin:0;font-size:12px;line-height:18px}.IIa07q_listToolbar{border:.5px solid var(--mn-card-line);border-radius:var(--dsw-radius-lg);grid-template-columns:minmax(0,1fr) 180px auto;gap:8px;padding:12px;display:grid}.IIa07q_listToolbar>*{min-width:0}.IIa07q_listNotice{color:var(--mn-faint);margin:10px 2px 16px;font-size:12px;line-height:18px}.IIa07q_listNotice span{color:var(--mn-success);background:color-mix(in srgb, var(--mn-success) 10%, transparent);border-radius:999px;margin-right:8px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.IIa07q_memoryList{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:8px;display:grid}.IIa07q_memoryList .IIa07q_insightCard{height:100%;margin:0}.IIa07q_modalFooterNote{max-width:54ch;color:var(--mn-faint);margin:0 auto 0 0;font-size:12px;line-height:18px}.IIa07q_modalInlineStatus{color:var(--mn-muted);overflow-wrap:anywhere;margin:12px 0 0;font-size:12px;line-height:18px}.IIa07q_metadataDialog{gap:12px;display:grid}.IIa07q_metadataToolbar{color:var(--mn-faint);justify-content:space-between;align-items:center;gap:12px;font-size:12px;line-height:18px;display:flex}.IIa07q_metadataToolbar>span{align-items:center;gap:8px;min-width:0;display:flex}.IIa07q_metadataToolbar em{color:var(--mn-muted);background:var(--mn-fill);border-radius:999px;padding:1px 8px;font-size:11px;font-style:normal;font-weight:500;line-height:17px}.IIa07q_metadataList{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.IIa07q_metadataEmpty{border-radius:var(--dsw-radius-md);color:var(--mn-faint);background:var(--mn-fill);text-align:center;grid-column:1/-1;padding:20px;font-size:12px}.IIa07q_metadataList>label{cursor:pointer;grid-template-columns:16px minmax(0,1fr);align-items:start;gap:10px;min-width:0;min-height:76px;padding:12px;display:grid;position:relative}.IIa07q_metadataList>label:hover{background:var(--mn-hover)}.IIa07q_metadataList>label[data-selected]{border-color:var(--mn-field-line);background:var(--mn-fill)}.IIa07q_metadataList>label[data-refreshing]{overflow:hidden}.IIa07q_metadataList>label[data-refreshing]:after{content:\"\";background:linear-gradient(105deg, transparent 20%, color-mix(in srgb, var(--mn-accent) 10%, transparent) 45%, transparent 70%);pointer-events:none;animation:.9s ease-in-out infinite IIa07q_mnemon-metadata-sweep;position:absolute;inset:0;transform:translate(-120%)}.IIa07q_metadataList>label[data-refreshed]{animation:.9s ease-out IIa07q_mnemon-metadata-refreshed}.IIa07q_metadataList>label[data-failed]{border-color:color-mix(in srgb, var(--mn-danger) 40%, transparent)}.IIa07q_metadataList>label>input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.IIa07q_metadataList>label>span{gap:4px;min-width:0;display:grid}.IIa07q_metadataList strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:500;line-height:20px;overflow:hidden}.IIa07q_metadataList small{color:var(--mn-faint);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:18px;display:-webkit-box;overflow:hidden}.IIa07q_metadataList>label>span>span{align-items:center;gap:6px;min-width:0;display:flex}.IIa07q_metadataList code{color:var(--mn-faint);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.IIa07q_metadataTaskStatus{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;line-height:18px;overflow:hidden}.IIa07q_metadataTaskStatus[data-status=running]{color:var(--mn-faint)}.IIa07q_metadataTaskStatus[data-status=success]{color:var(--mn-success)}.IIa07q_metadataTaskStatus[data-status=error]{color:var(--mn-danger)}@media (prefers-reduced-motion:reduce){.IIa07q_metadataList>label[data-refreshing]:after,.IIa07q_metadataList>label[data-refreshed]{animation:none}}@media (width<=1000px){.IIa07q_graphLayout{display:block;position:relative}.IIa07q_graphInspector{width:auto;min-height:0;box-shadow:none;margin-top:12px;position:static;overflow:visible}.IIa07q_graphInspector[data-empty]{display:none}.IIa07q_resultLayout{grid-template-columns:1fr}.IIa07q_relatedPane{grid-row:1;max-height:none;position:static}.IIa07q_memoryList{grid-template-columns:1fr}}@media (width<=760px){.IIa07q_metadataList{grid-template-columns:1fr}.IIa07q_modalFooterNote{max-width:none;margin:0}.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30vh,210px)}.IIa07q_entityLayout{grid-template-columns:1fr}.IIa07q_manualActions{flex-direction:column;align-items:stretch}.IIa07q_entityRail{position:static}.IIa07q_searchControls{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.IIa07q_searchActions{grid-column:1/-1}.IIa07q_searchActions>button{flex:1}.IIa07q_listToolbar{grid-template-columns:1fr}.IIa07q_bodyDirectoryHeader{grid-template-columns:minmax(0,1fr);display:grid}.IIa07q_bodyDirectoryHeader>div{min-width:0}.IIa07q_bodyDirectoryPath{max-width:100%}.IIa07q_bodyDirectoryControls{flex-wrap:wrap;justify-content:flex-start;padding-right:0}.IIa07q_createIdentityGrid,.IIa07q_placementMode,.IIa07q_placementRuleGrid,.IIa07q_placementCandidates,.IIa07q_providerChoice,.IIa07q_providerAdvancedGrid{grid-template-columns:1fr}.IIa07q_graphViewport{min-height:360px}.IIa07q_graphSvg{height:390px}.IIa07q_graphCanvasControls{top:8px;right:8px}.IIa07q_graphCanvasControls span{display:none}}@media (width<=520px){.IIa07q_memoryHeaderActions{width:100%}.IIa07q_memoryHeaderActions>button{flex:1}.IIa07q_cardTop{flex-direction:column;align-items:flex-start}.IIa07q_cardActions{flex-wrap:wrap;align-items:stretch}.IIa07q_cardActions button{flex:1}.IIa07q_searchControls{grid-template-columns:1fr}}@supports (height:100dvh){@media (width<=760px){.IIa07q_modal .IIa07q_supervisedForm textarea{min-height:clamp(130px,30dvh,210px)}}}@media (width<=1000px) and (height<=760px){.IIa07q_graphViewport{min-height:300px}.IIa07q_graphSvg{height:300px}}";
|
|
4021
4164
|
const tagId$6 = "dsh-mnemon-source-memory-spaces/presentation/page.module.css";
|
|
4022
4165
|
if (typeof document !== "undefined") {
|
|
4023
4166
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]");
|
|
@@ -4125,6 +4268,7 @@ window.__ModuleLoader__.load({
|
|
|
4125
4268
|
"modalFooterNote": "IIa07q_modalFooterNote",
|
|
4126
4269
|
"modalInlineStatus": "IIa07q_modalInlineStatus",
|
|
4127
4270
|
"muted": "IIa07q_muted",
|
|
4271
|
+
"newSpaceBadge": "IIa07q_newSpaceBadge",
|
|
4128
4272
|
"nodeBodyLabel": "IIa07q_nodeBodyLabel",
|
|
4129
4273
|
"nodeCore": "IIa07q_nodeCore",
|
|
4130
4274
|
"nodeHalo": "IIa07q_nodeHalo",
|
|
@@ -4155,6 +4299,7 @@ window.__ModuleLoader__.load({
|
|
|
4155
4299
|
"readSourceSignal": "IIa07q_readSourceSignal",
|
|
4156
4300
|
"readSourceState": "IIa07q_readSourceState",
|
|
4157
4301
|
"readSources": "IIa07q_readSources",
|
|
4302
|
+
"rediscoveryNotice": "IIa07q_rediscoveryNotice",
|
|
4158
4303
|
"relatedPane": "IIa07q_relatedPane",
|
|
4159
4304
|
"relatedSource": "IIa07q_relatedSource",
|
|
4160
4305
|
"resultLayout": "IIa07q_resultLayout",
|
|
@@ -6344,7 +6489,7 @@ window.__ModuleLoader__.load({
|
|
|
6344
6489
|
window.setTimeout(() => URL.revokeObjectURL(url), 0);
|
|
6345
6490
|
}
|
|
6346
6491
|
/** Backup and migration of the data directory as one ZIP; the directory itself shows beside the storage choice. */
|
|
6347
|
-
function MnemonPackSection({ connection, sessionId, workspaceId, target, t }) {
|
|
6492
|
+
function MnemonPackSection({ connection, sessionId, workspaceId, target, onImported, t }) {
|
|
6348
6493
|
const client = (0, react.useMemo)(() => connection === void 0 ? null : new MnemonClient(connection, sessionId, workspaceId), [
|
|
6349
6494
|
connection,
|
|
6350
6495
|
sessionId,
|
|
@@ -6410,6 +6555,7 @@ window.__ModuleLoader__.load({
|
|
|
6410
6555
|
setFailed(message(reason));
|
|
6411
6556
|
} finally {
|
|
6412
6557
|
setBusy(null);
|
|
6558
|
+
onImported?.();
|
|
6413
6559
|
}
|
|
6414
6560
|
};
|
|
6415
6561
|
const items = pending?.preview.manifest.summary.reduce((sum, component) => sum + component.items, 0) ?? 0;
|
|
@@ -6565,7 +6711,7 @@ window.__ModuleLoader__.load({
|
|
|
6565
6711
|
case "document-archive": return t("review.opArchive", { id: operation.documentId });
|
|
6566
6712
|
}
|
|
6567
6713
|
}
|
|
6568
|
-
function stamp
|
|
6714
|
+
function stamp(value) {
|
|
6569
6715
|
const parsed = new Date(value);
|
|
6570
6716
|
return Number.isNaN(parsed.getTime()) ? value : parsed.toLocaleString();
|
|
6571
6717
|
}
|
|
@@ -6667,7 +6813,7 @@ window.__ModuleLoader__.load({
|
|
|
6667
6813
|
setComplaint(t("review.noSelection"));
|
|
6668
6814
|
return;
|
|
6669
6815
|
}
|
|
6670
|
-
submit(entry.id, (api) => api.applyReview(entry.id, selection).then((result) => {
|
|
6816
|
+
submit(entry.id, (api) => api.applyReview(entry.id, selection).finally(() => props.onApplied?.()).then((result) => {
|
|
6671
6817
|
setNotice(t("review.applied", { count: result.applied }));
|
|
6672
6818
|
setChosen((previous) => {
|
|
6673
6819
|
const next = { ...previous };
|
|
@@ -6746,12 +6892,12 @@ window.__ModuleLoader__.load({
|
|
|
6746
6892
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.meta", {
|
|
6747
6893
|
count: entry.operations.length,
|
|
6748
6894
|
machine: entry.machine.label,
|
|
6749
|
-
time: stamp
|
|
6895
|
+
time: stamp(entry.createdAt)
|
|
6750
6896
|
}) }),
|
|
6751
6897
|
entry.foreignMachines.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.foreign", { machines: entry.foreignMachines.join(", ") }) }),
|
|
6752
6898
|
entry.appliedAt !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
6753
6899
|
className: MnemonSettingsCard_module_css_default.syncSuccess,
|
|
6754
|
-
children: t("review.appliedAt", { time: stamp
|
|
6900
|
+
children: t("review.appliedAt", { time: stamp(entry.appliedAt) })
|
|
6755
6901
|
}),
|
|
6756
6902
|
(entry.appliedOperations ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("review.appliedCount", {
|
|
6757
6903
|
count: (entry.appliedOperations ?? []).length,
|
|
@@ -6867,14 +7013,6 @@ window.__ModuleLoader__.load({
|
|
|
6867
7013
|
})]
|
|
6868
7014
|
})
|
|
6869
7015
|
}),
|
|
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
7016
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
6879
7017
|
className: MnemonSettingsCard_module_css_default.reviewGuidance,
|
|
6880
7018
|
children: [
|
|
@@ -6947,16 +7085,79 @@ window.__ModuleLoader__.load({
|
|
|
6947
7085
|
});
|
|
6948
7086
|
}
|
|
6949
7087
|
//#endregion
|
|
6950
|
-
//#region src/client/
|
|
6951
|
-
/**
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
|
|
6955
|
-
|
|
6956
|
-
|
|
6957
|
-
|
|
6958
|
-
*/
|
|
6959
|
-
|
|
7088
|
+
//#region src/client/sync-view.ts
|
|
7089
|
+
/** The transport one repository address uses. */
|
|
7090
|
+
function transportOf(url) {
|
|
7091
|
+
const value = url.trim();
|
|
7092
|
+
if (/^https:\/\//iu.test(value)) return "https";
|
|
7093
|
+
if (/^ssh:\/\//iu.test(value) || /^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+:/u.test(value)) return "ssh";
|
|
7094
|
+
return "local";
|
|
7095
|
+
}
|
|
7096
|
+
/** Whether an address is HTTPS on github.com, the only host a GitHub sign-in is offered to. */
|
|
7097
|
+
function onGitHub(url) {
|
|
7098
|
+
try {
|
|
7099
|
+
const parsed = new URL(url.trim());
|
|
7100
|
+
return parsed.protocol === "https:" && parsed.hostname.toLowerCase() === "github.com";
|
|
7101
|
+
} catch {
|
|
7102
|
+
return false;
|
|
7103
|
+
}
|
|
7104
|
+
}
|
|
7105
|
+
/** A repository address as a reader recognizes it: host and path, without the scheme or `.git`. */
|
|
7106
|
+
function repositoryName(url) {
|
|
7107
|
+
const value = url.trim();
|
|
7108
|
+
if (transportOf(value) !== "https" && !/^ssh:\/\//iu.test(value)) return value;
|
|
7109
|
+
try {
|
|
7110
|
+
const parsed = new URL(value);
|
|
7111
|
+
return (parsed.host + parsed.pathname).replace(/\.git$/u, "").replace(/\/$/u, "");
|
|
7112
|
+
} catch {
|
|
7113
|
+
return value;
|
|
7114
|
+
}
|
|
7115
|
+
}
|
|
7116
|
+
function repositoryProblem(url) {
|
|
7117
|
+
const value = url.trim();
|
|
7118
|
+
if (value === "") return void 0;
|
|
7119
|
+
if (value.length > 2e3 || /\s/u.test(value)) return "format";
|
|
7120
|
+
if (/^[A-Za-z][A-Za-z0-9+.-]*:\/\//u.test(value)) {
|
|
7121
|
+
if (!/^(https|ssh):\/\/[^\s/]+(?::\d+)?\/[^\s]+$/u.test(value)) return "format";
|
|
7122
|
+
return /^https:\/\/[^/]*@/u.test(value) ? "credentials" : void 0;
|
|
7123
|
+
}
|
|
7124
|
+
if (/^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+:[^\s]+$/u.test(value)) return void 0;
|
|
7125
|
+
return value.startsWith("/") || /^[A-Za-z]:[\\/]/u.test(value) || value.startsWith("\\\\") ? void 0 : "format";
|
|
7126
|
+
}
|
|
7127
|
+
/** A Git branch name, as the Host checks it. */
|
|
7128
|
+
function branchValid(value) {
|
|
7129
|
+
const name = value.trim();
|
|
7130
|
+
return name !== "" && name.length <= 200 && /^[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(name) && !name.includes("..") && !name.includes("//") && !name.includes("@{") && !name.endsWith("/") && !name.endsWith(".") && !name.endsWith(".lock");
|
|
7131
|
+
}
|
|
7132
|
+
/** A directory inside the branch, as the Host checks it. */
|
|
7133
|
+
function directoryValid(value) {
|
|
7134
|
+
const raw = value.trim().replaceAll("\\", "/");
|
|
7135
|
+
if (raw === "" || raw.length > 400 || /^[A-Za-z]:/u.test(raw)) return false;
|
|
7136
|
+
const parts = raw.split("/").filter((part) => part !== "");
|
|
7137
|
+
return parts.length > 0 && !parts.some((part) => part === "." || part === ".." || part.includes(":"));
|
|
7138
|
+
}
|
|
7139
|
+
function emailValid(value) {
|
|
7140
|
+
const email = value.trim();
|
|
7141
|
+
return email.length <= 320 && /^[^\s<>@]+@[^\s<>@]+$/u.test(email);
|
|
7142
|
+
}
|
|
7143
|
+
/** A name for this computer, as the Host stores one: one line, at most the shared limit. */
|
|
7144
|
+
function machineNameValid(value) {
|
|
7145
|
+
const name = value.trim();
|
|
7146
|
+
return name !== "" && name.length <= 120 && !/[\p{Cc}\u2028\u2029]/u.test(name);
|
|
7147
|
+
}
|
|
7148
|
+
/** A GitHub repository name, as GitHub accepts one. */
|
|
7149
|
+
function repositoryNameValid(value) {
|
|
7150
|
+
return /^(?!\.\.?$)[A-Za-z0-9._-]{1,100}$/u.test(value.trim());
|
|
7151
|
+
}
|
|
7152
|
+
function authorModeOf(name, email) {
|
|
7153
|
+
if (name === "dsh-mnemon sync" && email === "mnemon@localhost") return "default";
|
|
7154
|
+
if (name === "" && email === "") return "machine";
|
|
7155
|
+
return "custom";
|
|
7156
|
+
}
|
|
7157
|
+
/** The channel identity as a commit shows it. */
|
|
7158
|
+
const DEFAULT_AUTHOR = "dsh-mnemon sync <mnemon@localhost>";
|
|
7159
|
+
/** The intervals automatic sync offers, in minutes; off first, then an hour up to a week. */
|
|
7160
|
+
const AUTO_SYNC_CHOICES = [
|
|
6960
7161
|
0,
|
|
6961
7162
|
60,
|
|
6962
7163
|
180,
|
|
@@ -6966,79 +7167,488 @@ window.__ModuleLoader__.load({
|
|
|
6966
7167
|
4320,
|
|
6967
7168
|
10080
|
|
6968
7169
|
];
|
|
6969
|
-
/** One interval as
|
|
7170
|
+
/** One interval as a reader reads it. */
|
|
6970
7171
|
function intervalLabel(t, minutes) {
|
|
6971
|
-
if (minutes <= 0) return t("config.
|
|
6972
|
-
if (minutes
|
|
6973
|
-
return t("config.
|
|
7172
|
+
if (minutes <= 0) return t("config.syncAutoOff");
|
|
7173
|
+
if (minutes === 60) return t("config.syncAutoHour");
|
|
7174
|
+
if (minutes === 1440) return t("config.syncAutoDay");
|
|
7175
|
+
if (minutes % 1440 === 0) return t("config.syncAutoDays", { days: minutes / 1440 });
|
|
7176
|
+
return t("config.syncAutoHours", { hours: minutes / 60 });
|
|
7177
|
+
}
|
|
7178
|
+
/** A time as a short local stamp: the time alone today, the date beside it otherwise. */
|
|
7179
|
+
function when(value, now = /* @__PURE__ */ new Date()) {
|
|
7180
|
+
if (value === void 0) return "";
|
|
7181
|
+
const at = new Date(value);
|
|
7182
|
+
if (Number.isNaN(at.getTime())) return value;
|
|
7183
|
+
return at.getFullYear() === now.getFullYear() && at.getMonth() === now.getMonth() && at.getDate() === now.getDate() ? at.toLocaleTimeString(void 0, {
|
|
7184
|
+
hour: "2-digit",
|
|
7185
|
+
minute: "2-digit"
|
|
7186
|
+
}) : at.toLocaleString(void 0, {
|
|
7187
|
+
year: "numeric",
|
|
7188
|
+
month: "short",
|
|
7189
|
+
day: "numeric",
|
|
7190
|
+
hour: "2-digit",
|
|
7191
|
+
minute: "2-digit"
|
|
7192
|
+
});
|
|
7193
|
+
}
|
|
7194
|
+
/** Why a remote could not be read, said for the transport the repository uses. */
|
|
7195
|
+
function issueText(t, issue, url, error) {
|
|
7196
|
+
const transport = transportOf(url);
|
|
7197
|
+
switch (issue) {
|
|
7198
|
+
case "auth":
|
|
7199
|
+
if (transport === "https") return onGitHub(url) ? t("config.syncIssueAuthHttps") : t("config.syncIssueAuthToken");
|
|
7200
|
+
return transport === "ssh" ? t("config.syncIssueAuthSsh") : t("config.syncIssueAuth");
|
|
7201
|
+
case "not-found": return onGitHub(url) ? t("config.syncIssueNotFoundGitHub") : t("config.syncIssueNotFound");
|
|
7202
|
+
case "network": return t("config.syncIssueNetwork");
|
|
7203
|
+
case "timeout": return t("config.syncIssueTimeout");
|
|
7204
|
+
default: return t("config.syncIssueUnknown", { error: error ?? "" });
|
|
7205
|
+
}
|
|
7206
|
+
}
|
|
7207
|
+
const REMOTE_ISSUE = {
|
|
7208
|
+
"remote-auth": "auth",
|
|
7209
|
+
"remote-not-found": "not-found",
|
|
7210
|
+
"remote-network": "network",
|
|
7211
|
+
"remote-timeout": "timeout"
|
|
7212
|
+
};
|
|
7213
|
+
/** A failure the Host named, in this page's language; anything it could not name keeps its own words. */
|
|
7214
|
+
function failureText(t, reason, message, url) {
|
|
7215
|
+
const issue = reason === void 0 ? void 0 : REMOTE_ISSUE[reason];
|
|
7216
|
+
if (issue !== void 0) return issueText(t, issue, url, message);
|
|
7217
|
+
switch (reason) {
|
|
7218
|
+
case "busy": return t("config.syncReasonBusy");
|
|
7219
|
+
case "no-repository": return t("config.syncReasonNoRepository");
|
|
7220
|
+
case "git-missing": return t("config.syncReasonGitMissing");
|
|
7221
|
+
case "remote-empty": return t("config.syncReasonRemoteEmpty");
|
|
7222
|
+
case "push-rejected": return t("config.syncReasonRejected");
|
|
7223
|
+
case "github-unauthorized": return t("config.syncGitHubExpiredGrant");
|
|
7224
|
+
default: return message;
|
|
7225
|
+
}
|
|
7226
|
+
}
|
|
7227
|
+
/** The reason a thrown failure carries, when the Host named one. */
|
|
7228
|
+
function reasonOf(error) {
|
|
7229
|
+
const reason = error instanceof Error ? error.reason : void 0;
|
|
7230
|
+
return typeof reason === "string" ? reason : void 0;
|
|
7231
|
+
}
|
|
7232
|
+
/** How a connected repository is authenticated, said as briefly as the state line allows. */
|
|
7233
|
+
function credentialText(t, status) {
|
|
7234
|
+
const transport = transportOf(status.config.repoUrl ?? "");
|
|
7235
|
+
if (transport === "ssh") return t("config.syncViaSsh");
|
|
7236
|
+
if (transport === "local") return void 0;
|
|
7237
|
+
switch (status.config.credentialSource) {
|
|
7238
|
+
case "github": return status.config.credentialLogin === void 0 ? t("config.syncViaGitHubAnonymous") : t("config.syncViaGitHub", { login: status.config.credentialLogin });
|
|
7239
|
+
case "environment": return t("config.syncViaEnvironment", { env: MNEMON_SYNC_TOKEN_ENV });
|
|
7240
|
+
case "token": return t("config.syncViaToken");
|
|
7241
|
+
default: return;
|
|
7242
|
+
}
|
|
6974
7243
|
}
|
|
6975
|
-
|
|
6976
|
-
|
|
6977
|
-
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
};
|
|
7244
|
+
//#endregion
|
|
7245
|
+
//#region src/client/MnemonSyncDialogs.tsx
|
|
7246
|
+
/** How many backups one page of the branch history holds. */
|
|
7247
|
+
const HISTORY_PAGE = 20;
|
|
7248
|
+
/** How many conflicting pairs the comparison lists before it only counts them. */
|
|
7249
|
+
const SHOWN_CONFLICTS = 5;
|
|
7250
|
+
/** One component's item count as a reader reads it. */
|
|
7251
|
+
function componentCount(t, component, count) {
|
|
7252
|
+
if (component === "runtime") return t("config.syncCountRuntime", { count });
|
|
7253
|
+
if (component === "documents") return t("config.syncCountDocuments", { count });
|
|
7254
|
+
return t("config.syncCountSpaces", { count });
|
|
7255
|
+
}
|
|
7256
|
+
function componentName(t, component) {
|
|
7257
|
+
if (component === "runtime") return t("config.syncComponentRuntime");
|
|
7258
|
+
if (component === "documents") return t("config.syncComponentDocuments");
|
|
7259
|
+
return t("config.syncComponentSpaces");
|
|
7260
|
+
}
|
|
7261
|
+
function clip(value, max) {
|
|
7262
|
+
const text = value.replace(/\s+/gu, " ").trim();
|
|
7263
|
+
return text.length <= max ? text : text.slice(0, max - 1) + "…";
|
|
6986
7264
|
}
|
|
6987
|
-
/**
|
|
6988
|
-
|
|
6989
|
-
|
|
7265
|
+
/** The commit message a sync writes on its own, which says nothing a backup's time does not. */
|
|
7266
|
+
const AUTOMATIC_MESSAGE = /^Mnemon sync \d{4}-\d{2}-\d{2}T[\d:.]+Z$/u;
|
|
7267
|
+
function summaryLine(t, summary) {
|
|
7268
|
+
return summary.map((entry) => componentCount(t, entry.component, entry.items)).join(" · ");
|
|
6990
7269
|
}
|
|
6991
7270
|
/**
|
|
6992
|
-
*
|
|
6993
|
-
*
|
|
6994
|
-
*
|
|
7271
|
+
* The versions the repository holds, newest first: when each was synced, from
|
|
7272
|
+
* which computer, and what it held. A page is read at a time; the commit is a
|
|
7273
|
+
* quiet tag, because the time and the computer are what a reader looks for.
|
|
6995
7274
|
*/
|
|
6996
|
-
function
|
|
6997
|
-
const
|
|
6998
|
-
const
|
|
6999
|
-
const
|
|
7000
|
-
|
|
7001
|
-
const
|
|
7002
|
-
|
|
7003
|
-
|
|
7004
|
-
|
|
7005
|
-
|
|
7006
|
-
|
|
7275
|
+
function SyncHistoryDialog({ client, repoUrl, t, onClose }) {
|
|
7276
|
+
const [history, setHistory] = (0, react.useState)(null);
|
|
7277
|
+
const [busy, setBusy] = (0, react.useState)(true);
|
|
7278
|
+
const [failed, setFailed] = (0, react.useState)(null);
|
|
7279
|
+
const [capped, setCapped] = (0, react.useState)(false);
|
|
7280
|
+
const load = (0, react.useCallback)(async (limit) => {
|
|
7281
|
+
setBusy(true);
|
|
7282
|
+
setFailed(null);
|
|
7283
|
+
try {
|
|
7284
|
+
const page = await client.syncBackups(limit);
|
|
7285
|
+
setHistory((current) => {
|
|
7286
|
+
if (current === null || limit === void 0) return page;
|
|
7287
|
+
const fresh = page.commits.filter((commit) => !current.commits.some((held) => held.commit === commit.commit));
|
|
7288
|
+
if (fresh.length === 0) setCapped(true);
|
|
7289
|
+
return {
|
|
7290
|
+
...page,
|
|
7291
|
+
commits: [...current.commits, ...fresh]
|
|
7292
|
+
};
|
|
7293
|
+
});
|
|
7294
|
+
} catch (reason) {
|
|
7295
|
+
setFailed(failureText(t, reasonOf(reason), message(reason), repoUrl));
|
|
7296
|
+
} finally {
|
|
7297
|
+
setBusy(false);
|
|
7298
|
+
}
|
|
7299
|
+
}, [
|
|
7300
|
+
client,
|
|
7301
|
+
repoUrl,
|
|
7302
|
+
t
|
|
7303
|
+
]);
|
|
7304
|
+
(0, react.useEffect)(() => {
|
|
7305
|
+
load();
|
|
7306
|
+
}, [load]);
|
|
7307
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonDialog, {
|
|
7308
|
+
title: t("config.syncHistory"),
|
|
7309
|
+
description: t("config.syncHistoryHint"),
|
|
7310
|
+
closeLabel: t("common.close"),
|
|
7311
|
+
wide: true,
|
|
7312
|
+
busy,
|
|
7313
|
+
contentReady: history !== null || failed !== null,
|
|
7314
|
+
onClose,
|
|
7315
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7316
|
+
className: MnemonSettingsCard_module_css_default.syncDialogBody,
|
|
7317
|
+
children: [
|
|
7318
|
+
history === null && failed === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7319
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7320
|
+
role: "status",
|
|
7321
|
+
children: t("config.syncHistoryLoading")
|
|
7322
|
+
}),
|
|
7323
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7324
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
7325
|
+
role: "alert",
|
|
7326
|
+
children: failed
|
|
7327
|
+
}),
|
|
7328
|
+
history !== null && history.commits.length === 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7329
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7330
|
+
children: t("config.syncHistoryEmpty")
|
|
7331
|
+
}),
|
|
7332
|
+
history !== null && history.commits.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
|
|
7333
|
+
className: MnemonSettingsCard_module_css_default.syncHistoryList,
|
|
7334
|
+
children: history.commits.map((commit) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
7335
|
+
className: MnemonSettingsCard_module_css_default.syncHistoryEntry,
|
|
7336
|
+
children: [
|
|
7337
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7338
|
+
className: MnemonSettingsCard_module_css_default.syncHistoryHead,
|
|
7339
|
+
children: [
|
|
7340
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: when(commit.pushedAt ?? commit.committedAt) }),
|
|
7341
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.syncHistoryFrom", { machine: commit.machine === void 0 ? t("config.syncHistoryUnknownMachine") : commit.machine.label.trim() || commit.machine.id }) }),
|
|
7342
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
7343
|
+
tone: "quiet",
|
|
7344
|
+
children: commit.commit.slice(0, 8)
|
|
7345
|
+
})
|
|
7346
|
+
]
|
|
7347
|
+
}),
|
|
7348
|
+
commit.components.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: summaryLine(t, commit.components) }),
|
|
7349
|
+
!AUTOMATIC_MESSAGE.test(commit.message) && commit.message.trim() !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
7350
|
+
className: MnemonSettingsCard_module_css_default.syncHistoryMessage,
|
|
7351
|
+
children: commit.message
|
|
7352
|
+
})
|
|
7353
|
+
]
|
|
7354
|
+
}, commit.commit))
|
|
7355
|
+
}),
|
|
7356
|
+
capped && history !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7357
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7358
|
+
children: t("config.syncHistoryCapped", { count: history.commits.length })
|
|
7359
|
+
}),
|
|
7360
|
+
history?.truncated === true && !capped && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7361
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
7362
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7363
|
+
variant: "outline",
|
|
7364
|
+
size: "sm",
|
|
7365
|
+
disabled: busy,
|
|
7366
|
+
onClick: () => void load(history.commits.length + HISTORY_PAGE),
|
|
7367
|
+
children: busy ? t("config.syncHistoryLoading") : t("config.syncHistoryMore")
|
|
7368
|
+
})
|
|
7369
|
+
})
|
|
7370
|
+
]
|
|
7371
|
+
})
|
|
7372
|
+
});
|
|
7007
7373
|
}
|
|
7008
|
-
|
|
7009
|
-
|
|
7010
|
-
|
|
7011
|
-
|
|
7374
|
+
/**
|
|
7375
|
+
* What a sync would do, read before running it: per component whether the two
|
|
7376
|
+
* sides differ, and for runtime memory which entries are only on one side, which
|
|
7377
|
+
* subjects both wrote differently, which the branch holds that this computer
|
|
7378
|
+
* deleted, and which removals the branch recorded. Reading writes nothing; the
|
|
7379
|
+
* footer offers the sync itself and a merge that publishes nothing.
|
|
7380
|
+
*/
|
|
7381
|
+
function SyncCompareDialog({ client, repoUrl, writable, t, onClose, onSync, onChanged }) {
|
|
7382
|
+
const [preview, setPreview] = (0, react.useState)(null);
|
|
7383
|
+
const [difference, setDifference] = (0, react.useState)(null);
|
|
7384
|
+
const [busy, setBusy] = (0, react.useState)("read");
|
|
7385
|
+
const [failed, setFailed] = (0, react.useState)(null);
|
|
7386
|
+
const [empty, setEmpty] = (0, react.useState)(false);
|
|
7387
|
+
const [notice, setNotice] = (0, react.useState)(null);
|
|
7388
|
+
const [showConflicts, setShowConflicts] = (0, react.useState)(false);
|
|
7389
|
+
const read = (0, react.useCallback)(async () => {
|
|
7390
|
+
setBusy("read");
|
|
7391
|
+
setFailed(null);
|
|
7392
|
+
setEmpty(false);
|
|
7393
|
+
try {
|
|
7394
|
+
const nextPreview = await client.previewSync();
|
|
7395
|
+
const nextDifference = await client.syncDiff();
|
|
7396
|
+
setPreview(nextPreview);
|
|
7397
|
+
setDifference(nextDifference);
|
|
7398
|
+
} catch (reason) {
|
|
7399
|
+
setPreview(null);
|
|
7400
|
+
setDifference(null);
|
|
7401
|
+
setEmpty(reasonOf(reason) === "remote-empty");
|
|
7402
|
+
setFailed(failureText(t, reasonOf(reason), message(reason), repoUrl));
|
|
7403
|
+
} finally {
|
|
7404
|
+
setBusy(null);
|
|
7405
|
+
}
|
|
7406
|
+
}, [
|
|
7407
|
+
client,
|
|
7408
|
+
repoUrl,
|
|
7409
|
+
t
|
|
7410
|
+
]);
|
|
7411
|
+
(0, react.useEffect)(() => {
|
|
7412
|
+
read();
|
|
7413
|
+
}, [read]);
|
|
7414
|
+
const merge = async (revive) => {
|
|
7415
|
+
if (busy !== null) return;
|
|
7416
|
+
setBusy(revive ? "revive" : "merge");
|
|
7417
|
+
setFailed(null);
|
|
7418
|
+
setNotice(null);
|
|
7419
|
+
let failure = null;
|
|
7420
|
+
try {
|
|
7421
|
+
const result = await client.pullSync(void 0, revive);
|
|
7422
|
+
const added = result.runtime?.added ?? 0;
|
|
7423
|
+
setNotice(revive ? t("config.syncCompareRevived", { count: added }) : added > 0 ? t("config.syncMergedCount", { count: added }) : t("config.syncMerged", { commit: result.commit.slice(0, 8) }));
|
|
7424
|
+
} catch (reason) {
|
|
7425
|
+
failure = failureText(t, reasonOf(reason), message(reason), repoUrl);
|
|
7426
|
+
} finally {
|
|
7427
|
+
setBusy(null);
|
|
7428
|
+
}
|
|
7429
|
+
onChanged();
|
|
7430
|
+
await read();
|
|
7431
|
+
if (failure !== null) setFailed(failure);
|
|
7432
|
+
};
|
|
7433
|
+
const sync = async () => {
|
|
7434
|
+
if (busy !== null) return;
|
|
7435
|
+
setBusy("sync");
|
|
7436
|
+
setFailed(null);
|
|
7437
|
+
setNotice(null);
|
|
7438
|
+
const failure = await onSync();
|
|
7439
|
+
setBusy(null);
|
|
7440
|
+
if (failure === null) {
|
|
7441
|
+
onClose();
|
|
7442
|
+
return;
|
|
7443
|
+
}
|
|
7444
|
+
await read();
|
|
7445
|
+
setFailed(failure);
|
|
7446
|
+
};
|
|
7447
|
+
const goToReview = () => {
|
|
7448
|
+
onClose();
|
|
7449
|
+
const heading = document.getElementById("mnemon-review-heading");
|
|
7450
|
+
if (heading !== null && typeof heading.scrollIntoView === "function") heading.scrollIntoView({
|
|
7451
|
+
block: "start",
|
|
7452
|
+
behavior: "smooth"
|
|
7453
|
+
});
|
|
7454
|
+
};
|
|
7455
|
+
const conflicts = difference?.conflicts ?? [];
|
|
7456
|
+
const conflicted = new Set(conflicts.flatMap((conflict) => [conflict.target + "\0" + conflict.local.content, conflict.target + "\0" + conflict.remote.content]));
|
|
7457
|
+
const heldBack = difference?.heldBack ?? 0;
|
|
7458
|
+
const removals = difference?.remoteTombstones.length ?? 0;
|
|
7459
|
+
const remoteOnly = difference === null ? 0 : Math.max(difference.remoteOnly.filter((entry) => !conflicted.has(entry.target + "\0" + entry.content)).length - heldBack, 0);
|
|
7460
|
+
const localOnly = difference === null ? 0 : Math.max(difference.localOnly.filter((entry) => !conflicted.has(entry.target + "\0" + entry.content)).length - removals, 0);
|
|
7461
|
+
const differs = (component) => preview?.components.find((entry) => entry.component === component)?.changed === true;
|
|
7462
|
+
const runtimeDiffers = remoteOnly + localOnly + conflicts.length > 0;
|
|
7463
|
+
const anything = runtimeDiffers || removals + heldBack > 0 || differs("documents") || differs("memory-spaces");
|
|
7464
|
+
const mergeable = remoteOnly + conflicts.length + removals > 0 || differs("documents") || differs("memory-spaces");
|
|
7465
|
+
const ready = preview !== null && difference !== null;
|
|
7466
|
+
const machine = difference?.remote.machine === void 0 ? t("config.syncHistoryUnknownMachine") : difference.remote.machine.label.trim() || difference.remote.machine.id;
|
|
7467
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonDialog, {
|
|
7468
|
+
title: t("config.syncCompareTitle"),
|
|
7469
|
+
closeLabel: t("common.close"),
|
|
7470
|
+
wide: true,
|
|
7471
|
+
busy: busy !== null && busy !== "read",
|
|
7472
|
+
contentReady: ready || failed !== null,
|
|
7473
|
+
onClose,
|
|
7474
|
+
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7475
|
+
variant: "outline",
|
|
7476
|
+
size: "sm",
|
|
7477
|
+
disabled: busy !== null || !writable || !ready || !mergeable,
|
|
7478
|
+
onClick: () => void merge(false),
|
|
7479
|
+
children: busy === "merge" ? t("config.syncMerging") : t("config.syncMergeOnly")
|
|
7480
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7481
|
+
variant: "primary",
|
|
7482
|
+
size: "sm",
|
|
7483
|
+
disabled: busy !== null || !writable || !(ready || empty),
|
|
7484
|
+
onClick: () => void sync(),
|
|
7485
|
+
children: busy === "sync" ? t("config.syncNowRunning") : t("config.syncNow")
|
|
7486
|
+
})] }),
|
|
7487
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7488
|
+
className: MnemonSettingsCard_module_css_default.syncDialogBody,
|
|
7489
|
+
children: [
|
|
7490
|
+
busy === "read" && !ready && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7491
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7492
|
+
role: "status",
|
|
7493
|
+
children: t("config.syncCompareLoading")
|
|
7494
|
+
}),
|
|
7495
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7496
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
7497
|
+
role: "alert",
|
|
7498
|
+
children: failed
|
|
7499
|
+
}),
|
|
7500
|
+
notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7501
|
+
className: MnemonSettingsCard_module_css_default.syncSuccess,
|
|
7502
|
+
role: "status",
|
|
7503
|
+
children: notice
|
|
7504
|
+
}),
|
|
7505
|
+
ready && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
7506
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7507
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7508
|
+
children: t("config.syncCompareRemote", {
|
|
7509
|
+
machine,
|
|
7510
|
+
time: when(difference.pushedAt ?? preview.pushedAt)
|
|
7511
|
+
})
|
|
7512
|
+
}),
|
|
7513
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
|
|
7514
|
+
className: MnemonSettingsCard_module_css_default.syncCompareList,
|
|
7515
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: componentName(t, "runtime") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
7516
|
+
"data-differs": runtimeDiffers || void 0,
|
|
7517
|
+
children: runtimeDiffers ? [t("config.syncCompareRuntime", {
|
|
7518
|
+
remote: remoteOnly,
|
|
7519
|
+
local: localOnly
|
|
7520
|
+
}), ...conflicts.length > 0 ? [t("config.syncCompareConflicts", { count: conflicts.length })] : []].join(" · ") : t("config.syncCompareSame")
|
|
7521
|
+
})] }), ["documents", "memory-spaces"].map((component) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: componentName(t, component) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
7522
|
+
"data-differs": differs(component) || void 0,
|
|
7523
|
+
children: differs(component) ? t("config.syncCompareDiffers") : t("config.syncCompareSame")
|
|
7524
|
+
})] }, component))]
|
|
7525
|
+
}),
|
|
7526
|
+
!anything && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7527
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7528
|
+
children: t("config.syncCompareAllSame")
|
|
7529
|
+
}),
|
|
7530
|
+
difference.truncated && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7531
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7532
|
+
children: t("config.syncCompareTruncated")
|
|
7533
|
+
}),
|
|
7534
|
+
removals > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7535
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7536
|
+
children: t("config.syncCompareRemovals", { count: removals })
|
|
7537
|
+
}),
|
|
7538
|
+
conflicts.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7539
|
+
className: MnemonSettingsCard_module_css_default.syncCompareNote,
|
|
7540
|
+
children: [
|
|
7541
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7542
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7543
|
+
children: t("config.syncCompareConflictNote", { count: conflicts.length })
|
|
7544
|
+
}),
|
|
7545
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7546
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
7547
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7548
|
+
variant: "ghost",
|
|
7549
|
+
size: "sm",
|
|
7550
|
+
"aria-expanded": showConflicts,
|
|
7551
|
+
onClick: () => setShowConflicts((value) => !value),
|
|
7552
|
+
children: showConflicts ? t("review.collapse") : t("config.syncCompareShowConflicts")
|
|
7553
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7554
|
+
variant: "ghost",
|
|
7555
|
+
size: "sm",
|
|
7556
|
+
onClick: goToReview,
|
|
7557
|
+
children: t("config.syncCompareGoReview")
|
|
7558
|
+
})]
|
|
7559
|
+
}),
|
|
7560
|
+
showConflicts && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
|
|
7561
|
+
className: MnemonSettingsCard_module_css_default.syncConflictList,
|
|
7562
|
+
children: conflicts.slice(0, SHOWN_CONFLICTS).map((conflict) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
7563
|
+
className: MnemonSettingsCard_module_css_default.syncConflict,
|
|
7564
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffHere") }), clip(conflict.local.content, 240)] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: t("config.syncDiffThere") }), clip(conflict.remote.content, 240)] })]
|
|
7565
|
+
}, conflict.target + "\0" + conflict.local.content))
|
|
7566
|
+
})
|
|
7567
|
+
]
|
|
7568
|
+
}),
|
|
7569
|
+
heldBack > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7570
|
+
className: MnemonSettingsCard_module_css_default.syncCompareNote,
|
|
7571
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7572
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7573
|
+
children: t("config.syncCompareHeldBack", { count: heldBack })
|
|
7574
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7575
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
7576
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7577
|
+
variant: "ghost",
|
|
7578
|
+
size: "sm",
|
|
7579
|
+
disabled: busy !== null || !writable,
|
|
7580
|
+
onClick: () => void merge(true),
|
|
7581
|
+
children: busy === "revive" ? t("config.syncCompareReviving") : t("config.syncCompareRevive")
|
|
7582
|
+
})
|
|
7583
|
+
})]
|
|
7584
|
+
})
|
|
7585
|
+
] })
|
|
7586
|
+
]
|
|
7587
|
+
})
|
|
7588
|
+
});
|
|
7012
7589
|
}
|
|
7013
|
-
/**
|
|
7014
|
-
function
|
|
7015
|
-
|
|
7016
|
-
|
|
7590
|
+
/** A short question before an action whose consequence is easy to miss. */
|
|
7591
|
+
function SyncConfirmDialog(props) {
|
|
7592
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonDialog, {
|
|
7593
|
+
title: props.title,
|
|
7594
|
+
closeLabel: props.t("common.close"),
|
|
7595
|
+
busy: props.busy === true,
|
|
7596
|
+
onClose: props.onClose,
|
|
7597
|
+
footer: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7598
|
+
variant: "outline",
|
|
7599
|
+
size: "sm",
|
|
7600
|
+
disabled: props.busy === true,
|
|
7601
|
+
onClick: props.onClose,
|
|
7602
|
+
children: props.t("common.cancel")
|
|
7603
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7604
|
+
variant: "primary",
|
|
7605
|
+
size: "sm",
|
|
7606
|
+
disabled: props.busy === true,
|
|
7607
|
+
onClick: props.onConfirm,
|
|
7608
|
+
children: props.confirm
|
|
7609
|
+
})] }),
|
|
7610
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7611
|
+
className: MnemonSettingsCard_module_css_default.syncDialogBody,
|
|
7612
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7613
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7614
|
+
children: props.body
|
|
7615
|
+
}), props.error !== void 0 && props.error !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7616
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
7617
|
+
role: "alert",
|
|
7618
|
+
children: props.error
|
|
7619
|
+
})]
|
|
7620
|
+
})
|
|
7621
|
+
});
|
|
7017
7622
|
}
|
|
7018
|
-
|
|
7019
|
-
|
|
7020
|
-
|
|
7021
|
-
|
|
7623
|
+
//#endregion
|
|
7624
|
+
//#region src/client/MnemonSyncSection.tsx
|
|
7625
|
+
/** How long the row waits for the Host to report the switch it just saved. */
|
|
7626
|
+
const STATUS_SETTLE_MS = 250;
|
|
7627
|
+
const STATUS_SETTLE_ATTEMPTS = 20;
|
|
7628
|
+
/** How many repositories the picker lists before it asks for a narrower search. */
|
|
7629
|
+
const SHOWN_REPOSITORIES = 50;
|
|
7630
|
+
/** What an action just did, said beside the row that ran it. */
|
|
7631
|
+
function FeedbackLine({ value }) {
|
|
7632
|
+
if (value === null) return null;
|
|
7633
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7634
|
+
className: [MnemonSettingsCard_module_css_default.syncFeedbackLine, value.tone === "error" ? MnemonSettingsCard_module_css_default.error : MnemonSettingsCard_module_css_default.syncSuccess].join(" "),
|
|
7635
|
+
role: value.tone === "error" ? "alert" : "status",
|
|
7636
|
+
children: value.text
|
|
7637
|
+
});
|
|
7022
7638
|
}
|
|
7023
7639
|
/**
|
|
7024
|
-
* Git repository sync
|
|
7025
|
-
*
|
|
7026
|
-
*
|
|
7027
|
-
* cannot reach, a missing Git, or a read-only Host is visible before anything
|
|
7028
|
-
* runs.
|
|
7640
|
+
* Git repository sync, in the order a person sets it up: connect a repository,
|
|
7641
|
+
* sync, choose how often it syncs on its own, look back at what it kept, and
|
|
7642
|
+
* only then the advanced choices of branch, directory and commit author.
|
|
7029
7643
|
*
|
|
7030
|
-
* The
|
|
7031
|
-
*
|
|
7032
|
-
* typed. The access token field stays as the fallback for every other host.
|
|
7644
|
+
* The switch is the whole gate: switched off, this is one row that asks the Host
|
|
7645
|
+
* nothing — no status, no repository, no Git.
|
|
7033
7646
|
*
|
|
7034
|
-
*
|
|
7035
|
-
* the
|
|
7036
|
-
*
|
|
7647
|
+
* A sync merges the repository's memory into this computer and then publishes
|
|
7648
|
+
* the result, so it is the one primary action. "Check remote" reads what a sync
|
|
7649
|
+
* would change and writes nothing until a button in it is pressed.
|
|
7037
7650
|
*/
|
|
7038
|
-
|
|
7039
|
-
const STATUS_SETTLE_MS = 250;
|
|
7040
|
-
const STATUS_SETTLE_ATTEMPTS = 20;
|
|
7041
|
-
function MnemonSyncSection({ connection, sessionId, workspaceId, disabled, enabled, onEnabled, t }) {
|
|
7651
|
+
function MnemonSyncSection({ connection, sessionId, workspaceId, disabled, enabled, onEnabled, onMerged, t }) {
|
|
7042
7652
|
const client = (0, react.useMemo)(() => connection === void 0 ? null : new MnemonClient(connection, sessionId, workspaceId), [
|
|
7043
7653
|
connection,
|
|
7044
7654
|
sessionId,
|
|
@@ -7046,38 +7656,38 @@ window.__ModuleLoader__.load({
|
|
|
7046
7656
|
]);
|
|
7047
7657
|
const [status, setStatus] = (0, react.useState)(null);
|
|
7048
7658
|
const [loaded, setLoaded] = (0, react.useState)(false);
|
|
7049
|
-
const [
|
|
7050
|
-
const [
|
|
7051
|
-
const [busy, setBusy] = (0, react.useState)(null);
|
|
7052
|
-
const [failed, setFailed] = (0, react.useState)(null);
|
|
7053
|
-
const [notice, setNotice] = (0, react.useState)(null);
|
|
7659
|
+
const [loadFailed, setLoadFailed] = (0, react.useState)(null);
|
|
7660
|
+
const [checking, setChecking] = (0, react.useState)(false);
|
|
7054
7661
|
const [github, setGithub] = (0, react.useState)(null);
|
|
7055
|
-
const [
|
|
7056
|
-
const [
|
|
7057
|
-
const [
|
|
7058
|
-
const [
|
|
7059
|
-
const [
|
|
7060
|
-
const [
|
|
7061
|
-
const [
|
|
7062
|
-
const [
|
|
7063
|
-
const
|
|
7064
|
-
|
|
7065
|
-
|
|
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;
|
|
7662
|
+
const [editing, setEditing] = (0, react.useState)(false);
|
|
7663
|
+
const [busy, setBusy] = (0, react.useState)(null);
|
|
7664
|
+
const [syncFeedback, setSyncFeedback] = (0, react.useState)(null);
|
|
7665
|
+
const [repositoryFeedback, setRepositoryFeedback] = (0, react.useState)(null);
|
|
7666
|
+
const [autoFeedback, setAutoFeedback] = (0, react.useState)(null);
|
|
7667
|
+
const [dialog, setDialog] = (0, react.useState)(null);
|
|
7668
|
+
const [disconnectFailed, setDisconnectFailed] = (0, react.useState)(null);
|
|
7669
|
+
const [editMode, setEditMode] = (0, react.useState)(void 0);
|
|
7670
|
+
const readStatus = (0, react.useCallback)(async () => {
|
|
7671
|
+
if (client === null) return;
|
|
7672
|
+
setChecking(true);
|
|
7070
7673
|
try {
|
|
7071
7674
|
setStatus(await client.syncStatus());
|
|
7675
|
+
setLoadFailed(null);
|
|
7072
7676
|
} catch (reason) {
|
|
7073
|
-
|
|
7677
|
+
setLoadFailed(message(reason));
|
|
7074
7678
|
} finally {
|
|
7679
|
+
setChecking(false);
|
|
7075
7680
|
setLoaded(true);
|
|
7076
7681
|
}
|
|
7682
|
+
}, [client]);
|
|
7683
|
+
const readGitHub = (0, react.useCallback)(async () => {
|
|
7684
|
+
if (client === null) return;
|
|
7077
7685
|
try {
|
|
7078
7686
|
setGithub(await client.githubStatus());
|
|
7079
|
-
} catch {
|
|
7080
|
-
|
|
7687
|
+
} catch {
|
|
7688
|
+
setGithub(null);
|
|
7689
|
+
}
|
|
7690
|
+
}, [client]);
|
|
7081
7691
|
(0, react.useEffect)(() => {
|
|
7082
7692
|
if (client === null) {
|
|
7083
7693
|
setLoaded(true);
|
|
@@ -7096,11 +7706,12 @@ window.__ModuleLoader__.load({
|
|
|
7096
7706
|
})().then((next) => {
|
|
7097
7707
|
if (active) {
|
|
7098
7708
|
setStatus(next);
|
|
7709
|
+
setLoadFailed(null);
|
|
7099
7710
|
setLoaded(true);
|
|
7100
7711
|
}
|
|
7101
7712
|
}, (reason) => {
|
|
7102
7713
|
if (active) {
|
|
7103
|
-
|
|
7714
|
+
setLoadFailed(message(reason));
|
|
7104
7715
|
setLoaded(true);
|
|
7105
7716
|
}
|
|
7106
7717
|
});
|
|
@@ -7113,377 +7724,625 @@ window.__ModuleLoader__.load({
|
|
|
7113
7724
|
active = false;
|
|
7114
7725
|
};
|
|
7115
7726
|
}, [client, enabled]);
|
|
7116
|
-
const
|
|
7117
|
-
|
|
7118
|
-
|
|
7119
|
-
|
|
7120
|
-
|
|
7121
|
-
|
|
7122
|
-
|
|
7123
|
-
|
|
7124
|
-
|
|
7125
|
-
|
|
7126
|
-
|
|
7127
|
-
|
|
7128
|
-
|
|
7129
|
-
if (client === null || busy !== null) return;
|
|
7130
|
-
setBusy("save");
|
|
7131
|
-
setFailed(null);
|
|
7132
|
-
setNotice(null);
|
|
7727
|
+
const repoUrl = status?.config.repoUrl;
|
|
7728
|
+
const connected = status !== null && status.enabled !== false && repoUrl !== void 0;
|
|
7729
|
+
const editable = !disabled && client !== null;
|
|
7730
|
+
const gitReady = status?.git.available === true;
|
|
7731
|
+
/**
|
|
7732
|
+
* The one primary action: merge the repository here, then publish the result.
|
|
7733
|
+
* Answers why it did not finish, or null when it did, for a caller that shows it elsewhere.
|
|
7734
|
+
*/
|
|
7735
|
+
const sync = async () => {
|
|
7736
|
+
if (client === null || busy !== null || repoUrl === void 0) return null;
|
|
7737
|
+
setBusy("sync");
|
|
7738
|
+
setSyncFeedback(null);
|
|
7739
|
+
let failure = null;
|
|
7133
7740
|
try {
|
|
7134
|
-
const
|
|
7135
|
-
|
|
7136
|
-
|
|
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();
|
|
7741
|
+
const feedback = syncResult(t, await client.pushSync(), repoUrl);
|
|
7742
|
+
setSyncFeedback(feedback);
|
|
7743
|
+
if (feedback.tone === "error") failure = feedback.text;
|
|
7152
7744
|
} catch (reason) {
|
|
7153
|
-
|
|
7745
|
+
failure = t("config.syncFailed", { error: failureText(t, reasonOf(reason), message(reason), repoUrl) });
|
|
7746
|
+
setSyncFeedback({
|
|
7747
|
+
tone: "error",
|
|
7748
|
+
text: failure
|
|
7749
|
+
});
|
|
7154
7750
|
} finally {
|
|
7155
7751
|
setBusy(null);
|
|
7156
7752
|
}
|
|
7753
|
+
onMerged?.();
|
|
7754
|
+
readStatus();
|
|
7755
|
+
return failure;
|
|
7157
7756
|
};
|
|
7158
|
-
const
|
|
7757
|
+
const setAutoSync = async (minutes) => {
|
|
7159
7758
|
if (client === null || busy !== null) return;
|
|
7160
|
-
setBusy("
|
|
7161
|
-
|
|
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);
|
|
7759
|
+
setBusy("auto");
|
|
7760
|
+
setAutoFeedback(null);
|
|
7196
7761
|
try {
|
|
7197
7762
|
const next = await client.configureSync({ autoBackupMinutes: minutes });
|
|
7198
7763
|
setStatus((current) => current === null ? current : {
|
|
7199
7764
|
...current,
|
|
7200
7765
|
config: next
|
|
7201
7766
|
});
|
|
7202
|
-
|
|
7767
|
+
readStatus();
|
|
7203
7768
|
} catch (reason) {
|
|
7204
|
-
|
|
7205
|
-
|
|
7206
|
-
|
|
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));
|
|
7769
|
+
setAutoFeedback({
|
|
7770
|
+
tone: "error",
|
|
7771
|
+
text: message(reason)
|
|
7772
|
+
});
|
|
7247
7773
|
} finally {
|
|
7248
7774
|
setBusy(null);
|
|
7249
7775
|
}
|
|
7250
7776
|
};
|
|
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 () => {
|
|
7777
|
+
const disconnect = async () => {
|
|
7261
7778
|
if (client === null || busy !== null) return;
|
|
7262
|
-
setBusy("
|
|
7263
|
-
|
|
7264
|
-
|
|
7265
|
-
|
|
7779
|
+
setBusy("disconnect");
|
|
7780
|
+
setRepositoryFeedback(null);
|
|
7781
|
+
setSyncFeedback(null);
|
|
7782
|
+
setDisconnectFailed(null);
|
|
7266
7783
|
try {
|
|
7267
|
-
|
|
7784
|
+
await client.configureSync({
|
|
7785
|
+
repoUrl: null,
|
|
7786
|
+
token: null,
|
|
7787
|
+
autoBackupMinutes: 0
|
|
7788
|
+
});
|
|
7789
|
+
setDialog(null);
|
|
7790
|
+
setEditing(false);
|
|
7791
|
+
setRepositoryFeedback({
|
|
7792
|
+
tone: "success",
|
|
7793
|
+
text: t("config.syncDisconnected")
|
|
7794
|
+
});
|
|
7795
|
+
readStatus();
|
|
7268
7796
|
} catch (reason) {
|
|
7269
|
-
|
|
7797
|
+
setDisconnectFailed(message(reason));
|
|
7270
7798
|
} finally {
|
|
7271
7799
|
setBusy(null);
|
|
7272
7800
|
}
|
|
7273
|
-
try {
|
|
7274
|
-
setDifference(await client.syncDiff());
|
|
7275
|
-
} catch {
|
|
7276
|
-
setDifference(null);
|
|
7277
|
-
}
|
|
7278
7801
|
};
|
|
7279
7802
|
/**
|
|
7280
|
-
*
|
|
7281
|
-
*
|
|
7282
|
-
*
|
|
7803
|
+
* A connection was saved: the editor closes and the repository is read again.
|
|
7804
|
+
* The state line under the repository is the answer, so nothing claims it is
|
|
7805
|
+
* connected before the Host has said whether it answers.
|
|
7283
7806
|
*/
|
|
7284
|
-
const
|
|
7285
|
-
|
|
7286
|
-
|
|
7287
|
-
|
|
7288
|
-
|
|
7289
|
-
|
|
7290
|
-
|
|
7291
|
-
|
|
7292
|
-
|
|
7293
|
-
|
|
7294
|
-
|
|
7295
|
-
} catch (reason) {
|
|
7296
|
-
setFailed(message(reason));
|
|
7297
|
-
} finally {
|
|
7298
|
-
setBusy(null);
|
|
7299
|
-
}
|
|
7807
|
+
const connectedTo = async () => {
|
|
7808
|
+
setEditing(false);
|
|
7809
|
+
setSyncFeedback(null);
|
|
7810
|
+
setRepositoryFeedback(null);
|
|
7811
|
+
await readStatus();
|
|
7812
|
+
};
|
|
7813
|
+
/** The state line's own way out: credentials are changed in the editor that set them. */
|
|
7814
|
+
const fixCredentials = () => {
|
|
7815
|
+
setRepositoryFeedback(null);
|
|
7816
|
+
setEditMode(repoUrl !== void 0 && onGitHub(repoUrl) && github?.available === true ? "github" : "address");
|
|
7817
|
+
setEditing(true);
|
|
7300
7818
|
};
|
|
7301
|
-
|
|
7302
|
-
const
|
|
7303
|
-
|
|
7304
|
-
|
|
7305
|
-
|
|
7306
|
-
|
|
7307
|
-
|
|
7308
|
-
|
|
7309
|
-
|
|
7310
|
-
|
|
7311
|
-
|
|
7312
|
-
|
|
7313
|
-
|
|
7314
|
-
|
|
7819
|
+
const autoBackup = status?.autoBackup;
|
|
7820
|
+
const minutes = status?.config.autoBackupMinutes ?? 0;
|
|
7821
|
+
const autoOptions = AUTO_SYNC_CHOICES.map((choice) => ({
|
|
7822
|
+
value: String(choice),
|
|
7823
|
+
label: intervalLabel(t, choice)
|
|
7824
|
+
}));
|
|
7825
|
+
const autoHint = autoBackup?.lastError !== void 0 && minutes > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
7826
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
7827
|
+
children: t("config.syncAutoFailed", { error: failureText(t, autoBackup.lastFailure, autoBackup.lastError, repoUrl ?? "") })
|
|
7828
|
+
}) : minutes <= 0 ? t("config.syncAutoHintOff") : [autoBackup?.nextAt === void 0 ? "" : t("config.syncAutoNext", { time: when(autoBackup.nextAt) }), autoBackup?.lastAt === void 0 ? "" : t("config.syncAutoLast", { time: when(autoBackup.lastAt) })].filter(Boolean).join(" · ") || t("config.syncAutoHintOn");
|
|
7829
|
+
const lastRun = status?.lastRun;
|
|
7830
|
+
const syncHint = lastRun === void 0 ? t("config.syncNever") : lastRun.kind === "merge" ? t("config.syncLastMerge", { time: when(lastRun.at) }) : t("config.syncLast", { time: when(lastRun.at) });
|
|
7831
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7832
|
+
className: MnemonSettingsCard_module_css_default.syncRow,
|
|
7833
|
+
role: "group",
|
|
7834
|
+
"aria-labelledby": "mnemon-sync-heading",
|
|
7835
|
+
children: [
|
|
7836
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToggleRow, {
|
|
7837
|
+
id: "mnemon-sync-enabled",
|
|
7838
|
+
titleId: "mnemon-sync-heading",
|
|
7839
|
+
label: t("config.syncTitle"),
|
|
7840
|
+
hint: t("config.syncSimpleDescription"),
|
|
7841
|
+
checked: enabled,
|
|
7842
|
+
disabled,
|
|
7843
|
+
onChange: onEnabled
|
|
7844
|
+
}),
|
|
7845
|
+
enabled && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7846
|
+
className: MnemonSettingsCard_module_css_default.syncPanel,
|
|
7847
|
+
children: [
|
|
7848
|
+
client === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7849
|
+
className: MnemonSettingsCard_module_css_default.readOnly,
|
|
7850
|
+
children: t("config.syncUnavailable")
|
|
7851
|
+
}),
|
|
7852
|
+
client !== null && !loaded && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7853
|
+
className: MnemonSettingsCard_module_css_default.syncDialogNote,
|
|
7854
|
+
role: "status",
|
|
7855
|
+
children: t("config.syncLoading")
|
|
7856
|
+
}),
|
|
7857
|
+
client !== null && loaded && status === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
7858
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
7859
|
+
role: "alert",
|
|
7860
|
+
children: t("config.syncUnavailableReason", { error: loadFailed ?? "" })
|
|
7861
|
+
}),
|
|
7862
|
+
client !== null && loaded && status !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
7863
|
+
!gitReady && status.enabled !== false && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7864
|
+
className: MnemonSettingsCard_module_css_default.syncWarning,
|
|
7865
|
+
role: "status",
|
|
7866
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.syncGitMissing", { required: status.git.required }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7867
|
+
variant: "ghost",
|
|
7868
|
+
size: "sm",
|
|
7869
|
+
disabled: checking,
|
|
7870
|
+
onClick: () => void readStatus(),
|
|
7871
|
+
children: t("config.syncRecheck")
|
|
7872
|
+
})]
|
|
7873
|
+
}),
|
|
7874
|
+
connected && !editing ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SettingRow, {
|
|
7875
|
+
title: t("config.syncRepository"),
|
|
7876
|
+
titleId: "mnemon-sync-repository-title",
|
|
7877
|
+
hint: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepositoryState, {
|
|
7878
|
+
status,
|
|
7879
|
+
checking,
|
|
7880
|
+
t,
|
|
7881
|
+
onRecheck: () => void readStatus(),
|
|
7882
|
+
onFix: editable ? fixCredentials : void 0
|
|
7883
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: repositoryFeedback })] }),
|
|
7884
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7885
|
+
variant: "outline",
|
|
7886
|
+
size: "sm",
|
|
7887
|
+
disabled: !editable || busy !== null,
|
|
7888
|
+
onClick: () => {
|
|
7889
|
+
setRepositoryFeedback(null);
|
|
7890
|
+
setEditMode(void 0);
|
|
7891
|
+
setEditing(true);
|
|
7892
|
+
},
|
|
7893
|
+
children: t("config.syncChange")
|
|
7894
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7895
|
+
variant: "ghost",
|
|
7896
|
+
size: "sm",
|
|
7897
|
+
disabled: !editable || busy !== null,
|
|
7898
|
+
onClick: () => setDialog("disconnect"),
|
|
7899
|
+
children: t("config.syncDisconnect")
|
|
7900
|
+
})]
|
|
7901
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7902
|
+
className: MnemonSettingsCard_module_css_default.syncConnect,
|
|
7903
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
|
|
7904
|
+
title: t("config.syncRepository"),
|
|
7905
|
+
titleId: "mnemon-sync-repository-title",
|
|
7906
|
+
hint: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [t("config.syncRepositoryHint"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: repositoryFeedback })] })
|
|
7907
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepositoryEditor, {
|
|
7908
|
+
client,
|
|
7909
|
+
status,
|
|
7910
|
+
github,
|
|
7911
|
+
disabled: !editable,
|
|
7912
|
+
cancellable: connected,
|
|
7913
|
+
initialMode: editMode,
|
|
7914
|
+
t,
|
|
7915
|
+
onGitHub: setGithub,
|
|
7916
|
+
onReadGitHub: readGitHub,
|
|
7917
|
+
onRefresh: readStatus,
|
|
7918
|
+
onCancel: () => {
|
|
7919
|
+
setEditing(false);
|
|
7920
|
+
readStatus();
|
|
7921
|
+
},
|
|
7922
|
+
onConnected: connectedTo
|
|
7923
|
+
})]
|
|
7924
|
+
}),
|
|
7925
|
+
connected && !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
7926
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SettingRow, {
|
|
7927
|
+
title: t("config.syncRowTitle"),
|
|
7928
|
+
titleId: "mnemon-sync-now-title",
|
|
7929
|
+
hint: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [syncHint, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: syncFeedback })] }),
|
|
7930
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7931
|
+
variant: "outline",
|
|
7932
|
+
size: "sm",
|
|
7933
|
+
disabled: !gitReady || busy !== null,
|
|
7934
|
+
onClick: () => {
|
|
7935
|
+
setSyncFeedback(null);
|
|
7936
|
+
setDialog("compare");
|
|
7937
|
+
},
|
|
7938
|
+
children: t("config.syncCheck")
|
|
7939
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7940
|
+
variant: "primary",
|
|
7941
|
+
size: "sm",
|
|
7942
|
+
disabled: !gitReady || !editable || busy !== null,
|
|
7943
|
+
onClick: () => void sync(),
|
|
7944
|
+
children: busy === "sync" ? t("config.syncNowRunning") : t("config.syncNow")
|
|
7945
|
+
})]
|
|
7946
|
+
}),
|
|
7947
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
|
|
7948
|
+
title: t("config.syncAuto"),
|
|
7949
|
+
titleId: "mnemon-sync-auto-title",
|
|
7950
|
+
hint: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [autoHint, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: autoFeedback })] }),
|
|
7951
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingSelect, {
|
|
7952
|
+
labelledBy: "mnemon-sync-auto-title",
|
|
7953
|
+
value: String(minutes),
|
|
7954
|
+
options: autoOptions,
|
|
7955
|
+
disabled: !editable || busy !== null,
|
|
7956
|
+
onChange: (value) => void setAutoSync(Number(value))
|
|
7957
|
+
})
|
|
7958
|
+
}),
|
|
7959
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingRow, {
|
|
7960
|
+
title: t("config.syncHistory"),
|
|
7961
|
+
titleId: "mnemon-sync-history-title",
|
|
7962
|
+
hint: t("config.syncHistoryHint"),
|
|
7963
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7964
|
+
variant: "outline",
|
|
7965
|
+
size: "sm",
|
|
7966
|
+
disabled: !gitReady,
|
|
7967
|
+
onClick: () => setDialog("history"),
|
|
7968
|
+
children: t("config.syncHistoryView")
|
|
7969
|
+
})
|
|
7970
|
+
})
|
|
7971
|
+
] }),
|
|
7972
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(AdvancedSettings, {
|
|
7973
|
+
client,
|
|
7974
|
+
status,
|
|
7975
|
+
disabled: !editable,
|
|
7976
|
+
t,
|
|
7977
|
+
onSaved: readStatus
|
|
7978
|
+
})
|
|
7979
|
+
] })
|
|
7980
|
+
]
|
|
7981
|
+
}),
|
|
7982
|
+
client !== null && repoUrl !== void 0 && dialog === "compare" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SyncCompareDialog, {
|
|
7983
|
+
client,
|
|
7984
|
+
repoUrl,
|
|
7985
|
+
writable: editable,
|
|
7986
|
+
t,
|
|
7987
|
+
onClose: () => setDialog(null),
|
|
7988
|
+
onSync: sync,
|
|
7989
|
+
onChanged: () => {
|
|
7990
|
+
onMerged?.();
|
|
7991
|
+
readStatus();
|
|
7992
|
+
}
|
|
7993
|
+
}),
|
|
7994
|
+
client !== null && repoUrl !== void 0 && dialog === "history" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SyncHistoryDialog, {
|
|
7995
|
+
client,
|
|
7996
|
+
repoUrl,
|
|
7997
|
+
t,
|
|
7998
|
+
onClose: () => setDialog(null)
|
|
7999
|
+
}),
|
|
8000
|
+
repoUrl !== void 0 && dialog === "disconnect" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SyncConfirmDialog, {
|
|
8001
|
+
title: t("config.syncDisconnectTitle"),
|
|
8002
|
+
body: t("config.syncDisconnectBody", { repository: repositoryName(repoUrl) }),
|
|
8003
|
+
confirm: t("config.syncDisconnect"),
|
|
8004
|
+
busy: busy === "disconnect",
|
|
8005
|
+
error: disconnectFailed,
|
|
8006
|
+
t,
|
|
8007
|
+
onConfirm: () => void disconnect(),
|
|
8008
|
+
onClose: () => {
|
|
8009
|
+
setDialog(null);
|
|
8010
|
+
setDisconnectFailed(null);
|
|
8011
|
+
}
|
|
8012
|
+
})
|
|
8013
|
+
]
|
|
8014
|
+
});
|
|
8015
|
+
}
|
|
8016
|
+
/** What one finished sync did, said as one line. */
|
|
8017
|
+
function syncResult(t, result, repoUrl) {
|
|
8018
|
+
const added = result.merged?.runtime?.added ?? 0;
|
|
8019
|
+
const commit = result.commit.slice(0, 8);
|
|
8020
|
+
if (result.pushed) return {
|
|
8021
|
+
tone: "success",
|
|
8022
|
+
text: added > 0 ? t("config.syncDoneMerged", {
|
|
8023
|
+
count: added,
|
|
8024
|
+
commit
|
|
8025
|
+
}) : t("config.syncDone", { commit })
|
|
7315
8026
|
};
|
|
7316
|
-
|
|
7317
|
-
|
|
7318
|
-
|
|
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
|
-
}
|
|
8027
|
+
if (!result.committed) return {
|
|
8028
|
+
tone: "success",
|
|
8029
|
+
text: added > 0 ? t("config.syncUpToDateMerged", { count: added }) : t("config.syncUpToDate")
|
|
7341
8030
|
};
|
|
7342
|
-
|
|
7343
|
-
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7347
|
-
|
|
7348
|
-
|
|
7349
|
-
|
|
7350
|
-
|
|
7351
|
-
|
|
7352
|
-
const
|
|
7353
|
-
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
|
|
8031
|
+
return {
|
|
8032
|
+
tone: "error",
|
|
8033
|
+
text: t("config.syncPushFailed", { reason: failureText(t, result.failure, result.reason ?? "", repoUrl) })
|
|
8034
|
+
};
|
|
8035
|
+
}
|
|
8036
|
+
/** Where the repository is, whether it answers, and how it is authenticated. */
|
|
8037
|
+
function RepositoryState({ status, checking, t, onRecheck, onFix }) {
|
|
8038
|
+
const url = status.config.repoUrl ?? "";
|
|
8039
|
+
const remote = status.remote;
|
|
8040
|
+
const credential = credentialText(t, status);
|
|
8041
|
+
const state = checking ? {
|
|
8042
|
+
dot: "ongoing",
|
|
8043
|
+
text: t("config.syncStateChecking")
|
|
8044
|
+
} : !status.git.available ? {
|
|
8045
|
+
dot: "idle",
|
|
8046
|
+
text: t("config.syncReasonGitMissing")
|
|
8047
|
+
} : !remote.reachable ? {
|
|
8048
|
+
dot: "error",
|
|
8049
|
+
text: issueText(t, remote.issue, url, remote.error)
|
|
8050
|
+
} : {
|
|
8051
|
+
dot: credential === void 0 && transportOf(url) === "https" ? "warning" : "done",
|
|
8052
|
+
text: [remote.branchExists ? t("config.syncStateConnected") : t("config.syncStateNewBranch", { branch: status.config.branch }), ...credential !== void 0 ? [credential] : transportOf(url) === "https" ? [onGitHub(url) ? t("config.syncNoCredential") : t("config.syncNoCredentialToken")] : []].join(" · ")
|
|
7360
8053
|
};
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
|
|
7365
|
-
|
|
7366
|
-
|
|
8054
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
8055
|
+
className: MnemonSettingsCard_module_css_default.syncRepositoryState,
|
|
8056
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8057
|
+
className: MnemonSettingsCard_module_css_default.syncRepositoryName,
|
|
8058
|
+
children: transportOf(url) === "local" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.PathLabel, { path: url }) : repositoryName(url)
|
|
8059
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
8060
|
+
className: MnemonSettingsCard_module_css_default.syncStateLine,
|
|
8061
|
+
"data-tone": state.dot,
|
|
8062
|
+
children: [
|
|
8063
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.StateDot, { state: state.dot }),
|
|
8064
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: state.text }),
|
|
8065
|
+
!checking && onFix !== void 0 && (remote.issue === "auth" || remote.issue === "not-found") && transportOf(url) === "https" && status.git.available && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8066
|
+
type: "button",
|
|
8067
|
+
className: MnemonSettingsCard_module_css_default.syncInlineAction,
|
|
8068
|
+
onClick: onFix,
|
|
8069
|
+
children: t("config.syncFixCredentials")
|
|
8070
|
+
}),
|
|
8071
|
+
!checking && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8072
|
+
type: "button",
|
|
8073
|
+
className: MnemonSettingsCard_module_css_default.syncInlineAction,
|
|
8074
|
+
onClick: onRecheck,
|
|
8075
|
+
children: t("config.syncRecheck")
|
|
8076
|
+
})
|
|
8077
|
+
]
|
|
8078
|
+
})]
|
|
8079
|
+
});
|
|
8080
|
+
}
|
|
8081
|
+
/** Connect a repository: through a GitHub sign-in, or by its address. */
|
|
8082
|
+
function RepositoryEditor(props) {
|
|
8083
|
+
const { status, github, t } = props;
|
|
8084
|
+
const githubOffered = github?.available === true;
|
|
8085
|
+
const saved = status.config.repoUrl;
|
|
8086
|
+
const [mode, setMode] = (0, react.useState)(() => props.initialMode ?? (githubOffered && (saved === void 0 || onGitHub(saved)) ? "github" : "address"));
|
|
8087
|
+
const chosen = (0, react.useRef)(props.initialMode !== void 0);
|
|
8088
|
+
(0, react.useEffect)(() => {
|
|
8089
|
+
if (!chosen.current && githubOffered && saved === void 0) setMode("github");
|
|
8090
|
+
}, [githubOffered, saved]);
|
|
8091
|
+
const name = (0, react.useId)();
|
|
8092
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8093
|
+
className: MnemonSettingsCard_module_css_default.editor,
|
|
8094
|
+
children: [githubOffered && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8095
|
+
className: MnemonSettingsCard_module_css_default.inlineChoices,
|
|
8096
|
+
role: "radiogroup",
|
|
8097
|
+
"aria-label": t("config.syncConnectWith"),
|
|
8098
|
+
children: ["github", "address"].map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8099
|
+
type: "radio",
|
|
8100
|
+
name,
|
|
8101
|
+
value,
|
|
8102
|
+
checked: mode === value,
|
|
8103
|
+
disabled: props.disabled,
|
|
8104
|
+
onChange: () => {
|
|
8105
|
+
chosen.current = true;
|
|
8106
|
+
setMode(value);
|
|
8107
|
+
}
|
|
8108
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: value === "github" ? t("config.syncModeGitHub") : t("config.syncModeAddress") })] }, value))
|
|
8109
|
+
}), mode === "github" && githubOffered && github !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GitHubConnect, {
|
|
8110
|
+
...props,
|
|
8111
|
+
github
|
|
8112
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AddressConnect, { ...props })]
|
|
8113
|
+
});
|
|
8114
|
+
}
|
|
8115
|
+
/** Whether two HTTPS addresses name the same host, the one a saved token was saved for. */
|
|
8116
|
+
function sameHost(left, right) {
|
|
8117
|
+
try {
|
|
8118
|
+
return new URL(left.trim()).host.toLowerCase() === new URL(right.trim()).host.toLowerCase();
|
|
8119
|
+
} catch {
|
|
8120
|
+
return false;
|
|
8121
|
+
}
|
|
8122
|
+
}
|
|
8123
|
+
/** The address form: a repository URL, and a token where the address is HTTPS. */
|
|
8124
|
+
function AddressConnect({ client, status, disabled, cancellable, t, onRefresh, onCancel, onConnected }) {
|
|
8125
|
+
const saved = status.config.repoUrl ?? "";
|
|
8126
|
+
const [url, setUrl] = (0, react.useState)(saved);
|
|
8127
|
+
const [token, setToken] = (0, react.useState)("");
|
|
8128
|
+
const [busy, setBusy] = (0, react.useState)(null);
|
|
8129
|
+
const [feedback, setFeedback] = (0, react.useState)(null);
|
|
8130
|
+
const tokenId = (0, react.useId)();
|
|
8131
|
+
const problem = repositoryProblem(url);
|
|
8132
|
+
const https = transportOf(url) === "https";
|
|
8133
|
+
const environment = status.config.credentialSource === "environment";
|
|
8134
|
+
const storedToken = status.config.credentialSource === "token" && sameHost(url, saved);
|
|
8135
|
+
const changed = url.trim() !== saved || token.trim() !== "";
|
|
8136
|
+
const ready = url.trim() !== "" && problem === void 0 && changed;
|
|
8137
|
+
const connect = async () => {
|
|
8138
|
+
if (!ready || busy !== null) return;
|
|
8139
|
+
setBusy("connect");
|
|
8140
|
+
setFeedback(null);
|
|
7367
8141
|
try {
|
|
7368
|
-
|
|
7369
|
-
|
|
7370
|
-
|
|
8142
|
+
const next = url.trim();
|
|
8143
|
+
await client.configureSync({
|
|
8144
|
+
repoUrl: next,
|
|
8145
|
+
...https && token.trim() !== "" ? { token: token.trim() } : {},
|
|
8146
|
+
...https ? {} : { token: null }
|
|
8147
|
+
});
|
|
8148
|
+
setToken("");
|
|
8149
|
+
await onConnected();
|
|
7371
8150
|
} catch (reason) {
|
|
7372
|
-
|
|
8151
|
+
setFeedback({
|
|
8152
|
+
tone: "error",
|
|
8153
|
+
text: message(reason)
|
|
8154
|
+
});
|
|
7373
8155
|
} finally {
|
|
7374
8156
|
setBusy(null);
|
|
7375
8157
|
}
|
|
7376
8158
|
};
|
|
7377
|
-
const
|
|
7378
|
-
if (
|
|
7379
|
-
setBusy("
|
|
7380
|
-
|
|
8159
|
+
const removeToken = async () => {
|
|
8160
|
+
if (busy !== null) return;
|
|
8161
|
+
setBusy("token");
|
|
8162
|
+
setFeedback(null);
|
|
7381
8163
|
try {
|
|
7382
|
-
|
|
7383
|
-
|
|
8164
|
+
await client.configureSync({ token: null });
|
|
8165
|
+
setFeedback({
|
|
8166
|
+
tone: "success",
|
|
8167
|
+
text: t("config.syncTokenRemoved")
|
|
8168
|
+
});
|
|
8169
|
+
onRefresh();
|
|
7384
8170
|
} catch (reason) {
|
|
7385
|
-
|
|
8171
|
+
setFeedback({
|
|
8172
|
+
tone: "error",
|
|
8173
|
+
text: message(reason)
|
|
8174
|
+
});
|
|
7386
8175
|
} finally {
|
|
7387
8176
|
setBusy(null);
|
|
7388
8177
|
}
|
|
7389
|
-
}
|
|
7390
|
-
|
|
7391
|
-
|
|
7392
|
-
|
|
7393
|
-
|
|
7394
|
-
|
|
8178
|
+
};
|
|
8179
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
8180
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8181
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
8182
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("config.syncRepoUrl"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8183
|
+
type: "text",
|
|
8184
|
+
value: url,
|
|
8185
|
+
"aria-label": t("config.syncRepoUrl"),
|
|
8186
|
+
placeholder: t("config.syncRepoUrlPlaceholder"),
|
|
8187
|
+
disabled: disabled || busy !== null,
|
|
8188
|
+
"aria-invalid": problem === void 0 ? void 0 : true,
|
|
8189
|
+
autoComplete: "off",
|
|
8190
|
+
spellCheck: false,
|
|
8191
|
+
autoCapitalize: "none",
|
|
8192
|
+
autoCorrect: "off",
|
|
8193
|
+
onChange: (event) => setUrl(event.target.value),
|
|
8194
|
+
onKeyDown: (event) => {
|
|
8195
|
+
if (event.key === "Enter") connect();
|
|
8196
|
+
}
|
|
8197
|
+
})] }), https && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8198
|
+
className: MnemonSettingsCard_module_css_default.syncFieldBox,
|
|
8199
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
8200
|
+
className: MnemonSettingsCard_module_css_default.syncFieldLabel,
|
|
8201
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
|
|
8202
|
+
htmlFor: tokenId,
|
|
8203
|
+
children: t("config.syncToken")
|
|
8204
|
+
}), storedToken && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
8205
|
+
type: "button",
|
|
8206
|
+
className: MnemonSettingsCard_module_css_default.syncInlineAction,
|
|
8207
|
+
disabled: disabled || busy !== null,
|
|
8208
|
+
onClick: () => void removeToken(),
|
|
8209
|
+
children: t("config.syncTokenRemove")
|
|
8210
|
+
})]
|
|
8211
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8212
|
+
id: tokenId,
|
|
8213
|
+
type: "password",
|
|
8214
|
+
value: token,
|
|
8215
|
+
"aria-label": t("config.syncToken"),
|
|
8216
|
+
disabled: disabled || busy !== null || environment,
|
|
8217
|
+
placeholder: environment ? t("config.syncTokenEnvironment", { env: "MNEMON_SYNC_GIT_TOKEN" }) : storedToken ? t("config.syncTokenSaved") : t("config.syncTokenOptional"),
|
|
8218
|
+
autoComplete: "new-password",
|
|
8219
|
+
spellCheck: false,
|
|
8220
|
+
onChange: (event) => setToken(event.target.value)
|
|
8221
|
+
})]
|
|
8222
|
+
})]
|
|
8223
|
+
}),
|
|
8224
|
+
problem !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8225
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
8226
|
+
children: problem === "credentials" ? t("config.syncRepoUrlCredentials") : t("config.syncRepoUrlInvalid")
|
|
8227
|
+
}),
|
|
8228
|
+
https && problem === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8229
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8230
|
+
children: t("config.syncTokenHint")
|
|
8231
|
+
}),
|
|
8232
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8233
|
+
className: MnemonSettingsCard_module_css_default.memoryConfigFooter,
|
|
8234
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8235
|
+
className: MnemonSettingsCard_module_css_default.configFeedback,
|
|
8236
|
+
"aria-live": "polite",
|
|
8237
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: feedback })
|
|
8238
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [cancellable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8239
|
+
variant: "ghost",
|
|
8240
|
+
size: "sm",
|
|
8241
|
+
disabled: busy !== null,
|
|
8242
|
+
onClick: onCancel,
|
|
8243
|
+
children: t("common.cancel")
|
|
8244
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8245
|
+
variant: "primary",
|
|
8246
|
+
size: "sm",
|
|
8247
|
+
disabled: disabled || !ready || busy !== null,
|
|
8248
|
+
onClick: () => void connect(),
|
|
8249
|
+
children: busy === "connect" ? t("config.syncConnecting") : saved === "" ? t("config.syncConnect") : t("config.syncSave")
|
|
8250
|
+
})] })]
|
|
8251
|
+
})
|
|
8252
|
+
] });
|
|
8253
|
+
}
|
|
8254
|
+
/** Sign in with the GitHub device flow, then pick or create the repository. */
|
|
8255
|
+
function GitHubConnect(props) {
|
|
8256
|
+
const { client, github, disabled, cancellable, t, onGitHub, onReadGitHub, onCancel, onConnected } = props;
|
|
8257
|
+
const [busy, setBusy] = (0, react.useState)(null);
|
|
8258
|
+
const [failed, setFailed] = (0, react.useState)(null);
|
|
8259
|
+
const [copied, setCopied] = (0, react.useState)(false);
|
|
8260
|
+
const [pollTick, setPollTick] = (0, react.useState)(0);
|
|
8261
|
+
const [pollMs, setPollMs] = (0, react.useState)(5e3);
|
|
8262
|
+
const flow = github.flow;
|
|
8263
|
+
const signedIn = github.signedIn;
|
|
8264
|
+
const start = async () => {
|
|
8265
|
+
if (busy !== null) return;
|
|
8266
|
+
setBusy("start");
|
|
8267
|
+
setFailed(null);
|
|
8268
|
+
setCopied(false);
|
|
7395
8269
|
try {
|
|
7396
8270
|
const next = await client.githubStart();
|
|
7397
|
-
|
|
8271
|
+
onGitHub(next);
|
|
7398
8272
|
setPollMs(next.flow?.intervalMs ?? 5e3);
|
|
7399
8273
|
setPollTick(0);
|
|
7400
8274
|
} catch (reason) {
|
|
7401
|
-
|
|
8275
|
+
setFailed(t("config.syncGitHubFailed", { error: message(reason) }));
|
|
7402
8276
|
} finally {
|
|
7403
8277
|
setBusy(null);
|
|
7404
8278
|
}
|
|
7405
8279
|
};
|
|
7406
|
-
const
|
|
7407
|
-
if (
|
|
7408
|
-
setBusy("
|
|
7409
|
-
|
|
8280
|
+
const cancel = async () => {
|
|
8281
|
+
if (busy !== null) return;
|
|
8282
|
+
setBusy("cancel");
|
|
8283
|
+
setFailed(null);
|
|
7410
8284
|
try {
|
|
7411
|
-
|
|
8285
|
+
onGitHub(await client.githubCancel());
|
|
7412
8286
|
} catch (reason) {
|
|
7413
|
-
|
|
8287
|
+
setFailed(message(reason));
|
|
7414
8288
|
} finally {
|
|
7415
8289
|
setBusy(null);
|
|
7416
8290
|
}
|
|
7417
8291
|
};
|
|
7418
8292
|
const signOut = async () => {
|
|
7419
|
-
if (
|
|
7420
|
-
setBusy("
|
|
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");
|
|
8293
|
+
if (busy !== null) return;
|
|
8294
|
+
setBusy("signout");
|
|
7437
8295
|
setFailed(null);
|
|
7438
|
-
setGithubFailed(null);
|
|
7439
|
-
setNotice(null);
|
|
7440
8296
|
try {
|
|
7441
|
-
|
|
7442
|
-
setNotice(t("config.syncRepositoryCreated", { name: created.fullName }));
|
|
7443
|
-
setRepositoryName("");
|
|
7444
|
-
askedRepositories.current = false;
|
|
7445
|
-
await loadRepositories();
|
|
7446
|
-
await choose(created);
|
|
8297
|
+
onGitHub(await client.githubSignOut());
|
|
7447
8298
|
} catch (reason) {
|
|
7448
|
-
|
|
8299
|
+
setFailed(message(reason));
|
|
7449
8300
|
} finally {
|
|
7450
8301
|
setBusy(null);
|
|
7451
8302
|
}
|
|
7452
8303
|
};
|
|
7453
|
-
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
|
|
7458
|
-
|
|
8304
|
+
/** A grant GitHub stopped honouring is replaced: sign out, then start a new sign-in. */
|
|
8305
|
+
const signInAgain = async () => {
|
|
8306
|
+
await signOut();
|
|
8307
|
+
await start();
|
|
8308
|
+
};
|
|
8309
|
+
/**
|
|
8310
|
+
* One click copies the code and opens the page it is typed into. The copy starts
|
|
8311
|
+
* first, while this page still has focus, and the page opens within the same click,
|
|
8312
|
+
* so neither the clipboard nor a popup blocker refuses it.
|
|
8313
|
+
*/
|
|
8314
|
+
const copyAndOpen = async () => {
|
|
8315
|
+
if (flow === void 0) return;
|
|
8316
|
+
const copying = (0, _deepseek_ai_dsh_client_ui_primitives.writeClipboard)(flow.userCode).catch(() => false);
|
|
8317
|
+
const opened = window.open(flow.verificationUri, "_blank");
|
|
8318
|
+
if (opened !== null) opened.opener = null;
|
|
8319
|
+
setCopied(await copying);
|
|
8320
|
+
if (opened === null) setFailed(t("config.syncGitHubOpenBlocked", { url: flow.verificationUri }));
|
|
7459
8321
|
};
|
|
7460
|
-
const flow = github?.flow;
|
|
7461
|
-
const signedIn = github?.signedIn === true;
|
|
7462
8322
|
(0, react.useEffect)(() => {
|
|
7463
|
-
if (
|
|
8323
|
+
if (flow === void 0 || signedIn) return;
|
|
7464
8324
|
let active = true;
|
|
7465
8325
|
const timer = setTimeout(() => {
|
|
7466
8326
|
(async () => {
|
|
7467
8327
|
try {
|
|
7468
8328
|
const answer = await client.githubPoll();
|
|
7469
8329
|
if (!active) return;
|
|
8330
|
+
setFailed(null);
|
|
7470
8331
|
if (answer.status === "pending") {
|
|
7471
8332
|
if (answer.intervalMs !== void 0) setPollMs(answer.intervalMs);
|
|
7472
8333
|
setPollTick((current) => current + 1);
|
|
7473
8334
|
return;
|
|
7474
8335
|
}
|
|
7475
|
-
|
|
8336
|
+
await onReadGitHub();
|
|
7476
8337
|
if (!active) return;
|
|
7477
|
-
|
|
7478
|
-
if (answer.status === "
|
|
7479
|
-
|
|
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);
|
|
8338
|
+
if (answer.status === "expired") setFailed(t("config.syncGitHubExpired"));
|
|
8339
|
+
else if (answer.status === "denied") setFailed(t("config.syncGitHubDenied"));
|
|
8340
|
+
else if (answer.status === "error") setFailed(t("config.syncGitHubFailed", { error: answer.message ?? "" }));
|
|
7485
8341
|
} catch (reason) {
|
|
7486
|
-
if (active)
|
|
8342
|
+
if (active) {
|
|
8343
|
+
setFailed(message(reason));
|
|
8344
|
+
setPollTick((current) => current + 1);
|
|
8345
|
+
}
|
|
7487
8346
|
}
|
|
7488
8347
|
})();
|
|
7489
8348
|
}, Math.max(pollMs, 1e3));
|
|
@@ -7493,653 +8352,557 @@ window.__ModuleLoader__.load({
|
|
|
7493
8352
|
};
|
|
7494
8353
|
}, [
|
|
7495
8354
|
client,
|
|
7496
|
-
enabled,
|
|
7497
8355
|
flow?.userCode,
|
|
8356
|
+
signedIn,
|
|
7498
8357
|
pollMs,
|
|
7499
8358
|
pollTick,
|
|
8359
|
+
onReadGitHub,
|
|
7500
8360
|
t
|
|
7501
8361
|
]);
|
|
7502
|
-
|
|
7503
|
-
|
|
7504
|
-
|
|
7505
|
-
|
|
7506
|
-
|
|
7507
|
-
|
|
7508
|
-
|
|
7509
|
-
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
|
|
7514
|
-
|
|
7515
|
-
|
|
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) }));
|
|
8362
|
+
/** Choosing a repository connects it; the GitHub grant then authenticates, so no token is kept. */
|
|
8363
|
+
const choose = async (repository) => {
|
|
8364
|
+
setBusy("choose");
|
|
8365
|
+
setFailed(null);
|
|
8366
|
+
try {
|
|
8367
|
+
await client.configureSync({
|
|
8368
|
+
repoUrl: repository.url,
|
|
8369
|
+
token: null
|
|
8370
|
+
});
|
|
8371
|
+
await onConnected();
|
|
8372
|
+
} catch (reason) {
|
|
8373
|
+
setFailed(message(reason));
|
|
8374
|
+
} finally {
|
|
8375
|
+
setBusy(null);
|
|
7523
8376
|
}
|
|
7524
|
-
|
|
7525
|
-
|
|
7526
|
-
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
|
|
7530
|
-
|
|
7531
|
-
|
|
7532
|
-
|
|
7533
|
-
|
|
7534
|
-
|
|
7535
|
-
|
|
7536
|
-
|
|
7537
|
-
|
|
7538
|
-
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
|
|
7547
|
-
|
|
7548
|
-
|
|
7549
|
-
|
|
7550
|
-
|
|
7551
|
-
|
|
7552
|
-
|
|
7553
|
-
|
|
8377
|
+
};
|
|
8378
|
+
const create = async (name) => {
|
|
8379
|
+
setBusy("create");
|
|
8380
|
+
setFailed(null);
|
|
8381
|
+
try {
|
|
8382
|
+
const created = await client.githubCreateRepository(name, true);
|
|
8383
|
+
await client.configureSync({
|
|
8384
|
+
repoUrl: created.url,
|
|
8385
|
+
token: null
|
|
8386
|
+
});
|
|
8387
|
+
await onConnected();
|
|
8388
|
+
} catch (reason) {
|
|
8389
|
+
setFailed(failureText(t, reasonOf(reason), message(reason), ""));
|
|
8390
|
+
} finally {
|
|
8391
|
+
setBusy(null);
|
|
8392
|
+
}
|
|
8393
|
+
};
|
|
8394
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
8395
|
+
!signedIn && flow === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8396
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8397
|
+
children: github.writable ? t("config.syncGitHubHint") : t("config.syncGitHubReadOnly")
|
|
8398
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8399
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
8400
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8401
|
+
variant: "primary",
|
|
8402
|
+
size: "sm",
|
|
8403
|
+
disabled: disabled || !github.writable || busy !== null,
|
|
8404
|
+
onClick: () => void start(),
|
|
8405
|
+
children: busy === "start" ? t("config.syncGitHubStarting") : t("config.syncGitHubSignIn")
|
|
8406
|
+
}), cancellable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8407
|
+
variant: "ghost",
|
|
8408
|
+
size: "sm",
|
|
8409
|
+
disabled: busy !== null,
|
|
8410
|
+
onClick: onCancel,
|
|
8411
|
+
children: t("common.cancel")
|
|
8412
|
+
})]
|
|
8413
|
+
})] }),
|
|
8414
|
+
!signedIn && flow !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8415
|
+
className: MnemonSettingsCard_module_css_default.syncDevice,
|
|
8416
|
+
children: [
|
|
8417
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8418
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8419
|
+
children: t("config.syncGitHubCode")
|
|
8420
|
+
}),
|
|
8421
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8422
|
+
className: MnemonSettingsCard_module_css_default.syncCode,
|
|
8423
|
+
children: [
|
|
8424
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("code", { children: flow.userCode }),
|
|
8425
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8426
|
+
variant: "primary",
|
|
8427
|
+
size: "sm",
|
|
8428
|
+
onClick: () => void copyAndOpen(),
|
|
8429
|
+
children: t("config.syncGitHubCopyOpen")
|
|
8430
|
+
}),
|
|
8431
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8432
|
+
variant: "ghost",
|
|
8433
|
+
size: "sm",
|
|
8434
|
+
disabled: busy !== null,
|
|
8435
|
+
onClick: () => void cancel(),
|
|
8436
|
+
children: t("common.cancel")
|
|
8437
|
+
})
|
|
8438
|
+
]
|
|
8439
|
+
}),
|
|
8440
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8441
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8442
|
+
role: "status",
|
|
8443
|
+
children: copied ? t("config.syncGitHubCopied") : t("config.syncGitHubWaiting")
|
|
8444
|
+
})
|
|
8445
|
+
]
|
|
8446
|
+
}),
|
|
8447
|
+
signedIn && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
7554
8448
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
7555
|
-
className: MnemonSettingsCard_module_css_default.
|
|
7556
|
-
children: [
|
|
7557
|
-
|
|
7558
|
-
|
|
7559
|
-
|
|
7560
|
-
|
|
7561
|
-
|
|
7562
|
-
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
|
|
7568
|
-
|
|
7569
|
-
|
|
7570
|
-
|
|
7571
|
-
|
|
7572
|
-
|
|
7573
|
-
|
|
7574
|
-
disabled: !ready || disabled || busy !== null,
|
|
7575
|
-
onClick: () => void push(),
|
|
7576
|
-
children: busy === "push" ? t("config.syncPushing") : t("config.syncPush")
|
|
7577
|
-
})
|
|
7578
|
-
]
|
|
8449
|
+
className: MnemonSettingsCard_module_css_default.syncAccount,
|
|
8450
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: github.login === void 0 ? t("config.syncViaGitHubAnonymous") : t("config.syncGitHubSignedIn", { login: github.login }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8451
|
+
variant: "ghost",
|
|
8452
|
+
size: "sm",
|
|
8453
|
+
disabled: disabled || busy !== null,
|
|
8454
|
+
onClick: () => void signOut(),
|
|
8455
|
+
children: t("config.syncGitHubSignOut")
|
|
8456
|
+
})]
|
|
8457
|
+
}),
|
|
8458
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(RepositoryPicker, {
|
|
8459
|
+
client,
|
|
8460
|
+
login: github.login,
|
|
8461
|
+
current: props.status.config.repoUrl,
|
|
8462
|
+
disabled: disabled || busy !== null,
|
|
8463
|
+
creating: busy === "create",
|
|
8464
|
+
t,
|
|
8465
|
+
onChoose: choose,
|
|
8466
|
+
onCreate: create,
|
|
8467
|
+
onSignInAgain: () => void signInAgain()
|
|
7579
8468
|
}),
|
|
8469
|
+
cancellable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8470
|
+
className: MnemonSettingsCard_module_css_default.rowActions,
|
|
8471
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8472
|
+
variant: "ghost",
|
|
8473
|
+
size: "sm",
|
|
8474
|
+
disabled: busy !== null,
|
|
8475
|
+
onClick: onCancel,
|
|
8476
|
+
children: t("common.cancel")
|
|
8477
|
+
})
|
|
8478
|
+
})
|
|
8479
|
+
] }),
|
|
8480
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8481
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
8482
|
+
role: "alert",
|
|
8483
|
+
children: failed
|
|
8484
|
+
})
|
|
8485
|
+
] });
|
|
8486
|
+
}
|
|
8487
|
+
/**
|
|
8488
|
+
* The account's repositories, searched by name. A name that matches none can be
|
|
8489
|
+
* created on the spot, private; a public repository is used only after the
|
|
8490
|
+
* reader confirms that anyone can then read the memory.
|
|
8491
|
+
*/
|
|
8492
|
+
function RepositoryPicker({ client, login, current, disabled, creating, t, onChoose, onCreate, onSignInAgain }) {
|
|
8493
|
+
const [repositories, setRepositories] = (0, react.useState)(null);
|
|
8494
|
+
const [loading, setLoading] = (0, react.useState)(false);
|
|
8495
|
+
const [failed, setFailed] = (0, react.useState)(null);
|
|
8496
|
+
const [query, setQuery] = (0, react.useState)("");
|
|
8497
|
+
const [confirming, setConfirming] = (0, react.useState)(null);
|
|
8498
|
+
const load = (0, react.useCallback)(async () => {
|
|
8499
|
+
setLoading(true);
|
|
8500
|
+
setFailed(null);
|
|
8501
|
+
try {
|
|
8502
|
+
setRepositories((await client.githubRepositories()).repositories);
|
|
8503
|
+
} catch (reason) {
|
|
8504
|
+
const expired = reasonOf(reason) === "github-unauthorized";
|
|
8505
|
+
setFailed({
|
|
8506
|
+
text: expired ? t("config.syncGitHubExpiredGrant") : t("config.syncRepositoriesFailed", { error: message(reason) }),
|
|
8507
|
+
expired
|
|
8508
|
+
});
|
|
8509
|
+
} finally {
|
|
8510
|
+
setLoading(false);
|
|
8511
|
+
}
|
|
8512
|
+
}, [client, t]);
|
|
8513
|
+
(0, react.useEffect)(() => {
|
|
8514
|
+
load();
|
|
8515
|
+
}, [load]);
|
|
8516
|
+
const needle = query.trim().toLowerCase();
|
|
8517
|
+
const matches = (repositories ?? []).filter((repository) => needle === "" || repository.fullName.toLowerCase().includes(needle));
|
|
8518
|
+
const exact = (repositories ?? []).some((repository) => repository.name.toLowerCase() === needle && (login === void 0 || repository.owner.toLowerCase() === login.toLowerCase()));
|
|
8519
|
+
const creatable = needle !== "" && !exact && repositoryNameValid(query) && !query.includes("/");
|
|
8520
|
+
const pick = (repository) => {
|
|
8521
|
+
if (!repository.private) {
|
|
8522
|
+
setConfirming(repository);
|
|
8523
|
+
return;
|
|
8524
|
+
}
|
|
8525
|
+
onChoose(repository);
|
|
8526
|
+
};
|
|
8527
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8528
|
+
className: MnemonSettingsCard_module_css_default.syncPicker,
|
|
8529
|
+
children: [
|
|
7580
8530
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
7581
|
-
className: MnemonSettingsCard_module_css_default.
|
|
7582
|
-
"
|
|
7583
|
-
|
|
8531
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
8532
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("config.syncRepositoryLabel"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8533
|
+
type: "search",
|
|
8534
|
+
value: query,
|
|
8535
|
+
"aria-label": t("config.syncRepositorySearch"),
|
|
8536
|
+
placeholder: t("config.syncRepositorySearch"),
|
|
8537
|
+
disabled,
|
|
8538
|
+
autoComplete: "off",
|
|
8539
|
+
spellCheck: false,
|
|
8540
|
+
autoCapitalize: "none",
|
|
8541
|
+
autoCorrect: "off",
|
|
8542
|
+
onChange: (event) => setQuery(event.target.value)
|
|
8543
|
+
})] })
|
|
7584
8544
|
}),
|
|
7585
|
-
/* @__PURE__ */ (0, react_jsx_runtime.
|
|
7586
|
-
className: MnemonSettingsCard_module_css_default.
|
|
7587
|
-
|
|
7588
|
-
|
|
7589
|
-
|
|
7590
|
-
|
|
7591
|
-
|
|
7592
|
-
|
|
7593
|
-
|
|
7594
|
-
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
|
|
7598
|
-
|
|
7599
|
-
|
|
7600
|
-
|
|
7601
|
-
|
|
7602
|
-
|
|
7603
|
-
|
|
7604
|
-
|
|
7605
|
-
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
|
|
7609
|
-
|
|
7610
|
-
|
|
7611
|
-
|
|
7612
|
-
|
|
7613
|
-
|
|
7614
|
-
|
|
7615
|
-
|
|
7616
|
-
|
|
7617
|
-
|
|
7618
|
-
|
|
7619
|
-
|
|
7620
|
-
|
|
7621
|
-
|
|
7622
|
-
|
|
7623
|
-
|
|
7624
|
-
|
|
7625
|
-
|
|
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,
|
|
8545
|
+
loading && repositories === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8546
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8547
|
+
role: "status",
|
|
8548
|
+
children: t("config.syncRepositoriesLoading")
|
|
8549
|
+
}),
|
|
8550
|
+
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8551
|
+
className: MnemonSettingsCard_module_css_default.syncWarning,
|
|
8552
|
+
role: "alert",
|
|
8553
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: failed.text }), failed.expired ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8554
|
+
variant: "ghost",
|
|
8555
|
+
size: "sm",
|
|
8556
|
+
onClick: onSignInAgain,
|
|
8557
|
+
children: t("config.syncGitHubSignInAgain")
|
|
8558
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8559
|
+
variant: "ghost",
|
|
8560
|
+
size: "sm",
|
|
8561
|
+
disabled: loading,
|
|
8562
|
+
onClick: () => void load(),
|
|
8563
|
+
children: t("config.syncRepositoriesRetry")
|
|
8564
|
+
})]
|
|
8565
|
+
}),
|
|
8566
|
+
repositories !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("ul", {
|
|
8567
|
+
className: MnemonSettingsCard_module_css_default.syncRepositoryList,
|
|
8568
|
+
"aria-label": t("config.syncRepositoryLabel"),
|
|
8569
|
+
children: [
|
|
8570
|
+
creatable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8571
|
+
type: "button",
|
|
8572
|
+
className: MnemonSettingsCard_module_css_default.syncRepositoryOption,
|
|
8573
|
+
disabled,
|
|
8574
|
+
onClick: () => void onCreate(query.trim()),
|
|
8575
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: creating ? t("config.syncRepositoryCreating") : t("config.syncRepositoryCreate", { name: (login === void 0 ? "" : login + "/") + query.trim() }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
8576
|
+
tone: "quiet",
|
|
8577
|
+
children: t("config.syncRepositoryPrivate")
|
|
8578
|
+
})]
|
|
8579
|
+
}) }),
|
|
8580
|
+
matches.slice(0, SHOWN_REPOSITORIES).map((repository) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8581
|
+
type: "button",
|
|
8582
|
+
className: MnemonSettingsCard_module_css_default.syncRepositoryOption,
|
|
8583
|
+
disabled: disabled || !repository.push,
|
|
8584
|
+
"aria-current": repository.url === current ? "true" : void 0,
|
|
8585
|
+
onClick: () => pick(repository),
|
|
7653
8586
|
children: [
|
|
7654
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
7655
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7661
|
-
|
|
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
|
-
})]
|
|
8587
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: repository.fullName }),
|
|
8588
|
+
repository.url === current && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
8589
|
+
tone: "outline",
|
|
8590
|
+
children: t("config.syncRepositoryCurrent")
|
|
8591
|
+
}),
|
|
8592
|
+
!repository.push && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
8593
|
+
tone: "quiet",
|
|
8594
|
+
children: t("config.syncRepositoryNoPush")
|
|
7671
8595
|
}),
|
|
7672
|
-
|
|
7673
|
-
|
|
7674
|
-
|
|
7675
|
-
className: MnemonSettingsCard_module_css_default.error,
|
|
7676
|
-
children: t("config.syncAutoBackupFailed", { error: autoBackup.lastError })
|
|
8596
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tag, {
|
|
8597
|
+
tone: "quiet",
|
|
8598
|
+
children: repository.private ? t("config.syncRepositoryPrivate") : t("config.syncRepositoryPublic")
|
|
7677
8599
|
})
|
|
7678
8600
|
]
|
|
8601
|
+
}) }, repository.fullName)),
|
|
8602
|
+
matches.length === 0 && !creatable && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
8603
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8604
|
+
children: needle === "" ? t("config.syncRepositoriesNone") : t("config.syncRepositoriesEmpty")
|
|
7679
8605
|
}),
|
|
7680
|
-
|
|
7681
|
-
className: MnemonSettingsCard_module_css_default.
|
|
7682
|
-
children:
|
|
7683
|
-
|
|
7684
|
-
|
|
7685
|
-
|
|
7686
|
-
|
|
7687
|
-
|
|
7688
|
-
|
|
7689
|
-
|
|
7690
|
-
|
|
7691
|
-
|
|
7692
|
-
|
|
7693
|
-
|
|
7694
|
-
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
|
|
7704
|
-
|
|
7705
|
-
|
|
7706
|
-
|
|
7707
|
-
|
|
7708
|
-
|
|
7709
|
-
|
|
7710
|
-
|
|
7711
|
-
|
|
7712
|
-
|
|
7713
|
-
|
|
7714
|
-
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7724
|
-
|
|
7725
|
-
|
|
7726
|
-
|
|
7727
|
-
|
|
7728
|
-
|
|
7729
|
-
|
|
7730
|
-
|
|
7731
|
-
|
|
7732
|
-
|
|
7733
|
-
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7749
|
-
|
|
8606
|
+
matches.length > SHOWN_REPOSITORIES && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
8607
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8608
|
+
children: t("config.syncRepositoriesMore", { count: matches.length - SHOWN_REPOSITORIES })
|
|
8609
|
+
})
|
|
8610
|
+
]
|
|
8611
|
+
}),
|
|
8612
|
+
needle !== "" && !creatable && !exact && !repositoryNameValid(query) && !query.includes("/") && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8613
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
8614
|
+
children: t("config.syncRepositoryNameInvalid")
|
|
8615
|
+
}),
|
|
8616
|
+
confirming !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SyncConfirmDialog, {
|
|
8617
|
+
title: t("config.syncPublicTitle"),
|
|
8618
|
+
body: t("config.syncPublicBody", { name: confirming.fullName }),
|
|
8619
|
+
confirm: t("config.syncPublicConfirm"),
|
|
8620
|
+
t,
|
|
8621
|
+
onClose: () => setConfirming(null),
|
|
8622
|
+
onConfirm: () => {
|
|
8623
|
+
const repository = confirming;
|
|
8624
|
+
setConfirming(null);
|
|
8625
|
+
onChoose(repository);
|
|
8626
|
+
}
|
|
8627
|
+
})
|
|
8628
|
+
]
|
|
8629
|
+
});
|
|
8630
|
+
}
|
|
8631
|
+
/**
|
|
8632
|
+
* What this computer is called, where on the branch the memory goes and whose name
|
|
8633
|
+
* its commits carry. Each field shows the value in use; the computer's name is the
|
|
8634
|
+
* host name or a typed one, and the author an explicit choice between the channel's
|
|
8635
|
+
* own identity, this computer's Git identity, and a typed one.
|
|
8636
|
+
*/
|
|
8637
|
+
function AdvancedSettings({ client, status, disabled, t, onSaved }) {
|
|
8638
|
+
const [open, setOpen] = (0, react.useState)(false);
|
|
8639
|
+
const config = status.config;
|
|
8640
|
+
const savedMode = authorModeOf(config.authorName, config.authorEmail);
|
|
8641
|
+
const [branch, setBranch] = (0, react.useState)(config.branch);
|
|
8642
|
+
const [subdir, setSubdir] = (0, react.useState)(config.subdir);
|
|
8643
|
+
const [mode, setMode] = (0, react.useState)(savedMode);
|
|
8644
|
+
const [name, setName] = (0, react.useState)(savedMode === "custom" ? config.authorName : "");
|
|
8645
|
+
const [email, setEmail] = (0, react.useState)(savedMode === "custom" ? config.authorEmail : "");
|
|
8646
|
+
const savedLabel = status.machine?.label ?? "";
|
|
8647
|
+
const savedSource = status.machineLabel?.source ?? "hostname";
|
|
8648
|
+
const hostname = status.machineLabel?.hostname ?? savedLabel;
|
|
8649
|
+
const [nameSource, setNameSource] = (0, react.useState)(savedSource);
|
|
8650
|
+
const [machineName, setMachineName] = (0, react.useState)(savedSource === "custom" ? savedLabel : "");
|
|
8651
|
+
const [busy, setBusy] = (0, react.useState)(false);
|
|
8652
|
+
const [feedback, setFeedback] = (0, react.useState)(null);
|
|
8653
|
+
const radio = (0, react.useId)();
|
|
8654
|
+
const nameRadio = (0, react.useId)();
|
|
8655
|
+
(0, react.useEffect)(() => {
|
|
8656
|
+
setBranch(config.branch);
|
|
8657
|
+
setSubdir(config.subdir);
|
|
8658
|
+
const next = authorModeOf(config.authorName, config.authorEmail);
|
|
8659
|
+
setMode(next);
|
|
8660
|
+
setName(next === "custom" ? config.authorName : "");
|
|
8661
|
+
setEmail(next === "custom" ? config.authorEmail : "");
|
|
8662
|
+
}, [
|
|
8663
|
+
config.branch,
|
|
8664
|
+
config.subdir,
|
|
8665
|
+
config.authorName,
|
|
8666
|
+
config.authorEmail
|
|
8667
|
+
]);
|
|
8668
|
+
(0, react.useEffect)(() => {
|
|
8669
|
+
setNameSource(savedSource);
|
|
8670
|
+
setMachineName(savedSource === "custom" ? savedLabel : "");
|
|
8671
|
+
}, [savedSource, savedLabel]);
|
|
8672
|
+
const author = mode === "default" ? {
|
|
8673
|
+
authorName: MNEMON_SYNC_DEFAULT_AUTHOR_NAME,
|
|
8674
|
+
authorEmail: MNEMON_SYNC_DEFAULT_AUTHOR_EMAIL
|
|
8675
|
+
} : mode === "machine" ? {
|
|
8676
|
+
authorName: "",
|
|
8677
|
+
authorEmail: ""
|
|
8678
|
+
} : {
|
|
8679
|
+
authorName: name.trim(),
|
|
8680
|
+
authorEmail: email.trim()
|
|
8681
|
+
};
|
|
8682
|
+
const branchOk = branchValid(branch);
|
|
8683
|
+
const subdirOk = directoryValid(subdir);
|
|
8684
|
+
const authorChanged = author.authorName !== config.authorName || author.authorEmail !== config.authorEmail;
|
|
8685
|
+
const customOk = mode !== "custom" || !authorChanged || name.trim() !== "" && emailValid(email);
|
|
8686
|
+
const normalizedSubdir = subdir.trim().replaceAll("\\", "/").split("/").filter((part) => part !== "").join("/") + "/";
|
|
8687
|
+
const moved = branch.trim() !== config.branch || normalizedSubdir !== config.subdir;
|
|
8688
|
+
const nameOk = nameSource === "hostname" || machineNameValid(machineName);
|
|
8689
|
+
const renamed = nameSource !== savedSource || nameSource === "custom" && machineName.trim() !== savedLabel;
|
|
8690
|
+
const ready = (moved || renamed || author.authorName !== config.authorName || author.authorEmail !== config.authorEmail) && branchOk && subdirOk && customOk && nameOk;
|
|
8691
|
+
const shownName = nameSource === "hostname" ? hostname : machineName.trim();
|
|
8692
|
+
const save = async () => {
|
|
8693
|
+
if (!ready || busy) return;
|
|
8694
|
+
setBusy(true);
|
|
8695
|
+
setFeedback(null);
|
|
8696
|
+
try {
|
|
8697
|
+
await client.configureSync({
|
|
8698
|
+
branch: branch.trim(),
|
|
8699
|
+
subdir: subdir.trim(),
|
|
8700
|
+
...author,
|
|
8701
|
+
...renamed ? { machineLabel: nameSource === "hostname" ? null : machineName.trim() } : {}
|
|
8702
|
+
});
|
|
8703
|
+
setFeedback({
|
|
8704
|
+
tone: "success",
|
|
8705
|
+
text: t("config.syncAdvancedSaved")
|
|
8706
|
+
});
|
|
8707
|
+
onSaved();
|
|
8708
|
+
} catch (reason) {
|
|
8709
|
+
setFeedback({
|
|
8710
|
+
tone: "error",
|
|
8711
|
+
text: message(reason)
|
|
8712
|
+
});
|
|
8713
|
+
} finally {
|
|
8714
|
+
setBusy(false);
|
|
8715
|
+
}
|
|
8716
|
+
};
|
|
8717
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8718
|
+
className: MnemonSettingsCard_module_css_default.syncAdvanced,
|
|
8719
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
8720
|
+
type: "button",
|
|
8721
|
+
className: MnemonSettingsCard_module_css_default.syncDisclosure,
|
|
8722
|
+
"aria-expanded": open,
|
|
8723
|
+
onClick: () => setOpen((value) => !value),
|
|
8724
|
+
children: [
|
|
8725
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("config.syncAdvanced") }),
|
|
8726
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: [
|
|
8727
|
+
savedLabel,
|
|
8728
|
+
config.branch,
|
|
8729
|
+
config.subdir,
|
|
8730
|
+
savedMode === "default" ? t("config.syncAuthorDefault") : savedMode === "machine" ? t("config.syncAuthorMachine") : config.authorName || config.authorEmail || t("config.syncAuthorCustom")
|
|
8731
|
+
].filter((part) => part !== "").join(" · ") }),
|
|
8732
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronDownOutlineRegular, {
|
|
8733
|
+
className: MnemonSettingsCard_module_css_default.providerChevron,
|
|
8734
|
+
size: 14
|
|
8735
|
+
})
|
|
8736
|
+
]
|
|
8737
|
+
}), open && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8738
|
+
className: MnemonSettingsCard_module_css_default.editor,
|
|
8739
|
+
children: [
|
|
8740
|
+
status.machine !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8741
|
+
className: MnemonSettingsCard_module_css_default.syncChoice,
|
|
8742
|
+
children: [
|
|
8743
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8744
|
+
className: MnemonSettingsCard_module_css_default.syncFieldLabel,
|
|
8745
|
+
id: nameRadio + "-label",
|
|
8746
|
+
children: t("config.syncMachineName")
|
|
8747
|
+
}),
|
|
8748
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8749
|
+
className: MnemonSettingsCard_module_css_default.inlineChoices,
|
|
8750
|
+
role: "radiogroup",
|
|
8751
|
+
"aria-labelledby": nameRadio + "-label",
|
|
8752
|
+
children: ["hostname", "custom"].map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8753
|
+
type: "radio",
|
|
8754
|
+
name: nameRadio,
|
|
8755
|
+
value,
|
|
8756
|
+
checked: nameSource === value,
|
|
8757
|
+
disabled: disabled || busy,
|
|
8758
|
+
onChange: () => setNameSource(value)
|
|
8759
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: value === "hostname" ? t("config.syncMachineHostname") : t("config.syncMachineCustom") })] }, value))
|
|
8760
|
+
}),
|
|
8761
|
+
nameSource === "custom" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8762
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
8763
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [
|
|
8764
|
+
t("config.syncMachineNameLabel"),
|
|
8765
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8766
|
+
type: "text",
|
|
8767
|
+
value: machineName,
|
|
8768
|
+
"aria-label": t("config.syncMachineName"),
|
|
8769
|
+
disabled: disabled || busy,
|
|
8770
|
+
"aria-invalid": machineName.trim() === "" || nameOk ? void 0 : true,
|
|
8771
|
+
autoComplete: "off",
|
|
8772
|
+
spellCheck: false,
|
|
8773
|
+
onChange: (event) => setMachineName(event.target.value)
|
|
7750
8774
|
}),
|
|
7751
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
7752
|
-
className: MnemonSettingsCard_module_css_default.
|
|
7753
|
-
children:
|
|
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
|
-
})
|
|
8775
|
+
machineName.trim() !== "" && !nameOk && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
8776
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
8777
|
+
children: t("config.syncMachineNameInvalid")
|
|
7760
8778
|
})
|
|
7761
8779
|
] })
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
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",
|
|
8780
|
+
}),
|
|
8781
|
+
(nameSource === "hostname" || nameOk) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8782
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8783
|
+
children: nameSource === "hostname" ? t("config.syncMachineHostnameNote", { name: shownName }) : t("config.syncMachineCustomNote", { name: shownName })
|
|
8784
|
+
})
|
|
8785
|
+
]
|
|
8786
|
+
}),
|
|
8787
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8788
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
8789
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [
|
|
8790
|
+
t("config.syncBranch"),
|
|
8791
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
7910
8792
|
type: "text",
|
|
7911
|
-
value:
|
|
7912
|
-
|
|
7913
|
-
disabled:
|
|
8793
|
+
value: branch,
|
|
8794
|
+
"aria-label": t("config.syncBranch"),
|
|
8795
|
+
disabled: disabled || busy,
|
|
8796
|
+
"aria-invalid": branchOk ? void 0 : true,
|
|
7914
8797
|
autoComplete: "off",
|
|
7915
8798
|
spellCheck: false,
|
|
7916
|
-
|
|
7917
|
-
|
|
7918
|
-
|
|
7919
|
-
|
|
7920
|
-
})
|
|
7921
|
-
}),
|
|
7922
|
-
|
|
7923
|
-
|
|
7924
|
-
|
|
7925
|
-
|
|
7926
|
-
|
|
7927
|
-
disabled:
|
|
7928
|
-
|
|
7929
|
-
|
|
8799
|
+
autoCapitalize: "none",
|
|
8800
|
+
autoCorrect: "off",
|
|
8801
|
+
onChange: (event) => setBranch(event.target.value)
|
|
8802
|
+
}),
|
|
8803
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: branchOk ? t("config.syncDefaultValue", { value: "mnemon-sync" }) : t("config.syncBranchInvalid") })
|
|
8804
|
+
] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [
|
|
8805
|
+
t("config.syncSubdir"),
|
|
8806
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8807
|
+
type: "text",
|
|
8808
|
+
value: subdir,
|
|
8809
|
+
"aria-label": t("config.syncSubdir"),
|
|
8810
|
+
disabled: disabled || busy,
|
|
8811
|
+
"aria-invalid": subdirOk ? void 0 : true,
|
|
8812
|
+
autoComplete: "off",
|
|
8813
|
+
spellCheck: false,
|
|
8814
|
+
autoCapitalize: "none",
|
|
8815
|
+
autoCorrect: "off",
|
|
8816
|
+
onChange: (event) => setSubdir(event.target.value)
|
|
8817
|
+
}),
|
|
8818
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", { children: subdirOk ? t("config.syncDefaultValue", { value: "mnemon/" }) : t("config.syncSubdirInvalid") })
|
|
8819
|
+
] })]
|
|
8820
|
+
}),
|
|
8821
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8822
|
+
className: MnemonSettingsCard_module_css_default.syncChoice,
|
|
8823
|
+
children: [
|
|
8824
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8825
|
+
className: MnemonSettingsCard_module_css_default.syncFieldLabel,
|
|
8826
|
+
id: radio + "-label",
|
|
8827
|
+
children: t("config.syncAuthor")
|
|
8828
|
+
}),
|
|
8829
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8830
|
+
className: MnemonSettingsCard_module_css_default.inlineChoices,
|
|
8831
|
+
role: "radiogroup",
|
|
8832
|
+
"aria-labelledby": radio + "-label",
|
|
8833
|
+
children: [
|
|
8834
|
+
"default",
|
|
8835
|
+
"machine",
|
|
8836
|
+
"custom"
|
|
8837
|
+
].map((value) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8838
|
+
type: "radio",
|
|
8839
|
+
name: radio,
|
|
8840
|
+
value,
|
|
8841
|
+
checked: mode === value,
|
|
8842
|
+
disabled: disabled || busy,
|
|
8843
|
+
onChange: () => setMode(value)
|
|
8844
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: value === "default" ? t("config.syncAuthorDefault") : value === "machine" ? t("config.syncAuthorMachine") : t("config.syncAuthorCustom") })] }, value))
|
|
8845
|
+
}),
|
|
8846
|
+
mode === "default" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8847
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8848
|
+
children: t("config.syncAuthorDefaultNote", { identity: DEFAULT_AUTHOR })
|
|
8849
|
+
}),
|
|
8850
|
+
mode === "machine" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8851
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8852
|
+
children: t("config.syncAuthorMachineNote")
|
|
8853
|
+
}),
|
|
8854
|
+
mode === "custom" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8855
|
+
className: MnemonSettingsCard_module_css_default.fieldGrid,
|
|
8856
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [t("config.syncAuthorName"), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8857
|
+
type: "text",
|
|
8858
|
+
value: name,
|
|
8859
|
+
"aria-label": t("config.syncAuthorName"),
|
|
8860
|
+
disabled: disabled || busy,
|
|
8861
|
+
autoComplete: "off",
|
|
8862
|
+
spellCheck: false,
|
|
8863
|
+
onChange: (event) => setName(event.target.value)
|
|
8864
|
+
})] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", { children: [
|
|
8865
|
+
t("config.syncAuthorEmail"),
|
|
8866
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
8867
|
+
type: "email",
|
|
8868
|
+
value: email,
|
|
8869
|
+
"aria-label": t("config.syncAuthorEmail"),
|
|
8870
|
+
disabled: disabled || busy,
|
|
8871
|
+
"aria-invalid": email.trim() === "" || emailValid(email) ? void 0 : true,
|
|
8872
|
+
autoComplete: "off",
|
|
8873
|
+
spellCheck: false,
|
|
8874
|
+
onChange: (event) => setEmail(event.target.value)
|
|
8875
|
+
}),
|
|
8876
|
+
email.trim() !== "" && !emailValid(email) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("small", {
|
|
8877
|
+
className: MnemonSettingsCard_module_css_default.error,
|
|
8878
|
+
children: t("config.syncAuthorEmailInvalid")
|
|
8879
|
+
})
|
|
8880
|
+
] })]
|
|
7930
8881
|
})
|
|
7931
|
-
|
|
7932
|
-
|
|
7933
|
-
|
|
7934
|
-
|
|
7935
|
-
|
|
7936
|
-
|
|
7937
|
-
|
|
7938
|
-
|
|
7939
|
-
|
|
7940
|
-
|
|
7941
|
-
|
|
7942
|
-
|
|
7943
|
-
|
|
7944
|
-
|
|
7945
|
-
|
|
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
|
-
] }),
|
|
7954
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7955
|
-
variant: "ghost",
|
|
7956
|
-
size: "sm",
|
|
7957
|
-
disabled: busy !== null,
|
|
7958
|
-
onClick: () => setPending(null),
|
|
7959
|
-
children: t("common.cancel")
|
|
7960
|
-
}),
|
|
7961
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
8882
|
+
]
|
|
8883
|
+
}),
|
|
8884
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
8885
|
+
className: MnemonSettingsCard_module_css_default.memoryConfigFooter,
|
|
8886
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
8887
|
+
className: MnemonSettingsCard_module_css_default.configFeedback,
|
|
8888
|
+
"aria-live": "polite",
|
|
8889
|
+
children: feedback !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FeedbackLine, { value: feedback }) : moved && branchOk && subdirOk ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8890
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8891
|
+
children: t("config.syncAdvancedNote")
|
|
8892
|
+
}) : renamed && nameOk ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
8893
|
+
className: MnemonSettingsCard_module_css_default.editorNote,
|
|
8894
|
+
children: t("config.syncMachineRenameNote")
|
|
8895
|
+
}) : null
|
|
8896
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
7962
8897
|
variant: "primary",
|
|
7963
8898
|
size: "sm",
|
|
7964
|
-
disabled:
|
|
7965
|
-
onClick: () => void
|
|
7966
|
-
children: busy
|
|
7967
|
-
})
|
|
7968
|
-
]
|
|
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
|
-
})]
|
|
8899
|
+
disabled: disabled || !ready || busy,
|
|
8900
|
+
onClick: () => void save(),
|
|
8901
|
+
children: busy ? t("config.syncSaving") : t("config.syncSave")
|
|
8902
|
+
}) })]
|
|
8121
8903
|
})
|
|
8122
|
-
|
|
8123
|
-
|
|
8124
|
-
className: MnemonSettingsCard_module_css_default.syncFeedback,
|
|
8125
|
-
"aria-live": "polite",
|
|
8126
|
-
children: [
|
|
8127
|
-
failed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8128
|
-
className: MnemonSettingsCard_module_css_default.error,
|
|
8129
|
-
role: "alert",
|
|
8130
|
-
children: t("config.syncFailed", { error: failed })
|
|
8131
|
-
}),
|
|
8132
|
-
notice !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8133
|
-
className: MnemonSettingsCard_module_css_default.syncSuccess,
|
|
8134
|
-
children: notice
|
|
8135
|
-
}),
|
|
8136
|
-
client === null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
8137
|
-
className: MnemonSettingsCard_module_css_default.readOnly,
|
|
8138
|
-
children: t("config.syncUnavailable")
|
|
8139
|
-
})
|
|
8140
|
-
]
|
|
8141
|
-
})
|
|
8142
|
-
] })]
|
|
8904
|
+
]
|
|
8905
|
+
})]
|
|
8143
8906
|
});
|
|
8144
8907
|
}
|
|
8145
8908
|
//#endregion
|
|
@@ -8364,6 +9127,7 @@ window.__ModuleLoader__.load({
|
|
|
8364
9127
|
...props.sessionId === void 0 ? {} : { sessionId: props.sessionId },
|
|
8365
9128
|
...props.workspaceId === void 0 ? {} : { workspaceId: props.workspaceId },
|
|
8366
9129
|
target: props.target,
|
|
9130
|
+
...props.onDataChanged === void 0 ? {} : { onImported: props.onDataChanged },
|
|
8367
9131
|
t
|
|
8368
9132
|
}),
|
|
8369
9133
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonSyncSection, {
|
|
@@ -8373,6 +9137,7 @@ window.__ModuleLoader__.load({
|
|
|
8373
9137
|
disabled: props.disabled,
|
|
8374
9138
|
enabled: sync.value,
|
|
8375
9139
|
onEnabled: sync.set,
|
|
9140
|
+
...props.onDataChanged === void 0 ? {} : { onMerged: props.onDataChanged },
|
|
8376
9141
|
t
|
|
8377
9142
|
}),
|
|
8378
9143
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(WriteFailure, {
|
|
@@ -8384,6 +9149,7 @@ window.__ModuleLoader__.load({
|
|
|
8384
9149
|
...props.sessionId === void 0 ? {} : { sessionId: props.sessionId },
|
|
8385
9150
|
...props.workspaceId === void 0 ? {} : { workspaceId: props.workspaceId },
|
|
8386
9151
|
disabled: props.disabled,
|
|
9152
|
+
...props.onDataChanged === void 0 ? {} : { onApplied: props.onDataChanged },
|
|
8387
9153
|
t
|
|
8388
9154
|
})
|
|
8389
9155
|
]
|
|
@@ -8394,7 +9160,8 @@ window.__ModuleLoader__.load({
|
|
|
8394
9160
|
//#region src/client/MnemonSettingsCard.tsx
|
|
8395
9161
|
const NO_CHANGE_SIGNAL$1 = {
|
|
8396
9162
|
subscribe: () => () => {},
|
|
8397
|
-
getSnapshot: () => 0
|
|
9163
|
+
getSnapshot: () => 0,
|
|
9164
|
+
bump: () => {}
|
|
8398
9165
|
};
|
|
8399
9166
|
const NO_COMPONENT_LIST = {
|
|
8400
9167
|
subscribe: () => () => {},
|
|
@@ -8590,7 +9357,8 @@ window.__ModuleLoader__.load({
|
|
|
8590
9357
|
language,
|
|
8591
9358
|
t,
|
|
8592
9359
|
onOpen: (entry) => pages.open(entry.entryId, "configuration"),
|
|
8593
|
-
onSaved: () => setTargetRevision((revision) => revision + 1)
|
|
9360
|
+
onSaved: () => setTargetRevision((revision) => revision + 1),
|
|
9361
|
+
onDataChanged: componentChanges.bump
|
|
8594
9362
|
}),
|
|
8595
9363
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
|
|
8596
9364
|
className: MnemonSettingsCard_module_css_default.section,
|
|
@@ -12945,7 +13713,7 @@ window.__ModuleLoader__.load({
|
|
|
12945
13713
|
})
|
|
12946
13714
|
});
|
|
12947
13715
|
}
|
|
12948
|
-
function MnemonWorkspace({ connection, settingsScope, sessionId, workspaceId, workspaceSelection, surface = "sidebar", active = true, onClose, configuration, componentChanges, sourcePageDirectory = EMPTY_SOURCE_PAGE_DIRECTORY, renderSlot }) {
|
|
13716
|
+
function MnemonWorkspace({ connection, settingsScope, sessionId, workspaceId, workspaceSelection, surface = "sidebar", active = true, titleBar = false, onClose, configuration, componentChanges, sourcePageDirectory = EMPTY_SOURCE_PAGE_DIRECTORY, renderSlot }) {
|
|
12949
13717
|
const t = useT();
|
|
12950
13718
|
const locale = useLocale();
|
|
12951
13719
|
const configurationSeat = configuration ?? NO_ACTION_SEAT;
|
|
@@ -13475,6 +14243,7 @@ window.__ModuleLoader__.load({
|
|
|
13475
14243
|
children: [
|
|
13476
14244
|
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
|
|
13477
14245
|
className: appearanceClass(MnemonView_module_css_default.masthead, MnemonSidebarView_module_css_default.masthead),
|
|
14246
|
+
"data-window-drag": titleBar || void 0,
|
|
13478
14247
|
children: [
|
|
13479
14248
|
onClose !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
13480
14249
|
type: "button",
|
|
@@ -13643,7 +14412,7 @@ window.__ModuleLoader__.load({
|
|
|
13643
14412
|
}
|
|
13644
14413
|
//#endregion
|
|
13645
14414
|
//#region \0dsh-mnemon-css:/home/runner/work/dsh-mnemon/dsh-mnemon/src/client/MnemonWorkspace.module.css.mjs
|
|
13646
|
-
const css = ".NS3bAW_workspacePanel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay,var(--dsw-alias-bg-base));pointer-events:auto;min-width:0;min-height:0;display:flex;position:fixed;overflow:hidden}.NS3bAW_workspacePanel>*{flex:auto;width:100%;min-width:0}.NS3bAW_betterSidebarSeat,.NS3bAW_nativeWorkspace{flex:auto;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.NS3bAW_betterSidebarSeat>*,.NS3bAW_nativeWorkspace>*{flex:auto;min-width:0}.NS3bAW_nativeWorkspace{z-index:2;position:relative}.NS3bAW_nativeWorkspace[data-dsh-mnemon-main-seat]{box-sizing:border-box;padding-block-start:var(--dsh-frame-top-clearance,0px)}.NS3bAW_nativeWorkspace[hidden]{display:none}.NS3bAW_entry{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:calc(100% - 4px);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.NS3bAW_entry:hover,.NS3bAW_entry[data-active]{background:var(--dsw-alias-interactive-bg-hover)}.NS3bAW_entry:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.NS3bAW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.NS3bAW_entryIcon svg{width:16px;height:16px;display:block}.NS3bAW_entryLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[data-sidebar-collapsed] .NS3bAW_entry{justify-content:center;width:36px;height:36px;min-height:36px;margin:0 auto 12px;padding:0}[data-sidebar-collapsed] .NS3bAW_entryIcon svg{width:18px;height:18px}[data-sidebar-collapsed] .NS3bAW_entryLabel{display:none}";
|
|
14415
|
+
const css = ".NS3bAW_workspacePanel{box-sizing:border-box;background:var(--dsw-alias-bg-overlay,var(--dsw-alias-bg-base));pointer-events:auto;min-width:0;min-height:0;display:flex;position:fixed;overflow:hidden}.NS3bAW_workspacePanel>*{flex:auto;width:100%;min-width:0}.NS3bAW_betterSidebarSeat,.NS3bAW_nativeWorkspace{flex:auto;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.NS3bAW_betterSidebarSeat>*,.NS3bAW_nativeWorkspace>*{flex:auto;min-width:0}.NS3bAW_nativeWorkspace{z-index:2;position:relative}.NS3bAW_nativeWorkspace[data-dsh-mnemon-main-seat]{box-sizing:border-box;padding-block-start:var(--dsh-frame-top-clearance,0px)}.NS3bAW_windowDragBand{height:var(--dsh-frame-top-clearance,0px);position:absolute;inset:0 0 auto}.NS3bAW_nativeWorkspace[hidden]{display:none}.NS3bAW_entry{box-sizing:border-box;border-radius:var(--dsw-radius-md);width:calc(100% - 4px);min-height:36px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;line-height:22px;display:flex}.NS3bAW_entry:hover,.NS3bAW_entry[data-active]{background:var(--dsw-alias-interactive-bg-hover)}.NS3bAW_entry:focus-visible{outline:var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.NS3bAW_entryIcon{flex:none;justify-content:center;align-items:center;display:inline-flex}.NS3bAW_entryIcon svg{width:16px;height:16px;display:block}.NS3bAW_entryLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}[data-sidebar-collapsed] .NS3bAW_entry{justify-content:center;width:36px;height:36px;min-height:36px;margin:0 auto 12px;padding:0}[data-sidebar-collapsed] .NS3bAW_entryIcon svg{width:18px;height:18px}[data-sidebar-collapsed] .NS3bAW_entryLabel{display:none}";
|
|
13647
14416
|
const tagId = "dsh-mnemon/src/client/MnemonWorkspace.module.css";
|
|
13648
14417
|
if (typeof document !== "undefined") {
|
|
13649
14418
|
let tag = document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]");
|
|
@@ -13660,6 +14429,7 @@ window.__ModuleLoader__.load({
|
|
|
13660
14429
|
"entryIcon": "NS3bAW_entryIcon",
|
|
13661
14430
|
"entryLabel": "NS3bAW_entryLabel",
|
|
13662
14431
|
"nativeWorkspace": "NS3bAW_nativeWorkspace",
|
|
14432
|
+
"windowDragBand": "NS3bAW_windowDragBand",
|
|
13663
14433
|
"workspacePanel": "NS3bAW_workspacePanel"
|
|
13664
14434
|
};
|
|
13665
14435
|
//#endregion
|
|
@@ -13881,6 +14651,7 @@ window.__ModuleLoader__.load({
|
|
|
13881
14651
|
...resolvedSelectedId === void 0 ? {} : { workspaceId: resolvedSelectedId },
|
|
13882
14652
|
workspaceSelection: selection,
|
|
13883
14653
|
active: props.active ?? true,
|
|
14654
|
+
titleBar: props.titleBar === true,
|
|
13884
14655
|
t: props.t,
|
|
13885
14656
|
locale: locale.active,
|
|
13886
14657
|
sourcePageDirectory: props.sourcePageDirectory,
|
|
@@ -13995,7 +14766,8 @@ window.__ModuleLoader__.load({
|
|
|
13995
14766
|
"aria-label": props.t("tab.label"),
|
|
13996
14767
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MnemonWorkspaceHost, {
|
|
13997
14768
|
...props,
|
|
13998
|
-
active: state.open
|
|
14769
|
+
active: state.open,
|
|
14770
|
+
titleBar: true
|
|
13999
14771
|
})
|
|
14000
14772
|
}), nativeSidebar.target),
|
|
14001
14773
|
!nativeSidebar?.available && bounds !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("section", {
|
|
@@ -14136,7 +14908,12 @@ window.__ModuleLoader__.load({
|
|
|
14136
14908
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
14137
14909
|
ref: parent,
|
|
14138
14910
|
className: MnemonWorkspace_module_css_default.nativeWorkspace,
|
|
14139
|
-
"data-dsh-mnemon-main-seat": true
|
|
14911
|
+
"data-dsh-mnemon-main-seat": true,
|
|
14912
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
14913
|
+
className: MnemonWorkspace_module_css_default.windowDragBand,
|
|
14914
|
+
"data-window-drag": true,
|
|
14915
|
+
"aria-hidden": "true"
|
|
14916
|
+
})
|
|
14140
14917
|
});
|
|
14141
14918
|
}
|
|
14142
14919
|
/** Use the published panel contract, with a fallback for replacement layouts. */
|