vault backup: 2026-08-02 09:03:32

This commit is contained in:
CrazyJasonwell
2026-08-02 09:03:32 +08:00
parent ecd18fe3d9
commit 775d83b031
46 changed files with 2555 additions and 1925 deletions
+162 -59
View File
@@ -10813,6 +10813,9 @@ function notePathBase(settings) {
function imagePathBase(settings) {
return `${contentBaseDir(settings)}${IMAGE_PATH_BASE}`;
}
function imageHashKey(assetPath) {
return assetPath.replace(/^\/img\/user\//, "");
}
function sitePath(settings, sub) {
return `${contentBaseDir(settings)}src/site${sub}`;
}
@@ -12781,7 +12784,10 @@ function tryDVEvaluate(query, file, dvApi) {
function tryEval(query) {
let result = "";
try {
result = (0, eval)("const dv = DataviewAPI;" + query);
const evaluateQuery = new Function("dv", `return ${query}`);
result = evaluateQuery(
window.DataviewAPI
);
} catch (e) {
import_js_logger5.default.warn("eval did not yield any result", e);
}
@@ -12810,6 +12816,73 @@ function delay(milliseconds) {
// src/compiler/CanvasCompiler.ts
var import_obsidian4 = require("obsidian");
// src/compiler/frontmatterLinks.ts
var FRONTMATTER_IMAGE_EXTENSIONS = /\.(png|jpg|jpeg|gif|webp|svg)$/i;
function getFrontmatterImageLinkpath(value) {
if (typeof value !== "string") {
return null;
}
let linkpath = value.trim();
const wikilink = linkpath.match(/^!?\[\[([^\]]+)\]\]$/);
if (wikilink) {
linkpath = wikilink[1].split("|")[0].split("#")[0].trim();
}
if (linkpath.startsWith("http")) {
return null;
}
if (!FRONTMATTER_IMAGE_EXTENSIONS.test(linkpath)) {
return null;
}
return linkpath;
}
function resolveFrontmatterImageValue(value, resolveLinkpath) {
const linkpath = getFrontmatterImageLinkpath(value);
if (!linkpath) {
return value;
}
const resolvedPath = resolveLinkpath(linkpath);
if (!resolvedPath || resolvedPath === linkpath) {
return value;
}
const trimmed = value.trim();
const wikilink = trimmed.match(/^(!?)\[\[([^\]]+)\]\]$/);
if (wikilink) {
const suffixStart = wikilink[2].search(/[|#]/);
const suffix = suffixStart === -1 ? "" : wikilink[2].slice(suffixStart);
return `${wikilink[1]}[[${resolvedPath}${suffix}]]`;
}
return resolvedPath;
}
function resolveFrontmatterValue(value, resolveLinkpath) {
if (Array.isArray(value)) {
return value.map(
(item) => resolveFrontmatterValue(item, resolveLinkpath)
);
}
if (typeof value !== "string") {
return value;
}
if (getFrontmatterImageLinkpath(value)) {
return resolveFrontmatterImageValue(value, resolveLinkpath);
}
const wikilink = value.trim().match(/^(!?)\[\[([^\]]+)\]\]$/);
if (!wikilink) {
return value;
}
const suffixStart = wikilink[2].search(/[|#]/);
const target = (suffixStart === -1 ? wikilink[2] : wikilink[2].slice(0, suffixStart)).trim();
const suffix = suffixStart === -1 ? "" : wikilink[2].slice(suffixStart);
const resolvedPath = resolveLinkpath(target);
if (!resolvedPath || !resolvedPath.endsWith(".md")) {
return value;
}
const noteLinkpath = resolvedPath.slice(0, -".md".length);
if (noteLinkpath === target) {
return value;
}
return `${wikilink[1]}[[${noteLinkpath}${suffix}]]`;
}
// src/compiler/FrontmatterCompiler.ts
var FrontmatterCompiler = class {
constructor(settings) {
@@ -12863,7 +12936,10 @@ var FrontmatterCompiler = class {
publishedFrontMatter
);
publishedFrontMatter = this.addTimestampsFrontmatter(file)(publishedFrontMatter);
const userProperties = this.extractUserProperties(fileFrontMatter);
const userProperties = this.resolveLinkProperties(
this.extractUserProperties(fileFrontMatter),
file
);
const fullFrontMatter = (publishedFrontMatter == null ? void 0 : publishedFrontMatter.dgPassFrontmatter) ? __spreadProps(__spreadValues(__spreadValues({}, fileFrontMatter), publishedFrontMatter), {
"dg-note-properties": userProperties
}) : __spreadProps(__spreadValues({}, publishedFrontMatter), { "dg-note-properties": userProperties });
@@ -12977,10 +13053,27 @@ ${frontMatterString}
return publishedFrontMatter;
}
/**
* Extracts all user-defined frontmatter properties, excluding
* Obsidian internal fields and dg-* plugin fields that are already
* handled by the compilation pipeline.
* Rewrite link-shaped property values (images and note wikilinks,
* including arrays of them) to full vault paths via the vault's own
* link resolution, so the published values match where assets are
* uploaded and which notes they target.
*/
resolveLinkProperties(userProps, file) {
const resolved = {};
for (const [key2, value] of Object.entries(userProps)) {
resolved[key2] = resolveFrontmatterValue(
value,
(linkpath) => {
var _a6, _b3;
return (_b3 = (_a6 = file.metadataCache.getFirstLinkpathDest(
linkpath,
file.getPath()
)) == null ? void 0 : _a6.path) != null ? _b3 : null;
}
);
}
return resolved;
}
extractUserProperties(frontmatter) {
if (!frontmatter) return {};
const skipKeys = /* @__PURE__ */ new Set([
@@ -19582,24 +19675,6 @@ function createBaseCodeBlock(baseFileText, transclusionFileName) {
const [baseFileName, selectedViewName] = transclusionFileName.split("#");
return "\n```base\n" + selectBaseView(baseFileText, selectedViewName == null ? void 0 : selectedViewName.trim(), baseFileName) + "\n```\n";
}
var FRONTMATTER_IMAGE_EXTENSIONS = /\.(png|jpg|jpeg|gif|webp|svg)$/i;
function getFrontmatterImageLinkpath(value) {
if (typeof value !== "string") {
return null;
}
let linkpath = value.trim();
const wikilink = linkpath.match(/^!?\[\[([^\]]+)\]\]$/);
if (wikilink) {
linkpath = wikilink[1].split("|")[0].split("#")[0].trim();
}
if (linkpath.startsWith("http")) {
return null;
}
if (!FRONTMATTER_IMAGE_EXTENSIONS.test(linkpath)) {
return null;
}
return linkpath;
}
var GardenPageCompiler = class {
constructor(vault, settings, metadataCache, getFilesMarkedForPublishing) {
this.resolveLinkedFile = (linkPath, sourcePath) => {
@@ -20867,8 +20942,7 @@ var Publisher = class {
uploadAssets(_0) {
return __async(this, arguments, function* (assets, remoteImageHashes = {}) {
for (const image of assets.images) {
const hashKey = image.path.replace("/img/user/", "");
const remoteHash = remoteImageHashes[hashKey];
const remoteHash = remoteImageHashes[imageHashKey(image.path)];
if (remoteHash && image.localHash && remoteHash === image.localHash) {
import_js_logger7.default.debug(`Skipping unchanged image: ${image.path}`);
continue;
@@ -20974,12 +21048,15 @@ var PublishStatusManager = class {
const marked = yield this.publisher.getFilesMarkedForPublishing();
for (const file of marked.notes) {
const compiledFile = yield file.compile();
const [content, _] = compiledFile.getCompiledFile();
const [content, assets] = compiledFile.getCompiledFile();
const localHash = generateBlobHash(content);
const remoteHash = remoteNoteHashes[file.getPath()];
const hasMissingRemoteImage = assets.images.some(
(image) => !remoteImageHashes[imageHashKey(image.path)]
);
if (!remoteHash) {
unpublishedNotes.push(compiledFile);
} else if (remoteHash === localHash) {
} else if (remoteHash === localHash && !hasMissingRemoteImage) {
compiledFile.setRemoteHash(remoteHash);
publishedNotes.push(compiledFile);
} else {
@@ -25262,7 +25339,7 @@ var flags = EFFECT_TRANSPARENT | EFFECT_PRESERVED;
function boundary(node, props, children, transform_error) {
new Boundary(node, props, children, transform_error);
}
var _anchor, _hydrate_open, _props, _children, _effect, _main_effect, _pending_effect, _failed_effect, _offscreen_fragment, _local_pending_count, _pending_count, _pending_count_update_queued, _dirty_effects, _maybe_dirty_effects, _effect_pending, _effect_pending_subscriber, _Boundary_instances, hydrate_resolved_content_fn, hydrate_failed_content_fn, hydrate_pending_content_fn, render_fn, resolve_fn, run_fn, update_pending_count_fn, handle_error_fn;
var _anchor, _hydrate_open, _props, _children, _effect, _main_effect, _pending_effect, _failed_effect, _offscreen_fragment, _local_pending_count, _pending_count, _pending_count_update_queued, _dirty_effects, _maybe_dirty_effects, _effect_pending, _effect_pending_subscriber, _Boundary_instances, hydrate_resolved_content_fn, hydrate_failed_content_fn, create_reset_fn, hydrate_pending_content_fn, render_fn, resolve_fn, run_fn, update_pending_count_fn, handle_error_fn;
var Boundary = class {
/**
* @param {TemplateNode} node
@@ -25453,16 +25530,56 @@ hydrate_resolved_content_fn = function() {
*/
hydrate_failed_content_fn = function(error) {
const failed = __privateGet(this, _props).failed;
const { reset: reset2, invoke_onerror } = __privateMethod(this, _Boundary_instances, create_reset_fn).call(this, error);
queue_micro_task(invoke_onerror);
if (!failed) return;
__privateSet(this, _failed_effect, branch(() => {
failed(
__privateGet(this, _anchor),
() => error,
() => () => {
}
() => reset2
);
}));
};
/**
* Creates the `reset` function for a failed boundary, along with a function
* that invokes `onerror` with it (if provided)
* @param {unknown} error
* @returns {{ reset: () => void, invoke_onerror: () => void }}
*/
create_reset_fn = function(error) {
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (__privateGet(this, _failed_effect) !== null) {
pause_effect(__privateGet(this, _failed_effect), () => {
__privateSet(this, _failed_effect, null);
});
}
__privateMethod(this, _Boundary_instances, run_fn).call(this, () => {
__privateMethod(this, _Boundary_instances, render_fn).call(this);
});
};
const invoke_onerror = () => {
var _a6, _b3;
try {
calling_on_error = true;
(_b3 = (_a6 = __privateGet(this, _props)).onerror) == null ? void 0 : _b3.call(_a6, error, reset2);
calling_on_error = false;
} catch (err) {
invoke_error_boundary(err, __privateGet(this, _effect) && __privateGet(this, _effect).parent);
}
};
return { reset: reset2, invoke_onerror };
};
hydrate_pending_content_fn = function() {
const pending2 = __privateGet(this, _props).pending;
if (!pending2) return;
@@ -25602,36 +25719,10 @@ handle_error_fn = function(error) {
next();
set_hydrate_node(skip_nodes());
}
var onerror = __privateGet(this, _props).onerror;
let failed = __privateGet(this, _props).failed;
var did_reset = false;
var calling_on_error = false;
const reset2 = () => {
if (did_reset) {
svelte_boundary_reset_noop();
return;
}
did_reset = true;
if (calling_on_error) {
svelte_boundary_reset_onerror();
}
if (__privateGet(this, _failed_effect) !== null) {
pause_effect(__privateGet(this, _failed_effect), () => {
__privateSet(this, _failed_effect, null);
});
}
__privateMethod(this, _Boundary_instances, run_fn).call(this, () => {
__privateMethod(this, _Boundary_instances, render_fn).call(this);
});
};
const handle_error_result = (transformed_error) => {
try {
calling_on_error = true;
onerror == null ? void 0 : onerror(transformed_error, reset2);
calling_on_error = false;
} catch (error2) {
invoke_error_boundary(error2, __privateGet(this, _effect) && __privateGet(this, _effect).parent);
}
const { reset: reset2, invoke_onerror } = __privateMethod(this, _Boundary_instances, create_reset_fn).call(this, transformed_error);
invoke_onerror();
if (failed) {
__privateSet(this, _failed_effect, __privateMethod(this, _Boundary_instances, run_fn).call(this, () => {
try {
@@ -32721,7 +32812,8 @@ var TextInputSuggest = class {
const suggestions = this.getSuggestions(inputStr);
if (suggestions.length > 0) {
this.suggest.setSuggestions(suggestions);
this.open(this.app.dom.appContainerEl, this.inputEl);
const appContainerEl = this.app.dom.appContainerEl;
this.open(appContainerEl, this.inputEl);
}
}
open(container, inputEl) {
@@ -36848,6 +36940,16 @@ var SettingView = class {
markAsChanged();
});
});
new import_obsidian15.Setting(noteSettingsModal.contentEl).setName("Show Graph Depth Control (dg-show-graph-depth-control)").setDesc("When turned on, graph will show a depth slider.").addToggle((t) => {
toggles["dgShowGraphDepthControl"] = t;
t.setValue(
this.settings.defaultNoteSettings.dgShowGraphDepthControl
);
t.onChange((val) => {
this.settings.defaultNoteSettings.dgShowGraphDepthControl = val;
markAsChanged();
});
});
new import_obsidian15.Setting(noteSettingsModal.contentEl).setName("Show backlinks for notes (dg-show-backlinks)").setDesc(
"When turned on, notes will show backlinks in a sidebar on desktop and at the bottom of the page on mobile."
).addToggle((t) => {
@@ -40216,6 +40318,7 @@ var DEFAULT_SETTINGS = {
dgPassFrontmatter: false,
dgShowBacklinks: false,
dgShowLocalGraph: false,
dgShowGraphDepthControl: false,
dgShowInlineTitle: false,
dgShowFileTree: false,
dgEnableSearch: false,
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "digitalgarden",
"name": "Digital Garden",
"version": "2.80.3",
"version": "2.83.1",
"minAppVersion": "1.10.0",
"description": "Publish your notes to the web for others to enjoy. For free.",
"author": "Ole Eskild Steensen",
+23 -23
View File
@@ -6,29 +6,29 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
/******************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+10 -10
View File
@@ -1,10 +1,10 @@
{
"id": "nldates-obsidian",
"name": "Natural Language Dates",
"description": "Create date-links based on natural language",
"version": "0.6.2",
"author": "Argentina Ortega Sainz",
"authorUrl": "https://argentinaos.com/",
"isDesktopOnly": false,
"minAppVersion": "1.0.0"
}
{
"id": "nldates-obsidian",
"name": "Natural Language Dates",
"description": "Create date-links based on natural language",
"version": "0.6.4",
"author": "Obsidian Community (Formerly Argentina Ortega Sainz)",
"authorUrl": "https://github.com/obsidian-community/nldates",
"isDesktopOnly": false,
"minAppVersion": "1.0.0"
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-livesync",
"name": "Self-hosted LiveSync",
"version": "0.25.83",
"version": "1.0.2",
"minAppVersion": "1.7.2",
"description": "Community implementation of self-hosted livesync. Reflect your vault changes to some other devices immediately. Please make sure to disable other synchronize solutions to avoid content corruption or duplication.",
"author": "vorotamoroz",
+264 -23
View File
@@ -12,13 +12,26 @@
background-color: var(--text-muted);
}
.vpk-action-dialog__message {
user-select: text;
-webkit-user-select: text;
}
.conflict-dev-name {
display: inline-block;
min-width: 5em;
}
.conflict-action-container {
display: flex;
flex-direction: column;
gap: var(--size-4-2);
margin-top: var(--size-4-2);
}
.conflict-action-button {
margin-right: 4px;
width: 100%;
margin: 0;
}
.op-scrollable {
@@ -138,8 +151,8 @@ div.sls-setting-menu-btn {
/* width: 100%; */
}
.sls-setting-tab:hover~div.sls-setting-menu-btn,
.sls-setting-label.selected .sls-setting-tab:checked~div.sls-setting-menu-btn {
.sls-setting-tab:hover ~ div.sls-setting-menu-btn,
.sls-setting-label.selected .sls-setting-tab:checked ~ div.sls-setting-menu-btn {
background-color: var(--interactive-accent);
color: var(--text-on-accent);
}
@@ -174,9 +187,16 @@ body {
/* padding: 2px; */
margin: 1px;
border-radius: 4px;
background-image: linear-gradient(-45deg,
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2));
background-image: linear-gradient(
-45deg,
var(--sls-col-warn-stripe1) 25%,
var(--sls-col-warn-stripe2) 25%,
var(--sls-col-warn-stripe2) 50%,
var(--sls-col-warn-stripe1) 50%,
var(--sls-col-warn-stripe1) 75%,
var(--sls-col-warn-stripe2) 75%,
var(--sls-col-warn-stripe2)
);
background-size: 30px 30px;
display: flex;
flex-direction: row;
@@ -196,7 +216,6 @@ body {
100% {
background-position: 30px 0;
}
}
.sls-setting-menu-buttons label {
@@ -301,33 +320,95 @@ body {
background-color: rgba(var(--background-modifier-error-rgb), 0.3);
}
.sls-setting-disabled input[type=text],
.sls-setting-disabled input[type=number],
.sls-setting-disabled input[type=password] {
.sls-setting-disabled input[type="text"],
.sls-setting-disabled input[type="number"],
.sls-setting-disabled input[type="password"] {
filter: brightness(80%);
color: var(--text-muted);
}
.sls-setting-hidden {
display: none;
}
.sls-setting-obsolete {
/* background-image: linear-gradient(-45deg,
var(--sls-col-warn-stripe1) 25%, var(--sls-col-warn-stripe2) 25%, var(--sls-col-warn-stripe2) 50%,
var(--sls-col-warn-stripe1) 50%, var(--sls-col-warn-stripe1) 75%, var(--sls-col-warn-stripe2) 75%, var(--sls-col-warn-stripe2)); */
background-image: linear-gradient(-45deg,
transparent 25%, rgba(var(--background-secondary), 0.1) 25%, rgba(var(--background-secondary), 0.1) 50%, transparent 50%, transparent 75%, rgba(var(--background-secondary), 0.1) 75%, rgba(var(--background-secondary), 0.1));
background-image: linear-gradient(
-45deg,
transparent 25%,
rgba(var(--background-secondary), 0.1) 25%,
rgba(var(--background-secondary), 0.1) 50%,
transparent 50%,
transparent 75%,
rgba(var(--background-secondary), 0.1) 75%,
rgba(var(--background-secondary), 0.1)
);
background-size: 60px 60px;
}
.password-input>.setting-item-control>input {
.password-input > .setting-item-control > input {
-webkit-text-security: disc;
}
.sls-onboarding-invitation-action {
display: inline-flex;
min-width: 44px;
min-height: 44px;
align-items: center;
justify-content: center;
}
.sls-review-harness {
box-sizing: border-box;
max-width: 100%;
overflow-x: clip;
padding-bottom: max(1rem, env(safe-area-inset-bottom));
}
.sls-review-harness .setting-item,
.sls-review-harness .setting-item-control {
flex-wrap: wrap;
max-width: 100%;
}
.sls-review-harness .setting-item-info {
min-width: min(16rem, 100%);
}
.sls-review-harness .setting-item-control {
gap: 0.5rem;
}
.sls-review-harness button {
min-height: 44px;
max-width: 100%;
white-space: normal;
}
.sls-review-harness__result,
.sls-review-harness__warning,
.sls-review-harness__privacy,
.sls-review-harness__error,
.sls-review-harness__resumed {
max-width: 100%;
overflow-wrap: anywhere;
}
.sls-review-harness__result {
margin: 0 0 1rem;
}
.sls-review-harness__warning,
.sls-review-harness__error {
color: var(--text-error);
}
.sls-review-harness__resumed {
color: var(--text-success);
}
span.ls-mark-cr::after {
user-select: none;
content: "↲";
@@ -378,7 +459,6 @@ span.ls-mark-cr::after {
}
}
.livesync-status {
user-select: none;
pointer-events: none;
@@ -401,13 +481,13 @@ span.ls-mark-cr::after {
font-size: 80%;
}
div.workspace-leaf-content[data-type=bases] .livesync-status {
div.workspace-leaf-content[data-type="bases"] .livesync-status {
top: calc(var(--bases-header-height) + var(--header-height));
padding: 5px;
padding-right: 18px;
}
.is-mobile div.workspace-leaf-content[data-type=bases] .livesync-status {
.is-mobile div.workspace-leaf-content[data-type="bases"] .livesync-status {
top: calc(var(--bases-header-height) + var(--view-header-height));
padding: 6px;
padding-right: 18px;
@@ -422,7 +502,6 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
.livesync-status .livesync-status-loghistory {
text-align: left;
opacity: 0.4;
}
.livesync-status div.livesync-status-messagearea:empty {
@@ -440,7 +519,6 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
margin-left: auto;
}
.menu-setting-poweruser-disabled .sls-setting-poweruser {
display: none;
}
@@ -459,7 +537,7 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
top: 2.5em;
background-color: var(--background-secondary-alt);
border-radius: 10px;
padding: 0.5em 1.0em;
padding: 0.5em 1em;
}
.active-pane .sls-setting-panel-title {
@@ -476,6 +554,34 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
font-size: 0.8em;
}
body.is-mobile .livesync-message-box-container {
box-sizing: border-box;
padding-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
padding-right: var(--safe-area-inset-right, env(safe-area-inset-right, 0px));
padding-bottom: var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px));
padding-left: var(--safe-area-inset-left, env(safe-area-inset-left, 0px));
}
body.is-mobile .livesync-message-box-container .modal {
max-height: 100%;
}
body.is-mobile .livesync-message-box-container button {
height: auto;
min-height: var(--input-height);
white-space: normal;
}
body.is-mobile .livesync-compatibility-review-notice {
box-sizing: border-box;
margin-right: calc(64px + var(--safe-area-inset-right, env(safe-area-inset-right, 0px)));
min-width: 0;
width: calc(
100vw - 88px - var(--safe-area-inset-left, env(safe-area-inset-left, 0px)) -
var(--safe-area-inset-right, env(safe-area-inset-right, 0px))
);
}
.sls-qr {
display: flex;
justify-content: center;
@@ -488,7 +594,98 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
overflow-x: auto;
white-space: pre-wrap;
word-break: break-all;
}
.sls-repair-results {
display: grid;
gap: var(--size-4-3);
}
.sls-repair-result {
padding: var(--size-4-3);
border: 1px solid var(--background-modifier-border);
border-radius: var(--radius-m);
background: var(--background-secondary);
}
.sls-repair-header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--size-4-2);
min-width: 0;
}
.sls-repair-header > :first-child {
flex: 1 1 auto;
min-width: 0;
}
.sls-repair-header h6 {
margin: 0;
overflow-wrap: anywhere;
}
.sls-repair-status {
display: flex;
flex-wrap: wrap;
gap: var(--size-4-2);
margin-top: var(--size-4-1);
font-size: var(--font-ui-smaller);
}
.sls-repair-status-ok {
color: var(--text-success);
}
.sls-repair-status-warning {
color: var(--text-warning);
}
.sls-repair-metric {
margin-top: var(--size-4-1);
font-size: var(--font-ui-smaller);
line-height: var(--line-height-tight);
overflow-wrap: anywhere;
}
.sls-repair-action-menu {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: var(--clickable-icon-size);
width: var(--clickable-icon-size);
height: var(--clickable-icon-size);
padding: 0;
}
.sls-repair-action-menu .svg-icon {
width: 18px;
height: 18px;
}
.sls-repair-revision {
margin-top: var(--size-4-2);
padding: var(--size-4-2);
border-left: 3px solid var(--background-modifier-border);
background: var(--background-primary-alt);
}
.sls-repair-revision-title {
font-weight: var(--font-semibold);
overflow-wrap: anywhere;
}
.sls-repair-revision code {
display: block;
margin-top: var(--size-4-1);
overflow-wrap: anywhere;
white-space: normal;
}
.sls-repair-ancestor-warning {
margin-top: var(--size-4-2);
color: var(--text-warning);
}
/* Diff navigation */
@@ -551,6 +748,51 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
color: var(--text-muted);
}
.history-search-row button:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.history-rev-nav-row {
display: flex;
align-items: center;
gap: 6px;
margin-bottom: 8px;
}
.history-rev-nav-row input[type="range"] {
flex-grow: 1;
margin-bottom: 0;
}
.history-rev-nav-btn {
flex-shrink: 0;
padding: 2px 10px;
font-size: 0.9em;
cursor: pointer;
border: 1px solid var(--background-modifier-border);
border-radius: 4px;
background-color: var(--background-secondary);
color: var(--text-normal);
}
.history-rev-nav-btn:hover:not(:disabled) {
background-color: var(--background-modifier-hover);
}
.history-rev-nav-btn:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.history-rev-indicator {
flex-shrink: 0;
font-size: 0.85em;
color: var(--text-muted);
min-width: 4.5em;
text-align: right;
}
.history-diff-options-row {
justify-content: space-between;
}
@@ -570,4 +812,3 @@ div.workspace-leaf-content[data-type=bases] .livesync-status {
outline-offset: 1px;
border-radius: 2px;
}
+89 -89
View File
@@ -1000,55 +1000,55 @@
"id": 38835133,
"title": "硬/软件评测",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:14.880Z"
"lastSyncDate": "2026-08-01T10:03:03.494Z"
},
"38835134": {
"id": 38835134,
"title": "硬/软件评测/硬件评测",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:15.710Z",
"lastSyncDate": "2026-08-01T10:03:04.285Z",
"parentId": 38835133
},
"38835135": {
"id": 38835135,
"title": "硬/软件评测/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:16.598Z",
"lastSyncDate": "2026-08-01T10:03:05.346Z",
"parentId": 38835133
},
"38835136": {
"id": 38835136,
"title": "硬/软件评测/opencore",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:17.360Z",
"lastSyncDate": "2026-08-01T10:03:06.247Z",
"parentId": 38835133
},
"38835137": {
"id": 38835137,
"title": "硬/软件评测/20230826",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:18.166Z",
"lastSyncDate": "2026-08-01T10:03:07.019Z",
"parentId": 38835133
},
"38835138": {
"id": 38835138,
"title": "硬/软件评测/elasticsearch",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:19.424Z",
"lastSyncDate": "2026-08-01T10:03:07.859Z",
"parentId": 38835133
},
"38835140": {
"id": 38835140,
"title": "硬/软件评测/记账软件",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:20.252Z",
"lastSyncDate": "2026-08-01T10:03:08.630Z",
"parentId": 38835133
},
"38835141": {
"id": 38835141,
"title": "硬/软件评测/图片工具",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:20.973Z",
"lastSyncDate": "2026-08-01T10:03:09.900Z",
"parentId": 38835133
},
"38835142": {
@@ -1143,7 +1143,7 @@
"id": 38835159,
"title": "群晖NAS/docker",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:21.752Z",
"lastSyncDate": "2026-08-01T10:03:10.623Z",
"parentId": 38835158
},
"38835160": {
@@ -1162,21 +1162,21 @@
"id": 38835163,
"title": "群晖NAS/20230708",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:22.636Z",
"lastSyncDate": "2026-08-01T10:03:11.745Z",
"parentId": 38835158
},
"38835164": {
"id": 38835164,
"title": "群晖NAS/20230811",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:23.520Z",
"lastSyncDate": "2026-08-01T10:03:12.807Z",
"parentId": 38835158
},
"38835165": {
"id": 38835165,
"title": "破解网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:24.270Z"
"lastSyncDate": "2026-08-01T10:03:14.148Z"
},
"38835166": {
"id": 38835166,
@@ -1199,13 +1199,13 @@
"id": 38835169,
"title": "越狱",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:25.582Z"
"lastSyncDate": "2026-08-01T10:03:15.218Z"
},
"38835170": {
"id": 38835170,
"title": "越狱/安装ipa",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:26.341Z",
"lastSyncDate": "2026-08-01T10:03:16.292Z",
"parentId": 38835169
},
"38835171": {
@@ -1224,7 +1224,7 @@
"id": 38835174,
"title": "越狱/巨魔",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:27.121Z",
"lastSyncDate": "2026-08-01T10:03:17.415Z",
"parentId": 38835169
},
"38835175": {
@@ -1422,7 +1422,7 @@
"id": 38835212,
"title": "英语学习",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:28.425Z"
"lastSyncDate": "2026-08-01T10:03:18.689Z"
},
"38835213": {
"id": 38835213,
@@ -1493,7 +1493,7 @@
"id": 38835225,
"title": "幼儿教育",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:29.205Z"
"lastSyncDate": "2026-08-01T10:03:19.910Z"
},
"38835226": {
"id": 38835226,
@@ -1647,28 +1647,28 @@
"id": 38835253,
"title": "物联网解决方案/产品评估",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:29.957Z",
"lastSyncDate": "2026-08-01T10:03:20.995Z",
"parentId": 38835252
},
"38835254": {
"id": 38835254,
"title": "物联网解决方案/产品评估/语音机器人",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:30.727Z",
"lastSyncDate": "2026-08-01T10:03:22.142Z",
"parentId": 38835253
},
"38835255": {
"id": 38835255,
"title": "物联网解决方案/产品评估/语音机器人/智慧农业",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:31.973Z",
"lastSyncDate": "2026-08-01T10:03:23.354Z",
"parentId": 38835254
},
"38835256": {
"id": 38835256,
"title": "物联网解决方案/产品评估/语音机器人/智慧农业/智慧照明",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:32.719Z",
"lastSyncDate": "2026-08-01T10:03:24.368Z",
"parentId": 38835255
},
"38835257": {
@@ -1681,7 +1681,7 @@
"id": 38835258,
"title": "物联网解决方案/供应商",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:34.004Z",
"lastSyncDate": "2026-08-01T10:03:25.837Z",
"parentId": 38835252
},
"38835259": {
@@ -1706,7 +1706,7 @@
"id": 38835262,
"title": "物联网解决方案/安防网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:35.487Z",
"lastSyncDate": "2026-08-01T10:03:27.846Z",
"parentId": 38835252
},
"38835263": {
@@ -1736,62 +1736,62 @@
"id": 38835268,
"title": "学习网站/ChatGPT",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:36.244Z",
"lastSyncDate": "2026-08-01T10:03:28.695Z",
"parentId": 38835265
},
"38835269": {
"id": 38835269,
"title": "学习网站/ChatGPT/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:36.985Z",
"lastSyncDate": "2026-08-01T10:03:29.448Z",
"parentId": 38835268
},
"38835270": {
"id": 38835270,
"title": "学习网站/Comic",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:37.703Z",
"lastSyncDate": "2026-08-01T10:03:30.434Z",
"parentId": 38835265
},
"38835271": {
"id": 38835271,
"title": "开发网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:38.944Z"
"lastSyncDate": "2026-08-01T10:03:31.656Z"
},
"38835272": {
"id": 38835272,
"title": "开发网站/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:39.748Z",
"lastSyncDate": "2026-08-01T10:03:32.423Z",
"parentId": 38835271
},
"38835273": {
"id": 38835273,
"title": "开发网站/VSCode",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:40.962Z",
"lastSyncDate": "2026-08-01T10:03:33.671Z",
"parentId": 38835271
},
"38835274": {
"id": 38835274,
"title": "开发网站/Python",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:41.828Z",
"lastSyncDate": "2026-08-01T10:03:34.631Z",
"parentId": 38835271
},
"38835275": {
"id": 38835275,
"title": "开发网站/F^Q",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:43.027Z",
"lastSyncDate": "2026-08-01T10:03:35.371Z",
"parentId": 38835271
},
"38835276": {
"id": 38835276,
"title": "开发网站/F^Q/20230812",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:44.237Z",
"lastSyncDate": "2026-08-01T10:03:36.086Z",
"parentId": 38835275
},
"38835285": {
@@ -2905,7 +2905,7 @@
"id": 38835489,
"title": "群晖NAS",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:45.565Z"
"lastSyncDate": "2026-08-01T10:03:36.857Z"
},
"38835490": {
"id": 38835490,
@@ -2917,14 +2917,14 @@
"id": 38835491,
"title": "群晖NAS/nginx",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:46.331Z",
"lastSyncDate": "2026-08-01T10:03:37.646Z",
"parentId": 38835489
},
"38835492": {
"id": 38835492,
"title": "群晖NAS/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:47.134Z",
"lastSyncDate": "2026-08-01T10:03:38.692Z",
"parentId": 38835489
},
"38835493": {
@@ -2976,14 +2976,14 @@
"id": 38835502,
"title": "越狱/IPA",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:48.446Z",
"lastSyncDate": "2026-08-01T10:03:40.082Z",
"parentId": 38835500
},
"38835503": {
"id": 38835503,
"title": "越狱/IPA提取",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:49.259Z",
"lastSyncDate": "2026-08-01T10:03:40.870Z",
"parentId": 38835500
},
"38835504": {
@@ -3434,7 +3434,7 @@
"id": 38835584,
"title": "物联网解决方案/行业资讯",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:50.588Z",
"lastSyncDate": "2026-08-01T10:03:42.373Z",
"parentId": 38835579
},
"38835585": {
@@ -3447,21 +3447,21 @@
"id": 38835586,
"title": "物联网解决方案/数字孪生",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:51.755Z",
"lastSyncDate": "2026-08-01T10:03:43.115Z",
"parentId": 38835579
},
"38835587": {
"id": 38835587,
"title": "物联网解决方案/智慧停车",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:52.493Z",
"lastSyncDate": "2026-08-01T10:03:43.875Z",
"parentId": 38835579
},
"38835588": {
"id": 38835588,
"title": "物联网解决方案/智能家居",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:53.312Z",
"lastSyncDate": "2026-08-01T10:03:44.605Z",
"parentId": 38835579
},
"38835589": {
@@ -3474,27 +3474,27 @@
"id": 38835590,
"title": "物联网解决方案/智慧酒店",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:54.583Z",
"lastSyncDate": "2026-08-01T10:03:45.838Z",
"parentId": 38835579
},
"38835591": {
"id": 38835591,
"title": "物联网解决方案/智慧园区",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:55.360Z",
"lastSyncDate": "2026-08-01T10:03:46.608Z",
"parentId": 38835579
},
"38835592": {
"id": 38835592,
"title": "学习网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:56.186Z"
"lastSyncDate": "2026-08-01T10:03:47.515Z"
},
"38835593": {
"id": 38835593,
"title": "学习网站/博客",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:56.945Z",
"lastSyncDate": "2026-08-01T10:03:48.504Z",
"parentId": 38835592
},
"38835595": {
@@ -3519,243 +3519,243 @@
"id": 38835599,
"title": "开发网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:57.750Z"
"lastSyncDate": "2026-08-01T10:03:49.737Z"
},
"38835600": {
"id": 38835600,
"title": "开发网站/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:58.734Z",
"lastSyncDate": "2026-08-01T10:03:50.661Z",
"parentId": 38835599
},
"38835601": {
"id": 38835601,
"title": "开发网站/VSCode",
"sync": true,
"lastSyncDate": "2026-07-29T21:54:59.687Z",
"lastSyncDate": "2026-08-01T10:03:51.505Z",
"parentId": 38835599
},
"38835602": {
"id": 38835602,
"title": "开发网站/Python",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:00.493Z",
"lastSyncDate": "2026-08-01T10:03:52.818Z",
"parentId": 38835599
},
"38835603": {
"id": 38835603,
"title": "开发网站/F^Q",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:01.740Z",
"lastSyncDate": "2026-08-01T10:03:53.572Z",
"parentId": 38835599
},
"38835604": {
"id": 38835604,
"title": "开发网站/F^Q/20230812",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:02.514Z",
"lastSyncDate": "2026-08-01T10:03:54.662Z",
"parentId": 38835603
},
"38835605": {
"id": 38835605,
"title": "开发网站/SQL",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:03.258Z",
"lastSyncDate": "2026-08-01T10:03:55.424Z",
"parentId": 38835599
},
"38835606": {
"id": 38835606,
"title": "开发网站/App打包",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:04.587Z",
"lastSyncDate": "2026-08-01T10:03:56.223Z",
"parentId": 38835599
},
"38835607": {
"id": 38835607,
"title": "开发网站/抓包",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:05.933Z",
"lastSyncDate": "2026-08-01T10:03:57.051Z",
"parentId": 38835599
},
"38835608": {
"id": 38835608,
"title": "开发网站/抓包/抓音频",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:07.412Z",
"lastSyncDate": "2026-08-01T10:03:57.799Z",
"parentId": 38835607
},
"38835609": {
"id": 38835609,
"title": "开发网站/抓包/charles",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:08.735Z",
"lastSyncDate": "2026-08-01T10:03:58.705Z",
"parentId": 38835607
},
"38835610": {
"id": 38835610,
"title": "开发网站/pdf.js",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:09.713Z",
"lastSyncDate": "2026-08-01T10:04:00.295Z",
"parentId": 38835599
},
"38835611": {
"id": 38835611,
"title": "开发网站/webplayer",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:10.610Z",
"lastSyncDate": "2026-08-01T10:04:01.514Z",
"parentId": 38835599
},
"38835612": {
"id": 38835612,
"title": "开发网站/加解密",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:11.422Z",
"lastSyncDate": "2026-08-01T10:04:02.285Z",
"parentId": 38835599
},
"38835613": {
"id": 38835613,
"title": "开发网站/cors",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:12.391Z",
"lastSyncDate": "2026-08-01T10:04:03.388Z",
"parentId": 38835599
},
"38835614": {
"id": 38835614,
"title": "开发网站/Delphi",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:13.371Z",
"lastSyncDate": "2026-08-01T10:04:04.427Z",
"parentId": 38835599
},
"38835615": {
"id": 38835615,
"title": "开发网站/APK反编译",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:14.613Z",
"lastSyncDate": "2026-08-01T10:04:05.434Z",
"parentId": 38835599
},
"38835616": {
"id": 38835616,
"title": "开源项目",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:15.559Z"
"lastSyncDate": "2026-08-01T10:04:06.465Z"
},
"38835617": {
"id": 38835617,
"title": "开源项目/siyuan",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:16.313Z",
"lastSyncDate": "2026-08-01T10:04:07.177Z",
"parentId": 38835616
},
"38835618": {
"id": 38835618,
"title": "开源项目/rustdesk",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:17.081Z",
"lastSyncDate": "2026-08-01T10:04:07.932Z",
"parentId": 38835616
},
"38835619": {
"id": 38835619,
"title": "开源项目/SiP",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:18.358Z",
"lastSyncDate": "2026-08-01T10:04:09.136Z",
"parentId": 38835616
},
"38835620": {
"id": 38835620,
"title": "开源项目/GitHub",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:19.782Z",
"lastSyncDate": "2026-08-01T10:04:10.394Z",
"parentId": 38835616
},
"38835621": {
"id": 38835621,
"title": "开源项目/GitHub/20230709",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:21.407Z",
"lastSyncDate": "2026-08-01T10:04:11.414Z",
"parentId": 38835620
},
"38835622": {
"id": 38835622,
"title": "开源项目/GitHub/aria2",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:22.347Z",
"lastSyncDate": "2026-08-01T10:04:12.355Z",
"parentId": 38835620
},
"38835624": {
"id": 38835624,
"title": "开源项目/GitHub/小白羊",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:23.424Z",
"lastSyncDate": "2026-08-01T10:04:13.584Z",
"parentId": 38835620
},
"38835625": {
"id": 38835625,
"title": "开源项目/GitHub/alist",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:24.683Z",
"lastSyncDate": "2026-08-01T10:04:14.334Z",
"parentId": 38835620
},
"38835626": {
"id": 38835626,
"title": "开源项目/GitHub/RustDesk",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:25.401Z",
"lastSyncDate": "2026-08-01T10:04:15.062Z",
"parentId": 38835620
},
"38835627": {
"id": 38835627,
"title": "开源项目/GitHub/imagine",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:26.617Z",
"lastSyncDate": "2026-08-01T10:04:16.285Z",
"parentId": 38835620
},
"38835628": {
"id": 38835628,
"title": "开源项目/GitHub/Bridge",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:27.896Z",
"lastSyncDate": "2026-08-01T10:04:17.145Z",
"parentId": 38835620
},
"38835629": {
"id": 38835629,
"title": "开源项目/OnlyOffice",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:28.887Z",
"lastSyncDate": "2026-08-01T10:04:18.695Z",
"parentId": 38835616
},
"38835630": {
"id": 38835630,
"title": "开源项目/OnlyOffice/20230809",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:29.785Z",
"lastSyncDate": "2026-08-01T10:04:19.475Z",
"parentId": 38835629
},
"38835631": {
"id": 38835631,
"title": "开源项目/日历",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:31.126Z",
"lastSyncDate": "2026-08-01T10:04:20.745Z",
"parentId": 38835616
},
"38835632": {
"id": 38835632,
"title": "开源项目/OCR",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:32.272Z",
"lastSyncDate": "2026-08-01T10:04:21.796Z",
"parentId": 38835616
},
"38835633": {
"id": 38835633,
"title": "开源项目/Bridge",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:33.030Z",
"lastSyncDate": "2026-08-01T10:04:22.548Z",
"parentId": 38835616
},
"38835636": {
"id": 38835636,
"title": "游戏网站",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:34.158Z"
"lastSyncDate": "2026-08-01T10:04:23.336Z"
},
"38835638": {
"id": 38835638,
@@ -3879,27 +3879,27 @@
"id": 38835659,
"title": "电子书",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:35.049Z"
"lastSyncDate": "2026-08-01T10:04:24.117Z"
},
"38835660": {
"id": 38835660,
"title": "电子书/电子书制作",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:36.330Z",
"lastSyncDate": "2026-08-01T10:04:25.448Z",
"parentId": 38835659
},
"38835661": {
"id": 38835661,
"title": "电子书/calibre",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:37.096Z",
"lastSyncDate": "2026-08-01T10:04:26.217Z",
"parentId": 38835659
},
"38835662": {
"id": 38835662,
"title": "电子书/20230826",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:37.895Z",
"lastSyncDate": "2026-08-01T10:04:27.310Z",
"parentId": 38835659
},
"38835663": {
@@ -3916,7 +3916,7 @@
"id": 38835665,
"title": "Favorites",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:38.656Z"
"lastSyncDate": "2026-08-01T10:04:28.036Z"
},
"38835666": {
"id": 38835666,
@@ -3934,26 +3934,26 @@
"id": 38835668,
"title": "翻译",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:39.459Z"
"lastSyncDate": "2026-08-01T10:04:28.800Z"
},
"38835669": {
"id": 38835669,
"title": "智能家居",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:40.832Z"
"lastSyncDate": "2026-08-01T10:04:29.770Z"
},
"38835670": {
"id": 38835670,
"title": "智能家居/HomeAssist",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:41.612Z",
"lastSyncDate": "2026-08-01T10:04:30.557Z",
"parentId": 38835669
},
"58561271": {
"id": 58561271,
"title": "ClipperBox",
"sync": true,
"lastSyncDate": "2026-07-29T21:55:42.555Z"
"lastSyncDate": "2026-08-01T10:04:31.886Z"
},
"-1": {
"id": -1,
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "obsidian-reminder-plugin",
"name": "Reminder",
"version": "1.3.2",
"version": "1.4.0",
"minAppVersion": "1.0.3",
"description": "Reminder plugin for Obsidian. This plugin adds feature to manage TODOs with reminder.",
"author": "uphy",
+4 -4
View File
@@ -10,13 +10,13 @@
"savePassword": true,
"isDefault": true,
"lastSelectedCategories": [
15
1
],
"username": "wpAdmin",
"encryptedPassword": {
"key": "{\"alg\":\"A256GCM\",\"ext\":true,\"k\":\"zMoleceJw_wSCoAdfOMHqtQJQ4pZITh_NEFqooLqw8Y\",\"key_ops\":[\"encrypt\",\"decrypt\"],\"kty\":\"oct\"}",
"vector": "hkIfpWbZ5ayi4/Mn",
"encrypted": "5241BmtV2IX5Xwz8norL6j4SP1Ha8WKl"
"key": "{\"alg\":\"A256GCM\",\"ext\":true,\"k\":\"7Iqj2qFJvPxP2DnfyHDeBothUUsyRQticN6m-cl3Vys\",\"key_ops\":[\"encrypt\",\"decrypt\"],\"kty\":\"oct\"}",
"vector": "7BwGNpXL37h9ci/H",
"encrypted": "i+vmxM1EW8hnQtHqWFkFu5RC0BKxqAZG"
}
}
],
+66 -14
View File
@@ -3,13 +3,16 @@
"inputPrompt": "single-line",
"persistInputPromptDrafts": true,
"useSelectionAsCaptureValue": true,
"searchNestedChoices": true,
"templateFolderLauncherRow": "bottom",
"devMode": false,
"templateFolderPath": "",
"templateFolderPaths": [],
"announceUpdates": "all",
"version": "2.12.3",
"version": "2.21.0",
"globalVariables": {},
"onePageInputEnabled": false,
"disableOnlineFeatures": true,
"enableUriCallbacks": false,
"enableRibbonIcon": false,
"showCaptureNotification": true,
"showInputCancellationNotification": false,
@@ -56,28 +59,74 @@
"name": "gpt-4",
"maxTokens": 8192
},
{
"name": "gpt-4-32k",
"maxTokens": 32768
},
{
"name": "gpt-4-1106-preview",
"maxTokens": 128000
},
{
"name": "gpt-4-turbo",
"maxTokens": 128000
},
{
"name": "gpt-4o",
"maxTokens": 128000
"maxTokens": 128000,
"maxOutputTokens": 16384,
"supportsTemperature": true
},
{
"name": "gpt-4o-mini",
"maxTokens": 128000
"maxTokens": 128000,
"maxOutputTokens": 16384,
"supportsTemperature": true
},
{
"name": "gpt-5.5",
"maxTokens": 1050000,
"maxOutputTokens": 128000,
"supportsTemperature": false
},
{
"name": "gpt-5.4",
"maxTokens": 1050000,
"maxOutputTokens": 128000,
"supportsTemperature": false
},
{
"name": "gpt-5.4-mini",
"maxTokens": 400000,
"maxOutputTokens": 128000,
"supportsTemperature": false
},
{
"name": "gpt-5.4-nano",
"maxTokens": 400000,
"maxOutputTokens": 128000,
"supportsTemperature": false
},
{
"name": "gpt-4.1",
"maxTokens": 1047576,
"maxOutputTokens": 32768,
"supportsTemperature": true
},
{
"name": "gpt-4.1-mini",
"maxTokens": 1047576,
"maxOutputTokens": 32768,
"supportsTemperature": true
},
{
"name": "o3",
"maxTokens": 200000,
"maxOutputTokens": 100000,
"supportsTemperature": false
},
{
"name": "o4-mini",
"maxTokens": 200000,
"maxOutputTokens": 100000,
"supportsTemperature": false
}
],
"modelSource": "auto"
"modelSource": "modelsDev",
"autoSyncModels": true,
"id": "openai"
}
]
},
@@ -94,7 +143,10 @@
"backfillFileOpeningDefaults": true,
"migrateProviderApiKeysToSecretStorage": true,
"consolidateFileExistsBehavior": true,
"repairTemplateFileExistsBehavior": true
"repairTemplateFileExistsBehavior": true,
"migrateToMultipleTemplateFolders": true,
"refreshStaleDefaultModelSeeds": true,
"pinAiModelRefs": true
},
"macros": []
}
+397 -82
View File
File diff suppressed because one or more lines are too long
+3 -3
View File
@@ -1,12 +1,12 @@
{
"id": "quickadd",
"name": "QuickAdd",
"version": "2.12.3",
"minAppVersion": "1.11.4",
"version": "2.21.0",
"minAppVersion": "1.13.0",
"description": "Quickly add new pages or content to your vault.",
"author": "Christian B. B. Houmann",
"authorUrl": "https://bagerbach.com",
"fundingUrl": "https://www.buymeacoffee.com/chhoumann",
"helpUrl": "https://quickadd.obsidian.guide/docs/",
"isDesktopOnly": false
}
}
File diff suppressed because one or more lines are too long
+108 -52
View File
@@ -1,8 +1,12 @@
{
"recentFiles": [
{
"basename": "2026-07-29",
"path": "01-工作日记/2026-07-29.md"
"basename": "数据备份列表",
"path": "03-工作笔记/应用部署/数据备份列表.md"
},
{
"basename": "本地应用部署笔记",
"path": "03-工作笔记/应用部署/本地应用部署笔记.md"
},
{
"basename": "本地服务器重新规划",
@@ -13,8 +17,108 @@
"path": "03-工作笔记/应用部署/数据存储规划V2.1.md"
},
{
"basename": "本地应用部署笔记",
"path": "03-工作笔记/应用部署/本地应用部署笔记.md"
"basename": "2026-08-01",
"path": "01-工作日记/2026-08-01.md"
},
{
"basename": "2026-07-31",
"path": "01-工作日记/2026-07-31.md"
},
{
"basename": "Aio-fnT平台构建笔记",
"path": "03-工作笔记/AioPloto/Aio-fnT平台构建笔记.md"
},
{
"basename": "云盘清单",
"path": "06-数字仓库/061-云资源/云盘清单.md"
},
{
"basename": "我的订阅",
"path": "06-数字仓库/063-订阅/我的订阅.md"
},
{
"basename": "数据恢复",
"path": "08-Inbox/数据恢复.md"
},
{
"basename": "截屏 2026-01-14 22.38.31",
"path": "03-工作笔记/应用部署/assets/截屏 2026-01-14 22.38.31.png"
},
{
"basename": "截屏 2026-01-14 22.44.12 2",
"path": "03-工作笔记/应用部署/assets/截屏 2026-01-14 22.44.12 2.png"
},
{
"basename": "截屏 2026-01-14 22.40.10 1",
"path": "03-工作笔记/应用部署/assets/截屏 2026-01-14 22.40.10 1.png"
},
{
"basename": "长郡中学校歌",
"path": "08-Inbox/长郡中学校歌.md"
},
{
"basename": "研学拓展",
"path": "08-Inbox/研学拓展.md"
},
{
"basename": "5月7日-5月11日湖北麻城荆州监利自驾行程",
"path": "08-Inbox/5月7日-5月11日湖北麻城荆州监利自驾行程.md"
},
{
"basename": "当爱已成往事",
"path": "08-Inbox/当爱已成往事.md"
},
{
"basename": "客户端安装步骤",
"path": "03-工作笔记/应用部署/客户端安装步骤.md"
},
{
"basename": "Mermaid示例",
"path": "08-Inbox/Mermaid示例.md"
},
{
"basename": "README",
"path": "README.md"
},
{
"basename": "ufs explorer 10.3 R studio pc 300 Mrt (2026-05-28 11-30)",
"path": "50-Memos/2026/05/ufs explorer 10.3 R studio pc 300 Mrt (2026-05-28 11-30).md"
},
{
"basename": "- [ ] 换了一台服务器测试 (2026-07-05 23-24)",
"path": "50-Memos/2026/07/- [ ] 换了一台服务器测试 (2026-07-05 23-24).md"
},
{
"basename": "83万人遇难的明代大地震,四大怪事至今无解 httpsk.sina.cnarticle787... (2026-07-14 11-32)",
"path": "50-Memos/2026/07/83万人遇难的明代大地震,四大怪事至今无解 httpsk.sina.cnarticle787... (2026-07-14 11-32).md"
},
{
"basename": "多尔衮妻妾成群,11岁就结婚的他为何只有一个女儿?原因非常简单 httpsk.sina.cn... (2026-07-16 16-44)",
"path": "50-Memos/2026/07/多尔衮妻妾成群,11岁就结婚的他为何只有一个女儿?原因非常简单 httpsk.sina.cn... (2026-07-16 16-44).md"
},
{
"basename": "更换了服务器 (2026-07-23 11-54)",
"path": "50-Memos/2026/07/更换了服务器 (2026-07-23 11-54).md"
},
{
"basename": "姚明、吴金星三人一起商议欠款结算问题,初步是三个月内先还8000元,从李鹏程那里走,另外4-5万从机... (2026-07-23 18-42)",
"path": "50-Memos/2026/07/姚明、吴金星三人一起商议欠款结算问题,初步是三个月内先还8000元,从李鹏程那里走,另外4-5万从机... (2026-07-23 18-42).md"
},
{
"basename": "搞懂有氧和无氧的区别,这样减肥才能瘦得快还不反弹",
"path": "04-博客发布/042-健康乐活/搞懂有氧和无氧的区别,这样减肥才能瘦得快还不反弹.md"
},
{
"basename": "2026-07-30",
"path": "01-工作日记/2026-07-30.md"
},
{
"basename": "应用内网穿透设计",
"path": "03-工作笔记/应用部署/应用内网穿透设计.md"
},
{
"basename": "2026-07-29",
"path": "01-工作日记/2026-07-29.md"
},
{
"basename": "2026-07-28",
@@ -95,54 +199,6 @@
{
"basename": "Linux系统非root用户使用docker命令 - 蓝莓薄荷 - 博客园",
"path": "10-WebClipper/Linux系统非root用户使用docker命令 - 蓝莓薄荷 - 博客园.md"
},
{
"basename": "十大硬盘数据恢复软件有哪些?数据恢复软件哪个好用推荐?_数据恢复软件recovery-CSDN博客",
"path": "10-WebClipper/十大硬盘数据恢复软件有哪些?数据恢复软件哪个好用推荐?_数据恢复软件recovery-CSDN博客.md"
},
{
"basename": "Windows使用命令行 查看定时计划任务_windows查看当前定时任务-CSDN博客",
"path": "10-WebClipper/Windows使用命令行 查看定时计划任务_windows查看当前定时任务-CSDN博客.md"
},
{
"basename": "windows定时计划任务的查看、取消、启动和创建方法_windows_Windows系列_操作系统_脚本之家",
"path": "10-WebClipper/windows定时计划任务的查看、取消、启动和创建方法_windows_Windows系列_操作系统_脚本之家.md"
},
{
"basename": "处理实践 - inotify watch 耗尽 - 《Kubernetes 实践指南(Kubernetes Practice Guide)》 - 书栈网 · BookStack",
"path": "10-WebClipper/处理实践 - inotify watch 耗尽 - 《Kubernetes 实践指南(Kubernetes Practice Guide)》 - 书栈网 · BookStack.md"
},
{
"basename": "Use MCP servers in VS Code(English)",
"path": "10-WebClipper/Use MCP servers in VS Code(English).md"
},
{
"basename": "最近热火朝天的 MCP 是什么鬼?如何使用 MCP?一文给你讲清楚!",
"path": "10-WebClipper/最近热火朝天的 MCP 是什么鬼?如何使用 MCP?一文给你讲清楚!.md"
},
{
"basename": "10M…200M下载速度峰值对照表(附计算公式) - 知乎",
"path": "10-WebClipper/10M…200M下载速度峰值对照表(附计算公式) - 知乎.md"
},
{
"basename": "OpenWrt旁路由",
"path": "10-WebClipper/OpenWrt旁路由.md"
},
{
"basename": "飞牛私有云论坛 fnOS 1",
"path": "10-WebClipper/飞牛私有云论坛 fnOS 1.md"
},
{
"basename": "飞牛私有云论坛 fnOS",
"path": "10-WebClipper/飞牛私有云论坛 fnOS.md"
},
{
"basename": "Linux软件包格式全解析-RPM、DEB、AppImage有何区别?如何选择? - 大神的开源笔记",
"path": "10-WebClipper/Linux软件包格式全解析-RPM、DEB、AppImage有何区别?如何选择? - 大神的开源笔记.md"
},
{
"basename": "fs.inotify.max_user_watches默认值太小,导致too many open files_user watch files-CSDN博客",
"path": "10-WebClipper/fs.inotify.max_user_watches默认值太小,导致too many open files_user watch files-CSDN博客.md"
}
],
"omittedPaths": [],
+293 -337
View File
File diff suppressed because one or more lines are too long
+483 -856
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "sheet-plus",
"name": "Sheet Plus",
"version": "2.12.11",
"version": "2.12.13",
"minAppVersion": "1.5.11",
"description": "Create Excel-like spreadsheets and easily embed them in Markdown.",
"author": "ljcoder",
+10 -29
View File
@@ -1,38 +1,19 @@
{
"data_version": 2,
"command_timeout": 5,
"templates_folder": "09-Templates",
"templates_pairs": [
[
"",
""
]
],
"trigger_on_file_creation": false,
"templates_pairs": [],
"trigger_on_file_creation_mode": "folder",
"auto_jump_to_cursor": false,
"enable_system_commands": false,
"jump_to_cursor_after_file_name": false,
"shell_path": "",
"user_scripts_folder": "",
"enable_folder_templates": true,
"folder_templates": [
{
"folder": "",
"template": ""
}
],
"enable_file_templates": false,
"file_templates": [
{
"regex": ".*",
"template": ""
}
],
"folder_templates": [],
"file_templates": [],
"syntax_highlighting": true,
"syntax_highlighting_mobile": false,
"enabled_templates_hotkeys": [
""
],
"startup_templates": [
""
],
"intellisense_render": 1
"enabled_templates_hotkeys": [],
"startup_templates": [],
"intellisense_render": "1",
"ignore_folders_on_creation": []
}
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,9 +1,9 @@
{
"id": "templater-obsidian",
"name": "Templater",
"version": "2.20.6",
"version": "2.24.3",
"description": "Advanced templating and automation using handlebars-like syntax.",
"minAppVersion": "1.12.2",
"minAppVersion": "1.13.0",
"author": "SilentVoid",
"authorUrl": "https://github.com/SilentVoid13",
"fundingUrl": {
+5 -61
View File
@@ -1,69 +1,8 @@
.templater_search {
width: calc(100% - 20px);
}
.templater_div {
border-top: 1px solid var(--background-modifier-border);
}
.templater_div > .setting-item {
border-top: none !important;
align-self: center;
}
.templater_div > .setting-item > .setting-item-control {
justify-content: space-around;
padding: 0;
width: 100%;
}
.templater_div
> .setting-item
> .setting-item-control
> .setting-editor-extra-setting-button {
align-self: center;
}
.templater_donating {
margin: 10px;
}
.templater_title {
margin: 0;
padding: 0;
margin-top: 5px;
text-align: center;
}
.templater_template {
align-self: center;
margin-left: 5px;
margin-right: 5px;
width: 70%;
}
.templater_cmd {
margin-left: 5px;
margin-right: 5px;
font-size: 14px;
width: 100%;
}
.templater_div2 > .setting-item {
align-content: center;
justify-content: center;
}
.templater-prompt-div,
.templater-multisuggester-div {
display: flex;
}
.templater-prompt-form {
display: flex;
flex-grow: 1;
}
.templater-prompt-input,
.templater-multisuggester-input {
flex-grow: 1;
@@ -80,6 +19,11 @@ textarea.templater-prompt-input {
height: 10rem;
}
.templater-ignore-folder-modal .modal-content input[type="text"],
.templater-startup-template-modal .modal-content input[type="text"] {
width: 100%;
}
textarea.templater-prompt-input:focus {
border-color: var(--interactive-accent);
}
+129 -76
View File
@@ -21,18 +21,6 @@
"title": "本地应用部署笔记"
}
},
{
"id": "88b6d86a927d1a33",
"type": "leaf",
"state": {
"type": "excalidraw",
"state": {
"file": "03-工作笔记/应用部署/数据存储规划V2.1.md"
},
"icon": "excalidraw-icon",
"title": "数据存储规划V2.1"
}
},
{
"id": "aba3dbfc745a5d2d",
"type": "leaf",
@@ -56,16 +44,68 @@
"state": {
"type": "markdown",
"state": {
"file": "01-工作日记/2026-07-29.md",
"file": "01-工作日记/2026-07-31.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "2026-07-29"
"title": "2026-07-31"
}
},
{
"id": "4df99e7c1424ceb6",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "03-工作笔记/AioPloto/Aio-fnT平台构建笔记.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Aio-fnT平台构建笔记"
}
},
{
"id": "965644261351770f",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "01-工作日记/2026-08-01.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "2026-08-01"
}
},
{
"id": "eb507e9cb9f806e5",
"type": "leaf",
"state": {
"type": "excalidraw",
"state": {
"file": "03-工作笔记/应用部署/数据存储规划V2.1.md"
},
"icon": "excalidraw-icon",
"title": "数据存储规划V2.1"
}
},
{
"id": "b34d5fd2dadd3271",
"type": "leaf",
"state": {
"type": "excel-pro-view",
"state": {
"file": "03-工作笔记/应用部署/数据备份列表.md"
},
"icon": "lucide-file",
"title": "数据备份列表"
}
}
],
"currentTab": 3
"currentTab": 6
}
],
"direction": "vertical"
@@ -85,7 +125,9 @@
"type": "file-explorer",
"state": {
"sortOrder": "alphabetical",
"autoReveal": false
"autoReveal": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-folder-closed",
"title": "文件列表"
@@ -137,13 +179,23 @@
"icon": "sheets-in-box",
"title": "File Tree"
}
},
{
"id": "cc0da38f60e6df4d",
"type": "leaf",
"state": {
"type": "file-tree-view",
"state": {},
"icon": "sheets-in-box",
"title": "File Tree"
}
}
],
"currentTab": 4
"currentTab": 5
}
],
"direction": "horizontal",
"width": 313.5
"width": 267.2265625
},
"right": {
"id": "343fa5e3edfc32ef",
@@ -244,8 +296,8 @@
"state": {
"type": "copilot-chat-view",
"state": {},
"icon": "message-square",
"title": "Copilot"
"icon": "lucide-ghost",
"title": "copilot-chat-view"
}
},
{
@@ -254,8 +306,8 @@
"state": {
"type": "smtcmp-chat-view",
"state": {},
"icon": "wand-sparkles",
"title": "Smart composer chat"
"icon": "lucide-ghost",
"title": "smtcmp-chat-view"
}
},
{
@@ -264,13 +316,13 @@
"state": {
"type": "outline",
"state": {
"file": "03-工作笔记/应用部署/本地应用部署笔记.md",
"file": "03-工作笔记/应用部署/数据备份列表.md",
"followCursor": false,
"showSearch": false,
"searchQuery": ""
},
"icon": "lucide-list",
"title": "本地应用部署笔记 的大纲"
"title": "大纲"
}
},
{
@@ -293,16 +345,6 @@
"title": "Podcast Player"
}
},
{
"id": "a68c117666b696c0",
"type": "leaf",
"state": {
"type": "reminder-list",
"state": {},
"icon": "clock",
"title": "Reminders"
}
},
{
"id": "553a225777d4ea64",
"type": "leaf",
@@ -322,9 +364,19 @@
"icon": "git-pull-request",
"title": "Source Control"
}
},
{
"id": "a8f7eb4bfa4c3974",
"type": "leaf",
"state": {
"type": "reminder-list",
"state": {},
"icon": "clock",
"title": "Reminders"
}
}
],
"currentTab": 13
"currentTab": 12
},
{
"id": "ad86bdfc0cc9f06b",
@@ -337,8 +389,8 @@
"state": {
"type": "calendar",
"state": {},
"icon": "calendar-with-checkmark",
"title": "Calendar"
"icon": "lucide-ghost",
"title": "calendar"
}
},
{
@@ -357,23 +409,24 @@
"state": {
"type": "calculite",
"state": {
"previousResult": 30,
"previousOperator": "×",
"previousInput": 365,
"currentResult": 10950,
"previousResult": 360,
"previousOperator": "+",
"previousInput": 288,
"currentResult": 648,
"currentOperator": null,
"currentInput": null,
"currentError": null
},
"icon": "lucide-ghost",
"title": "calculite"
"icon": "lucide-calculator",
"title": "Calculite"
}
}
]
],
"currentTab": 2
}
],
"direction": "horizontal",
"width": 353.5
"width": 293.5
},
"left-ribbon": {
"hiddenItems": {
@@ -430,37 +483,40 @@
"periodic-notes:Open today": false
}
},
"active": "c40bce0dcb7a94c8",
"active": "b34d5fd2dadd3271",
"lastOpenFiles": [
"03-工作笔记/应用部署/本地服务器重新规划.canvas",
"01-工作日记/2026-07-29.md",
"未命名.canvas",
"03-工作笔记/应用部署/数据存储规划V2.1.md",
"03-工作笔记/应用部署/本地应用部署笔记.md",
"10-WebClipper/VT-d /IOMMU(CPU虚拟化)功能开启教程 - 《永劫无间》官网 | 千机赛季上线.md",
"10-WebClipper/VT-d ",
"01-工作日记/2026-07-28.md",
"60-Imports/63-WuCai/2026/07/OpenCore Patcher for Mac v2.4.1 老旧电脑升级最新macOS系统神器-应用玩客 - 精品ma.md",
"60-Imports/63-WuCai/2026/07",
"01-工作日记/2026-07-27.md",
"01-工作日记/2026-07-26.md",
"08-Inbox/男性“器官衰老”顺序表公布,不妨自查一下,看看进行到哪一步了.md",
"10-WebClipper/[原创] NAS iscsi 开机启动自动挂载_绿联nas iscsi-CSDN博客.md",
"01-工作日记/2026-07-24.md",
"10-WebClipper/mac电脑禁止生成 .DS_Store 文件的解决方法 - 星云惊蛰 - 博客园.md",
"10-WebClipper/Syncthing部署指南:从单机到集群的完整方案.md",
"04-博客发布/040-系统技术/恼人的.DS_Store.md",
"08-Inbox/Excalidraw/Drawing 2026-07-25 19.31.10.excalidraw.md",
"02-学习笔记/在 macOS 下使用 __iSCSI__.md",
"08-Inbox/女人能彻底忘掉有过亲密关系的男人吗?.md",
"04-博客发布/041-人文历史/堂伯父谈王虹获菲尔兹奖:家族曾在村里最穷,她前年春节回广西老家,聚过后就回家搞研究了.md",
"03-工作笔记/应用部署/本地服务器重新规划.canvas",
"03-工作笔记/应用部署/数据备份列表.md",
"03-工作笔记/应用部署/数据存储规划V2.1.md",
"01-工作日记/2026-08-01.md",
"01-工作日记/2026-07-31.md",
"03-工作笔记/AioPloto/Aio-fnT平台构建笔记.md",
"06-数字仓库/061-云资源/云盘清单.md",
"06-数字仓库/063-订阅/我的订阅.md",
"08-Inbox/数据恢复.md",
"03-工作笔记/应用部署/assets/截屏 2026-01-14 22.38.31.png",
"03-工作笔记/应用部署/assets/截屏 2026-01-14 22.44.12 2.png",
"03-工作笔记/应用部署/assets/截屏 2026-01-14 22.40.10 1.png",
"08-Inbox/长郡中学校歌.md",
"08-Inbox/研学拓展.md",
"08-Inbox/5月7日-5月11日湖北麻城荆州监利自驾行程.md",
"08-Inbox/当爱已成往事.md",
"03-工作笔记/应用部署/客户端安装步骤.md",
"刚刚,35岁王虹家庭婚姻情况曝光! 采访不说中文引发全网质疑!.md",
"08-Inbox/Mermaid示例.md",
"README.md",
"50-Memos/2026/05/ufs explorer 10.3 R studio pc 300 Mrt (2026-05-28 11-30).md",
"Excel 2025-12-26 08.57.34.univer.md",
"50-Memos/2026/07/- [ ] 换了一台服务器测试 (2026-07-05 23-24).md",
"50-Memos/2026/07/83万人遇难的明代大地震,四大怪事至今无解 httpsk.sina.cnarticle787... (2026-07-14 11-32).md",
"50-Memos/2026/07/多尔衮妻妾成群,11岁就结婚的他为何只有一个女儿?原因非常简单 httpsk.sina.cn... (2026-07-16 16-44).md",
"50-Memos/2026/07/更换了服务器 (2026-07-23 11-54).md",
"50-Memos/2026/07/姚明、吴金星三人一起商议欠款结算问题,初步是三个月内先还8000元,从李鹏程那里走,另外4-5万从机... (2026-07-23 18-42).md",
"01-工作日记/2026-07-23.md",
"04-博客发布/040-系统技术/解决 Docker 需要 sudo 权限的问题(无需重启).md",
"10-WebClipper/(99+ 封私信 /80 条消息) 解决 Docker 需要 sudo 权限的问题(无需重启) - 知乎.md",
"10-WebClipper/(99+ 封私信 /80 条消息) 解决 Docker 需要 sudo 权限的问题(无需重启) - 知乎 1 1.md",
"10-WebClipper/【运维】Ubuntu上WebDAV挂载与自动同步完整指南_mob64ca13f446df的技术博客_51CTO博客.md",
"10-WebClipper/一文解决群晖和飞牛docker文件夹的权限相关问题(限纯网页端)_网络存储_什么值得买.md",
"04-博客发布/042-健康乐活/搞懂有氧和无氧的区别,这样减肥才能瘦得快还不反弹.md",
"未命名.canvas",
"10-WebClipper/VT-d ",
"60-Imports/63-WuCai/2026/07",
"04-博客发布/040-系统技术/assets/69425d6022a276072.png_e1080.webp",
"04-博客发布/040-系统技术/assets/69425d60273716072.png_e1080.webp",
"04-博客发布/040-系统技术/assets/69425d604db8f6072.png_e1080.webp",
@@ -471,9 +527,6 @@
"50-Memos/2026/07/resources/BWbEm2ZVGfZVo54okFdmda_F91F815D-C50A-4301-AE89-F66A0052138C",
"50-Memos/2026/07/resources",
"04-博客发布/041-人文历史/assets/ubegk5w3tvo.jpg",
"04-博客发布/041-人文历史/assets/634jefkfqi.jpg",
"04-博客发布/041-人文历史/assets/w3u6ylpyegl.jpg",
"04-博客发布/041-人文历史/assets/bhr8nh8l775.jpg",
"70-SimpRead/output/本地快照系统.pdf",
"50-Memos/2026/03",
"50-Memos/2026/04",