-
-
🔑 关键痛点解决:SSH 解锁 Keychain
-
- yule@macmini k41 % mac-unlock-keychain
- login keychain unlocked
-
-
根除 macOS 无头 SSH 会话中无法读取 Git/SSH 密钥与私有环境变量的痛点。
-
-
⚡ Agent CLI YOLO 自治模式
- - 终端输入命令(如
ca)调起 CLI Agent
+ - 终端输入
ca(cursor-agent 的 alias)调起 Agent
- 开启 YOLO 模式:赋予防灾沙盒内的终端自主执行权,自动改文件与跑单测,杜绝手机端频繁弹窗按确认
-
📱 Termius(汤米老师)实操利好
+
📱 Termius 实操利好
在家里直接敲局域网 IP 秒连;外出配合穿透无缝重连,后台挂起不掉线。
+
+
+
💡 Tip:SSH 解锁 Keychain
+
+ yule@macmini k41 % mac-unlock-keychain
+ login keychain unlocked
+
+
根除 macOS 无头 SSH 会话中无法读取 Git/SSH 密钥与私有环境变量的痛点。
+
@@ -316,12 +332,10 @@ layout: default
---
@@ -343,7 +357,7 @@ layout: default
直面 Agent 思维脉络与终端日志,适合架构重构与疑难 Debug。
💻 Termius: SSH 直连宿主机
-
⬇️ ca [yolo]: 自主规划执行、改文件、跑测试
+
⬇️ ca [yolo]: cursor-agent 的 alias,自主规划、改文件、跑测试
⬇️ 实时打断: 随时按 Ctrl+C 调整提示词
@@ -588,30 +602,30 @@ layout: default
layout: default
---
-# 生产验收实战:秒级反馈的完美正向闭环
+# 生产验收实战:手机浏览器看结果,直接对着结果 Review
-合并即上线,手机 Safari 刷新即见最新生产产物
+打开线上页面,Review 只看浏览器里呈现出来的结果
- Termius(汤米老师) - 核心 SSH 终端管理,支持 Snippets 与手势优化
+ Termius - 核心 SSH 终端管理,支持 Snippets 与手势优化
App Store
diff --git a/src/pages/slides/[...slug].astro b/src/pages/slides/[...slug].astro
index 92a13cf..0f0fbf8 100644
--- a/src/pages/slides/[...slug].astro
+++ b/src/pages/slides/[...slug].astro
@@ -98,6 +98,7 @@ const { deck } = Astro.props
min-height: 2.25rem;
padding: 0 0.7rem;
white-space: nowrap;
+ text-decoration: none;
}
.deck-nav-btn {
min-width: 5.5rem;
@@ -220,6 +221,30 @@ const { deck } = Astro.props
width: 100%;
line-height: 1.4;
}
+ .slide-content ol.loop-steps {
+ list-style: none;
+ counter-reset: loop;
+ margin: 0;
+ padding: 0;
+ }
+ .slide-content ol.loop-steps li {
+ display: flex;
+ align-items: baseline;
+ gap: 0.65rem;
+ margin: 0;
+ padding: 0.55rem 0;
+ border-top: 1px solid var(--rule);
+ line-height: 1.4;
+ }
+ .slide-content ol.loop-steps li::before {
+ counter-increment: loop;
+ content: counter(loop);
+ flex: none;
+ width: 1.15rem;
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.75rem;
+ font-weight: 600;
+ }
.slide-content .text-xs {
font-size: 0.84rem !important;
}
@@ -237,6 +262,88 @@ const { deck } = Astro.props
box-shadow: none !important;
background: #fff;
transform: none !important;
+ cursor: zoom-in;
+ }
+ .image-lightbox {
+ display: none;
+ position: fixed;
+ inset: 0;
+ z-index: 80;
+ flex-direction: column;
+ background: var(--ink);
+ color: var(--paper);
+ }
+ .image-lightbox.is-open {
+ display: flex;
+ }
+ .image-lightbox-bar,
+ .image-lightbox-nav {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.5rem;
+ padding: 0.55rem 0.75rem;
+ border-color: rgba(241, 239, 234, 0.24);
+ }
+ .image-lightbox-bar {
+ border-bottom: 1px solid rgba(241, 239, 234, 0.24);
+ padding-top: max(0.55rem, env(safe-area-inset-top));
+ }
+ .image-lightbox-nav {
+ border-top: 1px solid rgba(241, 239, 234, 0.24);
+ padding-bottom: max(0.55rem, env(safe-area-inset-bottom));
+ }
+ .image-lightbox-actions {
+ display: flex;
+ gap: 0.4rem;
+ }
+ .image-lightbox button {
+ border: 1px solid var(--paper);
+ background: transparent;
+ color: var(--paper);
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.72rem;
+ line-height: 1;
+ min-height: 2.25rem;
+ padding: 0 0.7rem;
+ cursor: pointer;
+ }
+ .image-lightbox button:disabled {
+ opacity: 0.28;
+ pointer-events: none;
+ }
+ .image-lightbox-count {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.75rem;
+ }
+ .image-lightbox-stage {
+ flex: 1;
+ min-height: 0;
+ overflow: auto;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0.75rem;
+ }
+ .image-lightbox-stage img {
+ display: block;
+ width: auto;
+ max-width: 100%;
+ max-height: 100%;
+ margin: auto;
+ object-fit: contain;
+ background: #fff;
+ cursor: zoom-in;
+ }
+ .image-lightbox-stage.is-zoomed {
+ align-items: flex-start;
+ justify-content: flex-start;
+ }
+ .image-lightbox-stage.is-zoomed img {
+ max-width: none;
+ max-height: none;
+ margin: 0;
+ cursor: zoom-out;
}
.slide-content pre,
.slide-content :not(pre) > code {
@@ -269,6 +376,76 @@ const { deck } = Astro.props
.slide-content li {
margin-bottom: 0.35rem;
}
+ .topo {
+ display: flex;
+ flex-direction: column;
+ align-items: stretch;
+ margin-top: 0.35rem;
+ }
+ .topo-fork {
+ display: flex;
+ align-items: stretch;
+ gap: 0.45rem;
+ }
+ .topo-card,
+ .topo-step {
+ border: 1px solid var(--ink);
+ background: transparent;
+ padding: 0.55rem 0.6rem 0.6rem;
+ }
+ .topo-card {
+ flex: 1;
+ min-width: 0;
+ display: flex;
+ flex-direction: column;
+ }
+ .topo-step {
+ text-align: center;
+ font-size: 0.84rem;
+ font-weight: 600;
+ line-height: 1.35;
+ }
+ .topo-kicker {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
+ font-size: 0.62rem;
+ letter-spacing: 0.04em;
+ opacity: 0.62;
+ margin-bottom: 0.15rem;
+ }
+ .topo-title {
+ font-size: 0.86rem;
+ font-weight: 650;
+ line-height: 1.3;
+ margin-bottom: 0.28rem;
+ }
+ .topo-line {
+ font-size: 0.75rem;
+ line-height: 1.45;
+ }
+ .topo-note {
+ margin-top: auto;
+ padding-top: 0.35rem;
+ font-size: 0.68rem;
+ line-height: 1.35;
+ opacity: 0.62;
+ }
+ .topo-arrow {
+ width: 1px;
+ height: 0.85rem;
+ margin: 0 auto;
+ background: var(--ink);
+ position: relative;
+ }
+ .topo-arrow::after {
+ content: "";
+ position: absolute;
+ left: 50%;
+ bottom: -1px;
+ transform: translateX(-50%);
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 5px solid var(--ink);
+ }
.mermaid-container {
overflow-x: auto;
margin: 0.5rem 0 1rem;
@@ -371,8 +548,11 @@ const { deck } = Astro.props