From cbba7a49234067b5fea3475d295b8676bdc2fd6a Mon Sep 17 00:00:00 2001 From: weishen Date: Tue, 21 Apr 2026 17:24:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20mark-ingested=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/manifest.json | 716 ++++++++++++++++++++++---------------------- tools/sync.py | 230 +++++++++++--- 2 files changed, 551 insertions(+), 395 deletions(-) diff --git a/tools/manifest.json b/tools/manifest.json index de8d6a8..5a5c3ed 100644 --- a/tools/manifest.json +++ b/tools/manifest.json @@ -1,68 +1,68 @@ { "version": 1, - "updated_at": "2026-04-21T07:50:06.657262+00:00", + "updated_at": "2026-04-21T09:21:10.367458+00:00", "files": { "raw/Cloud & DevOps/DevOps Culture and Transformation Fostering Collaboration, Agile Practices, and Innovation LinkedIn.md": { "hash": "98d028ad9e184a6f", "modified": "2026-04-17T08:38:00.000000+00:00", - "slug": "DevOps-Culture-and-Transformation", - "source_path": "wiki/sources/DevOps-Culture-and-Transformation.md", + "slug": "devops-culture-and-transformation-fostering-collaboration-agile-practices-and-innovation-linkedin", + "source_path": "wiki/sources/devops-culture-and-transformation-fostering-collaboration-agile-practices-and-innovation-linkedin.md", "ingested": true, "ingested_at": "2026-04-17T12:00:59.862751+00:00" }, "raw/Cloud & DevOps/Cloud DevOp Maturity - Guideline.md": { "hash": "774d63a8ec237203", "modified": "2026-04-14T04:28:42.625381+00:00", - "slug": "Cloud-DevOp-Maturity---Guideline", - "source_path": "wiki/sources/Cloud-DevOp-Maturity---Guideline.md", + "slug": "cloud-devop-maturity-guideline", + "source_path": "wiki/sources/cloud-devop-maturity-guideline.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379603+00:00" }, "raw/Cloud & DevOps/Cloud Maturity Model A Detailed Guide For Cloud Adoption.md": { "hash": "2d43021d27ef4b81", "modified": "2026-04-14T04:28:42.625606+00:00", - "slug": "Cloud-Maturity-Model-A-Detailed-Guide-For-Cloud-Adoption", - "source_path": "wiki/sources/Cloud-Maturity-Model-A-Detailed-Guide-For-Cloud-Adoption.md", + "slug": "cloud-maturity-model-a-detailed-guide-for-cloud-adoption", + "source_path": "wiki/sources/cloud-maturity-model-a-detailed-guide-for-cloud-adoption.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379656+00:00" }, "raw/Cloud & DevOps/What I know about Cloud Service Delivery 1.md": { "hash": "9a49f8a90a4e42e6", "modified": "2026-04-14T04:28:42.631043+00:00", - "slug": "What-I-know-about-Cloud-Service-Delivery-1", - "source_path": "wiki/sources/What-I-know-about-Cloud-Service-Delivery-1.md", + "slug": "what-i-know-about-cloud-service-delivery-1", + "source_path": "wiki/sources/what-i-know-about-cloud-service-delivery-1.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379697+00:00" }, "raw/Cloud & DevOps/The Myths and Misconceptions About Cloud Computing LinkedIn.md": { "hash": "676861a2484bde9c", "modified": "2026-04-14T04:28:42.630679+00:00", - "slug": "The-Myths-and-Misconceptions-About-Cloud-Computing--LinkedIn", - "source_path": "wiki/sources/The-Myths-and-Misconceptions-About-Cloud-Computing--LinkedIn.md", + "slug": "the-myths-and-misconceptions-about-cloud-computing-linkedin", + "source_path": "wiki/sources/the-myths-and-misconceptions-about-cloud-computing-linkedin.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379743+00:00" }, "raw/Cloud & DevOps/How Can a Multi Cloud Strategy Transform Your Business ROI.md": { "hash": "fb0a605b96b5542a", "modified": "2026-04-14T04:28:42.626851+00:00", - "slug": "How-Can-a-Multi-Cloud-Strategy-Transform-Your-Business-ROI", - "source_path": "wiki/sources/How-Can-a-Multi-Cloud-Strategy-Transform-Your-Business-ROI.md", + "slug": "how-can-a-multi-cloud-strategy-transform-your-business-roi", + "source_path": "wiki/sources/how-can-a-multi-cloud-strategy-transform-your-business-roi.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379790+00:00" }, "raw/Cloud & DevOps/DevOps Maturity Model From Traditional IT to Advanced DevOps.md": { "hash": "289ab51b018f4a45", "modified": "2026-04-19T10:52:41.091760", - "slug": "DevOps-Maturity-Model-From-Traditional-IT-to-Advanced-DevOps", - "source_path": "wiki/sources/DevOps-Maturity-Model-From-Traditional-IT-to-Advanced-DevOps.md", + "slug": "devops-maturity-model-from-traditional-it-to-advanced-devops", + "source_path": "wiki/sources/devops-maturity-model-from-traditional-it-to-advanced-devops.md", "ingested": true, "ingested_at": "2026-04-19T07:17:49.771383" }, "raw/Cloud & DevOps/How Agentic AI can help for Cloud DevOps.md": { "hash": "a162132fee73fe08", "modified": "2026-04-14T04:28:42.626625+00:00", - "slug": "How-Agentic-AI-can-help-for-Cloud-DevOps", - "source_path": "wiki/sources/How-Agentic-AI-can-help-for-Cloud-DevOps.md", + "slug": "how-agentic-ai-can-help-for-cloud-devops", + "source_path": "wiki/sources/how-agentic-ai-can-help-for-cloud-devops.md", "ingested": true, "ingested_at": "2026-04-16T06:20:57.379887+00:00" }, @@ -70,7 +70,7 @@ "hash": "c6ede072a779194e", "modified": "2026-04-19T07:17:49.627597+00:00", "slug": "public-vs-private-vs-hybrid-cloud-differences-explained", - "source_path": "wiki/sources/Public-vs-Private-vs-Hybrid-Cloud-Differences-Explained.md", + "source_path": "wiki/sources/public-vs-private-vs-hybrid-cloud-differences-explained.md", "ingested": true, "ingested_at": "2026-04-19T07:17:49.771394" }, @@ -85,8 +85,8 @@ "raw/Cloud & DevOps/RTO vs RPO Key Differences for Modern Disaster Recovery.md": { "hash": "eb9f9fab7e2875bd", "modified": "2026-04-14T04:28:42.627898+00:00", - "slug": "RTO-vs-RPO-Key-Differences-for-Modern-Disaster-Recovery", - "source_path": "wiki/sources/RTO-vs-RPO-Key-Differences-for-Modern-Disaster-Recovery.md", + "slug": "rto-vs-rpo-key-differences-for-modern-disaster-recovery", + "source_path": "wiki/sources/rto-vs-rpo-key-differences-for-modern-disaster-recovery.md", "ingested": true, "ingested_at": "2026-04-19T21:50:59.157646" }, @@ -101,8 +101,8 @@ "raw/Cloud & DevOps/Understanding Complete ITSM.md": { "hash": "facc8888fc483b7d", "modified": "2026-04-14T04:28:42.630861+00:00", - "slug": "modern-itsm-driving-efficiency-security-resilience", - "source_path": "wiki/sources/modern-itsm-driving-efficiency-security-resilience.md", + "slug": "understanding-complete-itsm", + "source_path": "wiki/sources/understanding-complete-itsm.md", "ingested": true, "ingested_at": "2026-04-19T07:27:03.812858" }, @@ -118,7 +118,7 @@ "hash": "2c8870c32cfff179", "modified": "2026-04-20T00:00:00.000000+00:00", "slug": "cloud-operating-model-key-strategies-and-best-practices", - "source_path": "wiki/sources/Cloud-Operating-Model-Key-Strategies-and-Best-Practices.md", + "source_path": "wiki/sources/cloud-operating-model-key-strategies-and-best-practices.md", "ingested": true, "ingested_at": "2026-04-20T00:00:00.000000" }, @@ -128,61 +128,61 @@ "slug": "用docker中安装navidrome", "source_path": "wiki/sources/用docker中安装navidrome.md", "ingested": true, - "ingested_at": "2026-04-16T18:00:00+00:00" + "ingested_at": "2026-04-21T08:49:50.976806+00:00" }, "raw/Home Office/Linux 运维必会的 150 个命令.md": { "hash": "61346c95bc5fbd79", "modified": "2026-04-14T04:28:42.633573+00:00", - "slug": "Linux-运维必会的-150-个命令", - "source_path": "wiki/sources/Linux-运维必会的-150-个命令.md", + "slug": "linux-运维必会的-150-个命令", + "source_path": "wiki/sources/linux-运维必会的-150-个命令.md", "ingested": true, "ingested_at": "2026-04-16T18:18:00+00:00" }, "raw/Home Office/Ubuntu服务器通过rsync实现日常增量备份.md": { "hash": "69f84bc7016520ea", "modified": "2026-04-14T04:28:42.635110+00:00", - "slug": "ubuntu-rsync-incremental-backup-guide", - "source_path": "wiki/sources/ubuntu-rsync-incremental-backup-guide.md", + "slug": "ubuntu服务器通过rsync实现日常增量备份", + "source_path": "wiki/sources/ubuntu服务器通过rsync实现日常增量备份.md", "ingested": true, "ingested_at": "2026-04-16T10:49:47.382538+00:00" }, "raw/Home Office/MySQL MariaDB 数据库详细信息.md": { "hash": "381fe3ca28375c9d", "modified": "2026-04-14T04:28:42.634159+00:00", - "slug": "mysql-mariadb-database-details", - "source_path": "wiki/sources/mysql-mariadb-database-details.md", + "slug": "mysql-mariadb-数据库详细信息", + "source_path": "wiki/sources/mysql-mariadb-数据库详细信息.md", "ingested": true, "ingested_at": null }, "raw/Home Office/网件RAX50路由器刷梅林固件与科学上网插件安装教程.md": { "hash": "3f74cf0329c90f73", "modified": "2026-04-14T04:28:42.638931+00:00", - "slug": "netgear-rax50-merlin-firmware-clash-installation-guide", - "source_path": "wiki/sources/netgear-rax50-merlin-firmware-clash-installation-guide.md", + "slug": "网件rax50路由器刷梅林固件与科学上网插件安装教程", + "source_path": "wiki/sources/网件rax50路由器刷梅林固件与科学上网插件安装教程.md", "ingested": true, "ingested_at": "2026-04-16T19:15:00+00:00" }, "raw/Home Office/RAX50 路由器 更新Merlin Clash订阅.md": { "hash": "208231a844923a76", "modified": "2026-04-14T04:28:42.634528+00:00", - "slug": "rax50-router-update-merlin-clash-subscription", - "source_path": "wiki/sources/rax50-router-update-merlin-clash-subscription.md", + "slug": "rax50-路由器-更新merlin-clash订阅", + "source_path": "wiki/sources/rax50-路由器-更新merlin-clash订阅.md", "ingested": true, "ingested_at": "2026-04-16T19:45:00.000000+00:00" }, "raw/Home Office/用Docker安装transmission.md": { "hash": "b2049f376576b7ed", "modified": "2026-04-14T04:28:42.638683+00:00", - "slug": "docker-transmission-installation-guide", - "source_path": "wiki/sources/docker-transmission-installation-guide.md", + "slug": "用docker安装transmission", + "source_path": "wiki/sources/用docker安装transmission.md", "ingested": true, "ingested_at": "2026-04-16T20:04:28.677615" }, "raw/Home Office/Ubuntu 24.04 enable SSH.md": { "hash": "d177933926ea9bd3", "modified": "2026-04-14T04:28:42.634687+00:00", - "slug": "ubuntu-24.04-enable-ssh", - "source_path": "wiki/sources/ubuntu-24.04-enable-ssh.md", + "slug": "ubuntu-24-04-enable-ssh", + "source_path": "wiki/sources/ubuntu-24-04-enable-ssh.md", "ingested": true, "ingested_at": "2026-04-16T12:20:33.662783" }, @@ -197,72 +197,72 @@ "raw/Home Office/Clonezilla对Ubuntu Server进行全盘镜像备份.md": { "hash": "642a1172d9b2253b", "modified": "2026-04-14T04:28:42.633384+00:00", - "slug": "clonezilla-ubuntu-server-full-disk-backup", - "source_path": "wiki/sources/clonezilla-ubuntu-server-full-disk-backup.md", + "slug": "clonezilla对ubuntu-server进行全盘镜像备份", + "source_path": "wiki/sources/clonezilla对ubuntu-server进行全盘镜像备份.md", "ingested": true, "ingested_at": "2026-04-16T20:49:52.636134" }, "raw/Home Office/通过VPS+内网反向代理实现域名访问内网穿透.md": { "hash": "e9ee82a0b9cd35f5", "modified": "2026-04-14T04:28:42.633017+00:00", - "slug": "vps-frp-reverse-proxy-internal-network-access", - "source_path": "wiki/sources/vps-frp-reverse-proxy-internal-network-access.md", + "slug": "通过vps-内网反向代理实现域名访问内网穿透", + "source_path": "wiki/sources/通过vps-内网反向代理实现域名访问内网穿透.md", "ingested": true, "ingested_at": "2026-04-16T21:18:25.621255" }, "raw/Home Office/用Docker安装it-tools.md": { "hash": "326248da5f3890a1", "modified": "2026-04-14T04:28:42.638520+00:00", - "slug": "docker-it-tools-installation-guide", - "source_path": "wiki/sources/docker-it-tools-installation-guide.md", + "slug": "用docker安装it-tools", + "source_path": "wiki/sources/用docker安装it-tools.md", "ingested": true, "ingested_at": "2026-04-16T21:33:28.709546" }, "raw/Home Office/安装Ubuntu-24.04.2在HP Zbook工作站笔记本上.md": { "hash": "fb96fd5c75e86198", "modified": "2026-04-14T04:28:42.637273+00:00", - "slug": "ubuntu-24.04.2-hp-zbook-installation-guide", - "source_path": "wiki/sources/ubuntu-24.04.2-hp-zbook-installation-guide.md", + "slug": "安装ubuntu-24-04-2在hp-zbook工作站笔记本上", + "source_path": "wiki/sources/安装ubuntu-24-04-2在hp-zbook工作站笔记本上.md", "ingested": true, "ingested_at": "2026-04-16T21:49:31.152935" }, "raw/Home Office/如何用指纹浏览器安全注册并订阅Claude Pro会员全攻略.md": { "hash": "41d83e5d61e0a7ea", "modified": "2026-04-14T04:28:42.637084+00:00", - "slug": "claude-pro-fingerprint-browser-subscription-guide", - "source_path": "wiki/sources/claude-pro-fingerprint-browser-subscription-guide.md", + "slug": "如何用指纹浏览器安全注册并订阅claude-pro会员全攻略", + "source_path": "wiki/sources/如何用指纹浏览器安全注册并订阅claude-pro会员全攻略.md", "ingested": true, "ingested_at": "2026-04-16T22:05:59.797346" }, "raw/Home Office/如何判别你的Linux 服务器是 x64(也就是 x86_64)还是 ARM64.md": { "hash": "1d83b500c34b5bb6", "modified": "2026-04-14T04:28:42.636562+00:00", - "slug": "linux-x64-arm64-detection-guide", - "source_path": "wiki/sources/linux-x64-arm64-detection-guide.md", + "slug": "如何判别你的linux-服务器是-x64-也就是-x86_64-还是-arm64", + "source_path": "wiki/sources/如何判别你的linux-服务器是-x64-也就是-x86_64-还是-arm64.md", "ingested": true, "ingested_at": "2026-04-16T22:19:05.974847" }, "raw/Home Office/在Synology NAS上安装CloudDrive2.md": { "hash": "b09998b0b081a800", "modified": "2026-04-14T04:28:42.635553+00:00", - "slug": "synology-nas-clouddrive2-installation", - "source_path": "wiki/sources/synology-nas-clouddrive2-installation.md", + "slug": "在synology-nas上安装clouddrive2", + "source_path": "wiki/sources/在synology-nas上安装clouddrive2.md", "ingested": true, "ingested_at": "2026-04-16T22:35:44.636243" }, "raw/Home Office/Mac Mini 安装 FRP 0.65.0(ARM64)操作笔记.md": { "hash": "6d4ddaefa0866e8a", "modified": "2026-04-14T04:28:42.639496+00:00", - "slug": "mac-mini-install-frp-0-65-0-arm64-operation-guide", - "source_path": "wiki/sources/mac-mini-install-frp-0-65-0-arm64-operation-guide.md", + "slug": "mac-mini-安装-frp-0-65-0-arm64-操作笔记", + "source_path": "wiki/sources/mac-mini-安装-frp-0-65-0-arm64-操作笔记.md", "ingested": true, "ingested_at": "2026-04-16T22:59:39.918235" }, "raw/Home Office/Ubuntu 安装 FRP 0.65.0(x86_64)操作笔记.md": { "hash": "ef56d5ed56b45149", "modified": "2026-04-14T07:57:38.088403+00:00", - "slug": "ubuntu-frp-0.65.0-x86-64-operation-guide", - "source_path": "wiki/sources/ubuntu-frp-0.65.0-x86-64-operation-guide.md", + "slug": "ubuntu-安装-frp-0-65-0-x86_64-操作笔记", + "source_path": "wiki/sources/ubuntu-安装-frp-0-65-0-x86_64-操作笔记.md", "ingested": true, "ingested_at": "2026-04-16T18:30:00+00:00", "status": "completed", @@ -279,40 +279,40 @@ "raw/Home Office/如何在Ubuntu Server安装 docker & docker compose.md": { "hash": "99bbbff2a8581bcf", "modified": "2026-04-14T04:28:42.636899+00:00", - "slug": "ubuntu-server-docker-docker-compose-installation", - "source_path": "wiki/sources/ubuntu-server-docker-docker-compose-installation.md", + "slug": "如何在ubuntu-server安装-docker-docker-compose", + "source_path": "wiki/sources/如何在ubuntu-server安装-docker-docker-compose.md", "ingested": true, "ingested_at": "2026-04-16T23:19:32.308624" }, "raw/Home Office/macOS 创建与解除 Symbolic Link(OpenClaw 目录映射).md": { "hash": "a90f07eddb9386e2", "modified": "2026-04-14T04:28:42.639896+00:00", - "slug": "macos-symbolic-link-openclaw-directory-mapping", - "source_path": "wiki/sources/macos-symbolic-link-openclaw-directory-mapping.md", + "slug": "macos-创建与解除-symbolic-link-openclaw-目录映射", + "source_path": "wiki/sources/macos-创建与解除-symbolic-link-openclaw-目录映射.md", "ingested": true, "ingested_at": "2026-04-16T23:34:43.705242" }, "raw/Home Office/NodeWarden - 把 Bitwarden 搬上 Cloudflare Workers,彻底告别服务器.md": { "hash": "e46b60a509111e53", "modified": "2026-04-14T04:28:42.634366+00:00", - "slug": "nodewarden-bitwarden-cloudflare-workers-serverless-deployment", - "source_path": "wiki/sources/nodewarden-bitwarden-cloudflare-workers-serverless-deployment.md", + "slug": "nodewarden-把-bitwarden-搬上-cloudflare-workers-彻底告别服务器", + "source_path": "wiki/sources/nodewarden-把-bitwarden-搬上-cloudflare-workers-彻底告别服务器.md", "ingested": true, "ingested_at": "2026-04-16T23:49:57.800452" }, "raw/Home Office/群晖NAS科学上网方法.md": { "hash": "b2b72d996b1f833a", "modified": "2026-04-14T04:28:42.639155+00:00", - "slug": "synology-nas-scientific-internet-guide", - "source_path": "wiki/sources/synology-nas-scientific-internet-guide.md", + "slug": "群晖nas科学上网方法", + "source_path": "wiki/sources/群晖nas科学上网方法.md", "ingested": true, "ingested_at": "2026-04-17T00:05:15.167122" }, "raw/Home Office/MinIO + Zipline 自托管图床应用安装教程.md": { "hash": "90ef2bfa1b048367", "modified": "2026-04-14T04:28:42.633769+00:00", - "slug": "minio-zipline-self-hosted-image-bed-tutorial", - "source_path": "wiki/sources/minio-zipline-self-hosted-image-bed-tutorial.md", + "slug": "minio-zipline-自托管图床应用安装教程", + "source_path": "wiki/sources/minio-zipline-自托管图床应用安装教程.md", "ingested": true, "ingested_at": "2026-04-17T00:21:01.646743" }, @@ -327,64 +327,64 @@ "raw/Home Office/安装v2rayN.md": { "hash": "214c08b6c8dffd49", "modified": "2026-04-14T04:28:42.637431+00:00", - "slug": "install-v2rayn", - "source_path": "wiki/sources/install-v2rayn.md", + "slug": "安装v2rayn", + "source_path": "wiki/sources/安装v2rayn.md", "ingested": true, "ingested_at": "2026-04-17T01:02:23.236631" }, "raw/Home Office/Ubuntu禁用合盖休眠.md": { "hash": "6cb276e1b8f4eced", "modified": "2026-04-14T04:28:42.635411+00:00", - "slug": "ubuntu-disable-lid-close-sleep", - "source_path": "wiki/sources/ubuntu-disable-lid-close-sleep.md", + "slug": "ubuntu禁用合盖休眠", + "source_path": "wiki/sources/ubuntu禁用合盖休眠.md", "ingested": true, "ingested_at": "2026-04-17T01:32:53.025070" }, "raw/Home Office/Ubuntu Server科学上网.md": { "hash": "24b3b7526b38be13", "modified": "2026-04-14T04:28:42.634891+00:00", - "slug": "ubuntu-server-scientific-internet-access-guide", - "source_path": "wiki/sources/ubuntu-server-scientific-internet-access-guide.md", + "slug": "ubuntu-server科学上网", + "source_path": "wiki/sources/ubuntu-server科学上网.md", "ingested": true, "ingested_at": "2026-04-17T00:51:56.470696" }, "raw/Home Office/用Docker安装Jellyfin.md": { "hash": "f90730407562bd9a", "modified": "2026-04-14T04:28:42.638241+00:00", - "slug": "docker-jellyfin-installation", - "source_path": "wiki/sources/docker-jellyfin-installation.md", + "slug": "用docker安装jellyfin", + "source_path": "wiki/sources/用docker安装jellyfin.md", "ingested": true, "ingested_at": "2026-04-17T01:48:23.992936" }, "raw/Home Office/用Docker安装Portainer.md": { "hash": "8c62aa49517143de", "modified": "2026-04-14T04:28:42.638377+00:00", - "slug": "portainer-docker-installation-guide", - "source_path": "wiki/sources/portainer-docker-installation-guide.md", + "slug": "用docker安装portainer", + "source_path": "wiki/sources/用docker安装portainer.md", "ingested": true, "ingested_at": "2026-04-17T02:03:21.555451" }, "raw/Home Office/如何删除旧的废弃的docker container +volume.md": { "hash": "b43ee45c99a63157", "modified": "2026-04-14T04:28:42.636388+00:00", - "slug": "removing-old-portainer-container-volume", - "source_path": "wiki/sources/removing-old-portainer-container-volume.md", + "slug": "如何删除旧的废弃的docker-container-volume", + "source_path": "wiki/sources/如何删除旧的废弃的docker-container-volume.md", "ingested": true, "ingested_at": "2026-04-17T02:19:23.186411" }, "raw/Home Office/家庭网络环境概览_2026-04-03.md": { "hash": "806348d84a0d70c2", "modified": "2026-04-14T04:28:42.639325+00:00", - "slug": "home-network-environment-overview-2026-04-03", - "source_path": "wiki/sources/home-network-environment-overview-2026-04-03.md", + "slug": "家庭网络环境概览_2026-04-03", + "source_path": "wiki/sources/家庭网络环境概览_2026-04-03.md", "ingested": true, "ingested_at": "2026-04-17T02:34:47.625083" }, "raw/Home Office/Mac-Mini-服务器配置-防止自动锁屏与睡眠.md": { "hash": "e6c46d51c60ce995", "modified": "2026-04-14T04:28:42.632269+00:00", - "slug": "mac-mini-server-prevent-auto-lock-sleep", - "source_path": "wiki/sources/mac-mini-server-prevent-auto-lock-sleep.md", + "slug": "mac-mini-服务器配置-防止自动锁屏与睡眠", + "source_path": "wiki/sources/mac-mini-服务器配置-防止自动锁屏与睡眠.md", "ingested": true, "ingested_at": "2026-04-17T02:48:53.155198" }, @@ -399,40 +399,40 @@ "raw/Home Office/如何在Ubuntu Server上通过NFS挂载Synology NAS上的共享文件夹.md": { "hash": "017a164ee2b7e62d", "modified": "2026-04-14T04:28:42.636751+00:00", - "slug": "ubuntu-server-nfs-synology-nas-mount-guide", - "source_path": "wiki/sources/ubuntu-server-nfs-synology-nas-mount-guide.md", + "slug": "如何在ubuntu-server上通过nfs挂载synology-nas上的共享文件夹", + "source_path": "wiki/sources/如何在ubuntu-server上通过nfs挂载synology-nas上的共享文件夹.md", "ingested": true, "ingested_at": "2026-04-17T03:18:36.161598" }, "raw/Home Office/在Ubuntu上通过VPS+内网反向代理实现域名访问内网穿透.md": { "hash": "a77d80a2ecdbfb37", "modified": "2026-04-14T04:28:42.635894+00:00", - "slug": "vps-frp-reverse-proxy-ubuntu-internal-network-access", - "source_path": "wiki/sources/vps-frp-reverse-proxy-ubuntu-internal-network-access.md", + "slug": "在ubuntu上通过vps-内网反向代理实现域名访问内网穿透", + "source_path": "wiki/sources/在ubuntu上通过vps-内网反向代理实现域名访问内网穿透.md", "ingested": true, "ingested_at": "2026-04-17T03:19:00.000000" }, "raw/Home Office/用Docker安装Homarr.md": { "hash": "199ad77602dbbe9d", "modified": "2026-04-14T04:28:42.638050+00:00", - "slug": "docker-homarr-installation", - "source_path": "wiki/sources/docker-homarr-installation.md", + "slug": "用docker安装homarr", + "source_path": "wiki/sources/用docker安装homarr.md", "ingested": true, "ingested_at": "2026-04-17T03:48:09.178821" }, "raw/Home Office/Ubuntu用RustDesk远程登录出现不能使用Wayland登录的错误.md": { "hash": "ae224f7dcd4c066e", "modified": "2026-04-14T04:28:42.635266+00:00", - "slug": "ubuntu-rustdesk-wayland-login-error", - "source_path": "wiki/sources/ubuntu-rustdesk-wayland-login-error.md", + "slug": "ubuntu用rustdesk远程登录出现不能使用wayland登录的错误", + "source_path": "wiki/sources/ubuntu用rustdesk远程登录出现不能使用wayland登录的错误.md", "ingested": true, "ingested_at": "2026-04-17T04:04:30.150847" }, "raw/Home Office/如何传输Docker images 并且在另一个Docker安装.md": { "hash": "e52c4cc86983d03b", "modified": "2026-04-17T00:38:12.844159+00:00", - "slug": "docker-images-transfer-guide", - "source_path": "wiki/sources/docker-images-transfer-guide.md", + "slug": "如何传输docker-images-并且在另一个docker安装", + "source_path": "wiki/sources/如何传输docker-images-并且在另一个docker安装.md", "ingested": true, "ingested_at": "2026-04-21T06:22:15.046269+00:00" }, @@ -447,16 +447,16 @@ "raw/Vibe Coding/Cursor 2.0初学者使用指南.md": { "hash": "b88ae08cb12bb556", "modified": "2026-04-14T04:28:42.631617+00:00", - "slug": "cursor-2.0-beginner-guide", - "source_path": "wiki/sources/cursor-2.0-beginner-guide.md", + "slug": "cursor-2-0初学者使用指南", + "source_path": "wiki/sources/cursor-2-0初学者使用指南.md", "ingested": true, "ingested_at": "2026-04-17T05:04:17.088040" }, "raw/Vibe Coding/Trae远程开发部署指南.md": { "hash": "2bbac5394e5cde69", "modified": "2026-04-14T04:28:42.641571+00:00", - "slug": "trae-remote-development-deployment-guide", - "source_path": "wiki/sources/trae-remote-development-deployment-guide.md", + "slug": "trae远程开发部署指南", + "source_path": "wiki/sources/trae远程开发部署指南.md", "ingested": true, "ingested_at": "2026-04-17T05:19:17.503422" }, @@ -471,72 +471,72 @@ "raw/Vibe Coding/vibe coding经验收集.md": { "hash": "ac57cac0f90272dd", "modified": "2026-04-14T04:28:42.642116+00:00", - "slug": "vibe-coding-experience-collection", - "source_path": "wiki/sources/vibe-coding-experience-collection.md", + "slug": "vibe-coding经验收集", + "source_path": "wiki/sources/vibe-coding经验收集.md", "ingested": true, "ingested_at": "2026-04-17T05:53:29.715474" }, "raw/Vibe Coding/Vibe-Kanban + OpenCode 在 Ubuntu Server 上安装与管理指南.md": { "hash": "2202f82d84a7c74c", "modified": "2026-04-14T04:28:42.641963+00:00", - "slug": "vibe-kanban-opencode-ubuntu-server-installation-guide", - "source_path": "wiki/sources/vibe-kanban-opencode-ubuntu-server-installation-guide.md", + "slug": "vibe-kanban-opencode-在-ubuntu-server-上安装与管理指南", + "source_path": "wiki/sources/vibe-kanban-opencode-在-ubuntu-server-上安装与管理指南.md", "ingested": true, "ingested_at": "2026-04-17T06:06:08.562565" }, "raw/Vibe Coding/在Ubuntu上安装Vibe-Kanban.md": { "hash": "0abce71f2148a196", "modified": "2026-04-14T04:28:42.642276+00:00", - "slug": "ubuntu-vibe-kanban-installation", - "source_path": "wiki/sources/ubuntu-vibe-kanban-installation.md", + "slug": "在ubuntu上安装vibe-kanban", + "source_path": "wiki/sources/在ubuntu上安装vibe-kanban.md", "ingested": true, "ingested_at": "2026-04-17T06:17:05.704445" }, "raw/Vibe Coding/开发经验与项目规范整理文档.md": { "hash": "8e5dec842bc0d193", "modified": "2026-04-14T04:28:42.643879+00:00", - "slug": "kai-fa-jing-yan-yu-xiang-mu-gui-fan-zheng-li-wen-dang", - "source_path": "wiki/sources/kai-fa-jing-yan-yu-xiang-mu-gui-fan-zheng-li-wen-dang.md", + "slug": "开发经验与项目规范整理文档", + "source_path": "wiki/sources/开发经验与项目规范整理文档.md", "ingested": true, "ingested_at": "2026-04-17T06:33:10.914731" }, "raw/Others/ChinaTextbook - 41.53 GB,中国小学、初中、高中、大学 PDF 教材.md": { "hash": "5c3fd15d1a515ce2", "modified": "2026-04-14T04:28:42.625118+00:00", - "slug": "chinatextbook-41-53-gb-china-textbook-pdf", - "source_path": "wiki/sources/chinatextbook-41-53-gb-china-textbook-pdf.md", + "slug": "chinatextbook-41-53-gb-中国小学-初中-高中-大学-pdf-教材", + "source_path": "wiki/sources/chinatextbook-41-53-gb-中国小学-初中-高中-大学-pdf-教材.md", "ingested": true, "ingested_at": "2026-04-17T06:49:18.486581" }, "raw/Others/Obsidian Tasks 插件:这可能是最适合懒人的任务管理方式.md": { "hash": "7aacfa3042ca803e", "modified": "2026-04-14T04:28:42.623414+00:00", - "slug": "obsidian-tasks-plugin-lazy-friendly-task-management", - "source_path": "wiki/sources/obsidian-tasks-plugin-lazy-friendly-task-management.md", + "slug": "obsidian-tasks-插件-这可能是最适合懒人的任务管理方式", + "source_path": "wiki/sources/obsidian-tasks-插件-这可能是最适合懒人的任务管理方式.md", "ingested": true, "ingested_at": "2026-04-17T07:05:00.716974" }, "raw/Others/Obsidian最有必要安装的10款插件是这些.md": { "hash": "a76fc438b8a16992", "modified": "2026-04-14T04:28:42.623793+00:00", - "slug": "obsidian-most-essential-plugins", - "source_path": "wiki/sources/obsidian-most-essential-plugins.md", + "slug": "obsidian最有必要安装的10款插件是这些", + "source_path": "wiki/sources/obsidian最有必要安装的10款插件是这些.md", "ingested": true, "ingested_at": "2026-04-17T07:19:01.672185" }, "raw/Others/Obsidian 高效指南:我常用的插件与实用技巧.md": { "hash": "0641eba8de398556", "modified": "2026-04-14T04:28:42.623596+00:00", - "slug": "obsidian-ga-xiao-zhi-nan-wo-chang-yong-de-cha-jian-yu-shi-ji-qiao", - "source_path": "wiki/sources/obsidian-ga-xiao-zhi-nan-wo-chang-yong-de-cha-jian-yu-shi-ji-qiao.md", + "slug": "obsidian-高效指南-我常用的插件与实用技巧", + "source_path": "wiki/sources/obsidian-高效指南-我常用的插件与实用技巧.md", "ingested": true, "ingested_at": "2026-04-17T08:04:35.881000" }, "raw/Others/Dataview——让我从“笔记黑洞”里逃出来的 Obsidian 神器 1.md": { "hash": "de771b8afad4115e", "modified": "2026-04-14T04:28:42.623210+00:00", - "slug": "Dataview-让我从-笔记黑洞-里逃出来的-Obsidian-神器-1", - "source_path": "wiki/sources/Dataview-让我从-笔记黑洞-里逃出来的-Obsidian-神器-1.md", + "slug": "dataview-让我从“笔记黑洞”里逃出来的-obsidian-神器-1", + "source_path": "wiki/sources/dataview-让我从“笔记黑洞”里逃出来的-obsidian-神器-1.md", "ingested": true, "ingested_at": "2026-04-17T08:19:44.596275" }, @@ -559,8 +559,8 @@ "raw/Agent/万字讲透OpenClaw-Workspace深度解析-2026-03-21.md": { "hash": "a763a1295a985904", "modified": "2026-04-09T11:31:39.250630+00:00", - "slug": "万字讲透OpenClaw-Workspace深度解析-2026-03-21", - "source_path": "wiki/sources/万字讲透OpenClaw-Workspace深度解析-2026-03-21.md", + "slug": "万字讲透openclaw-workspace深度解析-2026-03-21", + "source_path": "wiki/sources/万字讲透openclaw-workspace深度解析-2026-03-21.md", "ingested": true, "ingested_at": "2026-04-17T09:08:05.030861" }, @@ -583,40 +583,40 @@ "raw/Agent/Google-5个Agent-Skill设计模式-2026-03-19.md": { "hash": "45ca759f17a8e18e", "modified": "2026-04-09T11:31:39.250857+00:00", - "slug": "Google-5-Agent-Skill-design-patterns-2026-03-19", - "source_path": "wiki/sources/Google-5-Agent-Skill-design-patterns-2026-03-19.md", + "slug": "google-5个agent-skill设计模式-2026-03-19", + "source_path": "wiki/sources/google-5个agent-skill设计模式-2026-03-19.md", "ingested": true, "ingested_at": "2026-04-17T09:45:00" }, "raw/Agent/MCP在Cursor中的集成与应用详解.md": { "hash": "641fb86e8b38ad3d", "modified": "2026-04-14T04:28:42.640373+00:00", - "slug": "MCP-zai-Cursor-zhong-de-ji-cheng-yu-ying-yong-xiang-jie", - "source_path": "wiki/sources/MCP-zai-Cursor-zhong-de-ji-cheng-yu-ying-yong-xiang-jie.md", + "slug": "mcp在cursor中的集成与应用详解", + "source_path": "wiki/sources/mcp在cursor中的集成与应用详解.md", "ingested": true, "ingested_at": "2026-04-17T10:05:11.447292" }, "raw/Agent/使用Claude自动生成N8N工作流的实操教程.md": { "hash": "3fd0b0008b3644ff", "modified": "2026-04-14T04:28:42.643567+00:00", - "slug": "使用Claude自动生成N8N工作流的实操教程", - "source_path": "wiki/sources/使用Claude自动生成N8N工作流的实操教程.md", + "slug": "使用claude自动生成n8n工作流的实操教程", + "source_path": "wiki/sources/使用claude自动生成n8n工作流的实操教程.md", "ingested": true, "ingested_at": "2026-04-17T10:19:34.868701" }, "raw/Agent/万字保姆级教程-90天跑通一人公司模式-2026-03-29.md": { "hash": "34fb8eee504a91c7", "modified": "2026-04-09T11:31:39.255980+00:00", - "slug": "万字保姆级教程-让你90天跑通一人公司模式-附AI提示词", - "source_path": "wiki/sources/万字保姆级教程-让你90天跑通一人公司模式-附AI提示词.md", + "slug": "万字保姆级教程-90天跑通一人公司模式-2026-03-29", + "source_path": "wiki/sources/万字保姆级教程-90天跑通一人公司模式-2026-03-29.md", "ingested": true, "ingested_at": "2026-04-17T10:35:27.112544" }, "raw/Agent/n8n+Claude 通过自然语言自动化工作流.md": { "hash": "701d433ebf65ee87", "modified": "2026-04-14T04:28:42.643401+00:00", - "slug": "n8n-Claude-通过自然语言自动化工作流", - "source_path": "wiki/sources/n8n-Claude-通过自然语言自动化工作流.md", + "slug": "n8n-claude-通过自然语言自动化工作流", + "source_path": "wiki/sources/n8n-claude-通过自然语言自动化工作流.md", "ingested": true, "ingested_at": "2026-04-17T11:00:00.000000" }, @@ -631,8 +631,8 @@ "raw/Agent/claude-code调用方法总结.md": { "hash": "a040cf8dbe80386d", "modified": "2026-04-13T05:35:03.477172+00:00", - "slug": "claude-code-diao-yong-fang-fa-zong-jie", - "source_path": "wiki/sources/claude-code-diao-yong-fang-fa-zong-jie.md", + "slug": "claude-code调用方法总结", + "source_path": "wiki/sources/claude-code调用方法总结.md", "ingested": true, "ingested_at": "2026-04-17T11:20:28.574384" }, @@ -663,16 +663,16 @@ "raw/Agent/usecases/content-factory.md": { "hash": "e67498d0450d4cdb", "modified": "2026-04-09T11:31:39.260087+00:00", - "slug": "multi-agent-content-factory", - "source_path": "wiki/sources/multi-agent-content-factory.md", + "slug": "content-factory", + "source_path": "wiki/sources/content-factory.md", "ingested": true, "ingested_at": "2026-04-17T12:18:40.233638" }, "raw/Agent/usecases/self-healing-home-server.md": { "hash": "4ffb2f391629664d", "modified": "2026-04-09T11:31:39.260345+00:00", - "slug": "self-healing-home-server-infrastructure-management", - "source_path": "wiki/sources/self-healing-home-server-infrastructure-management.md", + "slug": "self-healing-home-server", + "source_path": "wiki/sources/self-healing-home-server.md", "ingested": true, "ingested_at": "2026-04-17T12:37:02.321695" }, @@ -703,8 +703,8 @@ "raw/Agent/usecases/earnings-tracker.md": { "hash": "28d0318450f9e598", "modified": "2026-04-09T11:31:39.261180+00:00", - "slug": "ai-powered-earnings-tracker", - "source_path": "wiki/sources/ai-powered-earnings-tracker.md", + "slug": "earnings-tracker", + "source_path": "wiki/sources/earnings-tracker.md", "ingested": true, "ingested_at": "2026-04-17T13:38:56.868001" }, @@ -712,7 +712,7 @@ "hash": "60099e146e8df8a9", "modified": "2026-04-09T11:31:39.261377+00:00", "slug": "multi-channel-assistant", - "source_path": "/Users/weishen/Wiki/sources/multi-channel-assistant.md", + "source_path": "wiki/sources/multi-channel-assistant.md", "ingested": true, "ingested_at": "2026-04-17T13:53:26.275914" }, @@ -783,16 +783,16 @@ "raw/Agent/usecases/dynamic-dashboard.md": { "hash": "377675f7b60a115b", "modified": "2026-04-09T11:31:39.263155+00:00", - "slug": "dynamic-dashboard-with-sub-agent-spawning", - "source_path": "wiki/sources/dynamic-dashboard-with-sub-agent-spawning.md", + "slug": "dynamic-dashboard", + "source_path": "wiki/sources/dynamic-dashboard.md", "ingested": true, "ingested_at": "2026-04-17T17:08:13.993461" }, "raw/Agent/usecases/todoist-task-manager.md": { "hash": "779b20312c97d5aa", "modified": "2026-04-17T00:38:12.842634+00:00", - "slug": "todoist-task-manager-agent-task-visibility", - "source_path": "wiki/sources/todoist-task-manager-agent-task-visibility.md", + "slug": "todoist-task-manager", + "source_path": "wiki/sources/todoist-task-manager.md", "ingested": true, "ingested_at": "2026-04-21T06:36:57.204986+00:00" }, @@ -823,8 +823,8 @@ "raw/Agent/usecases/multi-channel-customer-service.md": { "hash": "c6870705eb16e207", "modified": "2026-04-09T11:31:39.264185+00:00", - "slug": "multi-channel-ai-customer-service-platform", - "source_path": "wiki/sources/multi-channel-ai-customer-service-platform.md", + "slug": "multi-channel-customer-service", + "source_path": "wiki/sources/multi-channel-customer-service.md", "ingested": true, "ingested_at": "2026-04-17T18:20:29.598857" }, @@ -839,8 +839,8 @@ "raw/Agent/usecases/local-crm-framework.md": { "hash": "83f1c598f3396c24", "modified": "2026-04-09T11:31:39.264662+00:00", - "slug": "local-crm-framework-with-denchclaw", - "source_path": "wiki/sources/local-crm-framework-with-denchclaw.md", + "slug": "local-crm-framework", + "source_path": "wiki/sources/local-crm-framework.md", "ingested": true, "ingested_at": "2026-04-17T18:49:55.734627" }, @@ -855,8 +855,8 @@ "raw/Agent/usecases/polymarket-autopilot.md": { "hash": "0de374b94ff0e8e0", "modified": "2026-04-17T00:38:12.842360+00:00", - "slug": "polymarket-autopilot-automated-paper-trading", - "source_path": "wiki/sources/polymarket-autopilot-automated-paper-trading.md", + "slug": "polymarket-autopilot", + "source_path": "wiki/sources/polymarket-autopilot.md", "ingested": true, "ingested_at": "2026-04-21T06:57:16.744659+00:00" }, @@ -959,64 +959,64 @@ "raw/微信公众号/养虾日记2:让Agent更懂你:OpenClaw + Self-Improving 复盘实战案例分享.md": { "hash": "ad7e2a4f523b4a3c", "modified": "2026-04-14T04:28:42.645527+00:00", - "slug": "养虾日记2-让Agent更懂你-OpenClaw-Self-Improving-复盘实战案例分享", - "source_path": "wiki/sources/养虾日记2-让Agent更懂你-OpenClaw-Self-Improving-复盘实战案例分享.md", + "slug": "养虾日记2-让agent更懂你-openclaw-self-improving-复盘实战案例分享", + "source_path": "wiki/sources/养虾日记2-让agent更懂你-openclaw-self-improving-复盘实战案例分享.md", "ingested": true, "ingested_at": "2026-04-17T22:50:15.598084" }, "raw/微信公众号/养虾日记1:我用 OpenClaw 管了 28 万张照片:一次真实的多设备照片整理实战.md": { "hash": "9175f1f256173a62", "modified": "2026-04-14T04:28:42.645350+00:00", - "slug": "养虾日记1-我用-OpenClaw-管了-28-万张照片-一次真实的多设备照片整理实战", - "source_path": "wiki/sources/养虾日记1-我用-OpenClaw-管了-28-万张照片-一次真实的多设备照片整理实战.md", + "slug": "养虾日记1-我用-openclaw-管了-28-万张照片-一次真实的多设备照片整理实战", + "source_path": "wiki/sources/养虾日记1-我用-openclaw-管了-28-万张照片-一次真实的多设备照片整理实战.md", "ingested": true, "ingested_at": "2026-04-17T23:07:14.611475" }, "raw/微信公众号/养龙虾5天血泪史:我的AI Agent为什么总失忆?OpenClaw 记忆调试全记录.md": { "hash": "aabd440434b3df2a", "modified": "2026-04-14T04:28:42.646200+00:00", - "slug": "养龙虾5天血泪史-我的AI-Agent为什么总失忆-OpenClaw-记忆调试全记录", - "source_path": "wiki/sources/养龙虾5天血泪史-我的AI-Agent为什么总失忆-OpenClaw-记忆调试全记录.md", + "slug": "养龙虾5天血泪史-我的ai-agent为什么总失忆-openclaw-记忆调试全记录", + "source_path": "wiki/sources/养龙虾5天血泪史-我的ai-agent为什么总失忆-openclaw-记忆调试全记录.md", "ingested": true, "ingested_at": "2026-04-17T23:26:05.366812" }, "raw/微信公众号/养虾日记3:用 Obsidian + Gitea 为 AI 助手构建持久化笔记系统.md": { "hash": "c6b7d0f28c56ceff", "modified": "2026-04-14T04:28:42.645682+00:00", - "slug": "养虾日记3-用-Obsidian-Gitea-为-AI-助手构建持久化笔记系统", - "source_path": "wiki/sources/养虾日记3-用-Obsidian-Gitea-为-AI-助手构建持久化笔记系统.md", + "slug": "养虾日记3-用-obsidian-gitea-为-ai-助手构建持久化笔记系统", + "source_path": "wiki/sources/养虾日记3-用-obsidian-gitea-为-ai-助手构建持久化笔记系统.md", "ingested": true, "ingested_at": "2026-04-17T23:38:04.388224" }, "raw/微信公众号/不谈技术:普通人该怎么在AI时代赚钱?.md": { "hash": "2f67b99a7f704118", "modified": "2026-04-14T04:28:42.645165+00:00", - "slug": "bu-tan-ji-shu-pu-tong-ren-gai-zen-me-zai-ai-shi-dai-zhuan-qian", - "source_path": "wiki/sources/bu-tan-ji-shu-pu-tong-ren-gai-zen-me-zai-ai-shi-dai-zhuan-qian.md", + "slug": "不谈技术-普通人该怎么在ai时代赚钱", + "source_path": "wiki/sources/不谈技术-普通人该怎么在ai时代赚钱.md", "ingested": true, "ingested_at": "2026-04-17T23:50:56.461949" }, "raw/微信公众号/养虾日记4: 一次「Context Limit Exceeded」错误排查:我以为是小问题,结果踩了大坑.md": { "hash": "16b45ff4202f6ac1", "modified": "2026-04-14T04:28:42.645847+00:00", - "slug": "养虾日记4-一次「Context-Limit-Exceeded」错误排查-我以为是小问题-结果踩了大坑", - "source_path": "wiki/sources/养虾日记4-一次「Context-Limit-Exceeded」错误排查-我以为是小问题-结果踩了大坑.md", + "slug": "养虾日记4-一次「context-limit-exceeded」错误排查-我以为是小问题-结果踩了大坑", + "source_path": "wiki/sources/养虾日记4-一次「context-limit-exceeded」错误排查-我以为是小问题-结果踩了大坑.md", "ingested": true, "ingested_at": "2026-04-18T00:10:16.139749" }, "raw/微信公众号/养虾日记5:深夜与苏轼聊AI,他说:被浪打下去还能爬起来的才叫风流.md": { "hash": "852ed323371b1ce5", "modified": "2026-04-14T04:28:42.646030+00:00", - "slug": "养虾日记5-深夜与苏轼聊AI-他说-被浪打下去还能爬起来的才叫风流", - "source_path": "wiki/sources/养虾日记5-深夜与苏轼聊AI-他说-被浪打下去还能爬起来的才叫风流.md", + "slug": "养虾日记5-深夜与苏轼聊ai-他说-被浪打下去还能爬起来的才叫风流", + "source_path": "wiki/sources/养虾日记5-深夜与苏轼聊ai-他说-被浪打下去还能爬起来的才叫风流.md", "ingested": true, "ingested_at": "2026-04-18T00:24:01.319276" }, "raw/AI/14个免费的AI图生视频工具,用AI让图片动起来 - AI视频教程 AI自动化工作流定制服务 AI培训学习平台 黑喵大叔.md": { "hash": "77644070202b254d", "modified": "2026-04-14T04:28:42.607517+00:00", - "slug": "14个免费的AI图生视频工具-yi-ai-rang-tu-pian-dong-qi-lai", - "source_path": "wiki/sources/14个免费的AI图生视频工具-yi-ai-rang-tu-pian-dong-qi-lai.md", + "slug": "14个免费的ai图生视频工具-用ai让图片动起来-ai视频教程-ai自动化工作流定制服务-ai培训学习平台-黑喵大叔", + "source_path": "wiki/sources/14个免费的ai图生视频工具-用ai让图片动起来-ai视频教程-ai自动化工作流定制服务-ai培训学习平台-黑喵大叔.md", "ingested": true, "ingested_at": "2026-04-18T00:36:25.299712" }, @@ -1031,16 +1031,16 @@ "raw/AI/教學 ChatGPT 先做知識整理,再讓 Canva、 Gamma AI 輸出簡報.md": { "hash": "1a464ef6525d196f", "modified": "2026-04-17T00:38:12.842064+00:00", - "slug": "jiao-xue-chatgpt-xian-zuo-zhi-shi-zheng-li-zai-rang-canva-gamma-ai-shu-chu-jian-bao", - "source_path": "wiki/sources/jiao-xue-chatgpt-xian-zuo-zhi-shi-zheng-li-zai-rang-canva-gamma-ai-shu-chu-jian-bao.md", + "slug": "教學-chatgpt-先做知識整理-再讓-canva-gamma-ai-輸出簡報", + "source_path": "wiki/sources/教學-chatgpt-先做知識整理-再讓-canva-gamma-ai-輸出簡報.md", "ingested": true, "ingested_at": "2026-04-21T07:07:57.840973+00:00" }, "raw/AI/Google 神级生产力工具,所有 GitHub 开源平替都找到了。.md": { "hash": "c276812f0e1a16c8", "modified": "2026-04-14T04:28:42.612439+00:00", - "slug": "Google-神级生产力工具-所有-GitHub-开源平替都找到了", - "source_path": "wiki/sources/Google-神级生产力工具-所有-GitHub-开源平替都找到了.md", + "slug": "google-神级生产力工具-所有-github-开源平替都找到了", + "source_path": "wiki/sources/google-神级生产力工具-所有-github-开源平替都找到了.md", "ingested": true, "ingested_at": "2026-04-18T01:20:32.490941" }, @@ -1063,16 +1063,16 @@ "raw/AI/LLMs、RAG、AI Agent 三个到底什么区别?.md": { "hash": "d993ec7e1f1193c7", "modified": "2026-04-14T04:28:42.613338+00:00", - "slug": "LLMs-RAG-AI-Agent-san-ge-dao-di-shen-me-qu-bie", - "source_path": "wiki/sources/LLMs-RAG-AI-Agent-san-ge-dao-di-shen-me-qu-bie.md", + "slug": "llms-rag-ai-agent-三个到底什么区别", + "source_path": "wiki/sources/llms-rag-ai-agent-三个到底什么区别.md", "ingested": true, "ingested_at": "2026-04-18T02:09:28.853274" }, "raw/AI/清华出的DeepSeek使用手册,104页,真的是太厉害了!(免费领取).md": { "hash": "8333bb0a1e9c98d1", "modified": "2026-04-14T04:28:42.644647+00:00", - "slug": "清华出的DeepSeek使用手册104页真的是太厉害了免费领取", - "source_path": "wiki/sources/清华出的DeepSeek使用手册104页真的是太厉害了免费领取.md", + "slug": "清华出的deepseek使用手册-104页-真的是太厉害了-免费领取", + "source_path": "wiki/sources/清华出的deepseek使用手册-104页-真的是太厉害了-免费领取.md", "ingested": true, "ingested_at": "2026-04-18T02:20:15.536636" }, @@ -1087,24 +1087,24 @@ "raw/AI/详细!离线部署大模型:ollama+deepseek+open-webui安装使用方法及常见问题解决 1.md": { "hash": "94c6a3555896bc0f", "modified": "2026-04-14T04:28:42.618653+00:00", - "slug": "详细-离线部署大模型-ollama-deepseek-open-webui安装使用方法及常见问题解决", - "source_path": "wiki/sources/详细-离线部署大模型-ollama-deepseek-open-webui安装使用方法及常见问题解决.md", + "slug": "详细-离线部署大模型-ollama-deepseek-open-webui安装使用方法及常见问题解决-1", + "source_path": "wiki/sources/详细-离线部署大模型-ollama-deepseek-open-webui安装使用方法及常见问题解决-1.md", "ingested": true, "ingested_at": "2026-04-18T02:51:23.272343" }, "raw/AI/谷歌深夜甩出一份【Nano Banana Pro提示词指南】,手把手教你生产专业级内容,实战案例+提示词模版.md": { "hash": "264a65dcc6ed8320", "modified": "2026-04-14T04:28:42.618915+00:00", - "slug": "google-nano-banana-pro-prompt-guide", - "source_path": "wiki/sources/google-nano-banana-pro-prompt-guide.md", + "slug": "谷歌深夜甩出一份-nano-banana-pro提示词指南-手把手教你生产专业级内容-实战案例-提示词模版", + "source_path": "wiki/sources/谷歌深夜甩出一份-nano-banana-pro提示词指南-手把手教你生产专业级内容-实战案例-提示词模版.md", "ingested": true, "ingested_at": "2026-04-18T03:06:00.457869" }, "raw/AI/Nano Banana 提示词框架.md": { "hash": "125bd4cc42a82093", "modified": "2026-04-14T04:28:42.614283+00:00", - "slug": "Nano-Banana-提示词框架", - "source_path": "wiki/sources/Nano-Banana-提示词框架.md", + "slug": "nano-banana-提示词框架", + "source_path": "wiki/sources/nano-banana-提示词框架.md", "ingested": true, "ingested_at": "2026-04-18T03:18:14.322728" }, @@ -1119,16 +1119,16 @@ "raw/AI/二创视频必不可少!2025年最热门AI工具推荐合集-AI配音、声音克隆.md": { "hash": "1120914d221b396b", "modified": "2026-04-14T04:28:42.616406+00:00", - "slug": "二创视频必不可少-2025年最热门AI工具推荐合集-AI配音-声音克隆", - "source_path": "wiki/sources/二创视频必不可少-2025年最热门AI工具推荐合集-AI配音-声音克隆.md", + "slug": "二创视频必不可少-2025年最热门ai工具推荐合集-ai配音-声音克隆", + "source_path": "wiki/sources/二创视频必不可少-2025年最热门ai工具推荐合集-ai配音-声音克隆.md", "ingested": true, "ingested_at": "2026-04-18T03:50:16.838668" }, "raw/AI/Useful Prompt Lib.md": { "hash": "212e93f82d50a8d5", "modified": "2026-04-14T04:28:42.641736+00:00", - "slug": "Claude-Prompt-库汇总", - "source_path": "wiki/sources/Claude-Prompt-库汇总.md", + "slug": "useful-prompt-lib", + "source_path": "wiki/sources/useful-prompt-lib.md", "ingested": true, "ingested_at": "2026-04-18T04:04:07.179771" }, @@ -1167,16 +1167,16 @@ "raw/AI/不会Gemini的产品经理真的要被淘汰了 附保姆级PRD生成指南.md": { "hash": "fc388388c6726a88", "modified": "2026-04-14T04:28:42.616201+00:00", - "slug": "不会Gemini的产品经理真的要被淘汰了-附保姆级PRD生成指南", - "source_path": "wiki/sources/不会Gemini的产品经理真的要被淘汰了-附保姆级PRD生成指南.md", + "slug": "不会gemini的产品经理真的要被淘汰了-附保姆级prd生成指南", + "source_path": "wiki/sources/不会gemini的产品经理真的要被淘汰了-附保姆级prd生成指南.md", "ingested": true, "ingested_at": "2026-04-18T05:21:55.066281" }, "raw/AI/3.2 万人收藏的 Claude Skills,才是 AI 这条路上最值得研究的一套范式! 1.md": { "hash": "0fe5fc907c5f0c13", "modified": "2026-04-14T04:28:42.608044+00:00", - "slug": "3-2-wan-ren-shou-cang-de-claude-skills-ai-zhe-tiao-lu-shang-zui-zhi-de-yan-jiu-de-yi-tao-fan-shi", - "source_path": "wiki/sources/3-2-wan-ren-shou-cang-de-claude-skills-ai-zhe-tiao-lu-shang-zui-zhi-de-yan-jiu-de-yi-tao-fan-shi.md", + "slug": "3-2-万人收藏的-claude-skills-才是-ai-这条路上最值得研究的一套范式-1", + "source_path": "wiki/sources/3-2-万人收藏的-claude-skills-才是-ai-这条路上最值得研究的一套范式-1.md", "ingested": true, "ingested_at": "2026-04-18T05:35:08.064031" }, @@ -1191,16 +1191,16 @@ "raw/AI/GitHub 上 5000 人收藏的 Vibe Coding 神级指南。.md": { "hash": "6a3ce97e4bee7b73", "modified": "2026-04-14T04:28:42.612250+00:00", - "slug": "github-5000-ren-shou-cang-de-vibe-coding-shen-ji-zhi-nan", - "source_path": "wiki/sources/github-5000-ren-shou-cang-de-vibe-coding-shen-ji-zhi-nan.md", + "slug": "github-上-5000-人收藏的-vibe-coding-神级指南", + "source_path": "wiki/sources/github-上-5000-人收藏的-vibe-coding-神级指南.md", "ingested": true, "ingested_at": "2026-04-18T06:04:48.283482" }, "raw/AI/系统提示词构建原则.md": { "hash": "4a954a07aa1f2f17", "modified": "2026-04-14T04:28:42.618412+00:00", - "slug": "xi-tong-ti-shi-ci-gou-jie-yuan-ze", - "source_path": "wiki/sources/xi-tong-ti-shi-ci-gou-jie-yuan-ze.md", + "slug": "系统提示词构建原则", + "source_path": "wiki/sources/系统提示词构建原则.md", "ingested": true, "ingested_at": "2026-04-18T06:19:50.355778" }, @@ -1215,24 +1215,24 @@ "raw/AI/如何写出完美的Prompt(提示词)?.md": { "hash": "2adb512ec636d7e3", "modified": "2026-04-14T04:28:42.617410+00:00", - "slug": "如何写出完美的Prompt-提示词-", - "source_path": "wiki/sources/如何写出完美的Prompt-提示词-.md", + "slug": "如何写出完美的prompt-提示词", + "source_path": "wiki/sources/如何写出完美的prompt-提示词.md", "ingested": true, "ingested_at": "2026-04-18T06:49:40.652734" }, "raw/AI/3.2 万人收藏的 Claude Skills,才是 AI 这条路上最值得研究的一套范式!.md": { "hash": "dec1dd367a474b92", "modified": "2026-04-14T04:28:42.608233+00:00", - "slug": "3-2-wan-ren-shou-cang-de-claude-skills-ai-zhe-tiao-lu-shang-zui-zhi-de-yan-jiu-de-yi-tao-fan-shi", - "source_path": "wiki/sources/3-2-wan-ren-shou-cang-de-claude-skills-ai-zhe-tiao-lu-shang-zui-zhi-de-yan-jiu-de-yi-tao-fan-shi.md", + "slug": "3-2-万人收藏的-claude-skills-才是-ai-这条路上最值得研究的一套范式", + "source_path": "wiki/sources/3-2-万人收藏的-claude-skills-才是-ai-这条路上最值得研究的一套范式.md", "ingested": true, "ingested_at": "2026-04-18T07:04:14.193070" }, "raw/AI/我的工具集.md": { "hash": "b5b5245fe2261b1c", "modified": "2026-04-14T04:28:42.644146+00:00", - "slug": "wo-de-gong-ju-ji", - "source_path": "wiki/sources/wo-de-gong-ju-ji.md", + "slug": "我的工具集", + "source_path": "wiki/sources/我的工具集.md", "ingested": true, "ingested_at": "2026-04-18T07:30:00.000000+00:00" }, @@ -1247,72 +1247,72 @@ "raw/AI/大模型相关术语和框架总结|LLM、MCP、Prompt、RAG、vLLM、Token、数据蒸馏.md": { "hash": "4327c9fae4760e5b", "modified": "2026-04-14T04:28:42.617130+00:00", - "slug": "大模型相关术语和框架总结-LLM-MCP-Prompt-RAG-vLLM-Token-数据蒸馏", - "source_path": "wiki/sources/大模型相关术语和框架总结-LLM-MCP-Prompt-RAG-vLLM-Token-数据蒸馏.md", + "slug": "大模型相关术语和框架总结|llm-mcp-prompt-rag-vllm-token-数据蒸馏", + "source_path": "wiki/sources/大模型相关术语和框架总结|llm-mcp-prompt-rag-vllm-token-数据蒸馏.md", "ingested": true, "ingested_at": "2026-04-18T07:52:47.932582" }, "raw/AI/固定镜头短视频制作的AI全流程解析.md": { "hash": "989580878e6d7d46", "modified": "2026-04-14T04:28:42.616867+00:00", - "slug": "固定镜头短视频制作的AI全流程解析", - "source_path": "wiki/sources/固定镜头短视频制作的AI全流程解析.md", + "slug": "固定镜头短视频制作的ai全流程解析", + "source_path": "wiki/sources/固定镜头短视频制作的ai全流程解析.md", "ingested": true, "ingested_at": "2026-04-18T08:05:19.024416" }, "raw/AI/RAG从入门到精通系列1:基础RAG.md": { "hash": "517031840cb87bfb", "modified": "2026-04-14T04:28:42.615169+00:00", - "slug": "RAG从入门到精通系列1-基础RAG", - "source_path": "wiki/sources/RAG从入门到精通系列1-基础RAG.md", + "slug": "rag从入门到精通系列1-基础rag", + "source_path": "wiki/sources/rag从入门到精通系列1-基础rag.md", "ingested": true, "ingested_at": "2026-04-18T08:19:28.782361" }, "raw/AI/AI 解决方案专家培训课程.md": { "hash": "83d7fa1a956636b8", "modified": "2026-04-14T04:28:42.611726+00:00", - "slug": "AI-jie-jue-fang-an-zhuan-jia-pei-xun-ke-cheng", - "source_path": "wiki/sources/AI-解决方案专家培训课程.md", + "slug": "ai-解决方案专家培训课程", + "source_path": "wiki/sources/ai-解决方案专家培训课程.md", "ingested": true, "ingested_at": "2026-04-18T08:37:56.596451" }, "raw/AI/2025 年 11 个神级 AI 开源平替,GitHub 杀疯了。.md": { "hash": "f8cf6223112ec24c", "modified": "2026-04-14T04:28:42.607812+00:00", - "slug": "2025-年-11-个-神级-AI-开源平替-GitHub-杀疯了", - "source_path": "wiki/sources/2025-年-11-个-神级-AI-开源平替-GitHub-杀疯了.md", + "slug": "2025-年-11-个神级-ai-开源平替-github-杀疯了", + "source_path": "wiki/sources/2025-年-11-个神级-ai-开源平替-github-杀疯了.md", "ingested": true, "ingested_at": "2026-04-18T08:48:02.243062" }, "raw/AI/全网最全!Nano Banana 2 使用指南(2025年12月更新) 1.md": { "hash": "50546ce87967e2af", "modified": "2026-04-14T04:28:42.616589+00:00", - "slug": "全网最全-Nano-Banana-2-使用指南-2025年12月更新-1", - "source_path": "wiki/sources/全网最全-Nano-Banana-2-使用指南-2025年12月更新-1.md", + "slug": "全网最全-nano-banana-2-使用指南-2025年12月更新-1", + "source_path": "wiki/sources/全网最全-nano-banana-2-使用指南-2025年12月更新-1.md", "ingested": true, "ingested_at": "2026-04-18T09:05:17.748167" }, "raw/AI/Multi-Agent System Reliability.md": { "hash": "a88f875cac630724", "modified": "2026-04-14T04:28:42.613557+00:00", - "slug": "Multi-Agent-System-Reliability", - "source_path": "wiki/sources/Multi-Agent-System-Reliability.md", + "slug": "multi-agent-system-reliability", + "source_path": "wiki/sources/multi-agent-system-reliability.md", "ingested": true, "ingested_at": "2026-04-18T09:20:41.834284" }, "raw/AI/我用 Gemini 3 一口气做了 10 个应用,附教程.md": { "hash": "f88d61b7b80b27ea", "modified": "2026-04-14T04:28:42.617887+00:00", - "slug": "我用-Gemini-3-一口气做了-10-个应用-附教程", - "source_path": "wiki/sources/我用-Gemini-3-一口气做了-10-个应用-附教程.md", + "slug": "我用-gemini-3-一口气做了-10-个应用-附教程", + "source_path": "wiki/sources/我用-gemini-3-一口气做了-10-个应用-附教程.md", "ingested": true, "ingested_at": "2026-04-18T09:34:54.259952" }, "raw/AI/If you have multiple interests, do not waste the next 2-3 years 如果你有多项兴趣爱好,不要浪费接下来的两三年时间。.md": { "hash": "f754a24079461d5e", "modified": "2026-04-14T04:28:42.612951+00:00", - "slug": "如果你有多项兴趣爱好-不要浪费接下来的两三年时间", - "source_path": "wiki/sources/如果你有多项兴趣爱好-不要浪费接下来的两三年时间.md", + "slug": "if-you-have-multiple-interests-do-not-waste-the-next-2-3-years-如果你有多项兴趣爱好-不要浪费接下来的两三年时间", + "source_path": "wiki/sources/if-you-have-multiple-interests-do-not-waste-the-next-2-3-years-如果你有多项兴趣爱好-不要浪费接下来的两三年时间.md", "ingested": true, "ingested_at": "2026-04-18T09:50:07.970814" }, @@ -1327,72 +1327,72 @@ "raw/Skills/Last30Days-使用指南.md": { "hash": "d202f159aeea9ce9", "modified": "2026-04-18T09:30:37.466328+00:00", - "slug": "Last30Days-使用指南", - "source_path": "wiki/sources/Last30Days-使用指南.md", + "slug": "last30days-使用指南", + "source_path": "wiki/sources/last30days-使用指南.md", "ingested": true, "ingested_at": "2026-04-21T07:35:38.033729+00:00" }, "raw/Skills/GOG-CLI-安装配置指南.md": { "hash": "bdedc3ffe48b85ef", "modified": "2026-04-17T00:38:12.844464+00:00", - "slug": "gog-cli-an-zhuang-pei-zhi-zhi-nan", - "source_path": "wiki/sources/GOG-CLI-安装配置指南.md", + "slug": "gog-cli-安装配置指南", + "source_path": "wiki/sources/gog-cli-安装配置指南.md", "ingested": true, "ingested_at": "2026-04-21T07:50:06.657259+00:00" }, "raw/跨境电商/Scrapy + Playwright 抓取TikTok Shop Data.md": { "hash": "cbb79eb5844b1907", "modified": "2026-04-09T11:31:39.192927+00:00", - "slug": "Scrapy-Playwright-抓取TikTok-Shop-Data", - "source_path": "wiki/sources/Scrapy-Playwright-抓取TikTok-Shop-Data.md", + "slug": "scrapy-playwright-抓取tiktok-shop-data", + "source_path": "wiki/sources/scrapy-playwright-抓取tiktok-shop-data.md", "ingested": true, "ingested_at": "2026-04-18T11:04:58.082248" }, "raw/跨境电商/TK美国面单授权及操作流程.md": { "hash": "809f0114b3395b26", "modified": "2026-04-09T11:31:39.193131+00:00", - "slug": "TK美国面单授权及操作流程", - "source_path": "wiki/sources/TK美国面单授权及操作流程.md", + "slug": "tk美国面单授权及操作流程", + "source_path": "wiki/sources/tk美国面单授权及操作流程.md", "ingested": true, "ingested_at": "2026-04-18T11:08:40.112019" }, "raw/跨境电商/超达物流定价.md": { "hash": "afb9efbe4df893e9", "modified": "2026-04-09T11:31:39.193341+00:00", - "slug": "chao-da-wu-liu-ding-jia", - "source_path": "wiki/sources/chao-da-wu-liu-ding-jia.md", + "slug": "超达物流定价", + "source_path": "wiki/sources/超达物流定价.md", "ingested": true, "ingested_at": "2026-04-18T11:23:46.615420" }, "raw/跨境电商/做TK跨境思路不对努力白费.md": { "hash": "f2276ee5969e9701", "modified": "2026-04-09T11:31:39.193553+00:00", - "slug": "做TK跨境思路不对努力白费", - "source_path": "wiki/sources/做TK跨境思路不对努力白费.md", + "slug": "做tk跨境思路不对努力白费", + "source_path": "wiki/sources/做tk跨境思路不对努力白费.md", "ingested": true, "ingested_at": "2026-04-18T11:35:43.461739" }, "raw/跨境电商/TikTok Shop - Apache Superset Dashboard设计思路.md": { "hash": "ca3a3672eaf68cff", "modified": "2026-04-09T11:31:39.194126+00:00", - "slug": "TikTok-Shop-Apache-Superset-Dashboard设计思路", - "source_path": "wiki/sources/TikTok-Shop-Apache-Superset-Dashboard设计思路.md", + "slug": "tiktok-shop-apache-superset-dashboard设计思路", + "source_path": "wiki/sources/tiktok-shop-apache-superset-dashboard设计思路.md", "ingested": true, "ingested_at": "2026-04-18T11:49:14.551009" }, "raw/跨境电商/电商视频Prompt.md": { "hash": "77272706c2e1bcb4", "modified": "2026-04-09T11:31:39.194362+00:00", - "slug": "电商视频Prompt", - "source_path": "wiki/sources/电商视频Prompt.md", + "slug": "电商视频prompt", + "source_path": "wiki/sources/电商视频prompt.md", "ingested": true, "ingested_at": "2026-04-18T12:03:38.634394" }, "raw/跨境电商/电商如何选品 如何找到爆款 选品策略.md": { "hash": "f89b9e48849625dd", "modified": "2026-04-09T11:31:39.194588+00:00", - "slug": "dian-shang-xuan-pin-bao-kuan-xuan-pin-celue", - "source_path": "wiki/sources/dian-shang-xuan-pin-bao-kuan-xuan-pin-celue.md", + "slug": "电商如何选品-如何找到爆款-选品策略", + "source_path": "wiki/sources/电商如何选品-如何找到爆款-选品策略.md", "ingested": true, "ingested_at": "2026-04-18T12:21:05.169695" }, @@ -1407,16 +1407,16 @@ "raw/Others/可自动化、可扩展、AI增强的电商数据采集与处理系统.md": { "hash": "c8c16eb8d8257eb2", "modified": "2026-04-17T00:38:12.844282+00:00", - "slug": "ai-enhanced-ecommerce-data-collection-processing-system", - "source_path": "wiki/sources/ai-enhanced-ecommerce-data-collection-processing-system.md", + "slug": "可自动化-可扩展-ai增强的电商数据采集与处理系统", + "source_path": "wiki/sources/可自动化-可扩展-ai增强的电商数据采集与处理系统.md", "ingested": true, "ingested_at": "2026-04-18T12:49:41.871219" }, "raw/Agent/AI-Memory-Tools-Two-Camps.md": { "hash": "0d0d2ea812d0b5a7", "modified": "2026-04-17T00:38:12.842206+00:00", - "slug": "AI-Memory-Tools-Two-Camps", - "source_path": "wiki/sources/AI-Memory-Tools-Two-Camps.md", + "slug": "ai-memory-tools-two-camps", + "source_path": "wiki/sources/ai-memory-tools-two-camps.md", "ingested": true, "ingested_at": "2026-04-18T13:10:54.492947" }, @@ -1431,26 +1431,26 @@ "raw/AI/在 Ubuntu 安装 Ollama 并运行 Qwen2.5‑Coder 7B.md": { "hash": "0d9deaa455ccdb62", "modified": "2026-04-17T00:38:12.841821+00:00", - "slug": "在-ubuntu-安装-ollama-并运行-qwen2.5-coder-7b", - "source_path": "wiki/sources/在-Ubuntu-安装-Ollama-并运行-Qwen2.5-Coder-7B.md", + "slug": "在-ubuntu-安装-ollama-并运行-qwen2-5‑coder-7b", + "source_path": "wiki/sources/在-ubuntu-安装-ollama-并运行-qwen2-5‑coder-7b.md", "ingested": true, "ingested_at": "2026-04-18T13:36:23.730927" }, "raw/Skills/Obsidian 必装 Skills.md": { "hash": "85cefbb11b518899", "modified": "2026-04-18T09:29:40.028316+00:00", - "slug": "Obsidian-必装-Skills", - "source_path": "wiki/sources/Obsidian-必装-Skills.md", - "ingested": false, - "ingested_at": null + "slug": "obsidian-必装-skills", + "source_path": "wiki/sources/obsidian-必装-skills.md", + "ingested": true, + "ingested_at": "2026-04-21T08:21:42.876866+00:00" }, "raw/Skills/我做了个 Skill:让 AI 帮你生成 Logo 和图标.md": { "hash": "9ff92dfe871428bd", "modified": "2026-04-20T06:31:44.738202+00:00", - "slug": "我做了个-Skill-让-AI-帮你生成-Logo-和图标", - "source_path": "wiki/sources/我做了个-Skill-让-AI-帮你生成-Logo-和图标.md", - "ingested": false, - "ingested_at": null + "slug": "我做了个-skill-让-ai-帮你生成-logo-和图标", + "source_path": "wiki/sources/我做了个-skill-让-ai-帮你生成-logo-和图标.md", + "ingested": true, + "ingested_at": "2026-04-21T08:37:54.513512+00:00" }, "raw/Skills/Obsidian CLI.md": { "hash": "f944c137e557a40c", @@ -1463,8 +1463,8 @@ "raw/Skills/Obsidian 官方 CLI 命令全景速查表.md": { "hash": "aff8e38f7b0fe950", "modified": "2026-04-16T13:08:55.731872+00:00", - "slug": "Obsidian-官方-CLI-命令-全景-速查表", - "source_path": "wiki/sources/Obsidian-官方-CLI-命令-全景-速查表.md", + "slug": "obsidian-官方-cli-命令全景速查表", + "source_path": "wiki/sources/obsidian-官方-cli-命令全景速查表.md", "ingested": true, "ingested_at": "2026-04-18T14:39:18.002689" }, @@ -1479,8 +1479,8 @@ "raw/Home Office/WSL2 启动与网络配置指南.md": { "hash": "5db067c97ccf95fd", "modified": "2026-04-18T04:03:16.616780+00:00", - "slug": "WSL2-启动与网络配置指南", - "source_path": "wiki/sources/WSL2-启动与网络配置指南.md", + "slug": "wsl2-启动与网络配置指南", + "source_path": "wiki/sources/wsl2-启动与网络配置指南.md", "ingested": true, "ingested_at": "2026-04-18T15:19:41.817550" }, @@ -1495,24 +1495,24 @@ "raw/Home Office/Mac必装软件清单-2026-04-17.md": { "hash": "da2929f7e4e4c36b", "modified": "2026-04-18T05:46:09.785055+00:00", - "slug": "mac-bi-zhuang-ruan-jian-qing-dan-2026-04-17", - "source_path": "wiki/sources/mac-bi-zhuang-ruan-jian-qing-dan-2026-04-17.md", + "slug": "mac必装软件清单-2026-04-17", + "source_path": "wiki/sources/mac必装软件清单-2026-04-17.md", "ingested": true, "ingested_at": "2026-04-18T15:52:25.315000" }, "raw/Home Office/实战笔记:本地部署 RSSHub 并获取 YouTube 订阅.md": { "hash": "c37723bff7522dc0", "modified": "2026-04-21T00:02:52.577798+00:00", - "slug": "shi-zhan-bi-ji-ben-di-bu-shu-rsshub-bing-huo-qu-youtube-ding-yue", - "source_path": "wiki/sources/shi-zhan-bi-ji-ben-di-bu-shu-rsshub-bing-huo-qu-youtube-ding-yue.md", - "ingested": false, - "ingested_at": null + "slug": "实战笔记-本地部署-rsshub-并获取-youtube-订阅", + "source_path": "wiki/sources/实战笔记-本地部署-rsshub-并获取-youtube-订阅.md", + "ingested": true, + "ingested_at": "2026-04-21T08:48:50.091806+00:00" }, "raw/Skills/blogwatcher-daily收藏.md": { "hash": "b2550c49bfb87a50", "modified": "2026-04-18T07:17:56.439023+00:00", - "slug": "blogwatcher-daily-shou-cang", - "source_path": "wiki/sources/blogwatcher-daily-shou-cang.md", + "slug": "blogwatcher-daily收藏", + "source_path": "wiki/sources/blogwatcher-daily收藏.md", "ingested": true, "ingested_at": "2026-04-18T16:04:37.219428" }, @@ -1527,8 +1527,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/01_AWS-Landing-Zone/ctp-topic-14-octane-hub-on-aws-real-life-experience-moving-production-services-i.md": { "hash": "466aac3c06a0890a", "modified": "2026-04-18T08:17:51.152126+00:00", - "slug": "ctp-topic-14-octane-hub-on-aws-real-life-experience", - "source_path": "wiki/sources/ctp-topic-14-octane-hub-on-aws-real-life-experience.md", + "slug": "ctp-topic-14-octane-hub-on-aws-real-life-experience-moving-production-services-i", + "source_path": "wiki/sources/ctp-topic-14-octane-hub-on-aws-real-life-experience-moving-production-services-i.md", "ingested": true, "ingested_at": "2026-04-18T17:07:26.401733" }, @@ -1751,8 +1751,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/08_Networking/ctp-topic-31-network-segregation-and-secure-access-to-the-new-aws-landing-zones.md": { "hash": "64b9de78b4f8351a", "modified": "2026-04-18T08:17:51.162215+00:00", - "slug": "ctp-topic-31-network-segregation-secure-access-aws-landing-zones", - "source_path": "wiki/sources/ctp-topic-31-network-segregation-secure-access-aws-landing-zones.md", + "slug": "ctp-topic-31-network-segregation-and-secure-access-to-the-new-aws-landing-zones", + "source_path": "wiki/sources/ctp-topic-31-network-segregation-and-secure-access-to-the-new-aws-landing-zones.md", "ingested": true, "ingested_at": "2026-04-19T02:04:00.984302" }, @@ -1895,16 +1895,16 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/10_OpenText-Series/public-cloud-learning-sessions-applicable-business-analysis-techniques-20240109-.md": { "hash": "abf3b08bc0ee4dbf", "modified": "2026-04-18T08:17:51.164616+00:00", - "slug": "Public-Cloud-Learning-Sessions-Applicable-Business-Analysis-Techniques-20240109", - "source_path": "wiki/sources/Public-Cloud-Learning-Sessions-Applicable-Business-Analysis-Techniques-20240109.md", + "slug": "public-cloud-learning-sessions-applicable-business-analysis-techniques-20240109", + "source_path": "wiki/sources/public-cloud-learning-sessions-applicable-business-analysis-techniques-20240109.md", "ingested": true, "ingested_at": "2026-04-19T06:50:47.811137" }, "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/10_OpenText-Series/public-cloud-learning-sessions-aws-end-user-compute-services-20240430-160120-mee.md": { "hash": "3c77d391d827c22a", "modified": "2026-04-18T08:17:51.164727+00:00", - "slug": "public-cloud-learning-sessions-aws-end-user-compute-services-20240430", - "source_path": "wiki/sources/public-cloud-learning-sessions-aws-end-user-compute-services-20240430.md", + "slug": "public-cloud-learning-sessions-aws-end-user-compute-services-20240430-160120-mee", + "source_path": "wiki/sources/public-cloud-learning-sessions-aws-end-user-compute-services-20240430-160120-mee.md", "ingested": true, "ingested_at": "2026-04-19T08:52:59.512204" }, @@ -1935,16 +1935,16 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/04_EKS/ctp-topic-8-implementation-of-cloud-monitoring-using-micro-focus-operations-brid.md": { "hash": "2b4568677c33969f", "modified": "2026-04-18T08:17:51.158182+00:00", - "slug": "ctp-topic-8-implementation-of-cloud-monitoring-using-micro-focus-operations-bridge", - "source_path": "wiki/sources/ctp-topic-8-implementation-of-cloud-monitoring-using-micro-focus-operations-bridge.md", + "slug": "ctp-topic-8-implementation-of-cloud-monitoring-using-micro-focus-operations-brid", + "source_path": "wiki/sources/ctp-topic-8-implementation-of-cloud-monitoring-using-micro-focus-operations-brid.md", "ingested": true, "ingested_at": "2026-04-19T09:50:07.271183" }, "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/04_EKS/public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks-.md": { "hash": "efbf5de09a47c7a3", "modified": "2026-04-18T08:17:51.158781+00:00", - "slug": "public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks-auto-mode", - "source_path": "wiki/sources/public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks-auto-mode.md", + "slug": "public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks", + "source_path": "wiki/sources/public-cloud-learning-sessions-eks-optimization-part-3-of-3-introduction-to-eks.md", "ingested": true, "ingested_at": "2026-04-19T10:04:24.170806" }, @@ -2007,8 +2007,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/04_EKS/public-cloud-learning-sessions-observability-with-opentelemetry-20240402-160113-.md": { "hash": "335cdecb179abb91", "modified": "2026-04-18T08:17:51.158916+00:00", - "slug": "public-cloud-learning-sessions-observability-with-opentelemetry-20240402-160113-", - "source_path": "wiki/sources/public-cloud-learning-sessions-observability-with-opentelemetry-20240402-160113-.md", + "slug": "public-cloud-learning-sessions-observability-with-opentelemetry-20240402-160113", + "source_path": "wiki/sources/public-cloud-learning-sessions-observability-with-opentelemetry-20240402-160113.md", "ingested": true, "ingested_at": "2026-04-19T12:35:30.714291" }, @@ -2151,8 +2151,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/06_CI_CD_GitOps/public-cloud-learning-sessions-ollie-workflow-and-the-demand-process-20240416-16.md": { "hash": "ae36881ae129aafe", "modified": "2026-04-18T08:17:51.160980+00:00", - "slug": "public-cloud-learning-sessions-ollie-workflow-and-the-demand-process-20240416", - "source_path": "wiki/sources/public-cloud-learning-sessions-ollie-workflow-and-the-demand-process-20240416.md", + "slug": "public-cloud-learning-sessions-ollie-workflow-and-the-demand-process-20240416-16", + "source_path": "wiki/sources/public-cloud-learning-sessions-ollie-workflow-and-the-demand-process-20240416-16.md", "ingested": true, "ingested_at": "2026-04-19T18:25:43.600742" }, @@ -2207,8 +2207,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/05_FinOps/public-cloud-learning-sessions-storage-cost-optimization-20240305-160037-meeting.md": { "hash": "f37c6d5723176a70", "modified": "2026-04-18T08:17:51.159918+00:00", - "slug": "public-cloud-learning-sessions-storage-cost-optimization-20240305", - "source_path": "wiki/sources/public-cloud-learning-sessions-storage-cost-optimization-20240305.md", + "slug": "public-cloud-learning-sessions-storage-cost-optimization-20240305-160037-meeting", + "source_path": "wiki/sources/public-cloud-learning-sessions-storage-cost-optimization-20240305-160037-meeting.md", "ingested": true, "ingested_at": "2026-04-19T20:26:41.687189" }, @@ -2223,8 +2223,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/05_FinOps/public-cloud-learning-sessions-budget-control-20240319-160204-meeting-recording.md": { "hash": "75e2d04ce8ce7f52", "modified": "2026-04-18T08:17:51.159651+00:00", - "slug": "Public-Cloud-Learning-Sessions-Budget-Control", - "source_path": "wiki/sources/Public-Cloud-Learning-Sessions-Budget-Control.md", + "slug": "public-cloud-learning-sessions-budget-control-20240319-160204-meeting-recording", + "source_path": "wiki/sources/public-cloud-learning-sessions-budget-control-20240319-160204-meeting-recording.md", "ingested": true, "ingested_at": "2026-04-19T20:53:10.558004" }, @@ -2247,23 +2247,23 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/09_Serverless_AI/public-cloud-learning-sessions-introduction-to-artificial-intelligence-ai-machin.md": { "hash": "e63b024ad0e2c48b", "modified": "2026-04-18T08:17:51.162994+00:00", - "slug": "public-cloud-learning-sessions-introduction-to-artificial-intelligence-ai-machine-learning-20240206", - "source_path": "wiki/sources/public-cloud-learning-sessions-introduction-to-artificial-intelligence-ai-machine-learning-20240206.md", + "slug": "public-cloud-learning-sessions-introduction-to-artificial-intelligence-ai-machin", + "source_path": "wiki/sources/public-cloud-learning-sessions-introduction-to-artificial-intelligence-ai-machin.md", "ingested": true, "ingested_at": "2026-04-19T21:42:37.159885" }, "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/09_Serverless_AI/public-cloud-learning-sessions-opentext-serverless-computing-20240903-160139-mee.md": { "hash": "af9be8adde945c45", "modified": "2026-04-18T08:17:51.163588+00:00", - "slug": "Public-Cloud-Learning-Sessions-OpenText-Serverless-Computing-20240903", - "source_path": "wiki/sources/Public-Cloud-Learning-Sessions-OpenText-Serverless-Computing-20240903.md", + "slug": "public-cloud-learning-sessions-opentext-serverless-computing-20240903-160139-mee", + "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-serverless-computing-20240903-160139-mee.md", "ingested": true, "ingested_at": "2026-04-19T22:18:36.937741" }, "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/09_Serverless_AI/public-cloud-learning-sessions-opentext-event-driven-architecture-part-1-2024091.md": { "hash": "486d5087d2c796bd", "modified": "2026-04-18T08:17:51.163292+00:00", - "slug": "public-cloud-learning-sessions-opentext-event-driven-architecture-part-1-2024091.md", + "slug": "public-cloud-learning-sessions-opentext-event-driven-architecture-part-1-2024091", "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-event-driven-architecture-part-1-2024091.md", "ingested": true, "ingested_at": "2026-04-19T22:45:16.288750" @@ -2271,8 +2271,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/09_Serverless_AI/public-cloud-learning-sessions-opentext-generative-ai-prompt-engineering-2024111.md": { "hash": "ec22bf27835e5530", "modified": "2026-04-18T08:17:51.163470+00:00", - "slug": "public-cloud-learning-sessions-opentext-generative-ai-prompt-engineering-20241112", - "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-generative-ai-prompt-engineering-20241112.md", + "slug": "public-cloud-learning-sessions-opentext-generative-ai-prompt-engineering-2024111", + "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-generative-ai-prompt-engineering-2024111.md", "ingested": true, "ingested_at": "2026-04-19T23:10:09.678601" }, @@ -2287,8 +2287,8 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/09_Serverless_AI/public-cloud-learning-sessions-opentext-ai-use-cases-20241126-160106-meeting-rec.md": { "hash": "2ff721fa8681b796", "modified": "2026-04-18T08:17:51.163181+00:00", - "slug": "public-cloud-learning-sessions-opentext-ai-use-cases-20241126", - "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-ai-use-cases-20241126.md", + "slug": "public-cloud-learning-sessions-opentext-ai-use-cases-20241126-160106-meeting-rec", + "source_path": "wiki/sources/public-cloud-learning-sessions-opentext-ai-use-cases-20241126-160106-meeting-rec.md", "ingested": true, "ingested_at": "2026-04-19T23:35:43.996794" }, @@ -2319,16 +2319,16 @@ "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/03_Terraform/learning-sessions-cloud-transformation-programme-20230808-183322-meeting-recordi.md": { "hash": "fe096d700ba4edd2", "modified": "2026-04-18T08:17:51.155791+00:00", - "slug": "learning-sessions-cloud-transformation-programme-20230808-183322-meeting-recording", - "source_path": "wiki/sources/learning-sessions-cloud-transformation-programme-20230808-183322-meeting-recording.md", + "slug": "learning-sessions-cloud-transformation-programme-20230808-183322-meeting-recordi", + "source_path": "wiki/sources/learning-sessions-cloud-transformation-programme-20230808-183322-meeting-recordi.md", "ingested": true, "ingested_at": "2026-04-20T00:49:06.023918" }, "raw/Cloud & DevOps/Public-Cloud-Learning-Sessions/03_Terraform/learning-sessions-cloud-transformation-programme-deploying-rds-via-terraform.md": { "hash": "765d5a3b8a7731b0", "modified": "2026-04-18T08:17:51.156024+00:00", - "slug": "Learning-Sessions-Cloud-Transformation-Programme-Deploying-RDS-via-Terraform", - "source_path": "wiki/sources/Learning-Sessions-Cloud-Transformation-Programme-Deploying-RDS-via-Terraform.md", + "slug": "learning-sessions-cloud-transformation-programme-deploying-rds-via-terraform", + "source_path": "wiki/sources/learning-sessions-cloud-transformation-programme-deploying-rds-via-terraform.md", "ingested": true, "ingested_at": "2026-04-20T01:10:10.141689" }, @@ -2343,26 +2343,26 @@ "raw/Agent/agency-agents/CONTRIBUTING_zh-CN.md": { "hash": "e16fcef34292c79f", "modified": "2026-03-29T11:45:15.979469+00:00", - "slug": "contributing-zh-cn", - "source_path": "wiki/sources/contributing-zh-cn.md", + "slug": "contributing_zh-cn", + "source_path": "wiki/sources/contributing_zh-cn.md", "ingested": true, "ingested_at": "2026-04-20T01:36:22.739949" }, "raw/Agent/agency-agents/README.md": { "hash": "a6a4162937f9eabf", "modified": "2026-04-20T13:31:38.742536+00:00", - "slug": "agency-agents-readme", - "source_path": "wiki/sources/agency-agents-readme.md", - "ingested": false, - "ingested_at": null + "slug": "readme", + "source_path": "wiki/sources/readme.md", + "ingested": true, + "ingested_at": "2026-04-21T09:08:14.228290+00:00" }, "raw/Agent/agency-agents/CONTRIBUTING.md": { "hash": "84f13b5a5e1d2d06", "modified": "2026-04-20T13:31:38.680372+00:00", - "slug": "the-agency-contributing", - "source_path": "wiki/sources/the-agency-contributing.md", - "ingested": false, - "ingested_at": null + "slug": "contributing", + "source_path": "wiki/sources/contributing.md", + "ingested": true, + "ingested_at": "2026-04-21T09:21:10.367457+00:00" }, "raw/Agent/agency-agents/design/design-ux-architect.md": { "hash": "151f7386682b77a6", @@ -2455,8 +2455,8 @@ "raw/Agent/agency-agents/paid-media/paid-media-search-query-analyst.md": { "hash": "fb4ef9ea24d500ff", "modified": "2026-03-29T11:45:15.995020+00:00", - "slug": "search-query-analyst", - "source_path": "wiki/sources/search-query-analyst.md", + "slug": "paid-media-search-query-analyst", + "source_path": "wiki/sources/paid-media-search-query-analyst.md", "ingested": true, "ingested_at": "2026-04-20T05:20:28.679751" }, @@ -2599,8 +2599,8 @@ "raw/Agent/agency-agents/project-management/project-management-studio-producer.md": { "hash": "d942feab0f50ea7b", "modified": "2026-03-29T11:45:15.996171+00:00", - "slug": "studio-producer", - "source_path": "wiki/sources/studio-producer.md", + "slug": "project-management-studio-producer", + "source_path": "wiki/sources/project-management-studio-producer.md", "ingested": true, "ingested_at": "2026-04-20T10:36:29.055093" }, @@ -2735,8 +2735,8 @@ "raw/Agent/agency-agents/specialized/specialized-model-qa.md": { "hash": "835a26b93003cfb8", "modified": "2026-03-29T11:45:16.000216+00:00", - "slug": "model-qa-specialist", - "source_path": "wiki/sources/model-qa-specialist.md", + "slug": "specialized-model-qa", + "source_path": "wiki/sources/specialized-model-qa.md", "ingested": true, "ingested_at": "2026-04-20T08:06:36.963871+00:00" }, @@ -2807,8 +2807,8 @@ "raw/Agent/agency-agents/specialized/specialized-french-consulting-market.md": { "hash": "4ce5acf38babd2b0", "modified": "2026-03-29T11:45:15.999915+00:00", - "slug": "French-Consulting-Market-Navigator", - "source_path": "wiki/sources/French-Consulting-Market-Navigator.md", + "slug": "specialized-french-consulting-market", + "source_path": "wiki/sources/specialized-french-consulting-market.md", "ingested": true, "ingested_at": "2026-04-20T19:05:51.809121" }, @@ -2951,32 +2951,32 @@ "raw/Agent/agency-agents/integrations/README.md": { "hash": "773438bdf196320e", "modified": "2026-04-20T13:31:38.723035+00:00", - "slug": "integrations-readme", - "source_path": "wiki/sources/integrations-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/aider/README.md": { "hash": "26dc041627fb3970", "modified": "2026-04-20T13:31:38.719607+00:00", - "slug": "aider-readme", - "source_path": "wiki/sources/aider-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/claude-code/README.md": { "hash": "b37cfa2648c93b32", "modified": "2026-04-20T13:31:38.719941+00:00", - "slug": "claude-code-readme", - "source_path": "wiki/sources/claude-code-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/mcp-memory/README.md": { "hash": "e3252682132b4aa6", "modified": "2026-03-29T11:45:15.990346+00:00", - "slug": "mcp-memory-readme", - "source_path": "wiki/sources/mcp-memory-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T00:00:08.231543" }, @@ -2991,64 +2991,64 @@ "raw/Agent/agency-agents/integrations/openclaw/README.md": { "hash": "4a2a0d6fb6d2ec7a", "modified": "2026-03-29T11:45:15.990649+00:00", - "slug": "openclaw-readme", - "source_path": "wiki/sources/openclaw-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T00:04:54.604484" }, "raw/Agent/agency-agents/integrations/cursor/README.md": { "hash": "c59a7e8a40a6b79d", "modified": "2026-04-20T13:31:38.721858+00:00", - "slug": "cursor-readme", - "source_path": "wiki/sources/cursor-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/github-copilot/README.md": { "hash": "81c59088b32258ba", "modified": "2026-03-29T11:45:15.990112+00:00", - "slug": "github-copilot-readme", - "source_path": "wiki/sources/github-copilot-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T00:09:37.038744" }, "raw/Agent/agency-agents/integrations/gemini-cli/README.md": { "hash": "9f54cd4d8b4ef54a", "modified": "2026-03-29T11:45:15.990005+00:00", - "slug": "gemini-cli-readme", - "source_path": "wiki/sources/gemini-cli-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T00:12:00.953115" }, "raw/Agent/agency-agents/integrations/windsurf/README.md": { "hash": "00d8863ed811f69f", "modified": "2026-04-20T13:31:38.723706+00:00", - "slug": "windsurf-readme", - "source_path": "wiki/sources/windsurf-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/antigravity/README.md": { "hash": "087ed2a8a90d6ab9", "modified": "2026-04-20T13:31:38.724099+00:00", - "slug": "antigravity-readme", - "source_path": "wiki/sources/antigravity-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/integrations/kimi/README.md": { "hash": "01aebb21981f1b34", "modified": "2026-03-29T11:45:15.990226+00:00", - "slug": "kimi-readme", - "source_path": "wiki/sources/kimi-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T00:19:02.501178" }, "raw/Agent/agency-agents/integrations/opencode/README.md": { "hash": "e70b040b1296eb40", "modified": "2026-04-20T13:31:38.724806+00:00", - "slug": "opencode-readme", - "source_path": "wiki/sources/opencode-readme.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, @@ -3175,8 +3175,8 @@ "raw/Agent/agency-agents/examples/README.md": { "hash": "4337886744e068c6", "modified": "2026-03-29T11:45:15.985887+00:00", - "slug": "agency-agents-examples", - "source_path": "wiki/sources/agency-agents-examples.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": true, "ingested_at": "2026-04-21T03:20:57.738860" }, @@ -3191,8 +3191,8 @@ "raw/Agent/agency-agents/examples/workflow-landing-page.md": { "hash": "05942259ec3fa56d", "modified": "2026-03-29T11:45:15.986226+00:00", - "slug": "multi-agent-workflow-landing-page-sprint", - "source_path": "wiki/sources/multi-agent-workflow-landing-page-sprint.md", + "slug": "workflow-landing-page", + "source_path": "wiki/sources/workflow-landing-page.md", "ingested": true, "ingested_at": "2026-04-21T03:49:04.807112" }, @@ -3239,8 +3239,8 @@ "raw/Agent/agency-agents/marketing/marketing-cross-border-ecommerce.md": { "hash": "073dba84e8159c76", "modified": "2026-03-29T11:45:15.991925+00:00", - "slug": "Marketing-Cross-Border-Ecommerce-Specialist", - "source_path": "wiki/sources/Marketing-Cross-Border-Ecommerce-Specialist.md", + "slug": "marketing-cross-border-ecommerce", + "source_path": "wiki/sources/marketing-cross-border-ecommerce.md", "ingested": true, "ingested_at": "2026-04-21T05:21:02.196740" }, @@ -3815,16 +3815,16 @@ "raw/Agent/agency-agents/strategy/QUICKSTART.md": { "hash": "8a1f9053e6e31a06", "modified": "2026-03-29T11:45:16.000973+00:00", - "slug": "QUICKSTART", - "source_path": "wiki/sources/QUICKSTART.md", + "slug": "quickstart", + "source_path": "wiki/sources/quickstart.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/strategy/EXECUTIVE-BRIEF.md": { "hash": "628907121b4fa630", "modified": "2026-03-29T11:45:16.000880+00:00", - "slug": "EXECUTIVE-BRIEF", - "source_path": "wiki/sources/EXECUTIVE-BRIEF.md", + "slug": "executive-brief", + "source_path": "wiki/sources/executive-brief.md", "ingested": false, "ingested_at": null }, @@ -3943,8 +3943,8 @@ "raw/AI/如何让AI生成风格一致的图片.md": { "hash": "3cd96a070186bd1d", "modified": "2026-04-18T22:25:46.444173+00:00", - "slug": "如何让AI生成风格一致的图片", - "source_path": "wiki/sources/如何让AI生成风格一致的图片.md", + "slug": "如何让ai生成风格一致的图片", + "source_path": "wiki/sources/如何让ai生成风格一致的图片.md", "ingested": false, "ingested_at": null }, @@ -3959,24 +3959,24 @@ "raw/Agent/LLM Wiki.md": { "hash": "75a85a530ee40a5e", "modified": "2026-04-20T06:42:58.873699+00:00", - "slug": "LLM-Wiki", - "source_path": "wiki/sources/LLM-Wiki.md", + "slug": "llm-wiki", + "source_path": "wiki/sources/llm-wiki.md", "ingested": true, "ingested_at": "2026-04-20T06:52:14.458614+00:00" }, "raw/Agent/Karpathy 最新分享:用 LLM 搭建个人知识库,告别 RAG 的低效循环.md": { "hash": "5eb90920f1249fbd", "modified": "2026-04-20T06:31:44.737663+00:00", - "slug": "Karpathy-最新分享-用-LLM-搭建个人知识库-告别-RAG-的低效循环", - "source_path": "wiki/sources/Karpathy-最新分享-用-LLM-搭建个人知识库-告别-RAG-的低效循环.md", + "slug": "karpathy-最新分享-用-llm-搭建个人知识库-告别-rag-的低效循环", + "source_path": "wiki/sources/karpathy-最新分享-用-llm-搭建个人知识库-告别-rag-的低效循环.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/SECURITY.md": { "hash": "39430fea66309d26", "modified": "2026-04-20T13:31:38.747061+00:00", - "slug": "SECURITY", - "source_path": "wiki/sources/SECURITY.md", + "slug": "security", + "source_path": "wiki/sources/security.md", "ingested": true, "ingested_at": "2026-04-20T22:05:13.785987" }, @@ -4087,16 +4087,16 @@ "raw/Agent/agency-agents/integrations/qwen/README.md": { "hash": "486a95c5a8a66d09", "modified": "2026-04-20T13:31:38.722248+00:00", - "slug": "README", - "source_path": "wiki/sources/README.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, "raw/Agent/agency-agents/scripts/i18n/README.md": { "hash": "fcf424cd7af5444f", "modified": "2026-04-20T13:31:38.746189+00:00", - "slug": "README", - "source_path": "wiki/sources/README.md", + "slug": "readme", + "source_path": "wiki/sources/readme.md", "ingested": false, "ingested_at": null }, @@ -4191,24 +4191,24 @@ "raw/Cloud & DevOps/SRE Weekly Issue 513.md": { "hash": "4f269d6ae571c266", "modified": "2026-04-20T12:04:56.468784+00:00", - "slug": "SRE-Weekly-Issue-513", - "source_path": "wiki/sources/SRE-Weekly-Issue-513.md", + "slug": "sre-weekly-issue-513", + "source_path": "wiki/sources/sre-weekly-issue-513.md", "ingested": false, "ingested_at": null }, "raw/Agent/Open WebUI Hermes Agent.md": { "hash": "5b725cfcc756af2d", "modified": "2026-04-20T16:02:55.408940+00:00", - "slug": "Open-WebUI--Hermes-Agent", - "source_path": "wiki/sources/Open-WebUI--Hermes-Agent.md", + "slug": "open-webui-hermes-agent", + "source_path": "wiki/sources/open-webui-hermes-agent.md", "ingested": false, "ingested_at": null }, "raw/Home Office/n8n Docker 配置 Telegram 代理 Troubleshooting.md": { "hash": "21312c60eb4503ad", "modified": "2026-04-21T00:02:52.576842+00:00", - "slug": "n8n-Docker-配置-Telegram-代理-Troubleshooting", - "source_path": "wiki/sources/n8n-Docker-配置-Telegram-代理-Troubleshooting.md", + "slug": "n8n-docker-配置-telegram-代理-troubleshooting", + "source_path": "wiki/sources/n8n-docker-配置-telegram-代理-troubleshooting.md", "ingested": false, "ingested_at": null } diff --git a/tools/sync.py b/tools/sync.py index d44572a..cb672db 100755 --- a/tools/sync.py +++ b/tools/sync.py @@ -529,53 +529,201 @@ def run_rebuild(): print(f"\nDone.") -# ─── 管理接口:mark_ingested(供摄取流程调用) ───────────────────────────────────────── +# ─── 管理接口:reslug(批量规范化 manifest slug) ────────────────────────────────────── -def mark_ingested(rel_path: str, slug: str = None, source_path: str = None, recalc_hash: bool = True, json_mode: bool = False): - """标记某个 raw 文件为已摄取(更新 manifest 条目)。 +def _compute_normalized_slug(rel_path: str) -> str: + """根据规则从 raw 文件路径计算规范化 slug。 - 参数: - rel_path: 相对于仓库根目录的路径,例如 "raw/dir/name.md" (必填) - slug: 可选的 wiki slug(例如 "my-article");如果传入会设置 entry["slug"] - source_path: 可选的 wiki 来源路径(例如 "wiki/sources/my-article.md") - recalc_hash: 如果为 True,会基于当前文件重新计算 hash/modified - json_mode: 如果为 True,输出为单行 JSON,便于脚本消费 + 规则: + a. 中文字符直接保留(不转拼音) + b. ASCII 大写字母转小写 + c. 空格和特殊字符(引号、斜杠、问号、冒号、逗号、句号、感叹号、括号、 + 全角符号等)替换为 `-` + d. 连续多个 `-` 压缩为单个 `-`,并去除首尾 `-` + """ + import re + stem = Path(rel_path).stem + + # 转小写(仅影响 ASCII 字母,中文不变) + result = stem.lower() + + # 将特殊字符替换为 `-` + # 保留:中文字符、ASCII 字母数字、点(在版本号如 0.65.0 中保留)、下划线 + result = re.sub( + r'[ \t\r\n' + r'\'"' # 单双引号 + r'//\\\\' # 斜杠(全角/半角/反斜杠) + r'??' # 问号 + r'::' # 冒号 + r',,' # 逗号 + r'。\.' # 句号(保留版本号小数点后面会被压缩) + r'!!' # 感叹号 + r'()()' # 括号 + r'【】\[\]' # 方括号 + r'《》<>' # 书名号/尖括号 + r'、' # 顿号 + r'—–\-' # 破折号/连字符(统一重新处理) + r'|&@#%\^*+=~`' + r';;' # 分号 + r']+', + '-', + result, + ) + + # 压缩连续 `-` 为单个 + result = re.sub(r'-{2,}', '-', result) + + # 去除首尾 `-` + result = result.strip('-') + + return result or 'untitled' + + +def run_reslug(target_rel_path: str = None, dry_run: bool = False): + """批量(或单条)规范化 manifest 中的 slug / source_path。 + + 参数: + target_rel_path: 指定单个 raw 相对路径;为 None 则处理全部条目。 + dry_run: 若为 True,只打印预览,不写入 manifest。 """ manifest = load_manifest() - files = manifest.setdefault("files", {}) - entry = files.get(rel_path, {}) + files = manifest.get("files", {}) + if target_rel_path: + targets = [(target_rel_path, files[target_rel_path])] if target_rel_path in files else [] + if not targets: + print(red(f" ✗ Not found in manifest: {target_rel_path}")) + return + else: + targets = list(files.items()) + + changed = [] + skipped = 0 + + for rel_path, info in targets: + new_slug = _compute_normalized_slug(rel_path) + old_slug = info.get("slug", "") + new_source_path = f"wiki/sources/{new_slug}.md" + old_source_path = info.get("source_path", "") + + if new_slug == old_slug and new_source_path == old_source_path: + skipped += 1 + continue + + changed.append({ + "rel_path": rel_path, + "old_slug": old_slug, + "new_slug": new_slug, + "old_source_path": old_source_path, + "new_source_path": new_source_path, + }) + + print(f"\n{bold('=== Reslug Preview' if dry_run else '=== Reslug')}\n") + print(f" Total entries scanned : {len(targets)}") + print(f" Unchanged (skipped) : {skipped}") + print(f" To update : {len(changed)}\n") + + if not changed: + print(f" {green('✓')} All slugs already normalized.\n") + return + + for item in changed: + print(f" {dim(item['rel_path'])}") + if item['old_slug'] != item['new_slug']: + print(f" slug : {yellow(item['old_slug'])} → {green(item['new_slug'])}") + if item['old_source_path'] != item['new_source_path']: + print(f" src : {yellow(item['old_source_path'])} → {green(item['new_source_path'])}") + print() + + if dry_run: + print(f" {yellow('⚠')} Dry-run — manifest NOT updated. Re-run without --dry-run to apply.\n") + return + + # 应用变更 + for item in changed: + entry = files[item["rel_path"]] + entry["slug"] = item["new_slug"] + entry["source_path"] = item["new_source_path"] + + save_manifest(manifest) + print(f" {green('✓')} manifest.json updated ({len(changed)} entries changed).\n") + + +# ─── 管理接口:mark_ingested(供摄取流程调用) ───────────────────────────────────────── + +def mark_ingested(rel_path: str, slug: str, json_mode: bool = False): + """标记某个 raw 文件为已摄取(更新 manifest 条目)。 + + 行为: + - rel_path 必须已存在于 manifest(即曾被 --sync 扫描过),否则报错退出。 + - slug 必须显式传入,否则报错退出。 + - source_path 由 slug 自动推断为 wiki/sources/.md。 + - modified 强制更新为 raw 文件的实际 mtime(文件不存在时保留旧值并警告)。 + - ingested 设为 True,ingested_at 设为当前 UTC 时间戳。 + + 参数: + rel_path : 相对于仓库根目录的路径,例如 "raw/dir/name.md" (必填) + slug : wiki slug,例如 "my-article" (必填) + json_mode : 若为 True,输出单行 JSON,便于脚本消费 + """ + if not slug or not slug.strip(): + msg = f"--slug is required for --mark-ingested" + if json_mode: + print(json.dumps({"event": "error", "message": msg})) + else: + print(red(f" ✗ {msg}")) + raise SystemExit(1) + + manifest = load_manifest() + files = manifest.get("files", {}) + + if rel_path not in files: + msg = f"rel_path not found in manifest (run --sync first): {rel_path}" + if json_mode: + print(json.dumps({"event": "error", "message": msg})) + else: + print(red(f" ✗ {msg}")) + raise SystemExit(1) + + entry = files[rel_path] + + # 更新 slug 和 source_path + entry["slug"] = slug.strip() + entry["source_path"] = f"wiki/sources/{slug.strip()}.md" + + # 强制更新 modified(基于 raw 文件实际 mtime) abs_path = REPO_ROOT / rel_path - if recalc_hash and abs_path.exists(): + if abs_path.exists(): entry["hash"] = sha256_file(abs_path) entry["modified"] = datetime.fromtimestamp(abs_path.stat().st_mtime, tz=timezone.utc).isoformat() - - if slug: - entry["slug"] = slug - - if source_path: - entry["source_path"] = source_path else: - entry.setdefault("slug", build_slug_from_path(rel_path)) - entry.setdefault("source_path", f"wiki/sources/{entry.get('slug')}.md") + if not json_mode: + print(yellow(f" ⚠ Raw file not found, modified timestamp not updated: {rel_path}")) + # 标记已摄取 entry["ingested"] = True entry["ingested_at"] = iso_now() entry.pop("error", None) files[rel_path] = entry + manifest["files"] = files save_manifest(manifest) if json_mode: print(json.dumps({ "event": "mark_ingested", "rel_path": rel_path, - "slug": entry.get("slug"), - "source_path": entry.get("source_path"), - "ingested_at": entry.get("ingested_at"), + "slug": entry["slug"], + "source_path": entry["source_path"], + "modified": entry.get("modified"), + "ingested_at": entry["ingested_at"], })) else: - print(f"Marked ingested: {rel_path} -> {entry.get('source_path')}") + print(f" {green('✓')} Marked ingested: {rel_path}") + print(f" slug : {entry['slug']}") + print(f" source_path : {entry['source_path']}") + print(f" modified : {entry.get('modified', '(unchanged)')}") + print(f" ingested_at : {entry['ingested_at']}") # ─── CLI 入口 ─────────────────────────────────────────────── @@ -622,22 +770,13 @@ if __name__ == "__main__": ) parser.add_argument( "--mark-ingested", - metavar=("REL_PATH"), + metavar="REL_PATH", nargs=1, - help="标记单个 raw 文件为已摄取:传入相对路径(例如 'raw/dir/file.md')。", + help="标记单个 raw 文件为已摄取:传入相对路径(例如 'raw/dir/file.md')。必须配合 --slug 使用。", ) parser.add_argument( "--slug", - help="与 --mark-ingested 配合:指定生成的 wiki slug(例如 my-article)", - ) - parser.add_argument( - "--source-path", - help="与 --mark-ingested 配合:指定 wiki source 路径(例如 wiki/sources/my-article.md)", - ) - parser.add_argument( - "--no-recalc-hash", - action="store_true", - help="与 --mark-ingested 配合:不要重新计算文件 hash/modified(默认会重新计算)", + help="与 --mark-ingested 配合(必填):指定 wiki slug(例如 my-article)", ) parser.add_argument( "--mark-json", @@ -650,12 +789,29 @@ if __name__ == "__main__": default=None, help="与 --pending --json 配合:限制返回条目数(默认返回全部)", ) + parser.add_argument( + "--reslug", + action="store_true", + help="批量规范化 manifest 中的 slug/source_path(中文保留,ASCII 特殊字符转 -,大写转小写,压缩连续 -)", + ) + parser.add_argument( + "--reslug-target", + metavar="REL_PATH", + help="与 --reslug 配合:只处理指定的 raw 文件(例如 'raw/dir/file.md')", + ) + parser.add_argument( + "--dry-run", + action="store_true", + help="与 --reslug 配合:只预览变更,不写入 manifest", + ) args = parser.parse_args() if args.mark_ingested: rel = args.mark_ingested[0] - mark_ingested(rel, slug=args.slug, source_path=args.source_path, recalc_hash=not args.no_recalc_hash, json_mode=args.mark_json) + mark_ingested(rel, slug=args.slug, json_mode=args.mark_json) + elif args.reslug: + run_reslug(target_rel_path=args.reslug_target, dry_run=args.dry_run) elif args.rebuild: run_rebuild() elif args.pending: