diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push.conf b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push.conf new file mode 100644 index 00000000..961b3596 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push.conf @@ -0,0 +1,7 @@ +# Gitea 推送配置(可选) +# 在局域网时用此 IP 直连,避免走代理;不填或留空则始终用域名(外网走代理) +# 示例:GITEA_LAN_IP=192.168.1.100 +GITEA_LAN_IP= + +# 外网时使用的代理(本机 Clash 等)。留空则不走代理 +GITEA_HTTP_PROXY=http://127.0.0.1:7897 diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push_smart.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push_smart.sh new file mode 100755 index 00000000..b3e9c9f3 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push_smart.sh @@ -0,0 +1,94 @@ +#!/bin/bash +# ============================================ +# Gitea 智能推送:局域网用 LAN IP 直连,外网用域名+代理 +# 用法:在仓库根目录执行,或传入 REPO_DIR +# 依赖:同目录下 gitea_push.conf(可选 GITEA_LAN_IP、GITEA_HTTP_PROXY) +# ============================================ + +REPO_DIR="${1:-/Users/karuo/Documents/个人/卡若AI}" +REMOTE="${2:-gitea}" +BRANCH="${3:-main}" +CONF_DIR="$(dirname "$0")" +CONF="$CONF_DIR/gitea_push.conf" + +cd "$REPO_DIR" || exit 1 + +# 读取配置(去掉注释和空行) +GITEA_LAN_IP="" +GITEA_HTTP_PROXY="http://127.0.0.1:7897" +if [ -f "$CONF" ]; then + while IFS= read -r line; do + [[ "$line" =~ ^#.*$ ]] && continue + [[ -z "${line// /}" ]] && continue + if [[ "$line" =~ ^GITEA_LAN_IP=(.*)$ ]]; then + GITEA_LAN_IP="${BASH_REMATCH[1]}" + GITEA_LAN_IP="${GITEA_LAN_IP%%#*}" + GITEA_LAN_IP="${GITEA_LAN_IP// /}" + elif [[ "$line" =~ ^GITEA_HTTP_PROXY=(.*)$ ]]; then + GITEA_HTTP_PROXY="${BASH_REMATCH[1]}" + GITEA_HTTP_PROXY="${GITEA_HTTP_PROXY%%#*}" + GITEA_HTTP_PROXY="${GITEA_HTTP_PROXY// /}" + fi + done < "$CONF" +fi + +ORIG_URL=$(git remote get-url "$REMOTE" 2>/dev/null) +[ -z "$ORIG_URL" ] && { echo "[gitea_push_smart] 错误:remote $REMOTE 不存在"; exit 1; } + +# 从 URL 提取:http://user:token@host:3000/fnvtk/karuo-ai.git +AUTH_PREFIX="${ORIG_URL%%@*}@" +PATH_PART="${ORIG_URL#*@}" +REPO_PATH="${PATH_PART#*:3000/}" +[ -z "$REPO_PATH" ] && REPO_PATH="fnvtk/karuo-ai.git" + +do_push() { + if [ -n "$1" ]; then + export HTTP_PROXY="$1" HTTPS_PROXY="$1" ALL_PROXY="$1" + echo "[gitea_push_smart] 使用代理推送(外网)..." + else + unset HTTP_PROXY HTTPS_PROXY ALL_PROXY + echo "[gitea_push_smart] 直连推送(局域网)..." + fi + git push "$REMOTE" "$BRANCH" 2>&1 + return $? +} + +MAX_TRY=3 +# 1) 若配置了 LAN IP 且能连通 3000,则用 LAN 推送 +if [ -n "$GITEA_LAN_IP" ]; then + CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 "http://${GITEA_LAN_IP}:3000/" 2>/dev/null) + if [ "$CODE" = "200" ]; then + LAN_URL="http://${AUTH_PREFIX}${GITEA_LAN_IP}:3000/${REPO_PATH}" + git remote set-url "$REMOTE" "$LAN_URL" + for i in $(seq 1 $MAX_TRY); do + echo "[gitea_push_smart] 第 $i/$MAX_TRY 次尝试(局域网 $GITEA_LAN_IP:3000)..." + if do_push ""; then + git remote set-url "$REMOTE" "$ORIG_URL" + echo "[gitea_push_smart] 推送成功(局域网)" + exit 0 + fi + [ $i -lt $MAX_TRY ] && sleep 5 + done + git remote set-url "$REMOTE" "$ORIG_URL" + fi +fi + +# 2) 使用域名 + 代理推送(外网) +for i in $(seq 1 $MAX_TRY); do + echo "[gitea_push_smart] 第 $i/$MAX_TRY 次尝试(外网域名 + 代理)..." + if [ -n "$GITEA_HTTP_PROXY" ]; then + if do_push "$GITEA_HTTP_PROXY"; then + echo "[gitea_push_smart] 推送成功(外网)" + exit 0 + fi + else + if do_push ""; then + echo "[gitea_push_smart] 推送成功" + exit 0 + fi + fi + [ $i -lt $MAX_TRY ] && echo "[gitea_push_smart] 5 秒后重试..." && sleep 5 +done + +echo "[gitea_push_smart] 错误:$MAX_TRY 次尝试均失败" +exit 1 diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/手动推送直到成功.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/手动推送直到成功.sh new file mode 100755 index 00000000..22fdde75 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/手动推送直到成功.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# 手动推送直到成功 - 网络不稳定时使用 +# 用法: bash 手动推送直到成功.sh + +REPO_DIR="/Users/karuo/Documents/个人/卡若AI" +cd "$REPO_DIR" || exit 1 + +for i in 1 2 3 4 5 6 7 8 9 10; do + echo "[$(date '+%H:%M:%S')] 第 $i 次尝试..." + if git push gitea main 2>&1; then + echo "✅ 推送成功" + exit 0 + fi + echo "⏳ 5 秒后重试..." + sleep 5 +done +echo "❌ 10 次尝试后仍未成功,请检查网络后重试" +exit 1 diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/自动同步.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/自动同步.sh index 0c7ad9e8..61e243a5 100755 --- a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/自动同步.sh +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/自动同步.sh @@ -85,10 +85,16 @@ fi log "提交成功:${CHANGED_COUNT} 个文件" # ============================================ -# Step 4: 推送到 Gitea +# Step 4: 推送到 Gitea(智能:局域网用 IP,外网用域名+代理) # ============================================ -git push "$REMOTE" "$BRANCH" --quiet 2>&1 -PUSH_RESULT=$? +PUSH_SCRIPT="$REPO_DIR/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/gitea_push_smart.sh" +if [ -x "$PUSH_SCRIPT" ]; then + bash "$PUSH_SCRIPT" "$REPO_DIR" "$REMOTE" "$BRANCH" 2>&1 | tee -a "$LOG_FILE" + PUSH_RESULT=${PIPESTATUS[0]} +else + git push "$REMOTE" "$BRANCH" --quiet 2>&1 + PUSH_RESULT=$? +fi if [ $PUSH_RESULT -eq 0 ]; then log "推送成功 → gitea/$BRANCH" diff --git a/01_卡资(金)/金仓_存储备份/系统监控/SKILL.md b/01_卡资(金)/金仓_存储备份/系统监控/SKILL.md index f9794035..e45985d5 100644 --- a/01_卡资(金)/金仓_存储备份/系统监控/SKILL.md +++ b/01_卡资(金)/金仓_存储备份/系统监控/SKILL.md @@ -292,6 +292,20 @@ sudo killall -HUP mDNSResponder echo "DNS 缓存已刷新" ``` +### Cursor 上传占用降低 + +已在 `~/Library/Application Support/Cursor/User/settings.json` 中建议或已配置: + +- `"redhat.telemetry.enabled": false` — 关闭 Red Hat 扩展遥测上传 +- `"telemetry.telemetryLevel": "off"` — 关闭 IDE 遥测 +- `"cursor.general.enableCodebaseIndexing": false` — 关闭代码库索引(避免整库分块上传) + +**需在 Cursor 内手动操作(进一步降上传):** + +1. **开启 Privacy Mode**:`Cursor` → `Settings` → `General` → 打开 **Privacy Mode**(代码不存 Cursor/第三方,部分 AI 能力会受限) +2. **少 @ 大文件**:对话里少引用整文件,只 @ 必要片段,可明显减少单次请求上传量 +3. **不用时关扩展**:禁用暂时不用的扩展,减少后台同步与遥测 + --- ## 8. 性能基准 @@ -391,6 +405,7 @@ echo "==========================================" | Finder 无响应 | `killall Finder` | | Docker 异常 | 重启 Docker Desktop 或 `docker system prune` | | 网络异常 | 刷新 DNS:`sudo dscacheutil -flushcache` | +| Cursor 上传大 | 关遥测/关代码库索引见上文「Cursor 上传占用降低」;可开 Privacy Mode | | iCloud 不同步 | `killall bird && killall cloudd` | | Spotlight 搜索慢 | `sudo mdutil -E /` 重建索引 | diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json index f6dbec2a..7b4d39f8 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json @@ -1,6 +1,6 @@ { - "access_token": "u-76soiQf0t11GcweJFhpzl4l5mgMBk1qpWoaaZxM00AOj", - "refresh_token": "ur-6isX.Eitt5rHrnvVBecFhql5mqUBk1gpM8aaUNM00wz7", + "access_token": "u-7FEQ3dsVpbBVy1HPRK6OCul5mUMBk1gNMoaaENM00Byi", + "refresh_token": "ur-58aJUppSxdOFYJhaRlNUaMl5miOBk1UNpEaaIMQ00xD6", "name": "飞书用户", - "auth_time": "2026-02-14T08:56:27.486169" + "auth_time": "2026-02-17T10:27:47.958573" } \ No newline at end of file diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_feb15_summary.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_feb15_summary.py new file mode 100644 index 00000000..fbc1e4c7 --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_feb15_summary.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +""" +2月15日后工作小结 → 飞书日志(集中写在一日内) +数据来源:分布式算力矩阵、Soul派对101/102场、全量扫描、经验沉淀、聊天与文件 +""" +import os +import sys +import subprocess + +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +if SCRIPT_DIR not in sys.path: + sys.path.insert(0, SCRIPT_DIR) + +from auto_log import get_token_silent, ensure_service, CONFIG, WIKI_URL + +# 2月15日~今 工作小结(一条事件) +DATE_STR = "2月18日" +CALLOUT = "[总结] 2月15日~今" + +TASKS = [ + { + "person": "卡若", + "events": ["分布式算力矩阵", "全量扫描", "Soul派对", "安全与运维", "经验沉淀"], + "quadrant": "重要紧急", + "t_targets": [ + "分布式算力矩阵→三次对话吸收+资产全景+安全加固 📊 (85%)", + "全量扫描→33.9万IP防断网跑完+6984验证+1281高价值主机 🔍 (100%)", + "Soul派对→101场(2/16)与102场(2/17)纪要+主题迭代 🎙️ (100%)", + "安全运维→小型宝塔攻击链处理+SSH加固待办+CKB NAS绑定 🛡️ (70%)", + ], + "n_process": [ + "【算力矩阵】2/15三次Agent对话吸收→资产清单(公司NAS/家NAS/存客宝/kr宝塔)→PCDN收益模型→规模化测算→部署路线(Docker/chroot)→紧急待办P0-P2", + "【全量扫描】2/16 33.9万IP、并发2000防断网→TCP存活8257、协议验证6984、高价值1281→反填04暴力破解→家宽优化SKILL吸收", + "【Soul派对】101场(程序员AI工具链×电动车民宿×金融)、102场(过年第一个红包发给谁×人生三贵人)→纪要产出+长图→话题迭代", + "【安全】小型宝塔XMRig/后门清理→攻击IP封禁→存客宝/kr宝塔SSH待开→CKB NAS网心云绑定15880802661待执行", + ], + "t_thoughts": [ + "算力矩阵先摸清资产与安全,再规模化;家宽降并发可跑完全程", + "派对纪要沉淀话题与视角,红包/贵人主题可延展内容", + ], + "w_work": ["运维部署", "安全加固", "扫描与验证", "内容纪要", "经验沉淀"], + "f_feedback": [ + "全量扫描完成 ✅", + "Soul 101/102场纪要 ✅", + "算力矩阵总结+待办明确 ✅", + "CKB绑定+宝塔加固待办 ⏰", + ], + }, + { + "person": "卡资", + "events": ["扫描模块", "主机库校验", "金仓备份"], + "quadrant": "重要不紧急", + "t_targets": [ + "01_扫描模块→家宽防断网实践+SKILL更新 📁 (100%)", + "主机库校验→2/16报告+smart_brute下游就绪 🔐 (100%)", + ], + "n_process": [ + "【扫描】references/扫描断网分析与优化、全量扫描最终结果_20260216、verified_scan/ssh_reachable写入", + "【校验】主机库_校验报告_20260216、全量扫描反填04暴力破解", + ], + "t_thoughts": ["家宽并发2000/批次4000可稳定跑完全程"], + "w_work": ["运维脚本", "文档与报告"], + "f_feedback": ["扫描与校验闭环 ✅"], + }, +] + +def main(): + print("=" * 50) + print("📅 写入飞书:2月15日后工作小结(单日汇总)") + print("=" * 50) + + ensure_service() + print("\n🔑 获取 Token(静默)...") + token = get_token_silent() + if not token: + print("❌ 无法获取 Token") + sys.exit(1) + + # 使用 auto_log 的 write_log + build_blocks(需传入自定义 DATE_STR 和 TASKS) + from auto_log import write_log + print("\n📝 写入飞书日志...") + ok = write_log(token, DATE_STR, TASKS) + + if ok: + subprocess.run(["open", WIKI_URL], capture_output=True) + print(f"\n📎 已打开飞书: {WIKI_URL}") + print("\n✅ 完成!") + else: + print("\n❌ 写入失败") + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.html b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.html new file mode 100644 index 00000000..7459bc1d --- /dev/null +++ b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.html @@ -0,0 +1,533 @@ + + + + + + 1月27日|程序员AI工具链×电动车民宿×金融视角 - 卡若派对纪要 + + + +
+
+

1月27日|程序员AI工具链×电动车民宿×金融视角

+

汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。

+ +
+ ⏱ 2小时26分47秒 + 👥 600+ + 📍 Soul派对早场 + 📅 2026-01-27 06:54 +
+
+ +
+

+ + 👤 + 分享人介绍 +

+
+
👤卡若
+

派对主持人·融资运营

电动车×民宿撮合·不良资产收购·金融杠杆论

+
+ +
+
👤程序员(6号)
+

全栈开发·Cursor用户

20年编码经历·AI超级个体探索·量化交易脚本

+
+ +
+
👤何包
+

电动车创始人

泉州1000+车队·民宿酒店渠道·低成本扩张

+
+
+ +
+

+ + 📌 + 精益介绍 +

+
📌程序员AI转型:从代码到产品

Cursor新功能详解

  • 桌面控制能力升级(昨晚新增)
  • IDE+可视化界面友好
  • 公司全员配置使用(含文员)

程序员创业陷阱

  • 99%创业失败=思维闭环
  • 技术≠产品≠商业化
  • 从业比创业稳定百倍
+
电动车民宿合作:2万投入年赚百万

何包模式拆解

  • 与民宿合作摆放电动车
  • 民宿不出钱,只需展位
  • 泉州1000+车·月流水400万+

厦门落地挑战

  • 需要岛内民宿代运营者牵头
  • 投入:20万覆盖10-20家民宿
  • 需要执行人·资金only≠项目
+
+ +
+

+ + 🕐 + 会议流程 +

+
🎙️
开场介绍06:00-06:10
+ +
👥
嘉宾分享06:10-07:30
+ +
💡
干货提炼07:30-08:00
+ +
🤝
项目对接08:00-08:40
+ +
📋
总结收尾08:40-09:00
+
+ +
+

+ + + 热点研讨 +

+
+
+
用户观点
04:40-05:34
+
Q:Cursor电脑控制能力
+
+
昨晚刚升级新版本,增加自动操控电脑界面能力。相比Claude Code的区别在于可视化界面更友好、配置更简单。
+
重点
信号:工具门槛再次降低,普通大学生培训2周就能达到3-5年经验水平
+
+ +
+
+
用户观点
18:59-21:59
+
Q:电动车民宿模式复制性
+
+
何包的模式:民宿方零投入,只需门口摆5-10辆电动车。所有成本由何包团队承担。
+
重点
亮点:投入20万可覆盖10-20家民宿。相对酒店投资低10倍
+
+ +
+
+
用户观点
30:05-40:59
+
Q:全球债务与AI的必然性
+
+
346万亿债务无法真实还清。央行必然选大通胀+印钱路线。AI就是印钱的理由。
+
重点
结论:2026年唯一的印钞通行证就是AI
+
+
+ +
+

+ + 📋 + 下次分享 +

+
📌
AI工具链现状
Cursor > Claude Code:可视化+配置友好+电脑控制
+
🎯
电动车民宿扩张路径
何包模式:零成本渠道(民宿不出钱)
+
📋
待定
下期公布
+
💡
待定
下期公布
+
+ +
+

+ + 🚀 + 项目推进 +

+
🚀
项目推进
如果你有民宿代运营背景或厦门岛内民宿资源,可以尝试对接何包的电动车项目。投入相对低(20万左右),ROI清晰。
群友何包已准备详细商业计划书,可在派对直接对接
+
📊
项目推进
现在Cursor等AI工具已成标配。如果还没掌握,可以像文员一样快速上手。懂工具的人现在还是少数。
机会:AI工具链会持续迭代,早学早用早变现
+
+ + +
+ + diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.png b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.png new file mode 100644 index 00000000..5ac4951b Binary files /dev/null and b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101_长图.png differ diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.html b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.html new file mode 100644 index 00000000..72ac9769 --- /dev/null +++ b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.html @@ -0,0 +1,495 @@ + + + + + + 1月27日|程序员AI工具链×电动车民宿×金融视角 - 卡若派对纪要 + + + +
+
+

1月27日|程序员AI工具链×电动车民宿×金融视角

+

汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。

+ +
+ ⏱ 2小时26分47秒 + 👥 600+ + 📍 Soul派对早场 + 📅 2026-01-27 06:54 +
+
+ +
+

+ + 👤 + 分享人介绍 +

+
{{#speakers}}
+
+ +
+

+ + 📌 + 精益介绍 +

+
{{#modules}}
+
+ +
+

+ + 🕐 + 会议流程 +

+
{{#flow_steps}}
+
+ +
+

+ + + 热点研讨 +

+
{{#highlights}}
+
+ +
+

+ + 📋 + 下次分享 +

+
{{#next_share}}
+
+ +
+

+ + 🚀 + 项目推进 +

+
{{#actions}}
+
+ + +
+ + diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.png b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.png new file mode 100644 index 00000000..0c31a278 Binary files /dev/null and b/04_卡火(火)/火眼_智能追问/智能纪要/output/meeting_101style_sample.png differ diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.html b/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.html new file mode 100644 index 00000000..d4bd16b6 --- /dev/null +++ b/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.html @@ -0,0 +1,551 @@ + + + + + + 2026年2月17日|过年第一个红包发给谁×人生三贵人 - 卡若派对纪要 + + + +
+
+

2026年2月17日|过年第一个红包发给谁×人生三贵人

+

汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。

+ +
+ ⏱ 50分钟42秒 + 👥 94+ + 📍 Soul派对早场 + 📅 2026-02-17 8:01 +
+
+ +
+

+ + 👤 + 分享人介绍 +

+
+
👤主持人
+

派对主理·102场

红包与贵人·无我利他·伴侣与决策

+
+ +
+
👤群友
+

互动分享

收获与付出·红包是心意·亲密付

+
+
+ +
+

+ + 📌 + 精益介绍 +

+
📌人生三贵人:引路人·皮鞭·后盾

第一个贵人

  • 亏过一个亿的男人,13年做收银机/美团模式、太早做市场
  • 认知很高,带来思维启发与优质人脉
  • 引路人型:泡茶聊天时直接给解决方案、有求必应

第二个贵人

  • 樊登福建区负责人,皮鞭型
  • 决策不对时敢提、敢说:这事可能不对
  • 人生只做一件最重要的事
+
红包与链接

红包类型

  • 心意型:9块9也开心,表达气氛、无经济压力
  • 建联型:礼尚往来、建立联系
  • 交易型:有的不收,收了等于承诺、要资源要场地的不收

原则

  • 付出时忘掉自己、无我利他,回馈自然来
  • 照顾好自己的前提下,优先身边人
  • 红包可用亲密付(发现新大陆)
+
⚙️Soul与派对

102场体会

  • 大机会:一线供应链、真心话、多视角
  • 第一波10人很容易稳住,梯度机制
  • 每天做会议纪要发群;总结很重要
+
+ +
+

+ + 🕐 + 会议流程 +

+
🎙️
开场介绍06:00-06:10
+ +
👥
嘉宾分享06:10-07:30
+ +
💡
干货提炼07:30-08:00
+ +
🤝
项目对接08:00-08:40
+ +
📋
总结收尾08:40-09:00
+
+ +
+

+ + + 热点研讨 +

+
+
+
用户观点
17:04-23:00
+
Q:三个贵人:引路人·皮鞭·后盾
+
+
今年红包只发三人:引路人(亏过一个亿、认知高人脉好)、皮鞭(樊登福建负责人、敢纠偏决策)、后盾(老婆、财务生活全管)。顺序对外利他型,对内伴侣第一。
+
重点
贵人不是数量,是角色分工:给视野、给纠偏、给兜底。离自己近的人优先,永远的原则。
+
+ +
+
+
用户观点
28:46-30:02
+
Q:红包是心意不是金额
+
+
微信设200元上限的本意是双方无经济压力,表达节日气氛。9块9也很开心。红包可以用亲密付。
+
重点
心意>金额。设上限恰恰是让人敢发、对方敢收,关系不异化为交易。
+
+ +
+
+
用户观点
26:01-27:15
+
Q:无我利他才有回馈
+
+
付出时把自己忘掉,不想自己的事,慢慢就有回馈。他们来找我泡茶、有需求,我直接帮解决;我只要他们的视角给我看不到的东西。
+
重点
收获一定伴随付出,但付出时若算计回报就有阻碍。给解决方案、有求必应,换视角与链接。
+
+ +
+
+
用户观点
35:14-41:43
+
Q:伴侣相处:迭代与三个卡点
+
+
不内耗、秒道歉;两人要迭代、update。出去找地方摊开讲三个卡点(如加工资未统一、人的问题),每人说三件,解决盲区。先认错、再谈事。
+
重点
关系要迭代。卡点列出来直接讲,事归事、人归人;伴侣会沟通、不积压,才能不内耗往前冲。
+
+
+ +
+

+ + 📋 + 下次分享 +

+
📌
红包与贵人
三贵人:引路人(视野+人脉)、皮鞭(纠偏决策)、后盾(生活+财务)
+
🎯
伴侣与决策
不内耗:秒道歉、要迭代,卡点摊开讲
+
📋
待定
下期公布
+
💡
待定
下期公布
+
+ +
+

+ + 🚀 + 项目推进 +

+
🚀
项目推进
把人生三贵人写成文章发出去,加深链接。红包发完可借回馈时机聊几句。
今日已发老婆;另两位等起来再发,发时顺便聊天
+
📊
项目推进
每天会议纪要发群,102场继续做总结。关注订阅群主,不然看不到派对。
Soul第一波10人易稳住,有梯度;多视角、一线供应链是机会
+
+ + +
+ + diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.png b/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.png new file mode 100644 index 00000000..d1b41882 Binary files /dev/null and b/04_卡火(火)/火眼_智能追问/智能纪要/output/soul_派对102场_20260217.png differ diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting.html b/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting.html index 4929a45c..0f80729b 100644 --- a/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting.html +++ b/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting.html @@ -5,388 +5,490 @@ {{title}} - 卡若派对纪要
- -
+

{{title}}

-

{{subtitle}}

+

汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。

+
- ⏱ {{duration}} - 👥 {{participants_count}} 参与 - 📍 {{location}} - 📅 {{date}} {{time}} + ⏱ {{duration}} + 👥 {{participants_count}} + 📍 {{location}} + 📅 {{date}} {{time}}
- -
-
🎙️ 开场介绍
- -
👥 嘉宾分享
- -
💡 干货提炼
- -
🤝 项目对接
- -
📋 总结收尾
-
- - -
-

- 1 - 🎤 派对分享人 +
+

+ + 👤 + 分享人介绍

-
- {{#speakers}} -
-

{{name}} / {{role}}

-

{{topics}}

-
- {{/speakers}} -
+
{{#speakers}}
- -
-

- 2 - 📌 分享项目 +
+

+ + 📌 + 精益介绍

- {{#modules}} -
-

- {{index}}️⃣ {{title}} -

-
- {{#items}} -
-

{{title}}

-
    - {{#points}} -
  • {{text}}
  • - {{/points}} -
-
- {{/items}} -
-
- {{/modules}} +
{{#modules}}
- -
-

- 3 - 🔥 重点片段 +
+

+ + 🕐 + 会议流程

- {{#highlights}} -
-
-

{{emoji}} {{title}}

- {{time}} -
-

{{content}}

-

💡 {{insight}}

-
- {{/highlights}} +
{{#flow_steps}}
- -
-

- 4 - 干货提炼 +
+

+ + + 热点研讨

-
- {{#takeaways}} -
-

{{emoji}} {{title}}

-
    - {{#points}} -
  • {{.}}
  • - {{/points}} -
-
- {{/takeaways}} -
+
{{#highlights}}
- -
-

- 5 - 🚀 项目推进 +
+

+ + 📋 + 下次分享

- {{#actions}} -
-

{{content}}

- {{#note}}

📌 {{note}}

{{/note}} -
- {{/actions}} +
{{#next_share}}
- -

diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting_alt.html b/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting_alt.html new file mode 100644 index 00000000..354307b5 --- /dev/null +++ b/04_卡火(火)/火眼_智能追问/智能纪要/templates/meeting_alt.html @@ -0,0 +1,482 @@ + + + + + + {{title}} - 卡若派对纪要 + + + +
+
+

{{title}}

+

汇集实操经验与思考,核心关注:提要、细则、方法论、商业与链接。

+ +
+ ⏱ {{duration}} + 👥 {{participants_count}} + 📍 {{location}} + 📅 {{date}} {{time}} +
+
+ +
+

+ + 👤 + 分享人介绍 +

+
{{#speakers}}
+
+ +
+

+ + 📌 + 精益介绍 +

+
{{#modules}}
+
+ +
+

+ + 🕐 + 会议流程 +

+
{{#flow_steps}}
+
+ +
+

+ + + 热点研讨 +

+
{{#highlights}}
+
+ +
+

+ + 📋 + 下次分享 +

+
{{#next_share}}
+
+ +
+

+ + 🚀 + 项目推进 +

+
{{#actions}}
+
+ + +
+ + diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/智能纪要模板说明.md b/04_卡火(火)/火眼_智能追问/智能纪要/智能纪要模板说明.md new file mode 100644 index 00000000..3d7cfff6 --- /dev/null +++ b/04_卡火(火)/火眼_智能追问/智能纪要/智能纪要模板说明.md @@ -0,0 +1,65 @@ +# 智能纪要模板说明(与 101 场视觉一致) + +> 配色、图标、信号标签、重点框均与参考图 101场.jpg 对齐,便于**结构清晰、重点突出、易区分**。 + +--- + +## 一、配色体系(CSS 变量) + +| 用途 | 变量/色值 | 说明 | +|------------|------------------|----------------| +| 主蓝 | `#2563eb` | 分享人卡1、流程、下次分享卡2 | +| 橙红 | `#ea580c` | 分享人卡2、精益卡1、流程、下次分享卡1 | +| 绿 | `#16a34a` | 分享人卡3、精益卡3、流程、项目卡1 | +| 紫 | `#7c3aed` | 分享人卡4、流程、下次分享卡3 | +| 红 | `#dc2626` | 信号「AI思考」、流程、下次分享卡4 | +| **重点黄** | `#fef08a` / `#fef9c3` | 热点研讨底部「重点」框,强对比 | +| 页面底 | `#fafafa` | 浅灰底,不抢内容 | + +--- + +## 二、六大区块与节奏 + +| 区块 | 标题样式 | 内容样式 | 图标/信号 | +|------------|--------------------|----------|-----------| +| **一、分享人介绍** | 蓝色方标「一」+ 👤 | 4 张横卡:蓝/橙/绿/紫顶条 + 白底小图标 + 姓名/角色/话题 | 顶条内 👤;可加性格/项目标签(INTJ、私域等) | +| **二、精益介绍** | 橙色方标「二」+ 📌 | 3 张横卡:橙/蓝/绿顶条 + 白底图标(📌✓⚙️) + 子标题与要点 | 项目/产品/运营/商业可用小色块标签 | +| **三、会议流程** | 绿色方标「三」+ 🕐 | 横向 5 个**彩色圆**(蓝/紫/橙/红/绿)+ 圆内白图标 + 步骤名 + 时间 | 🎙️👥💡🤝📋 | +| **四、热点研讨** | 紫色方标「四」+ ❓ | 每条:**左侧信号标签** + 时间 + **Q: 标题** + 正文 + **重点(黄框)** | 信号:AI思考(红)/用户观点(蓝)/专家洞察(紫)/AI提问(绿) | +| **五、下次分享** | 蓝色方标「五」+ 📋 | 2×2 四卡:橙/蓝/紫/红顶条 + 图标 + 标题 + 简述 | 📌🎯📋💡 | +| **六、项目推进** | 绿色方标「六」+ 🚀 | 2 张横卡:绿/蓝左边条 + 图标 + 标题 + 说明 | 🚀📊 | + +--- + +## 三、JSON 字段与模板对应 + +- **speakers[]**:`name`, `role`, `topics`;可选 `tags` 或 `pills`(如 `["INTJ","私域"]`)→ 渲染为彩色小标签。 +- **modules[]**:`title`, `color`(orange/blue/green), `items[]` → 精益介绍三卡。 +- **flow_times[]**:5 个时间串 → 会议流程下方时间。 +- **highlights[]**:`title`, `time`, `content`, `insight`;可选 **`signal`**:`ai`|`user`|`expert`|`question` → 左侧信号标签与配色。 +- **actions[]**:前 2 条 → 项目推进;第 3–6 条(不足用 takeaways 补)→ 下次分享 4 卡。 + +--- + +## 四、重点与信号(和 101 场一致) + +- **重点**:每条热点研讨底部为**浅黄背景框**,标题为「重点」,内容为 `insight`,用于强调结论/启示。 +- **信号**:热点研讨左侧为**彩色小标签**,区分来源/类型: + - **AI思考**(红) + - **用户观点**(蓝) + - **专家洞察**(紫) + - **AI提问**(绿) + +--- + +## 五、模板文件位置 + +- HTML 模板:`templates/meeting.html` +- 生成脚本:`脚本/generate_meeting.py` +- 本说明:`智能纪要模板说明.md` + +生成命令示例: + +```bash +python3 generate_meeting.py --input "xxx_meeting.json" --output "../output/xxx.html" +``` diff --git a/04_卡火(火)/火眼_智能追问/智能纪要/脚本/generate_meeting.py b/04_卡火(火)/火眼_智能追问/智能纪要/脚本/generate_meeting.py index bf859fcf..49aabf66 100644 --- a/04_卡火(火)/火眼_智能追问/智能纪要/脚本/generate_meeting.py +++ b/04_卡火(火)/火眼_智能追问/智能纪要/脚本/generate_meeting.py @@ -59,127 +59,144 @@ def simple_template_render(template: str, data: dict) -> str: def generate_html(data: dict, template_path: Path) -> str: - """生成HTML内容""" - # 读取模板 + """生成HTML内容(101场风格:分享人/精益/流程图/热点研讨含深度思考/下次分享/项目推进)""" + import re with open(template_path, "r", encoding="utf-8") as f: template = f.read() - # 添加生成日期 data["generate_date"] = datetime.now().strftime("%Y年%m月%d日 %H:%M") - # 生成分享人HTML + # 一、分享人介绍:4色卡+白底图标+性格/项目标签(与101场一致) + head_colors = ["blue", "orange", "green", "purple"] + flow_icons = ["🎙️", "👥", "💡", "🤝", "📋"] speakers_html = "" - for speaker in data.get("speakers", []): + for i, speaker in enumerate(data.get("speakers", [])[:4]): + hc = head_colors[i % len(head_colors)] + name = speaker.get("name", "") + role = speaker.get("role", "") + topics = speaker.get("topics", "") + tags = speaker.get("tags", speaker.get("pills", [])) + if isinstance(tags, str): + tags = [tags] if tags else [] + pills_html = "" + pill_colors = ["blue", "orange", "green", "purple", "red"] + for pi, tag in enumerate(tags[:5]): + pc = pill_colors[pi % len(pill_colors)] + pills_html += f'{tag}' + if pills_html: + pills_html = f'
{pills_html}
' speakers_html += f''' -
-

{speaker["name"]} / {speaker["role"]}

-

{speaker["topics"]}

+
+
👤{name or "分享人"}
+

{role}

{topics}

{pills_html}
''' - # 生成核心模块HTML + # 二、精益介绍:3卡+图标(与101场:项目/产品/运营/商业标签可放在 points 前) + lean_colors = ["orange", "blue", "green"] + lean_icons = ["📌", "✓", "⚙️"] modules_html = "" - for i, module in enumerate(data.get("modules", []), 1): - color = module.get("color", "blue") - border_color = BORDER_COLORS.get(color, "#e2e8f0") - - items_html = "" - for item in module.get("items", []): - points_html = "" + for i, module in enumerate(data.get("modules", [])[:3]): + lc = lean_colors[i % len(lean_colors)] + icon = lean_icons[i % len(lean_icons)] + title = module.get("title", "") + body_parts = [] + for item in module.get("items", [])[:2]: + pts = [] for point in item.get("points", []): if isinstance(point, dict): - cls = point.get("class", "") text = point.get("text", "") + pts.append(f'
  • {text}
  • ') else: - cls = "" - text = point - points_html += f'
  • {text}
  • ' - - items_html += f''' -
    -

    {item.get("title", "")}

    - -
    - ''' - - modules_html += f''' -
    -

    - {i}️⃣ {module.get("title", "")} -

    -
    - {items_html} -
    -
    - ''' + pts.append(f'
  • {point}
  • ') + body_parts.append(f'

    {item.get("title", "")}

    ') + body_inner = "".join(body_parts) + modules_html += f'
    {icon}{title}
    {body_inner}
    \n' - # 生成重点片段HTML + # 三、会议流程图:彩色圆+白图标+步骤号(与101场一致) + time_slots = data.get("flow_times") or ["06:00-06:10", "06:10-07:30", "07:30-08:00", "08:00-08:40", "08:40-09:00"] + if isinstance(time_slots, str): + time_slots = ["06:00", "06:30", "07:30", "08:00", "08:50"] + labels = ["开场介绍", "嘉宾分享", "干货提炼", "项目对接", "总结收尾"] + circle_colors = ["blue", "purple", "orange", "red", "green"] + flow_steps_html = "" + for j, label in enumerate(labels): + t = time_slots[j] if j < len(time_slots) else "" + cc = circle_colors[j % len(circle_colors)] + icon = flow_icons[j] if j < len(flow_icons) else "•" + flow_steps_html += f'
    {icon}
    {label}{t}
    \n' + if j < len(labels) - 1: + flow_steps_html += '\n' + + # 四、热点研讨:信号标签(AI思考/用户观点/专家洞察/AI提问)+ Q: + 重点黄框(与101场一致) + signal_map = {"ai": "AI思考", "user": "用户观点", "expert": "专家洞察", "question": "AI提问"} + signal_class = {"ai": "ai", "user": "user", "expert": "expert", "question": "question"} highlights_html = "" for highlight in data.get("highlights", []): - color = highlight.get("color", "blue") - emoji = COLOR_EMOJIS.get(color, "💡") + sig = highlight.get("signal", "user") + sig_text = signal_map.get(sig, "用户观点") + sig_cls = signal_class.get(sig, "user") + title = highlight.get("title", "") + time_val = highlight.get("time", "") + content = highlight.get("content", "") + insight = highlight.get("insight", "") highlights_html += f''' -
    -
    -

    {emoji} {highlight.get("title", "")}

    - {highlight.get("time", "")} +
    +
    +
    {sig_text}
    {time_val}
    +
    Q:{title}
    -

    {highlight.get("content", "")}

    -

    💡 {highlight.get("insight", "")}

    +
    {content}
    +
    重点
    {insight}
    ''' - # 生成干货分享HTML - takeaways_html = "" - for takeaway in data.get("takeaways", []): - color = takeaway.get("color", "yellow") - emoji = COLOR_EMOJIS.get(color, "💡") - points_html = "".join([f"
  • {p}
  • " for p in takeaway.get("points", [])]) - takeaways_html += f''' -
    -

    {emoji} {takeaway.get("title", "")}

    -
      {points_html}
    -
    - ''' + # 五、下次分享:4卡 橙/蓝/紫/红 + 图标(与101场一致) + actions_list = data.get("actions", []) + takeaways_list = data.get("takeaways", []) + next_sources = list(actions_list[2:6]) if len(actions_list) > 2 else [] + takeaways_copy = list(takeaways_list) + while len(next_sources) < 4 and takeaways_copy: + tw = takeaways_copy.pop(0) + pt = (tw.get("points", []) or [""])[0] + desc = pt[:80] if isinstance(pt, str) else str(pt)[:80] + next_sources.append({"content": tw.get("title", ""), "note": desc}) + while len(next_sources) < 4: + next_sources.append({"content": "待定", "note": "下期公布"}) + next_colors = ["orange", "blue", "purple", "red"] + next_icons = ["📌", "🎯", "📋", "💡"] + next_share_html = "" + for i, item in enumerate(next_sources[:4]): + title = item.get("content", item.get("title", "待定"))[:22] + desc = (item.get("note", "") or "")[:85] + nc = next_colors[i % len(next_colors)] + ni = next_icons[i % len(next_icons)] + next_share_html += f'
    {ni}
    {title}
    {desc}
    \n' - # 生成行动项HTML + # 六、项目推进:绿/蓝两卡 + 图标(与101场一致) + progress_icons = ["🚀", "📊"] actions_html = "" - for i, action in enumerate(data.get("actions", [])): - colors = ["blue", "purple", "green", "orange"] - color = colors[i % len(colors)] - note_html = f'

    💬 {action.get("note", "")}

    ' if action.get("note") else "" - actions_html += f''' -
    -

    {action.get("content", "")}

    - {note_html} -
    - ''' + for i, action in enumerate((data.get("actions", []))[:2]): + content = action.get("content", "") + note = action.get("note", "") + card_class = "blue" if i == 1 else "" + icon = progress_icons[i] if i < len(progress_icons) else "🚀" + actions_html += f'
    {icon}
    项目推进
    {content}
    {note}
    \n' - # 替换模板中的占位符 html = template - - # 替换列表部分 - # 移除模板语法,插入生成的HTML - import re - - # 替换 speakers - html = re.sub(r'\{\{#speakers\}\}.*?\{\{/speakers\}\}', speakers_html, html, flags=re.DOTALL) - - # 替换 modules - html = re.sub(r'\{\{#modules\}\}.*?\{\{/modules\}\}', modules_html, html, flags=re.DOTALL) - - # 替换 highlights - html = re.sub(r'\{\{#highlights\}\}.*?\{\{/highlights\}\}', highlights_html, html, flags=re.DOTALL) - - # 替换 takeaways - html = re.sub(r'\{\{#takeaways\}\}.*?\{\{/takeaways\}\}', takeaways_html, html, flags=re.DOTALL) - - # 替换 actions - html = re.sub(r'\{\{#actions\}\}.*?\{\{/actions\}\}', actions_html, html, flags=re.DOTALL) - - # 替换简单变量 + # 支持两种模板:有 {{/xxx}} 的块替换,或仅 {{#xxx}} 的单占位符替换 + def replace_block(html, name, content): + block_pattern = r'\{\{#' + name + r'\}\}.*?\{\{/' + name + r'\}\}' + if re.search(block_pattern, html, flags=re.DOTALL): + return re.sub(block_pattern, content.strip(), html, flags=re.DOTALL) + return html.replace('{{#' + name + '}}', content.strip()) + html = replace_block(html, 'speakers', speakers_html) + html = replace_block(html, 'modules', modules_html) + html = replace_block(html, 'flow_steps', flow_steps_html) + html = replace_block(html, 'highlights', highlights_html) + html = replace_block(html, 'next_share', next_share_html) + html = replace_block(html, 'actions', actions_html) html = simple_template_render(html, data) - return html @@ -361,6 +378,7 @@ def main(): parser.add_argument("--demo", action="store_true", help="生成示例文件") parser.add_argument("--input", "-i", type=str, help="输入JSON文件路径") parser.add_argument("--output", "-o", type=str, help="输出HTML文件路径") + parser.add_argument("--template", "-t", type=str, default="meeting.html", help="模板文件名,如 meeting.html 或 meeting_alt.html") parser.add_argument("--interactive", action="store_true", help="交互式输入") args = parser.parse_args() @@ -389,7 +407,10 @@ def main(): output_path = OUTPUT_DIR / output_name # 生成HTML - template_path = TEMPLATE_DIR / "meeting.html" + template_name = args.template if hasattr(args, "template") and args.template else "meeting.html" + template_path = TEMPLATE_DIR / template_name + if not template_path.exists(): + template_path = TEMPLATE_DIR / "meeting.html" html = generate_html(data, template_path) # 写入文件