🔄 卡若AI 同步 2026-03-02 02:30 | 更新:金仓、水桥平台对接、运营中枢工作台 | 排除 >20MB: 14 个
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) 写入后:双文档校验(强制)
|
||||
|
||||
|
||||
19
02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md
Normal file
19
02_卡人(水)/水桥_平台对接/飞书管理/参考资料/2026年2月_本月复盘(已写入飞书).md
Normal file
@@ -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`*
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
100
02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py
Normal file
100
02_卡人(水)/水桥_平台对接/飞书管理/脚本/append_feb_monthly_review.py
Normal file
@@ -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()
|
||||
@@ -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}日"
|
||||
|
||||
|
||||
142
02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py
Normal file
142
02_卡人(水)/水桥_平台对接/飞书管理/脚本/upload_json_to_feishu_doc.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
将飞书导出的 JSON 文件(含 content + blocks)上传为飞书 Wiki 子文档。
|
||||
用法: python3 upload_json_to_feishu_doc.py /path/to/水流程规划.json
|
||||
可选: --parent <wiki_node_token> --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()
|
||||
@@ -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月文档)")
|
||||
|
||||
@@ -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 / 本月其他日对齐)
|
||||
|
||||
17
运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md
Normal file
17
运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# 2026 年 2 月 · 复盘(以手动与 iCloud 为主)
|
||||
|
||||
> 主:本人手动新建、iCloud 新建的文字文档;辅:机器自动化(≤20%)。全篇 ≤500 字。
|
||||
|
||||
---
|
||||
|
||||
📌 **主**:2 月以你**手动新建**与 **iCloud 新建**的文字文档为主——复盘、干货文章、日记与规划等,产出在本地与云盘,不依赖脚本。
|
||||
|
||||
📄 **辅**:自动化仅作辅助(占比 **≤20%**):飞书日志写入、Gitea 同步、日历与提醒等,服务主线而非替代。
|
||||
|
||||
✅ **2 月重点**:手动/iCloud 文档承载思考与决策;自动化负责登记、同步与提醒,主次分明。
|
||||
|
||||
📊 **下月**:继续以手写与 iCloud 文档为核心产出,自动化控制在 20% 以内。
|
||||
|
||||
---
|
||||
|
||||
*本地路径:运营中枢/工作台/2026年2月_复盘_以手动与iCloud为主.md*
|
||||
30
运营中枢/工作台/2026年2月_整体月复盘.md
Normal file
30
运营中枢/工作台/2026年2月_整体月复盘.md
Normal file
@@ -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*
|
||||
28
运营中枢/工作台/2026年整体目标.md
Normal file
28
运营中枢/工作台/2026年整体目标.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# 2026 年整体目标
|
||||
|
||||
> **用途**:飞书月度/每日日志与计划均以本总目标为核心。写每日计划或更新飞书文档前,先阅读本文,保证百分比与任务与总目标相关、上下文一致。
|
||||
> 路径:`运营中枢/工作台/2026年整体目标.md`
|
||||
|
||||
---
|
||||
|
||||
## 总目标(可在此填写/修订)
|
||||
|
||||
- 总目标 100% 为全年终态;各月、各日进度与百分比均相对此总目标。
|
||||
- 月度文档(如「2026年X月 突破执行」)仅保持**每月一个**,不新建重复文档。
|
||||
- 本月目标 % = 当前进度相对总目标的完成度;距最终目标差 % = 100% − 当前完成度。
|
||||
|
||||
(此处可补充 2026 年具体总目标条目,例如:一人公司/玩值电竞/卡若AI 等里程碑与占比。)
|
||||
|
||||
---
|
||||
|
||||
## 与飞书日志的关联
|
||||
|
||||
| 动作 | 要求 |
|
||||
|:---|:---|
|
||||
| 写当日/当月飞书日志 | 先读本文,再写 T(目标)/N(过程)/F(反馈),使百分比与总目标一致 |
|
||||
| 更新每日计划 | 先读本文,再拆解为当日任务,保持与总目标的相关性与上下文 |
|
||||
| 月度百分比 | 本月目标约 X%、距最终目标差 Y%,均以总目标 100% 为基准 |
|
||||
|
||||
---
|
||||
|
||||
*版本:2026-03 初版*
|
||||
@@ -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 个 |
|
||||
|
||||
@@ -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) |
|
||||
|
||||
Reference in New Issue
Block a user