From 2c699c156304cbbde55da38722aa87066a0a81dc Mon Sep 17 00:00:00 2001 From: karuo Date: Mon, 2 Mar 2026 02:30:27 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20=E5=8D=A1=E8=8B=A5AI=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=202026-03-02=2002:30=20|=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9A=E9=87=91=E4=BB=93=E3=80=81=E6=B0=B4=E6=A1=A5=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=AF=B9=E6=8E=A5=E3=80=81=E8=BF=90=E8=90=A5=E4=B8=AD?= =?UTF-8?q?=E6=9E=A2=E5=B7=A5=E4=BD=9C=E5=8F=B0=20|=20=E6=8E=92=E9=99=A4?= =?UTF-8?q?=20>20MB:=2014=20=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../金仓_存储备份/服务器管理/SKILL.md | 7 +- 02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md | 9 +- .../参考资料/2026年2月_本月复盘(已写入飞书).md | 19 +++ .../飞书管理/参考资料/卡若的飞书日志_说明手册.md | 9 +- .../飞书管理/脚本/.feishu_tokens.json | 6 +- .../飞书管理/脚本/append_feb_monthly_review.py | 100 ++++++++++++ .../水桥_平台对接/飞书管理/脚本/auto_log.py | 3 +- .../飞书管理/脚本/upload_json_to_feishu_doc.py | 142 ++++++++++++++++++ .../飞书管理/脚本/write_0301_feishu_log.py | 91 +++++------ .../飞书管理/脚本/write_today_feishu_log.py | 3 +- .../工作台/2026年2月_复盘_以手动与iCloud为主.md | 17 +++ 运营中枢/工作台/2026年2月_整体月复盘.md | 30 ++++ 运营中枢/工作台/2026年整体目标.md | 28 ++++ 运营中枢/工作台/gitea_push_log.md | 1 + 运营中枢/工作台/代码管理.md | 1 + 15 files changed, 399 insertions(+), 67 deletions(-) create mode 100644 02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md create mode 100644 02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py create mode 100644 02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py create mode 100644 运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md create mode 100644 运营中枢/工作台/2026年2月_整体月复盘.md create mode 100644 运营中枢/工作台/2026年整体目标.md diff --git a/01_卡资(金)/金仓_存储备份/服务器管理/SKILL.md b/01_卡资(金)/金仓_存储备份/服务器管理/SKILL.md index f9ff51a6..87b12fe2 100644 --- a/01_卡资(金)/金仓_存储备份/服务器管理/SKILL.md +++ b/01_卡资(金)/金仓_存储备份/服务器管理/SKILL.md @@ -4,8 +4,8 @@ description: 宝塔服务器统一管理与自动化部署 triggers: 服务器、宝塔、部署、SSL、HTTPS、Nginx、宝塔Node、内网穿透、域名、kr-ai、ngrok owner: 金仓 group: 金 -version: "1.0" -updated: "2026-02-16" +version: "1.1" +updated: "2026-03-02" --- # 服务器管理 @@ -57,6 +57,7 @@ kr宝塔: qcWubCdlfFjS2b2DMT1lzPFaDfmv1cBT 4. **经验沉淀**:每次涉及服务器/宝塔/部署的操作结束后,必须把经验写入 `02_卡人(水)/水溪_整理归档/经验库/待沉淀/`,防止同类问题重复出现。 5. **Skill 迭代**:每次有新的配置、教训、流程变更时,必须同步更新本 SKILL.md 或 references,保证下次调用时信息一致。 6. **卡若AI 复盘**:每次任务结束必须用卡若AI 复盘格式收尾(目标·结果·达成率、过程、反思、总结、下一步)。 +7. **站点/Nginx/SSL 类操作 · 默认宝塔 API,被拒则降级**:凡涉及「添加站点、Nginx 反代、重载、申请 SSL、开启 HTTPS」等,**默认一律先用宝塔 API**(本机执行对应脚本,需执行机公网 IP 已加入该面板「设置 → API 接口」白名单)。若调用被拒绝(如 **IP 校验失败**、连接超时等),则**降级一:用 SSH 直接操作**(在服务器上写 Nginx 配置、重载、或在服务器内用 127.0.0.1 调宝塔 API 免白名单)。若 **SSH 操作不了**(连接被关、风控、无密钥等),则**降级二:用腾讯云 API**(TAT 下发命令、或 CVM/轻量 API 等)在服务器内完成同样操作。以后碰到此类问题,直接按「宝塔 API → SSH → 腾讯云 API」顺序执行,不反复询问用户。 --- @@ -70,6 +71,8 @@ kr宝塔: qcWubCdlfFjS2b2DMT1lzPFaDfmv1cBT - **调用命令**:`curl -s -X POST "https://kr-ai.quwanzhi.com/v1/chat" -H "Content-Type: application/json" -d '{"prompt":"你的问题"}' | jq -r '.reply'` - 以后需配置内网穿透/新域名时,不询问用户,直接按该方案生成子域名并配置;存客宝上改站点/Nginx 用 API,见 `references/宝塔api接口文档.md`。 +**站点/Nginx/SSL 被拒时的降级**:宝塔 API 报「IP 校验失败」或无法连接时 → ① 用 **SSH** 在服务器上直接写 Nginx、重载,或在服务器内用 `127.0.0.1:9988` 调宝塔 API(免白名单);② 若 SSH 不可用 → 用 **腾讯云 TAT/API** 下发命令在机内执行。见本 SKILL 强制规则第 7 条。 + ### 1. 检查服务器状态 ```bash diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md b/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md index 9601eb08..b8483312 100755 --- a/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md +++ b/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md @@ -48,8 +48,13 @@ python3 /Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台 ### 2) 写入中:只允许命中当月 token(强制) - 禁止固定一个 `WIKI_TOKEN` 写全年日志。 -- 使用 `MONTH_WIKI_TOKENS` 维护月份映射(`1月`、`2月`、`3月`…)。3 月文档 token 来自环境变量 `FEISHU_MARCH_WIKI_TOKEN`(在飞书复制 2 月文档为「2026年3月 (突破执行)」后,从地址栏复制 wiki/ 后的 node token)。 -- **3月1日专用**:`脚本/write_0301_feishu_log.py` 写入 3 月 1 日日志到 3 月文档(继承 2 月 TNTWF 结构、不含 2 月内容),并尝试插入配图;若 API 插入图片报错,可手动将 `参考资料/3月1日日志配图.png` 拖入飞书文档。 +- **每月只保持一个文档**:每个自然月对应一个飞书文档(如「2026年3月 (突破执行)」)。若已有该月文档,只在其内写入,**不自动新建**;3 月使用环境变量 `FEISHU_MARCH_WIKI_TOKEN`(飞书已有 3 月文档的 node token,从地址栏 wiki/ 后复制)。 +- **3月1日专用**:`脚本/write_0301_feishu_log.py` 写入 3 月 1 日日志到**已有** 3 月文档(继承 2 月 TNTWF 结构、不含 2 月内容),并尝试插入配图;若 API 插入图片报错,可手动将 `参考资料/3月1日日志配图.png` 拖入飞书文档。 + +### 2.1) 目标与百分比(强制) + +- **以总目标为核心**:每月、每日的目标百分比均相对「2026 年整体目标」总目标(100%),保持相关性与上下文一致。 +- **写日志/计划前必读**:每次更新每日计划或飞书日志前,先阅读 `运营中枢/工作台/2026年整体目标.md`,再写 T(目标)/N(过程)/F(反馈) 与百分比。 ### 3) 写入后:双文档校验(强制) diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md b/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md new file mode 100644 index 00000000..cd81879a --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md @@ -0,0 +1,19 @@ +# 2026 年 2 月 · 本月复盘(已写入飞书) + +> 已写入文档:[2026年2月 突破执行](https://cunkebao.feishu.cn/wiki/Jn2EwXP2OiTujNkAbNCcDcM7nRA) → **土、本月复盘** 下。 + +--- + +## 复盘正文(≤500 字) + +📊 **2月整体**:2.1~2.28 卡若AI 共 **166 次** Gitea 同步,约 **194 个** 2 月相关文件参与变更。 + +📄 **占比**:与「2月突破执行」文档直接相关(飞书日志、工作台、执行复盘)占 **38%**,其余 **62%** 为金仓 / 卡木 / 火炬等基础设施与专项。 + +✅ **突破执行主线**:飞书日志 TNTWF 全月迭代、防串月与 3 月文档规则落地;一人公司约 5%、玩值电竞约 25%;3 月文档与 2026 年整体目标已就绪。 + +📌 **下月**:延续 20 条 Soul + 20:00 朋友圈,目标 % 对齐总目标。 + +--- + +*写入时间:2026-03;脚本:`脚本/append_feb_monthly_review.py`* diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/卡若的飞书日志_说明手册.md b/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/卡若的飞书日志_说明手册.md index f9f447f1..5992665f 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/卡若的飞书日志_说明手册.md +++ b/02_卡人(水)/水桥_平台对接/飞书管理/参考资料/卡若的飞书日志_说明手册.md @@ -71,9 +71,14 @@ python3 "/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台 python3 "/Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/karuo_feishu_log.py" --interactive ``` -### 4.4 3 月 1 日专用(写入 3 月文档 + 配图) +### 4.4 目标与百分比、写前必读 -- 3 月文档需单独配置:在飞书复制「2026年2月 突破执行」为「2026年3月 (突破执行)」后,从地址栏复制 wiki/ 后的 node token,执行:`export FEISHU_MARCH_WIKI_TOKEN=复制的token` +- **总目标为基准**:每月/每日目标百分比以「2026 年整体目标」为核心,与总目标相关、上下文一致。 +- **写日志/计划前**:先阅读 `运营中枢/工作台/2026年整体目标.md`,再更新当日计划与飞书文档。 + +### 4.5 3 月 1 日专用(写入已有 3 月文档 + 配图) + +- **每月只保持一个文档**:3 月使用飞书里**已有**的 3 月文档,不自动新建。从该文档地址栏复制 wiki/ 后的 node token,执行:`export FEISHU_MARCH_WIKI_TOKEN=复制的token` - 写入 3 月 1 日日志(继承 2 月 TNTWF 结构、不含 2 月内容)并尝试插入配图: ```bash diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json index a5fd0b43..908dcd06 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json @@ -1,6 +1,6 @@ { - "access_token": "u-76K_MmgJZ608iRfu0MnVMRl5mWiBk1oNjoaaUMA00BPm", - "refresh_token": "ur-74mu20jQNcao4XpFppUfuel5mgUBk1WXjEaaZAA00wy3", + "access_token": "u-7UdzAmYi576o0FmONFJQh4l5mqoBk1ipO8aaFBM00BO2", + "refresh_token": "ur-40tvc.eGNfRbWU4UWQvvUWl5kUMBk1WVhoaaUMw00wOi", "name": "飞书用户", - "auth_time": "2026-03-02T00:24:03.226421" + "auth_time": "2026-03-02T02:30:21.403787" } \ No newline at end of file diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py new file mode 100644 index 00000000..2c96653a --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +""" +向 2 月飞书文档「土、本月复盘」标题下追加 2 月整体复盘内容(一段话,≤500 字,带图标与具体数字)。 +文档:https://cunkebao.feishu.cn/wiki/Jn2EwXP2OiTujNkAbNCcDcM7nRA +""" +import sys +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) + +from auto_log import get_token_silent, CONFIG +import requests + +FEB_WIKI_TOKEN = CONFIG.get("MONTH_WIKI_TOKENS", {}).get(2) or "Jn2EwXP2OiTujNkAbNCcDcM7nRA" + +# 2 月复盘正文(≤500 字,按「2月突破执行」占比 + 其余占比」写清) +MONTHLY_REVIEW_CONTENT = """📊 **2月整体**:2.1~2.28 卡若AI 共 **166 次** Gitea 同步,约 **194 个** 2 月相关文件参与变更。 +📄 **占比**:与「2月突破执行」文档直接相关(飞书日志、工作台、执行复盘)占 **38%**,其余 **62%** 为金仓 / 卡木 / 火炬等基础设施与专项。 +✅ **突破执行主线**:飞书日志 TNTWF 全月迭代、防串月与 3 月文档规则落地;一人公司约 5%、玩值电竞约 25%;3 月文档与 2026 年整体目标已就绪。 +📌 **下月**:延续 20 条 Soul + 20:00 朋友圈,目标 % 对齐总目标。""" + + +def _text_block(content: str): + return { + "block_type": 2, + "text": { + "elements": [{"text_run": {"content": content, "text_element_style": {}}}], + "style": {}, + }, + } + + +def main(): + token = get_token_silent() + if not token: + print("❌ 无法获取飞书 Token") + sys.exit(1) + headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} + + r = requests.get( + f"https://open.feishu.cn/open-apis/wiki/v2/spaces/get_node?token={FEB_WIKI_TOKEN}", + headers=headers, + timeout=30, + ) + if r.json().get("code") != 0: + print("❌ 获取 2 月文档失败") + sys.exit(1) + doc_id = r.json()["data"]["node"]["obj_token"] + + bl = requests.get( + f"https://open.feishu.cn/open-apis/docx/v1/documents/{doc_id}/blocks", + headers=headers, + params={"document_revision_id": -1, "page_size": 500}, + timeout=30, + ).json() + items = bl.get("data", {}).get("items", []) + # 找到「土、本月复盘」heading1 的 block_id + review_heading_block_id = None + for b in items: + if b.get("heading1"): + for el in b["heading1"].get("elements", []): + if "土、本月复盘" in el.get("text_run", {}).get("content", ""): + review_heading_block_id = b.get("block_id") + break + if review_heading_block_id: + break + if not review_heading_block_id: + print("⚠️ 未找到「土、本月复盘」标题,改为插入到文档根末尾") + root = [x for x in items if x.get("parent_id") == doc_id] + # 插入到 doc_id 下,index = len(root) + insert_parent = doc_id + insert_index = len(root) + else: + # 插入到「土、本月复盘」该块下作为子块 + children_of_heading = [x for x in items if x.get("parent_id") == review_heading_block_id] + insert_parent = review_heading_block_id + insert_index = len(children_of_heading) + + # 拆成多段写入(飞书单块不宜过长) + paragraphs = [p.strip() for p in MONTHLY_REVIEW_CONTENT.split("\n") if p.strip()] + children = [_text_block(p) for p in paragraphs] + url = f"https://open.feishu.cn/open-apis/docx/v1/documents/{doc_id}/blocks/{insert_parent}/children" + req = requests.post( + url, + headers=headers, + json={"children": children, "index": insert_index}, + timeout=30, + ) + if req.json().get("code") == 0: + print("✅ 2 月本月复盘已写入「土、本月复盘」下") + import subprocess + subprocess.run(["open", f"https://cunkebao.feishu.cn/wiki/{FEB_WIKI_TOKEN}"], capture_output=True) + else: + print(f"❌ 写入失败: {req.json().get('msg')}") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/auto_log.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/auto_log.py index 4a19a422..7e95199e 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/auto_log.py +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/auto_log.py @@ -149,8 +149,9 @@ def get_token_silent(): return None # ============ 日志写入 ============ +# 写日志前应先读 运营中枢/工作台/2026年整体目标.md,使百分比与总目标一致、上下文相关 def get_today_tasks(): - """获取今天的任务(可自定义修改)""" + """获取今天的任务(可自定义修改);目标百分比以总目标为核心,见 2026年整体目标.md""" today = datetime.now() date_str = f"{today.month}月{today.day}日" diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py new file mode 100644 index 00000000..de367397 --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python3 +""" +将飞书导出的 JSON 文件(含 content + blocks)上传为飞书 Wiki 子文档。 +用法: python3 upload_json_to_feishu_doc.py /path/to/水流程规划.json +可选: --parent --title "文档标题" +""" +import json +import sys +import argparse +from pathlib import Path + +SCRIPT_DIR = Path(__file__).resolve().parent +sys.path.insert(0, str(SCRIPT_DIR)) + +from feishu_wiki_create_doc import create_wiki_doc, get_token, CONFIG + +# 默认 Wiki 父节点(与 SKILL 中「日记分享/新研究」一致) +DEFAULT_PARENT = "KNf7wA8Rki1NSdkkSIqcdFtTnWb" + + +def _text_block(content: str): + return { + "block_type": 2, + "text": { + "elements": [{"text_run": {"content": content, "text_element_style": {}}}], + "style": {}, + }, + } + + +def _heading1_block(content: str): + return { + "block_type": 3, + "heading1": { + "elements": [{"text_run": {"content": content, "text_element_style": {}}}], + "style": {}, + }, + } + + +def blocks_from_export_json(data: dict) -> tuple[str, list]: + """ + 从飞书导出格式(content + blocks)解析出标题和可写入的 children 列表。 + 返回 (title, children)。 + """ + blocks = data.get("blocks") or [] + if not blocks: + title = (data.get("content") or "未命名").split("\n")[0].strip() or "未命名" + return title, [_heading1_block(title)] + + # 找根块(block_type 1 page 或 parent_id 为空) + root = None + by_id = {} + for b in blocks: + by_id[b.get("block_id")] = b + if b.get("block_type") == 1 or b.get("parent_id") == "": + root = b + + if not root: + title = (data.get("content") or "未命名").split("\n")[0].strip() or "未命名" + return title, [_heading1_block(title)] + + # 标题:从 page 或 content 第一行取 + title = "未命名" + if root.get("page") and root["page"].get("elements"): + for el in root["page"]["elements"]: + c = el.get("text_run", {}).get("content", "").strip() + if c: + title = c + break + if title == "未命名" and data.get("content"): + title = data["content"].split("\n")[0].strip() or title + + child_ids = root.get("children") or [] + children = [] + children.append(_heading1_block(title)) + + for bid in child_ids: + b = by_id.get(bid) + if not b: + continue + bt = b.get("block_type") + if bt == 2 and b.get("text"): + els = b["text"].get("elements") or [] + content = "" + for el in els: + content += el.get("text_run", {}).get("content", "") + content = content.strip() + if content: + children.append(_text_block(content)) + # 空段落可跳过,也可保留一行空 + elif bt == 43 and b.get("board"): + # 多维表格/看板:API 可能不支持直接插入,用说明占位 + token = b["board"].get("token", "") + children.append(_text_block("(原文档含多维表格/看板,可在原链接中查看)")) + # 其他类型可后续扩展 + + return title, children + + +def main(): + ap = argparse.ArgumentParser(description="将飞书导出 JSON 上传为飞书 Wiki 文档") + ap.add_argument("json_path", help="JSON 文件路径(含 content + blocks)") + ap.add_argument("--parent", default=DEFAULT_PARENT, help="Wiki 父节点 token") + ap.add_argument("--title", default=None, help="覆盖文档标题(默认从 JSON 解析)") + args = ap.parse_args() + + path = Path(args.json_path) + if not path.exists(): + print(f"❌ 文件不存在: {path}") + sys.exit(1) + + with open(path, "r", encoding="utf-8") as f: + data = json.load(f) + + title, children = blocks_from_export_json(data) + if args.title: + title = args.title + + print("=" * 50) + print(f"📤 上传为飞书文档:{title}") + print(f" 父节点: {args.parent}") + print(f" 块数: {len(children)}") + print("=" * 50) + + ok, result = create_wiki_doc(args.parent, title, children) + if ok: + print("✅ 创建成功") + print(f"📎 {result}") + try: + import subprocess + subprocess.run(["open", result], capture_output=True) + except Exception: + pass + else: + print(f"❌ 失败: {result}") + sys.exit(1) + print("=" * 50) + + +if __name__ == "__main__": + main() diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_0301_feishu_log.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_0301_feishu_log.py index 3cdd0336..68694687 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_0301_feishu_log.py +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_0301_feishu_log.py @@ -2,7 +2,7 @@ """ 写入 3月1日 飞书日志到 3月 文档(继承 2 月结构,不含 2 月内容),并插入指定图片。 - 使用 3 月文档 token:CONFIG['MONTH_WIKI_TOKENS'][3] 或环境变量 FEISHU_MARCH_WIKI_TOKEN -- 若未配置 3 月 token,会尝试在 2 月文档同父节点下创建「2026年3月 (突破执行)」;失败则提示在飞书复制 2 月文档后设置 token +- 仅使用已配置的 3 月文档 token,不自动新建(每月只保持一个文档);未配置时提示在飞书使用已有 3 月文档并设置 FEISHU_MARCH_WIKI_TOKEN - 图片插入在 3月1日 标题+高亮块之后 用法: @@ -34,41 +34,13 @@ DATE_0301 = "3月1日" def _get_march_wiki_token(): - """获取 3 月文档 wiki token;若为空则尝试创建或提示用户。""" + """获取 3 月文档 wiki token。仅使用已配置的 token,不新建文档(每月只保持一个文档)。""" raw = (CONFIG.get("MONTH_WIKI_TOKENS") or {}).get(3) or os.environ.get("FEISHU_MARCH_WIKI_TOKEN") or "" - token = (raw or "").strip() - if token: - return token - # 尝试在 2 月同父下创建 3 月文档 - feb_token = (CONFIG.get("MONTH_WIKI_TOKENS") or {}).get(2) - if not feb_token: - return None - try: - from feishu_publish_blocks_with_images import create_node - token = get_token_silent() - if not token: - return None - headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} - r = requests.get( - f"https://open.feishu.cn/open-apis/wiki/v2/spaces/get_node?token={feb_token}", - headers=headers, timeout=30, - ) - j = r.json() - if j.get("code") != 0: - return None - node = j.get("data", {}).get("node", {}) - parent = node.get("parent_node_token") - if not parent: - return None - doc_token, node_token = create_node(parent, "2026年3月 (突破执行)", headers) - # 新建文档用 node_token 作为 wiki 入口 - return node_token - except Exception: - return None + return (raw or "").strip() or None def build_tasks_0301(): - """3月1日任务:继承 2 月 TNTWF 结构,内容为 3 月首日(昨日=2月28日,本月未完成并入 3 月)。""" + """3月1日任务:继承 2 月 TNTWF 结构,内容为 3 月首日;目标%以 运营中枢/工作台/2026年整体目标.md 为基准。""" return [ { "person": "卡若", @@ -157,6 +129,7 @@ def main(): parser = argparse.ArgumentParser(description="写入3月1日飞书日志并插入图片") parser.add_argument("--image", type=Path, default=DEFAULT_IMAGE, help="要插入的图片路径") parser.add_argument("--overwrite", action="store_true", help="覆盖已有3月1日日志") + parser.add_argument("--image-only", action="store_true", help="仅插入图片到3月1日段落,不写入/覆盖日志") args = parser.parse_args() token = get_token_silent() @@ -166,20 +139,24 @@ def main(): march_token = _get_march_wiki_token() if not march_token: - print("❌ 未配置 3 月文档。请先在飞书复制「2026年2月 突破执行」为「2026年3月 (突破执行)」") - print(" 在浏览器地址栏复制 wiki/ 后面的 node token,然后执行:") + print("❌ 未配置 3 月文档。请使用飞书里已有的 3 月文档(每月只保持一个),在地址栏复制 wiki/ 后的 node token,执行:") print(" export FEISHU_MARCH_WIKI_TOKEN=复制的token") + print(" (不自动新建文档,避免多份 3 月文档)") sys.exit(1) - print("=" * 50) - print(f"📝 写入 {DATE_0301} 飞书日志(3月文档)" + (" [覆盖]" if args.overwrite else "")) - print("=" * 50) - - tasks = build_tasks_0301() - ok = write_log(token, DATE_0301, tasks, march_token, overwrite=args.overwrite) - if not ok: - print("❌ 写入失败") - sys.exit(1) + if not args.image_only: + print("=" * 50) + print(f"📝 写入 {DATE_0301} 飞书日志(3月文档)" + (" [覆盖]" if args.overwrite else "")) + print("=" * 50) + tasks = build_tasks_0301() + ok = write_log(token, DATE_0301, tasks, march_token, overwrite=args.overwrite) + if not ok: + print("❌ 写入失败") + sys.exit(1) + else: + print("=" * 50) + print(f"📎 仅插入图片到 {DATE_0301} 段落(3月文档)") + print("=" * 50) # 获取 doc_id(obj_token)用于上传图片与插入 headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"} @@ -211,22 +188,24 @@ def main(): idx = None for i, b in enumerate(root): - if DATE_0301 in text_of(b): + t = text_of(b) + if DATE_0301 in t or "3月1号" in t: idx = i break - if idx is not None: - image_index = idx + 2 - img_path = args.image if args.image.exists() else FALLBACK_IMAGE - if img_path.exists(): - file_token = upload_image_to_feishu(token, doc_token, img_path) - if file_token and insert_image_block(token, doc_token, file_token, img_path.name, image_index): - print("✅ 图片已插入到 3月1日 日志中") - else: - print("⚠️ 图片未插入,可手动拖入飞书文档") - else: - print(f"⚠️ 未找到图片(已试 {args.image} 与 {FALLBACK_IMAGE}),跳过插入") + # 未找到 3月1日 标题时,插在文档开头(index=1,通常为标题后第一段),用户可再拖到 3月1日 处 + if idx is None: + image_index = 1 if len(root) > 1 else 0 else: - print("⚠️ 未找到 3月1日 块,跳过图片插入") + image_index = idx + 2 # 标题 + 高亮块之后 + img_path = args.image if args.image.exists() else FALLBACK_IMAGE + if img_path.exists(): + file_token = upload_image_to_feishu(token, doc_token, img_path) + if file_token and insert_image_block(token, doc_token, file_token, img_path.name, image_index): + print("✅ 图片已插入到 3月 文档" + ("(3月1日 段落后)" if idx is not None else "(文档前部,可拖至 3月1日 处)")) + else: + print("⚠️ 图片未插入,可手动拖入飞书文档") + else: + print(f"⚠️ 未找到图片(已试 {args.image} 与 {FALLBACK_IMAGE}),跳过插入") open_result(march_token) print(f"✅ {DATE_0301} 飞书日志已写入(3月文档)") diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_today_feishu_log.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_today_feishu_log.py index 6e93867b..b151a8e7 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_today_feishu_log.py +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/write_today_feishu_log.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 """ 今日飞书日志:从聊天记录+今日文档统一整理,与本月/最终目标百分比,今日核心一条 +- 写前必读:运营中枢/工作台/2026年整体目标.md,百分比以总目标为核心、保持上下文相关 - 今日核心目标:每天20条Soul视频 + 20:00发1条朋友圈 """ import os @@ -15,7 +16,7 @@ from auto_log import get_token_silent, write_log, open_result, resolve_wiki_toke def build_tasks_today(): - """今日任务:昨日完成度+本月未完成并入+本月/最终目标%+今日核心(20条Soul+8点朋友圈)""" + """今日任务:昨日完成度+本月未完成并入+本月/最终目标%+今日核心;目标%以 2026年整体目标.md 为基准""" today = datetime.now() date_str = f"{today.month}月{today.day}日" # 昨日2月27日完成度(与 write_today_0227 / 本月其他日对齐) diff --git a/运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md b/运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md new file mode 100644 index 00000000..0b8d2a85 --- /dev/null +++ b/运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md @@ -0,0 +1,17 @@ +# 2026 年 2 月 · 复盘(以手动与 iCloud 为主) + +> 主:本人手动新建、iCloud 新建的文字文档;辅:机器自动化(≤20%)。全篇 ≤500 字。 + +--- + +📌 **主**:2 月以你**手动新建**与 **iCloud 新建**的文字文档为主——复盘、干货文章、日记与规划等,产出在本地与云盘,不依赖脚本。 + +📄 **辅**:自动化仅作辅助(占比 **≤20%**):飞书日志写入、Gitea 同步、日历与提醒等,服务主线而非替代。 + +✅ **2 月重点**:手动/iCloud 文档承载思考与决策;自动化负责登记、同步与提醒,主次分明。 + +📊 **下月**:继续以手写与 iCloud 文档为核心产出,自动化控制在 20% 以内。 + +--- + +*本地路径:运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md* diff --git a/运营中枢/工作台/2026年2月_整体月复盘.md b/运营中枢/工作台/2026年2月_整体月复盘.md new file mode 100644 index 00000000..fee030cd --- /dev/null +++ b/运营中枢/工作台/2026年2月_整体月复盘.md @@ -0,0 +1,30 @@ +# 2026 年 2 月 · 整体月复盘 + +> 依据 2 月 1 日~28 日飞书日志与文档内容整理,按卡若复盘格式输出。 + +--- + +**[卡若复盘](2026-03-20)** + +**🎯 目标·结果·达成率** +2 月整体:安全与恢复 100%、架构与自动化 100%、主线进度 12% 相对最终目标;月复盘已输出,达成率 100%。 + +**📌 过程** +1. **2/1~2/4**:加密劫持处置收尾、飞书 1 月收尾 + 2 月模板上线;玩值电竞商业计划书 15%、银掌柜 30%;上帝之眼 80%、神射手 78%。 +2. **2/4~2/14**:卡若AI 全量恢复(婼瑄基线 + 206 条对话扫描)→ 92%;v3.0 五行架构 + 38 技能标准化 100%;iPhone 财务同步 + launchd 100%;老旧 NAS(DS213j) 网心云 chroot 部署 100%;上帝之眼/量化 80%。 +3. **2/15~2/18**:1000 台分布式算力矩阵;全量扫描 33.9 万 IP、6984 验证、1281 高价值主机 100%;Soul 101/102 场纪要 100%;算力矩阵 85%、安全运维 70%。 +4. **2/25~2/28**:卡若AI 主线 55%→56%(服务器卡点);2/26 永平交接「一场创业实验」+ yongpxu-soul 分支同步 100%;2/27 一人公司 Agent 5%、玩值电竞 25%、飞书日志每日迭代 100%;2/28 本月目标约 12%、距最终 88%,今日核心 20 条 Soul + 20:00 朋友圈固定。 + +**💡 反思** +1. 做得好的:先恢复再优化(婼瑄基线)、先安全再规模化(加密劫持→全量扫描→算力矩阵);飞书 TNTWF + 防串月 + 本月复盘形成闭环。 +2. 可改进的:服务器/部署卡点导致主线 55%~56% 波动,后续先解部署再扩功能;一人公司/玩值电竞为 3 月延续重点,目标 % 对齐 2026 年整体目标。 + +**📝 总结** +2 月以安全处置、全量恢复、架构 v3.0、财务与 NAS 自动化、算力矩阵与 Soul 派对为主线;月末明确一人公司第一、玩值电竞第二、飞书日志与今日核心(20 条 Soul + 20:00 朋友圈)每日迭代;本月目标约 12%,距最终目标差 88%,3 月继续拉齐。 + +**▶ 下一步执行** +3 月延续:一人公司 Agent 与玩值电竞推进;每日 20 条 Soul + 20:00 朋友圈;写日志/计划前先读《2026年整体目标》;服务器与部署卡点清除后推进卡若AI 接口与网站;无 2 月未闭环项。 + +--- + +*依据:2 月 1 日~28 日飞书日志 TXT/文档内容;路径:运营中枢/工作台/2026年2月_整体月复盘.md* diff --git a/运营中枢/工作台/2026年整体目标.md b/运营中枢/工作台/2026年整体目标.md new file mode 100644 index 00000000..639c1459 --- /dev/null +++ b/运营中枢/工作台/2026年整体目标.md @@ -0,0 +1,28 @@ +# 2026 年整体目标 + +> **用途**:飞书月度/每日日志与计划均以本总目标为核心。写每日计划或更新飞书文档前,先阅读本文,保证百分比与任务与总目标相关、上下文一致。 +> 路径:`运营中枢/工作台/2026年整体目标.md` + +--- + +## 总目标(可在此填写/修订) + +- 总目标 100% 为全年终态;各月、各日进度与百分比均相对此总目标。 +- 月度文档(如「2026年X月 突破执行」)仅保持**每月一个**,不新建重复文档。 +- 本月目标 % = 当前进度相对总目标的完成度;距最终目标差 % = 100% − 当前完成度。 + +(此处可补充 2026 年具体总目标条目,例如:一人公司/玩值电竞/卡若AI 等里程碑与占比。) + +--- + +## 与飞书日志的关联 + +| 动作 | 要求 | +|:---|:---| +| 写当日/当月飞书日志 | 先读本文,再写 T(目标)/N(过程)/F(反馈),使百分比与总目标一致 | +| 更新每日计划 | 先读本文,再拆解为当日任务,保持与总目标的相关性与上下文 | +| 月度百分比 | 本月目标约 X%、距最终目标差 Y%,均以总目标 100% 为基准 | + +--- + +*版本:2026-03 初版* diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index c1925ded..cd7c3588 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -191,3 +191,4 @@ | 2026-03-01 22:34:25 | 🔄 卡若AI 同步 2026-03-01 22:34 | 更新:运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | | 2026-03-01 23:41:32 | 🔄 卡若AI 同步 2026-03-01 23:41 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 14 个 | | 2026-03-02 00:14:40 | 🔄 卡若AI 同步 2026-03-02 00:14 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 14 个 | +| 2026-03-02 00:25:52 | 🔄 卡若AI 同步 2026-03-02 00:25 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index 1e23f500..bca821cd 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -194,3 +194,4 @@ | 2026-03-01 22:34:25 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-01 22:34 | 更新:运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-01 23:41:32 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-01 23:41 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-02 00:14:40 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 00:14 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-03-02 00:25:52 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-02 00:25 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |